{
  "description": "Exact code excerpts from the maintained build inputs. Software behaviour, not independent scientific certification. Original software rights are unchanged.",
  "macroNearest": "function findContext(meters) {\n  let nearest = references[0];\n  let lower = null;\n  let upper = null;\n  let exact = null;\n  let nearestDifference = Infinity;\n  for (const reference of references) {\n    const difference = Math.abs(Math.log10(meters) - Math.log10(reference.distanceMeters));\n    if (difference < nearestDifference) { nearest = reference; nearestDifference = difference; }\n    // Only absorb floating-point round trips, not visibly nearby values.\n    if (Math.abs(reference.distanceMeters - meters) <= Math.max(reference.distanceMeters, meters) * Number.EPSILON * 8) exact ||= reference;\n    if (reference.distanceMeters < meters) lower = reference;\n    if (reference.distanceMeters > meters && !upper) upper = reference;\n  }\n  return { lower, nearest, upper, exact };\n}",
  "macroInfluence": "function getDockInfluence(deltaLog, sigma = DOCK_SIGMA) {\n  const normalized = deltaLog / Math.max(Number.EPSILON, sigma);\n  return Math.exp(-0.5 * normalized * normalized);\n}",
  "macroArtworkScale": "function getDockScale(deltaLog, dominance = 1) {\n  const influence = getDockInfluence(deltaLog);\n  const dominanceGain = lerp(0.8, 1, Math.sqrt(clamp(dominance, 0, 1)));\n  return lerp(DOCK_MIN_SCALE, DOCK_MAX_SCALE, influence * dominanceGain);\n}",
  "macroArtworkPosition": "function getDockX(deltaLog, centerX = scaleWorldMetrics.centerX, pixelsPerLog = scaleWorldMetrics.pixelsPerLog, pushPx = scaleWorldMetrics.pushPx, dominance = 1) {\n  return centerX + deltaLog * pixelsPerLog + getDockDisplacement(deltaLog, pushPx, dominance);\n}",
  "macroArtworkSeparation": "function getSeparatedDockLayout(entries, metrics) {\n  if (!entries.length) return [];\n  const totalWeight = Math.max(Number.EPSILON, entries.reduce((sum, entry) => sum + entry.weight, 0));\n  const layout = entries.map(entry => {\n    const dominance = entry.weight / totalWeight;\n    const scale = getDockScale(entry.deltaLog, dominance) * (metrics.scaleFactor ?? 1);\n    const naturalX = getDockX(entry.deltaLog, 0, metrics.pixelsPerLog, metrics.pushPx, dominance);\n    const span = Math.max(metrics.baseSize * scale, metrics.labelWidth);\n    return { ...entry, dominance, scale, naturalX, span, packedX: naturalX };\n  });\n  for (let index = 1; index < layout.length; index++) {\n    const previous = layout[index - 1], current = layout[index];\n    const separation = Math.max(Math.min(current.naturalX - previous.naturalX, metrics.width / 2), (previous.span + current.span) / 2 + metrics.gap);\n    current.packedX = previous.packedX + separation;\n  }\n  const next = layout.findIndex(entry => entry.deltaLog >= 0);\n  let anchor;\n  if (next <= 0) {\n    const endpoint = next === 0 ? layout[0] : layout[layout.length - 1];\n    anchor = endpoint.packedX - endpoint.deltaLog * metrics.pixelsPerLog;\n  } else {\n    const lower = layout[next - 1], upper = layout[next];\n    anchor = lerp(lower.packedX, upper.packedX, -lower.deltaLog / (upper.deltaLog - lower.deltaLog));\n  }\n  return layout.map(entry => {\n    const x = metrics.centerX + entry.packedX - anchor;\n    const viewportOpacity = smoothstep(clamp(Math.min(x - entry.span / 2, metrics.width - x - entry.span / 2) / 16, 0, 1));\n    return { ...entry, x, opacity: getDockOpacity(entry.deltaLog) * viewportOpacity };\n  });\n}",
  "macroLengthRuler": "function scaleContextForMeters(meters) {\n  const familiar = ['adult', 'bus', 'olympic-pool', 'eiffel', 'one-km', 'everest', 'earth-diameter', 'earth-moon', 'earth-sun', 'alpha-centauri', 'milky-way'];\n  const candidates = references.filter(reference => familiar.includes(reference.id) && reference.distanceMeters <= meters / 3);\n  const reference = candidates[candidates.length - 1] || references[0];\n  const maximum = Math.max(meters, reference.distanceMeters);\n  return { reference, ratio: meters / reference.distanceMeters, inputFraction: meters / maximum, referenceFraction: reference.distanceMeters / maximum };\n}",
  "macroViewportMetrics": "function cacheScaleWorldMetrics() {\n  const rect = el.scaleWorld.getBoundingClientRect();\n  const width = Math.max(1, rect.width);\n  const baseSize = scaleObjects[0]\n    ? Number.parseFloat(getComputedStyle(scaleObjects[0].element).width) || 174\n    : 174;\n  const baselineBottom = scaleObjects[0] ? Number.parseFloat(getComputedStyle(scaleObjects[0].element).bottom) || 0 : 0;\n  const contextBottom = el.scaleContext ? el.scaleContext.getBoundingClientRect().bottom : rect.top;\n  const artworkHeight = Math.max(96, rect.bottom - baselineBottom - contextBottom - 24);\n  const artworkWidth = width < 500 ? Math.max(96, (width - 60) / 2) : baseSize * DOCK_MAX_SCALE;\n  scaleWorldMetrics = {\n    width,\n    baseSize,\n    scaleFactor: Math.min(1, Math.min(artworkHeight, artworkWidth) / (baseSize * DOCK_MAX_SCALE)),\n    centerX: clamp(width * 0.5, 88, width - 88),\n    pixelsPerLog: clamp(width * 0.22, 72, 180),\n    pushPx: clamp(width * 0.28, 220, 380),\n    labelWidth: width < 500 ? 136 : 156,\n    gap: width < 500 ? 20 : 28\n  };\n}",
  "macroProgress": "function scrubberProgressForMeters(meters) {\n  const minLog = Math.log10(MIN_METERS);\n  const maxLog = Math.log10(MAX_METERS);\n  return clamp((Math.log10(clamp(meters, MIN_METERS, MAX_METERS)) - minLog) / (maxLog - minLog), 0, 1);\n}",
  "microNearest": "function nearestReference(references, meters) {\n  const targetLog = Math.log10(clamp(meters, MICRO_MIN_METERS, MICRO_MAX_METERS));\n  return references.reduce((nearest, item) => Math.abs(Math.log10(item.meters) - targetLog) < Math.abs(Math.log10(nearest.meters) - targetLog) ? item : nearest, references[0]);\n}",
  "microLayers": "function layerTransforms(localProgress, hasIncoming = true) {\n  const progress = clamp(localProgress);\n  const outgoingScale = lerp(1, 4.6, smoothstep(0, 1, progress));\n  const outgoingOpacity = hasIncoming ? 1 - smoothstep(0.34, 0.78, progress) : 1;\n  const incomingScale = lerp(0.2, 1, smoothstep(0.02, 1, progress));\n  const incomingOpacity = hasIncoming ? smoothstep(0.1, 0.56, progress) : 0;\n  return {\n    outgoing: { scale: outgoingScale, opacity: outgoingOpacity },\n    incoming: { scale: incomingScale, opacity: incomingOpacity }\n  };\n}",
  "teachingMath": "export const clamp=(value,min,max)=>Math.max(min,Math.min(max,Number.isFinite(Number(value))?Number(value):min));\nexport const scalePosition=(value,min,max,mode)=>mode==='linear'?(value-min)/(max-min):Math.log10(value/min)/Math.log10(max/min);\nexport function moonModel(distanceKm,earthDiameterCm,constants){\n const d=clamp(distanceKm,constants.moonMinKm,constants.moonMaxKm),diameter=clamp(earthDiameterCm,1,100),earthDiameter=2*constants.earthRadiusKm;\n return {distanceKm:d,earthDiameters:d/earthDiameter,oneWaySeconds:d*1000/constants.lightMps,roundTripSeconds:d*2000/constants.lightMps,surfaceGapKm:d-constants.earthRadiusKm-constants.moonRadiusKm,modelDistanceM:d/earthDiameter*diameter/100,modelMoonDiameterCm:diameter*constants.moonRadiusKm/constants.earthRadiusKm,apparentSizeRelativeToMean:constants.moonMeanKm/d};\n}\nexport function moonDiagram(distanceKm,earthDiameterCm,constants,span='centres'){\n const v=moonModel(distanceKm,earthDiameterCm,constants),factor=640/constants.moonMaxKm,surface=span==='surfaces';\n return {moonX:42+v.distanceKm*factor,startX:42+(surface?constants.earthRadiusKm*factor:0),\n  endX:42+v.distanceKm*factor-(surface?constants.moonRadiusKm*factor:0),lineY:surface?94:44,\n  earthRadiusPx:clamp(earthDiameterCm,1,100)*1.3,moonRadiusPx:v.modelMoonDiameterCm*1.3,\n  selectedModelM:surface?v.surfaceGapKm/(2*constants.earthRadiusKm)*clamp(earthDiameterCm,1,100)/100:v.modelDistanceM};\n}\nexport function lengthComparison(a,b){return {ratio:a/b,orders:Math.log10(a/b)};}\nexport function comparisonModel(a,b,referenceCm=10){\n if(!Number.isFinite(a)||!Number.isFinite(b)||a<=0||b<=0)throw new RangeError('Positive finite comparison lengths required');\n const cm=clamp(referenceCm,1,100),ratio=a/b,modelA=ratio*cm/100,maximum=Math.max(a,b);\n if(!Number.isFinite(ratio)||!Number.isFinite(modelA))throw new RangeError('Comparison outside numeric range');\n const rawA=ratio*cm*2.5,rawB=cm*2.5;\n return {ratio,orders:Math.log10(a)-Math.log10(b),modelA,modelB:cm/100,\n  widthA:Math.min(600,rawA),widthB:rawB,overflowA:rawA>600,underA:rawA<.8,\n  ratioWidthA:a/maximum*600,ratioWidthB:b/maximum*600};\n}\nexport function parseModelLength(value,unit='m'){\n const units={m:1,km:1000,mi:1609.344,cm:.01,mm:.001,'µm':1e-6,nm:1e-9,pm:1e-12,fm:1e-15};\n const text=String(value).trim().replaceAll(',','');\n if(!/^[+]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?$/i.test(text)||!Object.hasOwn(units,unit))return null;\n const meters=Number(text)*units[unit];\n return Number.isFinite(meters)&&meters>=1e-30&&meters<=1e30?meters:null;\n}\nexport function modelLength(meters,locale='en'){\n const fmt=v=>new Intl.NumberFormat(locale==='ko'?'ko-KR':'en-US',{maximumSignificantDigits:5}).format(v);\n if(meters>=1e7||meters<1e-15)return `${meters.toExponential(3)} m`;\n for(const [unit,factor] of [['km',1000],['m',1],['cm',.01],['mm',.001],['µm',1e-6],['nm',1e-9],['pm',1e-12],['fm',1e-15]])if(meters>=factor)return `${fmt(meters/factor)} ${unit}`;\n}\nexport function modelRatio(value,locale='en'){\n return value>=.001&&value<1e8?new Intl.NumberFormat(locale==='ko'?'ko-KR':'en-US',{maximumSignificantDigits:5}).format(value):value.toExponential(3);\n}\nexport function interpolateProfile(profile,depthKm){\n const depth=clamp(depthKm,0,6371),i=profile.findIndex(p=>p.km>=depth);\n const b=profile[i<0?profile.length-1:i],a=profile[Math.max(0,(i<0?profile.length-1:i)-1)],t=b.km===a.km?0:(depth-a.km)/(b.km-a.km);\n return {km:depth,gravity:a.gravity+(b.gravity-a.gravity)*t,pressure:a.pressure+(b.pressure-a.pressure)*t};\n}\nexport function wavePositions(type,medium,phase,count=18){\n const blocked=type==='S'&&medium==='liquid';\n return Array.from({length:count},(_,i)=>{const wave=blocked?0:Math.sin(i*.65-phase*2*Math.PI)*7;return {x:30+i*30+(type==='P'?wave:0),y:80+(type==='S'?wave:0)};});\n}\n",
  "renderingConstants": {
    "DOCK_SIGMA": 0.34,
    "DOCK_MIN_SCALE": 0.5,
    "DOCK_MAX_SCALE": 1.35,
    "FOCUS_HYSTERESIS": 0.045
  }
}
