{
  "schemaVersion": 1,
  "slug": "reptile-tank-temperature-calculator",
  "category": "pets",
  "kind": "implementation",
  "independentValidation": false,
  "implementationHash": "43580cd5ddbd6aa20c21760e633d28309b909264268db797d9f95f0896fda8ac",
  "provenance": "Generated from the calculation contract used by the published page. Publication is not external validation.",
  "sourceFiles": [
    "data/calculators/reptile-tank-temperature-calculator.json",
    "src/engine.js"
  ],
  "runtimeSource": "/sources/engine.txt",
  "runtimeHash": "5c888d8898afbdee36267bb9977829e1e2ac568f6677c8ee87469c139864645c",
  "scope": "The compute function records implemented equations, constants, lookup tables and custom rules. Inputs record defaults and allowed values; outputs record precision and units. Defaults are examples, not recommendations. General background references are not evidence for this specific algorithm.",
  "publishedFormula": {
    "formula": "Species care reference → basking, warm-side, cool-side, night and humidity ranges",
    "vars": [
      [
        "species",
        "selected reptile species"
      ],
      [
        "temperature",
        "approximate target range in °F"
      ],
      [
        "humidity",
        "approximate relative humidity range"
      ]
    ],
    "note": "These are husbandry starting references, not a thermostat setting for every enclosure. Measure actual basking surface and cool-side temperatures with suitable thermometers, use a thermostat, and follow a species-specific veterinary care guide."
  },
  "externalEvidence": null,
  "contract": {
    "compute": "const S={bearded:[[100,108],[90,95],[72,79],[65,75],[30,40]],leopardGecko:[[94,97],[90,92],[70,77],[60,72],[30,40]],crestedGecko:[[null,null],[78,82],[70,75],[65,72],[60,80]],ballPython:[[null,null],[86,90],[72,80],[70,78],[60,80]],cornSnake:[[85,88],[82,85],[72,78],[70,75],[40,60]],blueTongue:[[95,100],[88,92],[75,80],[65,70],[40,60]],chameleon:[[88,95],[80,85],[70,75],[65,70],[50,70]],tortoise:[[95,100],[85,95],[75,80],[60,65],[40,60]]}; const s=S[species]||S.bearded; const fmt=r=>r[0]===null?'Not needed':`${r[0]}–${r[1]} °F`; return {baskingTemp:fmt(s[0]),warmSide:fmt(s[1]),coolSide:fmt(s[2]),nightTemp:fmt(s[3]),humidity:`${s[4][0]}–${s[4][1]}%`};",
    "inputs": [
      {
        "name": "species",
        "type": "select",
        "default": "bearded",
        "options": [
          {
            "value": "bearded"
          },
          {
            "value": "leopardGecko"
          },
          {
            "value": "crestedGecko"
          },
          {
            "value": "ballPython"
          },
          {
            "value": "cornSnake"
          },
          {
            "value": "blueTongue"
          },
          {
            "value": "chameleon"
          },
          {
            "value": "tortoise"
          }
        ]
      }
    ],
    "outputs": [
      {
        "name": "baskingTemp",
        "precision": 0,
        "unit": "",
        "type": "text"
      },
      {
        "name": "warmSide",
        "precision": 0,
        "unit": "",
        "type": "text"
      },
      {
        "name": "coolSide",
        "precision": 0,
        "unit": "",
        "type": "text"
      },
      {
        "name": "nightTemp",
        "precision": 0,
        "unit": "",
        "type": "text"
      },
      {
        "name": "humidity",
        "precision": 0,
        "unit": "",
        "type": "text"
      }
    ],
    "interpret": null
  }
}
