@rr0/ufoathome 0.125.1 → 0.126.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/dist-embed-scene/rr0-scene.mjs +294 -294
  2. package/dist-embed-sighting/rr0-sighting.mjs +296 -296
  3. package/dist-embed-sighting-editor/BodyEditor-BAT3yx6v.js +27 -0
  4. package/dist-embed-sighting-editor/{CloudEditorMessages_es-RrGoxm6z.js → CloudEditorMessages_es-DFCuS9Qg.js} +1 -1
  5. package/dist-embed-sighting-editor/{CloudEditorMessages_fr-CAnkW7tI.js → CloudEditorMessages_fr-SvL-CR04.js} +1 -1
  6. package/dist-embed-sighting-editor/{CloudEditorMessages_it-Batpxtii.js → CloudEditorMessages_it-BvfiHWV9.js} +1 -1
  7. package/dist-embed-sighting-editor/{ContrailSystem-Bh3PmOP9.js → ContrailSystem-B24rkkhS.js} +1 -1
  8. package/dist-embed-sighting-editor/{CoverageAssessor-DCGCl8ic.js → CoverageAssessor-BPhdv7QL.js} +1 -1
  9. package/dist-embed-sighting-editor/{GLTFLoader-Bpggnw6G.js → GLTFLoader-C7miE2gT.js} +1 -1
  10. package/dist-embed-sighting-editor/{HeadlightSystem-DOjC-oxf.js → HeadlightSystem-DaWqNslK.js} +1 -1
  11. package/dist-embed-sighting-editor/HynekAssessor-DVFjzROZ.js +1 -0
  12. package/dist-embed-sighting-editor/{InterviewEditorElement-BRL8pvdi.js → InterviewEditorElement-CcEomZL0.js} +7 -6
  13. package/dist-embed-sighting-editor/{LaunchEditor-CFmH6y0N.js → LaunchEditor-BXDWiKWm.js} +2 -3
  14. package/dist-embed-sighting-editor/{ModelSource-SZRN-dar.js → ModelSource-gIw80dOv.js} +1 -1
  15. package/dist-embed-sighting-editor/{ModelThumbnails-6N7NAP44.js → ModelThumbnails-CGklRkoB.js} +1 -1
  16. package/dist-embed-sighting-editor/{ModelViewer-C_mVYZ1c.js → ModelViewer-Bg9kN_Zq.js} +1 -1
  17. package/dist-embed-sighting-editor/{RailwaySystem-BTm6OfuJ.js → RailwaySystem-BNAIqpAH.js} +1 -1
  18. package/dist-embed-sighting-editor/{RoadMarkings-AaLPDthv.js → RoadMarkings-aj_cbh3H.js} +1 -1
  19. package/dist-embed-sighting-editor/{SightingEditorMessages_es-1QZ2n8km.js → SightingEditorMessages_es-C2q5UZrw.js} +1 -1
  20. package/dist-embed-sighting-editor/{SightingEditorMessages_fr-DAg8lRfr.js → SightingEditorMessages_fr-DyELrz-P.js} +1 -1
  21. package/dist-embed-sighting-editor/{SightingEditorMessages_it-C2TQ7muu.js → SightingEditorMessages_it-CUKdtgr1.js} +1 -1
  22. package/dist-embed-sighting-editor/{TraceSystem-D8oL7SlQ.js → TraceSystem-CZSZY6ZM.js} +2 -2
  23. package/dist-embed-sighting-editor/{WaterSystem-1r0jEJ6E.js → WaterSystem-Bd010I79.js} +1 -1
  24. package/dist-embed-sighting-editor/rr0-sighting-editor.mjs +548 -422
  25. package/package.json +1 -1
  26. package/dist-embed-sighting-editor/BodyEditor-DinH26FA.js +0 -28
  27. package/dist-embed-sighting-editor/HynekAssessor-DTuaJ9gE.js +0 -1
@@ -1,6 +1,5 @@
1
- import{L as h,n as r,U as p,o as m,k as c,E as u,m as g}from"./rr0-sighting-editor.mjs";import{launchEditorMessages_en as d}from"./LaunchEditorMessages_en-j4RgQPZu.js";class n{static plumeValue(e){return t=>h.plumeOf(t)[e]}static plume(e,t){return{type:"number",key:`plume.${e}`,effective:n.plumeValue(e),...t}}static burn(e,t){return{type:"number",key:e,min:-3600,max:36e3,step:.1,unit:"s",scale:.001,label:t.label,hint:t.hint,group:{en:"Engine",fr:"Moteur",es:"Motor",it:"Motore"},effective:a=>t.ends(a.track??[])?.t}}static nextPlace(e){const t=e[e.length-1]??{t:0,lat:0,lng:0,altitudeKm:0},a=e[e.length-2]??t,i=(s,l=0)=>e.length>1?t[s]-a[s]:l;return{t:t.t+(e.length>1?i("t"):1e4),lat:t.lat+i("lat"),lng:t.lng+i("lng"),altitudeKm:Math.max(0,t.altitudeKm+i("altitudeKm"))}}static SET={kind:"launch",title:{en:"Launch",fr:"Lancement",es:"Lanzamiento",it:"Lancio"},parameters:[{type:"said",key:"title",label:{en:"Name",fr:"Nom",es:"Nombre",it:"Nome"},group:{en:"Vehicle",fr:"Lanceur",es:"Lanzador",it:"Lanciatore"}},{type:"text",key:"vehicle.name",label:{en:"Vehicle",fr:"Lanceur",es:"Lanzador",it:"Lanciatore"},placeholder:"Falcon 9",group:{en:"Vehicle",fr:"Lanceur",es:"Lanzador",it:"Lanciatore"}},{type:"text",key:"vehicle.mission",label:{en:"Mission",fr:"Mission",es:"Misión",it:"Missione"},placeholder:"Starlink Group 10-49",group:{en:"Vehicle",fr:"Lanceur",es:"Lanzador",it:"Lanciatore"}},{type:"number",key:"vehicle.engine.thrustKN",min:1,max:1e5,step:1,unit:"kN",label:{en:"Thrust (vacuum)",fr:"Poussée (dans le vide)",es:"Empuje (en el vacío)",it:"Spinta (nel vuoto)"},hint:{en:"Merlin Vacuum 934, RL10 110, a solid booster several thousand. With the specific impulse, it sets how much exhaust leaves each second.",fr:"Merlin Vacuum 934, RL10 110, un booster à poudre plusieurs milliers. Avec l'impulsion spécifique, elle fixe le débit d'échappement.",es:"Merlin Vacuum 934, RL10 110, un propulsor sólido varios miles. Con el impulso específico, fija el caudal de escape.",it:"Merlin Vacuum 934, RL10 110, un booster solido diverse migliaia. Con l'impulso specifico, fissa la portata dello scarico."},group:{en:"Engine",fr:"Moteur",es:"Motor",it:"Motore"}},{type:"number",key:"vehicle.engine.specificImpulseS",min:100,max:500,step:1,unit:"s",label:{en:"Specific impulse (vacuum)",fr:"Impulsion spécifique (dans le vide)",es:"Impulso específico (en el vacío)",it:"Impulso specifico (nel vuoto)"},hint:{en:"Times 9.81 m/s² it is the exhaust velocity, which sets how fast the exhaust spreads round the stage: 348 s is 3.4 km/s.",fr:"Multipliée par 9,81 m/s², c'est la vitesse d'éjection, qui fixe la vitesse à laquelle l'échappement s'étale autour de l'étage : 348 s font 3,4 km/s.",es:"Multiplicado por 9,81 m/s² es la velocidad de escape, que fija la rapidez con que el escape se extiende alrededor de la etapa: 348 s son 3,4 km/s.",it:"Moltiplicato per 9,81 m/s² è la velocità di scarico, che fissa quanto in fretta lo scarico si allarga attorno allo stadio: 348 s sono 3,4 km/s."},group:{en:"Engine",fr:"Moteur",es:"Motor",it:"Motore"}},{type:"choice",key:"vehicle.engine.propellant",label:{en:"Propellant",fr:"Ergols",es:"Propelentes",it:"Propellenti"},hint:{en:"What the exhaust is made of decides how much of it turns into particles that scatter light.",fr:"Ce dont l'échappement est fait décide quelle part devient des particules qui diffusent la lumière.",es:"De qué está hecho el escape decide qué parte se vuelve partículas que difunden la luz.",it:"Di cosa è fatto lo scarico decide quanta parte diventa particelle che diffondono la luce."},choices:[{value:"rp1-lox",label:{en:"Kerosene and oxygen",fr:"Kérosène et oxygène",es:"Queroseno y oxígeno",it:"Cherosene e ossigeno"}},{value:"methane-lox",label:{en:"Methane and oxygen",fr:"Méthane et oxygène",es:"Metano y oxígeno",it:"Metano e ossigeno"}},{value:"hydrogen-lox",label:{en:"Hydrogen and oxygen",fr:"Hydrogène et oxygène",es:"Hidrógeno y oxígeno",it:"Idrogeno e ossigeno"}},{value:"hypergolic",label:{en:"Hypergolic",fr:"Hypergolique",es:"Hipergólico",it:"Ipergolico"}},{value:"solid",label:{en:"Solid",fr:"Poudre",es:"Sólido",it:"Solido"}}],group:{en:"Engine",fr:"Moteur",es:"Motor",it:"Motore"}},n.burn("burnFromT",{label:{en:"Engine start",fr:"Allumage du moteur",es:"Encendido del motor",it:"Accensione del motore"},hint:{en:"When the engine started, in seconds of the recording; it may be before it. Empty: the first point of the path.",fr:"Quand le moteur s'est allumé, en secondes de l'enregistrement ; avant lui si besoin. Vide : le premier point du chemin.",es:"Cuándo se encendió el motor, en segundos de la grabación; puede ser antes. Vacío: el primer punto de la trayectoria.",it:"Quando si è acceso il motore, in secondi della registrazione; può essere prima. Vuoto: il primo punto del percorso."},ends:e=>e[0]}),n.burn("burnUntilT",{label:{en:"Engine cut-off",fr:"Extinction du moteur",es:"Apagado del motor",it:"Spegnimento del motore"},hint:{en:"When the engine stopped, in seconds of the recording. Empty: the last point of the path. Nothing is let go after it.",fr:"Quand le moteur s'est éteint, en secondes de l'enregistrement. Vide : le dernier point du chemin. Rien n'est lâché après.",es:"Cuándo se apagó el motor, en segundos de la grabación. Vacío: el último punto de la trayectoria. Nada se suelta después.",it:"Quando si è spento il motore, in secondi della registrazione. Vuoto: l'ultimo punto del percorso. Dopo non si rilascia nulla."},ends:e=>e[e.length-1]}),n.plume("exhaustKgPerS",{min:.1,max:1e5,step:.1,unit:"kg/s",label:{en:"Exhaust flow",fr:"Débit d'échappement",es:"Caudal de escape",it:"Portata di scarico"},hint:{en:"How much exhaust leaves the engine each second: how bright the plume is. Thrust over exhaust velocity when the engine is stated.",fr:"La masse d'échappement qui sort du moteur chaque seconde : la luminosité du panache. La poussée sur la vitesse d'éjection quand le moteur est donné.",es:"La masa de escape que sale del motor cada segundo: el brillo de la estela. El empuje sobre la velocidad de escape cuando se da el motor.",it:"La massa di scarico che esce dal motore ogni secondo: la luminosità della scia. La spinta sulla velocità di scarico quando il motore è dato."},group:{en:"Plume",fr:"Panache",es:"Estela",it:"Scia"}}),n.plume("condensedShare",{min:0,max:1,step:.01,label:{en:"Share that scatters",fr:"Part qui diffuse",es:"Parte que difunde",it:"Parte che diffonde"},hint:{en:"The share of the exhaust that ends up as particles that scatter the Sun's light. Nobody has measured it for a launch: the one number to fit against a photograph.",fr:"La part de l'échappement qui devient des particules diffusant la lumière du Soleil. Personne ne l'a mesurée pour un lancement : le seul nombre à caler sur une photographie.",es:"La parte del escape que acaba como partículas que difunden la luz del Sol. Nadie la ha medido para un lanzamiento: el único número que ajustar con una fotografía.",it:"La parte dello scarico che diventa particelle che diffondono la luce del Sole. Nessuno l'ha misurata per un lancio: l'unico numero da tarare su una fotografia."},group:{en:"Plume",fr:"Panache",es:"Estela",it:"Scia"}}),n.plume("particleRadiusUm",{min:.05,max:5,step:.05,unit:"µm",label:{en:"Particle radius",fr:"Rayon des particules",es:"Radio de las partículas",it:"Raggio delle particelle"},group:{en:"Plume",fr:"Panache",es:"Estela",it:"Scia"}}),n.plume("lifetimeS",{min:10,max:3600,step:10,unit:"s",label:{en:"Trail lifetime",fr:"Durée de la traînée",es:"Duración de la estela",it:"Durata della scia"},hint:{en:"How long the narrow trail lasts before the particles have gone.",fr:"Combien de temps la traînée étroite dure avant que les particules aient disparu.",es:"Cuánto dura la estela estrecha antes de que las partículas hayan desaparecido.",it:"Quanto dura la scia stretta prima che le particelle siano sparite."},group:{en:"Plume",fr:"Panache",es:"Estela",it:"Scia"}}),n.plume("expansionKmPerS",{min:0,max:5,step:.01,unit:"km/s",label:{en:"Trail spreading",fr:"Étalement de la traînée",es:"Expansión de la estela",it:"Espansione della scia"},group:{en:"Plume",fr:"Panache",es:"Estela",it:"Scia"}}),n.plume("initialRadiusKm",{min:0,max:50,step:.1,unit:"km",label:{en:"Radius at release",fr:"Rayon au lâcher",es:"Radio al soltar",it:"Raggio al rilascio"},group:{en:"Plume",fr:"Panache",es:"Estela",it:"Scia"}}),n.plume("collarShare",{min:0,max:1,step:.01,label:{en:"Share in the collar",fr:"Part dans la collerette",es:"Parte en el collar",it:"Parte nel collare"},hint:{en:"The collar is the exhaust just let go, which spreads fast into a wide short-lived shell round the stage; the rest stays behind as the narrow trail.",fr:"La collerette est l'échappement qui vient d'être lâché, qui s'étale vite en une coque large et brève autour de l'étage ; le reste demeure derrière en traînée étroite.",es:"El collar es el escape recién soltado, que se extiende rápido en una envoltura ancha y breve alrededor de la etapa; el resto queda detrás como estela estrecha.",it:"Il collare è lo scarico appena rilasciato, che si allarga in fretta in un guscio largo e breve attorno allo stadio; il resto resta dietro come scia stretta."},group:{en:"Collar",fr:"Collerette",es:"Collar",it:"Collare"}}),n.plume("collarExpansionKmPerS",{min:0,max:10,step:.05,unit:"km/s",label:{en:"Collar spreading",fr:"Étalement de la collerette",es:"Expansión del collar",it:"Espansione del collare"},hint:{en:"How fast the collar widens: three quarters of the exhaust velocity when the engine is stated.",fr:"La vitesse à laquelle la collerette s'élargit : les trois quarts de la vitesse d'éjection quand le moteur est donné.",es:"La rapidez con que el collar se ensancha: tres cuartos de la velocidad de escape cuando se da el motor.",it:"Quanto in fretta il collare si allarga: tre quarti della velocità di scarico quando il motore è dato."},group:{en:"Collar",fr:"Collerette",es:"Collar",it:"Collare"}}),n.plume("collarLifetimeS",{min:1,max:300,step:1,unit:"s",label:{en:"Collar lifetime",fr:"Durée de la collerette",es:"Duración del collar",it:"Durata del collare"},group:{en:"Collar",fr:"Collerette",es:"Collar",it:"Collare"}})]};static PLACE={kind:"launch-place",title:{en:"Place of the path",fr:"Point du chemin",es:"Punto de la trayectoria",it:"Punto del percorso"},parameters:[{type:"number",key:"t",min:-3600,max:36e3,step:.1,unit:"s",scale:.001,required:!0,label:{en:"Time",fr:"Instant",es:"Instante",it:"Istante"},hint:{en:"Seconds of the recording; negative before it began: a stage seen minutes after its launch was already high when the recording started.",fr:"Secondes de l'enregistrement ; négatives avant son début : un étage vu des minutes après son lancement était déjà haut quand l'enregistrement a commencé.",es:"Segundos de la grabación; negativos antes de que empezara: una etapa vista minutos después de su lanzamiento ya estaba alta cuando empezó la grabación.",it:"Secondi della registrazione; negativi prima del suo inizio: uno stadio visto minuti dopo il lancio era già alto quando la registrazione è iniziata."}},{type:"number",key:"lat",min:-90,max:90,step:1e-4,unit:"°",required:!0,label:{en:"Latitude",fr:"Latitude",es:"Latitud",it:"Latitudine"}},{type:"number",key:"lng",min:-180,max:180,step:1e-4,unit:"°",required:!0,label:{en:"Longitude",fr:"Longitude",es:"Longitud",it:"Longitudine"}},{type:"number",key:"altitudeKm",min:0,max:2e3,step:.1,unit:"km",required:!0,label:{en:"Altitude",fr:"Altitude",es:"Altitud",it:"Altitudine"}}]};static publish(){r.publish(n.SET)}}class o{constructor(e,t,a){this.container=e,this.host=t,this.language=a,r.of("launch")||n.publish(),this.render(),this.setLanguage(a)}messages=d;languageToken=0;currentId;form;list;places;placeForm;placeIndex=0;language;shown=[];async setLanguage(e){const t=++this.languageToken;this.language=e;const a=p.includes(e)?e:"en",i=a==="en"?d:await m(a);t===this.languageToken&&(this.messages=i,this.render(),this.sync())}sync(){const e=this.launches;this.shown=[...e],e.some(i=>i.id===this.currentId)||(this.currentId=e[0]?.id),this.list?.setItems(e.map(i=>({id:i.id,label:this.labelOf(i)})),this.currentId),this.list?.setAddState(this.startOfNew()!==void 0,this.startOfNew()===void 0?this.messages.addLaunchNowhere:void 0),this.element("launch-none").hidden=e.length>0;const t=this.current;if(this.element("launch-fields").hidden=t===void 0,!t)return;this.syncPlaces(t);const a=r.of("launch");this.form??=new c(this.element("launch-parameters"),this.language,"",{said:()=>this.host.said(),writingLanguage:()=>this.host.writingLanguage()}),this.form.show(a,t,()=>this.written())}refresh(){const e=this.launches;e.length===this.shown.length&&e.every((t,a)=>t===this.shown[a])||this.sync()}get current(){return this.launches.find(e=>e.id===this.currentId)}show(e){this.currentId=e,this.placeIndex=0,this.sync()}render(){const e=this.messages;this.form=void 0,this.container.innerHTML=`<div class="launch-editor">
1
+ import{L as h,n as r,U as p,o as m,k as c,E as u,m as g}from"./rr0-sighting-editor.mjs";import{launchEditorMessages_en as d}from"./LaunchEditorMessages_en-j4RgQPZu.js";class n{static plumeValue(e){return t=>h.plumeOf(t)[e]}static plume(e,t){return{type:"number",key:`plume.${e}`,effective:n.plumeValue(e),...t}}static burn(e,t){return{type:"number",key:e,min:-3600,max:36e3,step:.1,unit:"s",scale:.001,label:t.label,hint:t.hint,group:{en:"Engine",fr:"Moteur",es:"Motor",it:"Motore"},effective:i=>t.ends(i.track??[])?.t}}static nextPlace(e){const t=e[e.length-1]??{t:0,lat:0,lng:0,altitudeKm:0},i=e[e.length-2]??t,a=(s,l=0)=>e.length>1?t[s]-i[s]:l;return{t:t.t+(e.length>1?a("t"):1e4),lat:t.lat+a("lat"),lng:t.lng+a("lng"),altitudeKm:Math.max(0,t.altitudeKm+a("altitudeKm"))}}static SET={kind:"launch",title:{en:"Launch",fr:"Lancement",es:"Lanzamiento",it:"Lancio"},parameters:[{type:"said",key:"title",label:{en:"Name",fr:"Nom",es:"Nombre",it:"Nome"},group:{en:"Vehicle",fr:"Lanceur",es:"Lanzador",it:"Lanciatore"}},{type:"text",key:"vehicle.name",label:{en:"Vehicle",fr:"Lanceur",es:"Lanzador",it:"Lanciatore"},placeholder:"Falcon 9",group:{en:"Vehicle",fr:"Lanceur",es:"Lanzador",it:"Lanciatore"}},{type:"text",key:"vehicle.mission",label:{en:"Mission",fr:"Mission",es:"Misión",it:"Missione"},placeholder:"Starlink Group 10-49",group:{en:"Vehicle",fr:"Lanceur",es:"Lanzador",it:"Lanciatore"}},{type:"number",key:"vehicle.engine.thrustKN",min:1,max:1e5,step:1,unit:"kN",label:{en:"Thrust (vacuum)",fr:"Poussée (dans le vide)",es:"Empuje (en el vacío)",it:"Spinta (nel vuoto)"},hint:{en:"Merlin Vacuum 934, RL10 110, a solid booster several thousand. With the specific impulse, it sets how much exhaust leaves each second.",fr:"Merlin Vacuum 934, RL10 110, un booster à poudre plusieurs milliers. Avec l'impulsion spécifique, elle fixe le débit d'échappement.",es:"Merlin Vacuum 934, RL10 110, un propulsor sólido varios miles. Con el impulso específico, fija el caudal de escape.",it:"Merlin Vacuum 934, RL10 110, un booster solido diverse migliaia. Con l'impulso specifico, fissa la portata dello scarico."},group:{en:"Engine",fr:"Moteur",es:"Motor",it:"Motore"}},{type:"number",key:"vehicle.engine.specificImpulseS",min:100,max:500,step:1,unit:"s",label:{en:"Specific impulse (vacuum)",fr:"Impulsion spécifique (dans le vide)",es:"Impulso específico (en el vacío)",it:"Impulso specifico (nel vuoto)"},hint:{en:"Times 9.81 m/s² it is the exhaust velocity, which sets how fast the exhaust spreads round the stage: 348 s is 3.4 km/s.",fr:"Multipliée par 9,81 m/s², c'est la vitesse d'éjection, qui fixe la vitesse à laquelle l'échappement s'étale autour de l'étage : 348 s font 3,4 km/s.",es:"Multiplicado por 9,81 m/s² es la velocidad de escape, que fija la rapidez con que el escape se extiende alrededor de la etapa: 348 s son 3,4 km/s.",it:"Moltiplicato per 9,81 m/s² è la velocità di scarico, che fissa quanto in fretta lo scarico si allarga attorno allo stadio: 348 s sono 3,4 km/s."},group:{en:"Engine",fr:"Moteur",es:"Motor",it:"Motore"}},{type:"choice",key:"vehicle.engine.propellant",label:{en:"Propellant",fr:"Ergols",es:"Propelentes",it:"Propellenti"},hint:{en:"What the exhaust is made of decides how much of it turns into particles that scatter light.",fr:"Ce dont l'échappement est fait décide quelle part devient des particules qui diffusent la lumière.",es:"De qué está hecho el escape decide qué parte se vuelve partículas que difunden la luz.",it:"Di cosa è fatto lo scarico decide quanta parte diventa particelle che diffondono la luce."},choices:[{value:"rp1-lox",label:{en:"Kerosene and oxygen",fr:"Kérosène et oxygène",es:"Queroseno y oxígeno",it:"Cherosene e ossigeno"}},{value:"methane-lox",label:{en:"Methane and oxygen",fr:"Méthane et oxygène",es:"Metano y oxígeno",it:"Metano e ossigeno"}},{value:"hydrogen-lox",label:{en:"Hydrogen and oxygen",fr:"Hydrogène et oxygène",es:"Hidrógeno y oxígeno",it:"Idrogeno e ossigeno"}},{value:"hypergolic",label:{en:"Hypergolic",fr:"Hypergolique",es:"Hipergólico",it:"Ipergolico"}},{value:"solid",label:{en:"Solid",fr:"Poudre",es:"Sólido",it:"Solido"}}],group:{en:"Engine",fr:"Moteur",es:"Motor",it:"Motore"}},n.burn("burnFromT",{label:{en:"Engine start",fr:"Allumage du moteur",es:"Encendido del motor",it:"Accensione del motore"},hint:{en:"When the engine started, in seconds of the recording; it may be before it. Empty: the first point of the path.",fr:"Quand le moteur s'est allumé, en secondes de l'enregistrement ; avant lui si besoin. Vide : le premier point du chemin.",es:"Cuándo se encendió el motor, en segundos de la grabación; puede ser antes. Vacío: el primer punto de la trayectoria.",it:"Quando si è acceso il motore, in secondi della registrazione; può essere prima. Vuoto: il primo punto del percorso."},ends:e=>e[0]}),n.burn("burnUntilT",{label:{en:"Engine cut-off",fr:"Extinction du moteur",es:"Apagado del motor",it:"Spegnimento del motore"},hint:{en:"When the engine stopped, in seconds of the recording. Empty: the last point of the path. Nothing is let go after it.",fr:"Quand le moteur s'est éteint, en secondes de l'enregistrement. Vide : le dernier point du chemin. Rien n'est lâché après.",es:"Cuándo se apagó el motor, en segundos de la grabación. Vacío: el último punto de la trayectoria. Nada se suelta después.",it:"Quando si è spento il motore, in secondi della registrazione. Vuoto: l'ultimo punto del percorso. Dopo non si rilascia nulla."},ends:e=>e[e.length-1]}),n.plume("exhaustKgPerS",{min:.1,max:1e5,step:.1,unit:"kg/s",label:{en:"Exhaust flow",fr:"Débit d'échappement",es:"Caudal de escape",it:"Portata di scarico"},hint:{en:"How much exhaust leaves the engine each second: how bright the plume is. Thrust over exhaust velocity when the engine is stated.",fr:"La masse d'échappement qui sort du moteur chaque seconde : la luminosité du panache. La poussée sur la vitesse d'éjection quand le moteur est donné.",es:"La masa de escape que sale del motor cada segundo: el brillo de la estela. El empuje sobre la velocidad de escape cuando se da el motor.",it:"La massa di scarico che esce dal motore ogni secondo: la luminosità della scia. La spinta sulla velocità di scarico quando il motore è dato."},group:{en:"Plume",fr:"Panache",es:"Estela",it:"Scia"}}),n.plume("condensedShare",{min:0,max:1,step:.01,label:{en:"Share that scatters",fr:"Part qui diffuse",es:"Parte que difunde",it:"Parte che diffonde"},hint:{en:"The share of the exhaust that ends up as particles that scatter the Sun's light. Nobody has measured it for a launch: the one number to fit against a photograph.",fr:"La part de l'échappement qui devient des particules diffusant la lumière du Soleil. Personne ne l'a mesurée pour un lancement : le seul nombre à caler sur une photographie.",es:"La parte del escape que acaba como partículas que difunden la luz del Sol. Nadie la ha medido para un lanzamiento: el único número que ajustar con una fotografía.",it:"La parte dello scarico che diventa particelle che diffondono la luce del Sole. Nessuno l'ha misurata per un lancio: l'unico numero da tarare su una fotografia."},group:{en:"Plume",fr:"Panache",es:"Estela",it:"Scia"}}),n.plume("particleRadiusUm",{min:.05,max:5,step:.05,unit:"µm",label:{en:"Particle radius",fr:"Rayon des particules",es:"Radio de las partículas",it:"Raggio delle particelle"},group:{en:"Plume",fr:"Panache",es:"Estela",it:"Scia"}}),n.plume("lifetimeS",{min:10,max:3600,step:10,unit:"s",label:{en:"Trail lifetime",fr:"Durée de la traînée",es:"Duración de la estela",it:"Durata della scia"},hint:{en:"How long the narrow trail lasts before the particles have gone.",fr:"Combien de temps la traînée étroite dure avant que les particules aient disparu.",es:"Cuánto dura la estela estrecha antes de que las partículas hayan desaparecido.",it:"Quanto dura la scia stretta prima che le particelle siano sparite."},group:{en:"Plume",fr:"Panache",es:"Estela",it:"Scia"}}),n.plume("expansionKmPerS",{min:0,max:5,step:.01,unit:"km/s",label:{en:"Trail spreading",fr:"Étalement de la traînée",es:"Expansión de la estela",it:"Espansione della scia"},group:{en:"Plume",fr:"Panache",es:"Estela",it:"Scia"}}),n.plume("initialRadiusKm",{min:0,max:50,step:.1,unit:"km",label:{en:"Radius at release",fr:"Rayon au lâcher",es:"Radio al soltar",it:"Raggio al rilascio"},group:{en:"Plume",fr:"Panache",es:"Estela",it:"Scia"}}),n.plume("collarShare",{min:0,max:1,step:.01,label:{en:"Share in the collar",fr:"Part dans la collerette",es:"Parte en el collar",it:"Parte nel collare"},hint:{en:"The collar is the exhaust just let go, which spreads fast into a wide short-lived shell round the stage; the rest stays behind as the narrow trail.",fr:"La collerette est l'échappement qui vient d'être lâché, qui s'étale vite en une coque large et brève autour de l'étage ; le reste demeure derrière en traînée étroite.",es:"El collar es el escape recién soltado, que se extiende rápido en una envoltura ancha y breve alrededor de la etapa; el resto queda detrás como estela estrecha.",it:"Il collare è lo scarico appena rilasciato, che si allarga in fretta in un guscio largo e breve attorno allo stadio; il resto resta dietro come scia stretta."},group:{en:"Collar",fr:"Collerette",es:"Collar",it:"Collare"}}),n.plume("collarExpansionKmPerS",{min:0,max:10,step:.05,unit:"km/s",label:{en:"Collar spreading",fr:"Étalement de la collerette",es:"Expansión del collar",it:"Espansione del collare"},hint:{en:"How fast the collar widens: three quarters of the exhaust velocity when the engine is stated.",fr:"La vitesse à laquelle la collerette s'élargit : les trois quarts de la vitesse d'éjection quand le moteur est donné.",es:"La rapidez con que el collar se ensancha: tres cuartos de la velocidad de escape cuando se da el motor.",it:"Quanto in fretta il collare si allarga: tre quarti della velocità di scarico quando il motore è dato."},group:{en:"Collar",fr:"Collerette",es:"Collar",it:"Collare"}}),n.plume("collarLifetimeS",{min:1,max:300,step:1,unit:"s",label:{en:"Collar lifetime",fr:"Durée de la collerette",es:"Duración del collar",it:"Durata del collare"},group:{en:"Collar",fr:"Collerette",es:"Collar",it:"Collare"}})]};static PLACE={kind:"launch-place",title:{en:"Place of the path",fr:"Point du chemin",es:"Punto de la trayectoria",it:"Punto del percorso"},parameters:[{type:"number",key:"t",min:-3600,max:36e3,step:.1,unit:"s",scale:.001,required:!0,label:{en:"Time",fr:"Instant",es:"Instante",it:"Istante"},hint:{en:"Seconds of the recording; negative before it began: a stage seen minutes after its launch was already high when the recording started.",fr:"Secondes de l'enregistrement ; négatives avant son début : un étage vu des minutes après son lancement était déjà haut quand l'enregistrement a commencé.",es:"Segundos de la grabación; negativos antes de que empezara: una etapa vista minutos después de su lanzamiento ya estaba alta cuando empezó la grabación.",it:"Secondi della registrazione; negativi prima del suo inizio: uno stadio visto minuti dopo il lancio era già alto quando la registrazione è iniziata."}},{type:"number",key:"lat",min:-90,max:90,step:1e-4,unit:"°",required:!0,label:{en:"Latitude",fr:"Latitude",es:"Latitud",it:"Latitudine"}},{type:"number",key:"lng",min:-180,max:180,step:1e-4,unit:"°",required:!0,label:{en:"Longitude",fr:"Longitude",es:"Longitud",it:"Longitudine"}},{type:"number",key:"altitudeKm",min:0,max:2e3,step:.1,unit:"km",required:!0,label:{en:"Altitude",fr:"Altitude",es:"Altitud",it:"Altitudine"}}]};static publish(){r.publish(n.SET)}}class o{constructor(e,t,i){this.container=e,this.host=t,this.language=i,r.of("launch")||n.publish(),this.render(),this.setLanguage(i)}messages=d;languageToken=0;currentId;form;list;places;placeForm;placeIndex=0;language;shown=[];async setLanguage(e){const t=++this.languageToken;this.language=e;const i=p.includes(e)?e:"en",a=i==="en"?d:await m(i);t===this.languageToken&&(this.messages=a,this.render(),this.sync())}sync(){const e=this.launches;this.shown=[...e],e.some(a=>a.id===this.currentId)||(this.currentId=e[0]?.id),this.list?.setItems(e.map(a=>({id:a.id,label:this.labelOf(a)})),this.currentId),this.syncAddState();const t=this.current;if(this.element("launch-fields").hidden=t===void 0,!t)return;this.syncPlaces(t);const i=r.of("launch");this.form??=new c(this.element("launch-parameters"),this.language,"",{said:()=>this.host.said(),writingLanguage:()=>this.host.writingLanguage()}),this.form.show(i,t,()=>this.written())}refresh(){this.syncAddState();const e=this.launches;e.length===this.shown.length&&e.every((t,i)=>t===this.shown[i])||this.sync()}syncAddState(){const e=this.startOfNew()!==void 0;this.list?.setAddState(e,e?void 0:this.messages.addLaunchNowhere)}get current(){return this.launches.find(e=>e.id===this.currentId)}show(e){this.currentId=e,this.placeIndex=0,this.sync()}render(){const e=this.messages;this.form=void 0,this.container.innerHTML=`<div class="launch-editor">
2
2
  <p class="launch-intro">${e.intro}</p>
3
- <p id="launch-none" class="launch-intro">${e.none}</p>
4
3
  <div id="launch-list"></div>
5
4
  <div id="launch-fields" class="launch-fields">
6
5
  <fieldset id="launch-path" class="launch-path">
@@ -11,4 +10,4 @@ import{L as h,n as r,U as p,o as m,k as c,E as u,m as g}from"./rr0-sighting-edit
11
10
  <div id="launch-parameters" class="launch-parameters"></div>
12
11
  <p class="launch-intro">${e.derivedNote}</p>
13
12
  </div>
14
- </div>`;const t=this.element("launch-list");this.list=new u({header:t,footer:t,rowClass:"launch-list-add",ids:{list:"launch-select",remove:"launch-delete",add:"launch-add"},onSelect:i=>{this.currentId=i,this.placeIndex=0,this.sync()},onAdd:()=>this.addLaunch(),onRemove:()=>this.deleteCurrent()}),this.list.setLabels({list:e.launch,remove:e.deleteLaunch,add:e.addLaunch});const a=this.element("launch-places");this.places=new u({header:a,footer:a,rowClass:"launch-places-add",ids:{list:"launch-place",remove:"launch-place-delete",add:"launch-place-add"},navigation:{scope:this.container,onStep:i=>this.selectPlace(this.placeIndex+i)},onSelect:i=>this.selectPlace(Number(i)),onAdd:()=>this.addPlace(),onRemove:()=>this.removePlace()}),this.places.setLabels({list:e.place,remove:e.deletePlace,add:e.addPlace,previous:e.previousPlace,next:e.nextPlace}),this.placeForm=void 0}written(){this.host.changed();const e=this.current;e&&this.list?.rename(e.id,this.labelOf(e))}syncPlaces(e,t=!1){const a=e.track??[];this.placeIndex=Math.max(0,Math.min(this.placeIndex,a.length-1)),this.places?.setItems(a.map((i,s)=>({id:String(s),label:this.seconds(i.t)})),String(this.placeIndex)),this.places?.setStepState(this.placeIndex>0,this.placeIndex<a.length-1),this.places?.setRemoveEnabled(a.length>o.MIN_PLACES),this.placeForm?this.placeForm.sync(t):(this.placeForm=new c(this.element("launch-place-parameters"),this.language,"launchPlace."),this.placeForm.show(n.PLACE,new g(()=>this.current?.track[this.placeIndex],i=>this.editPlace(i)),()=>{}))}static MIN_PLACES=2;seconds(e){return`${Math.round(e/100)/10} s`}selectPlace(e){const t=this.current?.track??[];e<0||e>=t.length||(this.placeIndex=e,this.syncPlaces(this.current,!0))}editPlace(e){const t=this.current;if(!t)return;const a={...t.track[this.placeIndex]};e(a);const i=t.track.map((s,l)=>l===this.placeIndex?a:s).sort((s,l)=>s.t-l.t);this.replaceTrack(t,i),this.placeIndex=i.indexOf(a),this.syncPlaces(this.current),this.written()}addPlace(){const e=this.current;if(!e)return;const t=e.track,a=n.nextPlace(t),i=[...e.track,a].sort((s,l)=>s.t-l.t);this.replaceTrack(e,i),this.placeIndex=i.indexOf(a),this.syncPlaces(this.current),this.host.changed()}removePlace(){const e=this.current;!e||e.track.length<=o.MIN_PLACES||(this.replaceTrack(e,e.track.filter((t,a)=>a!==this.placeIndex)),this.syncPlaces(this.current),this.host.changed())}replaceTrack(e,t){e.track=t}startOfNew(){const e=this.host.sighting(),t=e.event?.place?.[0];if(t?.lat===void 0||t.lng===void 0)return;const a=(e.observerTrack?.getInterpolatedPoseAt(0)?.headingDeg??0)*Math.PI/180,i=s=>({lat:t.lat+s*Math.cos(a)/111.32,lng:t.lng+s*Math.sin(a)/(111.32*Math.max(.05,Math.cos(t.lat*Math.PI/180)))});return[{t:0,...i(300),altitudeKm:80},{t:6e4,...i(450),altitudeKm:160}]}addLaunch(){const e=this.startOfNew();if(!e)return;const t=this.interpretation??{bodies:[]};let a=this.launches.length+1;for(;this.launches.some(s=>s.id===`launch-${a}`);)a++;const i={id:`launch-${a}`,vehicle:{name:"Falcon 9"},track:e};this.host.sighting().interpretation={...t,launches:[...this.launches,i]},this.currentId=i.id,this.host.changed(),this.sync()}deleteCurrent(){const e=this.current,t=this.interpretation;if(!e||!t)return;this.currentId=void 0;const a=this.launches.filter(l=>l!==e),i={...t,launches:a.length===0?void 0:a};a.length===0&&delete i.launches;const s=i.bodies.length===0&&i.title===void 0&&i.smoke===void 0&&i.reentries===void 0&&i.launches===void 0;this.host.sighting().interpretation=s?void 0:i,this.host.changed(),this.sync()}labelOf(e){const t=this.host.said().read(e.title)??e.vehicle?.mission??e.vehicle?.name;return t?`${t} (${e.id})`:e.id}get interpretation(){return this.host.sighting().interpretation}get launches(){return this.interpretation?.launches??[]}element(e){return this.container.querySelector(`#${e}`)}}export{o as LaunchEditor};
13
+ </div>`;const t=this.element("launch-list");this.list=new u({header:t,body:this.element("launch-fields"),ids:{list:"launch-select",remove:"launch-delete",add:"launch-add"},onSelect:a=>{this.currentId=a,this.placeIndex=0,this.sync()},onAdd:()=>this.addLaunch(),onRemove:()=>this.deleteCurrent()}),this.list.setLabels({list:e.launch,remove:e.deleteLaunch,add:e.addLaunch,empty:e.none});const i=this.element("launch-places");this.places=new u({header:i,body:this.element("launch-place-parameters"),ids:{list:"launch-place",remove:"launch-place-delete",add:"launch-place-add"},navigation:{scope:this.container,onStep:a=>this.selectPlace(this.placeIndex+a)},onSelect:a=>this.selectPlace(Number(a)),onAdd:()=>this.addPlace(),onRemove:()=>this.removePlace()}),this.places.setLabels({list:e.place,remove:e.deletePlace,add:e.addPlace,previous:e.previousPlace,next:e.nextPlace}),this.placeForm=void 0}written(){this.host.changed();const e=this.current;e&&this.list?.rename(e.id,this.labelOf(e))}syncPlaces(e,t=!1){const i=e.track??[];this.placeIndex=Math.max(0,Math.min(this.placeIndex,i.length-1)),this.places?.setItems(i.map((a,s)=>({id:String(s),label:this.seconds(a.t)})),String(this.placeIndex)),this.places?.setStepState(this.placeIndex>0,this.placeIndex<i.length-1),this.places?.setRemoveEnabled(i.length>o.MIN_PLACES),this.placeForm?this.placeForm.sync(t):(this.placeForm=new c(this.element("launch-place-parameters"),this.language,"launchPlace."),this.placeForm.show(n.PLACE,new g(()=>this.current?.track[this.placeIndex],a=>this.editPlace(a)),()=>{}))}static MIN_PLACES=2;seconds(e){return`${Math.round(e/100)/10} s`}selectPlace(e){const t=this.current?.track??[];e<0||e>=t.length||(this.placeIndex=e,this.syncPlaces(this.current,!0))}editPlace(e){const t=this.current;if(!t)return;const i={...t.track[this.placeIndex]};e(i);const a=t.track.map((s,l)=>l===this.placeIndex?i:s).sort((s,l)=>s.t-l.t);this.replaceTrack(t,a),this.placeIndex=a.indexOf(i),this.syncPlaces(this.current),this.written()}addPlace(){const e=this.current;if(!e)return;const t=e.track,i=n.nextPlace(t),a=[...e.track,i].sort((s,l)=>s.t-l.t);this.replaceTrack(e,a),this.placeIndex=a.indexOf(i),this.syncPlaces(this.current),this.host.changed()}removePlace(){const e=this.current;!e||e.track.length<=o.MIN_PLACES||(this.replaceTrack(e,e.track.filter((t,i)=>i!==this.placeIndex)),this.syncPlaces(this.current),this.host.changed())}replaceTrack(e,t){e.track=t}startOfNew(){const e=this.host.sighting(),t=e.event?.place?.[0];if(t?.lat===void 0||t.lng===void 0)return;const i=(e.observerTrack?.getInterpolatedPoseAt(0)?.headingDeg??0)*Math.PI/180,a=s=>({lat:t.lat+s*Math.cos(i)/111.32,lng:t.lng+s*Math.sin(i)/(111.32*Math.max(.05,Math.cos(t.lat*Math.PI/180)))});return[{t:0,...a(300),altitudeKm:80},{t:6e4,...a(450),altitudeKm:160}]}addLaunch(){const e=this.startOfNew();if(!e)return;const t=this.interpretation??{bodies:[]};let i=this.launches.length+1;for(;this.launches.some(s=>s.id===`launch-${i}`);)i++;const a={id:`launch-${i}`,vehicle:{name:"Falcon 9"},track:e};this.host.sighting().interpretation={...t,launches:[...this.launches,a]},this.currentId=a.id,this.host.changed(),this.sync()}deleteCurrent(){const e=this.current,t=this.interpretation;if(!e||!t)return;this.currentId=void 0;const i=this.launches.filter(l=>l!==e),a={...t,launches:i.length===0?void 0:i};i.length===0&&delete a.launches;const s=a.bodies.length===0&&a.title===void 0&&a.smoke===void 0&&a.reentries===void 0&&a.launches===void 0;this.host.sighting().interpretation=s?void 0:a,this.host.changed(),this.sync()}labelOf(e){const t=this.host.said().read(e.title)??e.vehicle?.mission??e.vehicle?.name;return t?`${t} (${e.id})`:e.id}get interpretation(){return this.host.sighting().interpretation}get launches(){return this.interpretation?.launches??[]}element(e){return this.container.querySelector(`#${e}`)}}export{o as LaunchEditor};
@@ -1 +1 @@
1
- import{G as d,x as c,y as l,M as f,z as m,C as u,F as w,J as y,K as M,N as g,Q as S,X as v,Y as O}from"./rr0-sighting-editor.mjs";class h{static key(e){return"url"in e?`url:${e.url}|${e.headingOffsetDeg??0}`:"shape"in e?`shape:${e.shape}`:`decor:${e.decorKind}`}static async build(e){const s=new d;if("url"in e){const t=await c(e.url);t.rotation.y=-(e.headingOffsetDeg??0)*Math.PI/180,s.add(t)}else"shape"in e?s.add(h.shapeOf(e.shape)):s.add(l.build({id:"preview",kind:e.decorKind,eastM:0,northM:0},!1));return s}static shapeOf(e){if(e==="figure")return l.build({id:"preview",kind:"entity",eastM:0,northM:0},!1);const s=new f(m.unitGeometry(e),new u({color:13158608,roughness:.5,metalness:0}));return e==="ellipsoid"&&s.scale.set(1,.55,1),s}static dispose(e){e.traverse(s=>{const t=s;if(t.isMesh){t.geometry?.dispose();for(const a of[t.material].flat())a.dispose()}})}static stage(e,s){const t=new w().setFromObject(e);if(t.isEmpty())return;const a=t.getBoundingSphere(new y),r=new d;e.position.sub(a.center),r.add(e);const n=new M;n.add(r),n.add(new g(16777215,6715272,1.6));const o=new S(16777215,2.5);o.position.set(1,2,1.5),n.add(o);const i=new v(30,s,a.radius*.05,a.radius*20),p=a.radius/Math.sin(i.fov*Math.PI/360)*1.05;return i.position.copy(new O(.55,.3,-.78).normalize().multiplyScalar(p)),i.lookAt(0,0,0),{scene:n,camera:i,pivot:r}}}export{h as M};
1
+ import{G as d,x as c,y as l,z as f,C as m,F as u,J as w,K as y,N as g,Q as M,X as S,Y as v,Z as O}from"./rr0-sighting-editor.mjs";class h{static key(e){return"url"in e?`url:${e.url}|${e.headingOffsetDeg??0}`:"shape"in e?`shape:${e.shape}`:`decor:${e.decorKind}`}static async build(e){const s=new d;if("url"in e){const t=await c(e.url);t.rotation.y=-(e.headingOffsetDeg??0)*Math.PI/180,s.add(t)}else"shape"in e?s.add(h.shapeOf(e.shape)):s.add(l.build({id:"preview",kind:e.decorKind,eastM:0,northM:0},!1));return s}static shapeOf(e){if(e==="figure")return l.build({id:"preview",kind:"entity",eastM:0,northM:0},!1);const s=new f(m.unitGeometry(e),new u({color:13158608,roughness:.5,metalness:0}));return e==="ellipsoid"&&s.scale.set(1,.55,1),s}static dispose(e){e.traverse(s=>{const t=s;if(t.isMesh){t.geometry?.dispose();for(const a of[t.material].flat())a.dispose()}})}static stage(e,s){const t=new w().setFromObject(e);if(t.isEmpty())return;const a=t.getBoundingSphere(new y),r=new d;e.position.sub(a.center),r.add(e);const n=new g;n.add(r),n.add(new M(16777215,6715272,1.6));const o=new S(16777215,2.5);o.position.set(1,2,1.5),n.add(o);const i=new v(30,s,a.radius*.05,a.radius*20),p=a.radius/Math.sin(i.fov*Math.PI/360)*1.05;return i.position.copy(new O(.55,.3,-.78).normalize().multiplyScalar(p)),i.lookAt(0,0,0),{scene:n,camera:i,pivot:r}}}export{h as M};
@@ -1 +1 @@
1
- import{W as c}from"./rr0-sighting-editor.mjs";import{M as i}from"./ModelSource-SZRN-dar.js";class l{static SIZE_PX={width:192,height:144};static cache=new Map;static queue=Promise.resolve();static pending=0;static renderer;static of(r){const t=i.key(r);let e=this.cache.get(t);return e||(this.pending++,e=this.queue.then(()=>this.draw(r)).catch(()=>{}).finally(()=>{--this.pending===0&&this.release()}),this.queue=e,this.cache.set(t,e)),e}static async draw(r){const t=await i.build(r);try{const{width:e,height:n}=this.SIZE_PX,a=i.stage(t,e/n);if(!a)return;const s=this.renderer??=new c({antialias:!0,alpha:!0,preserveDrawingBuffer:!0});return s.setSize(e,n,!1),s.setClearColor(0,0),s.render(a.scene,a.camera),s.domElement.toDataURL("image/png")}finally{i.dispose(t)}}static release(){this.renderer?.dispose(),this.renderer?.forceContextLoss(),this.renderer=void 0}}export{l as ModelThumbnails};
1
+ import{W as c}from"./rr0-sighting-editor.mjs";import{M as i}from"./ModelSource-gIw80dOv.js";class l{static SIZE_PX={width:192,height:144};static cache=new Map;static queue=Promise.resolve();static pending=0;static renderer;static of(r){const t=i.key(r);let e=this.cache.get(t);return e||(this.pending++,e=this.queue.then(()=>this.draw(r)).catch(()=>{}).finally(()=>{--this.pending===0&&this.release()}),this.queue=e,this.cache.set(t,e)),e}static async draw(r){const t=await i.build(r);try{const{width:e,height:n}=this.SIZE_PX,a=i.stage(t,e/n);if(!a)return;const s=this.renderer??=new c({antialias:!0,alpha:!0,preserveDrawingBuffer:!0});return s.setSize(e,n,!1),s.setClearColor(0,0),s.render(a.scene,a.camera),s.domElement.toDataURL("image/png")}finally{i.dispose(t)}}static release(){this.renderer?.dispose(),this.renderer?.forceContextLoss(),this.renderer=void 0}}export{l as ModelThumbnails};
@@ -1 +1 @@
1
- import{W as h}from"./rr0-sighting-editor.mjs";import{M as c}from"./ModelSource-SZRN-dar.js";class a{constructor(t,e){this.container=t,this.source=e,this.canvas=document.createElement("canvas"),this.canvas.className="model-live",this.canvas.style.cssText="position:absolute;inset:0;width:100%;height:100%;touch-action:none;cursor:grab;display:none",this.canvas.addEventListener("pointerdown",s=>this.press(s)),this.canvas.addEventListener("pointermove",s=>this.move(s)),this.canvas.addEventListener("pointerup",()=>this.release()),this.canvas.addEventListener("pointercancel",()=>this.release())}static renderer;static SPIN_RAD_PER_S=.7;static DRAG_RAD_PER_PX=.012;static CLICK_TOLERANCE_PX=4;static current;object;stage;frame=0;stopped=!1;last=0;dragging;draggedPastClick=!1;canvas;static show(t,e){a.current?.stop();const s=new a(t,e);return a.current=s,s.start(),s}static end(){a.current?.stop(),a.current=void 0,a.renderer?.dispose(),a.renderer?.forceContextLoss(),a.renderer=void 0}consumeDrag(){const t=this.draggedPastClick;return this.draggedPastClick=!1,t}get active(){return!this.stopped}stop(){this.stopped=!0,cancelAnimationFrame(this.frame),this.canvas.remove(),this.object&&c.dispose(this.object),this.object=void 0,a.current===this&&(a.current=void 0)}async start(){try{const t=await c.build(this.source);if(this.stopped){c.dispose(t);return}this.object=t;const{width:e,height:s}=this.container.getBoundingClientRect(),i=e>0&&s>0?e/s:4/3;if(this.stage=c.stage(t,i),!this.stage)return;(a.renderer??=new h({antialias:!0,alpha:!0})).setClearColor(0,0),this.container.append(this.canvas),this.canvas.style.display="block",this.last=performance.now(),this.tick()}catch{}}tick=()=>{if(this.stopped||!this.stage)return;const t=performance.now(),e=Math.min(.1,(t-this.last)/1e3);this.last=t,this.dragging||(this.stage.pivot.rotation.y+=a.SPIN_RAD_PER_S*e);const s=a.renderer,{width:i,height:n}=this.canvas.getBoundingClientRect(),r=Math.min(2,window.devicePixelRatio||1);(this.canvas.width!==Math.round(i*r)||this.canvas.height!==Math.round(n*r))&&(s.setPixelRatio(r),s.setSize(i,n,!1),this.canvas.width=Math.round(i*r),this.canvas.height=Math.round(n*r),this.stage.camera.aspect=i/Math.max(1,n),this.stage.camera.updateProjectionMatrix()),s.render(this.stage.scene,this.stage.camera);const o=this.canvas.getContext("2d");o?.clearRect(0,0,this.canvas.width,this.canvas.height),o?.drawImage(s.domElement,0,0,this.canvas.width,this.canvas.height),this.frame=requestAnimationFrame(this.tick)};press(t){this.dragging={x:t.clientX,y:t.clientY,moved:!1},this.canvas.setPointerCapture(t.pointerId),this.canvas.style.cursor="grabbing"}move(t){const e=this.dragging;if(!e||!this.stage)return;const s=t.clientX-e.x,i=t.clientY-e.y;!e.moved&&Math.hypot(s,i)<a.CLICK_TOLERANCE_PX||(e.moved=!0,this.draggedPastClick=!0,this.stage.pivot.rotation.y+=s*a.DRAG_RAD_PER_PX,this.stage.pivot.rotation.x=Math.max(-1.4,Math.min(1.4,this.stage.pivot.rotation.x-i*a.DRAG_RAD_PER_PX)),e.x=t.clientX,e.y=t.clientY)}release(){this.dragging=void 0,this.canvas.style.cursor="grab"}}export{a as ModelViewer};
1
+ import{W as h}from"./rr0-sighting-editor.mjs";import{M as c}from"./ModelSource-gIw80dOv.js";class a{constructor(t,e){this.container=t,this.source=e,this.canvas=document.createElement("canvas"),this.canvas.className="model-live",this.canvas.style.cssText="position:absolute;inset:0;width:100%;height:100%;touch-action:none;cursor:grab;display:none",this.canvas.addEventListener("pointerdown",s=>this.press(s)),this.canvas.addEventListener("pointermove",s=>this.move(s)),this.canvas.addEventListener("pointerup",()=>this.release()),this.canvas.addEventListener("pointercancel",()=>this.release())}static renderer;static SPIN_RAD_PER_S=.7;static DRAG_RAD_PER_PX=.012;static CLICK_TOLERANCE_PX=4;static current;object;stage;frame=0;stopped=!1;last=0;dragging;draggedPastClick=!1;canvas;static show(t,e){a.current?.stop();const s=new a(t,e);return a.current=s,s.start(),s}static end(){a.current?.stop(),a.current=void 0,a.renderer?.dispose(),a.renderer?.forceContextLoss(),a.renderer=void 0}consumeDrag(){const t=this.draggedPastClick;return this.draggedPastClick=!1,t}get active(){return!this.stopped}stop(){this.stopped=!0,cancelAnimationFrame(this.frame),this.canvas.remove(),this.object&&c.dispose(this.object),this.object=void 0,a.current===this&&(a.current=void 0)}async start(){try{const t=await c.build(this.source);if(this.stopped){c.dispose(t);return}this.object=t;const{width:e,height:s}=this.container.getBoundingClientRect(),i=e>0&&s>0?e/s:4/3;if(this.stage=c.stage(t,i),!this.stage)return;(a.renderer??=new h({antialias:!0,alpha:!0})).setClearColor(0,0),this.container.append(this.canvas),this.canvas.style.display="block",this.last=performance.now(),this.tick()}catch{}}tick=()=>{if(this.stopped||!this.stage)return;const t=performance.now(),e=Math.min(.1,(t-this.last)/1e3);this.last=t,this.dragging||(this.stage.pivot.rotation.y+=a.SPIN_RAD_PER_S*e);const s=a.renderer,{width:i,height:n}=this.canvas.getBoundingClientRect(),r=Math.min(2,window.devicePixelRatio||1);(this.canvas.width!==Math.round(i*r)||this.canvas.height!==Math.round(n*r))&&(s.setPixelRatio(r),s.setSize(i,n,!1),this.canvas.width=Math.round(i*r),this.canvas.height=Math.round(n*r),this.stage.camera.aspect=i/Math.max(1,n),this.stage.camera.updateProjectionMatrix()),s.render(this.stage.scene,this.stage.camera);const o=this.canvas.getContext("2d");o?.clearRect(0,0,this.canvas.width,this.canvas.height),o?.drawImage(s.domElement,0,0,this.canvas.width,this.canvas.height),this.frame=requestAnimationFrame(this.tick)};press(t){this.dragging={x:t.clientX,y:t.clientY,moved:!1},this.canvas.setPointerCapture(t.pointerId),this.canvas.style.cursor="grabbing"}move(t){const e=this.dragging;if(!e||!this.stage)return;const s=t.clientX-e.x,i=t.clientY-e.y;!e.moved&&Math.hypot(s,i)<a.CLICK_TOLERANCE_PX||(e.moved=!0,this.draggedPastClick=!0,this.stage.pivot.rotation.y+=s*a.DRAG_RAD_PER_PX,this.stage.pivot.rotation.x=Math.max(-1.4,Math.min(1.4,this.stage.pivot.rotation.x-i*a.DRAG_RAD_PER_PX)),e.x=t.clientX,e.y=t.clientY)}release(){this.dragging=void 0,this.canvas.style.cursor="grab"}}export{a as ModelViewer};
@@ -1,4 +1,4 @@
1
- import{G as F,C as P,a3 as H,a4 as w,a7 as K,a9 as N,M as U,aa as k}from"./rr0-sighting-editor.mjs";class S{static HOLLOW_M=1;static WINDOW_M=30;static SAMPLE_M=4;static MAX_GRADE={rail:.025,highSpeed:.035,subway:.04,light_rail:.06,tram:.08,funicular:1/0};static heights(t,n,s){const e=t.map(r=>r.level===0),o=t.map((r,l)=>e[l]?S.targets(r,n,s):[]),i=t.map((r,l)=>e[l]?S.samples(r,o[l]):[]),a=new Map;t.forEach((r,l)=>{if(e[l])for(const p of S.ends(r)){const h=S.key(p),E=a.get(h);E?E.push(l):a.set(h,[l])}});const M=r=>{const l=a.get(S.key(r));if(l)return S.median(l.flatMap(p=>i[p]),r)};return t.map((r,l)=>{if(e[l]){const p=[...new Set([l,...S.ends(r).flatMap(f=>a.get(S.key(f))??[])])].flatMap(f=>i[f]),h=r.centre.map((f,O)=>S.median(p,f)??o[l][O]),[E,L]=S.ends(r);return h[0]=M(E)??h[0],h[h.length-1]=M(L)??h[h.length-1],S.graded(h,r.along,r.highSpeed?S.MAX_GRADE.highSpeed:S.MAX_GRADE[r.kind])}return S.carried(r,n,s,M)})}static targets(t,n,s){return t.centre.map(e=>{const o=n(e.x,e.z);if(s===void 0||e.altitudeM===void 0)return o;const i=e.altitudeM+s;return i-o>S.HOLLOW_M?i:o})}static samples(t,n){const s=[];let e=0;return t.centre.forEach((o,i)=>{t.along[i]+1e-6<e&&i<t.centre.length-1||(s.push({x:o.x,z:o.z,y:n[i]}),e=t.along[i]+S.SAMPLE_M)}),s}static median(t,n){const s=[];for(const o of t)Math.hypot(o.x-n.x,o.z-n.z)<=S.WINDOW_M&&s.push(o.y);if(s.length===0)return;s.sort((o,i)=>o-i);const e=s.length>>1;return s.length%2===1?s[e]:(s[e-1]+s[e])/2}static graded(t,n,s){if(!Number.isFinite(s)||t.length<3)return t;const e=[...t],o=e.length-1,i=n[o];if(Math.abs(e[o]-e[0])>s*i)return n.map(a=>e[0]+(e[o]-e[0])*a/i);for(let a=1;a<o;a++){const M=s*(n[a]-n[a-1]);e[a]=Math.min(e[a-1]+M,Math.max(e[a-1]-M,e[a]))}for(let a=o-1;a>0;a--){const M=s*(n[a+1]-n[a]);e[a]=Math.min(e[a+1]+M,Math.max(e[a+1]-M,e[a]))}return e}static carried(t,n,s,e){const[o,i]=S.ends(t),a=t.along[t.along.length-1],M=e(o),r=e(i);if(s!==void 0&&t.centre.every(h=>h.altitudeM!==void 0)){const h=t.centre.map(f=>f.altitudeM+s),E=M!==void 0?M-h[0]:0,L=r!==void 0?r-h[h.length-1]:0;return h.map((f,O)=>f+E+(L-E)*t.along[O]/a)}const l=M??n(o.x,o.z),p=r??n(i.x,i.z);return t.along.map(h=>l+(p-l)*h/a)}static ends(t){return[t.centre[0],t.centre[t.centre.length-1]]}static key(t){return`${Math.round(t.x*2)},${Math.round(t.z*2)}`}}class I{positions=[];indices=[];along=[];get vertexCount(){return this.positions.length/3}strip(t,n,s){const e=this.vertexCount;for(let o=0;o<t.length;o++)this.positions.push(t[o].x,t[o].y,t[o].z,n[o].x,n[o].y,n[o].z),s&&this.along.push(s[o],s[o]);for(let o=0;o<t.length-1;o++){const i=e+o*2;this.indices.push(i,i+2,i+1,i+1,i+2,i+3)}}beam(t,n,s,e=!0){const o=n.x-t.x,i=n.y-t.y,a=n.z-t.z,M=Math.hypot(o,i,a);if(M<1e-6)return;const r={x:o/M,y:i/M,z:a/M},l=Math.abs(r.y)>.9?{x:1,y:0,z:0}:{x:0,y:1,z:0},p=r.y*l.z-r.z*l.y,h=r.z*l.x-r.x*l.z,E=r.x*l.y-r.y*l.x,L=Math.hypot(p,h,E),f={x:p/L*s/2,y:h/L*s/2,z:E/L*s/2},O={x:r.y*f.z-r.z*f.y,y:r.z*f.x-r.x*f.z,z:r.x*f.y-r.y*f.x},g=(u,A,d)=>({x:u.x+f.x*A+O.x*d,y:u.y+f.y*A+O.y*d,z:u.z+f.z*A+O.z*d}),_=[[1,1],[-1,1],[-1,-1],[1,-1]];for(let u=0;u<4;u++){const[A,d]=_[u],[x,v]=_[(u+1)%4];this.quad(g(t,A,d),g(t,x,v),g(n,x,v),g(n,A,d))}e&&(this.quad(...[..._].reverse().map(([u,A])=>g(t,u,A))),this.quad(..._.map(([u,A])=>g(n,u,A))))}quad(t,n,s,e){const o=this.vertexCount;this.positions.push(t.x,t.y,t.z,n.x,n.y,n.z,s.x,s.y,s.z,e.x,e.y,e.z),this.indices.push(o,o+1,o+2,o,o+2,o+3)}}class c{static STEP_M=6;static BALLAST_HEIGHT_M=.5;static BALLAST_SLOPE=1.5;static BALLAST_SHOULDER_M=.45;static DECK_DEPTH_M=.8;static BANK_SLOPE=1.5;static SLEEPER_LENGTH_M=2.4;static SLEEPER_WIDTH_M=.29;static SLEEPER_SPACING_M=.6;static RAIL_HEAD_M=.072;static RAIL_HEIGHT_M=.18;static TRAM_RAIL_HEIGHT_M=.03;static LIFT_M=.06;static CATENARY={rail:{contactM:5.5,systemM:1.4,spanM:54,staggerM:.2},highSpeed:{contactM:5.08,systemM:1.4,spanM:63,staggerM:.2},service:{contactM:5.5,systemM:1.2,spanM:45,staggerM:.2},tram:{contactM:6,systemM:0,spanM:30,staggerM:.2}};static MESSENGER_SAG_M=.55;static MAST_SIDE_M=.26;static MAST_OFFSET_M=3.1;static MAST_ABOVE_M=.6;static CONTACT_DIAMETER_M=.012;static MESSENGER_DIAMETER_M=.011;static ARM_SIDE_M=.06;static TRACK_SPACING_M={rail:3.7,highSpeed:4.5,tram:3.1,subway:3.4,light_rail:3.4,funicular:3.2};static BALLAST_ALBEDO=[.17,.16,.15];static BANK_ALBEDO=[.085,.09,.05];static DECK_ALBEDO=[.26,.255,.24];static CONCRETE_ALBEDO=[.36,.35,.33];static WOOD_ALBEDO=[.07,.055,.045];static RUST_ALBEDO=[.085,.068,.058];static STEEL_ALBEDO=[.3,.31,.32];static COPPER_ALBEDO=[.09,.085,.07];group=new F;stepM=c.STEP_M;drawn=0;ballastMaterial=c.pebbled(c.lambert(c.BALLAST_ALBEDO,!0));earthMaterial=c.lambert(c.BANK_ALBEDO,!0);deckMaterial=c.lambert(c.DECK_ALBEDO,!1);concreteSleepers=c.sleeperMaterial(c.CONCRETE_ALBEDO);woodSleepers=c.sleeperMaterial(c.WOOD_ALBEDO);rustMaterial=c.lambert(c.RUST_ALBEDO,!0);headMaterial=new P({color:new H(.62,.62,.62),metalness:1,roughness:.28,polygonOffset:!0,polygonOffsetFactor:-2,polygonOffsetUnits:-2});steelMaterial=c.lambert(c.STEEL_ALBEDO,!1);wireMaterial=c.lambert(c.COPPER_ALBEDO,!1);constructor(){this.group.name="railways"}get count(){return this.drawn}setGroundSpacing(t){this.stepM=Number.isFinite(t)&&t>0?Math.min(c.STEP_M,Math.max(1.5,t/2)):c.STEP_M}set(t,n,s,e,o=1/0){this.clear();const a=t.map(E=>({line:E,path:E.points.map(L=>({...w(L.lat,L.lng,n,s),altitudeM:L.altitudeM}))})).filter(({line:E,path:L})=>E.level>=0&&c.within(L,o)),M=c.altitudeOffset(a,e),r=a.flatMap(({line:E,path:L})=>{const f=this.layoutOf(E,L);return f?[{line:E,layout:f}]:[]}),l=S.heights(r.map(({layout:E})=>E),e,M),p={ballast:new I,earth:new I,deck:new I,concrete:new I,wood:new I,rust:new I,head:new I,steel:new I,wire:new I};r.forEach(({line:E,layout:L},f)=>{this.lay(E,{...L,y:l[f]},e,p),this.drawn++});const h=[[p.ballast,this.ballastMaterial,"ballast",!1],[p.earth,this.earthMaterial,"embankments",!1],[p.deck,this.deckMaterial,"decks",!0],[p.concrete,this.concreteSleepers,"sleepers",!1],[p.wood,this.woodSleepers,"sleepers wood",!1],[p.rust,this.rustMaterial,"rails",!1],[p.head,this.headMaterial,"rail heads",!1],[p.steel,this.steelMaterial,"catenary masts",!0],[p.wire,this.wireMaterial,"catenary wires",!1]];for(const[E,L,f,O]of h){const g=c.meshOf(E,L);g&&(g.name=`railways ${f}`,g.castShadow=O,g.receiveShadow=!0,this.group.add(g))}}clear(){for(const t of[...this.group.children])this.group.remove(t),t.geometry?.dispose();this.drawn=0}dispose(){this.clear();for(const t of[this.ballastMaterial,this.earthMaterial,this.deckMaterial,this.concreteSleepers,this.woodSleepers,this.rustMaterial,this.headMaterial,this.steelMaterial,this.wireMaterial])t.dispose()}static within(t,n){if(!Number.isFinite(n))return!0;const s=n*1.1+100;return t.some((e,o)=>Math.hypot(e.x,e.z)<=s||o>0&&Math.hypot((e.x+t[o-1].x)/2,(e.z+t[o-1].z)/2)<=s)}static altitudeOffset(t,n){const s=[];for(const{line:e,path:o}of t)if(e.level===0)for(const i of o)i.altitudeM!==void 0&&s.push(n(i.x,i.z)-i.altitudeM);if(!(s.length<5))return s.sort((e,o)=>e-o),s[Math.floor(s.length/2)]}layoutOf(t,n){const s=[];for(let i=0;i<n.length-1;i++){const a=n[i],M=n[i+1],r=Math.max(1,Math.ceil(Math.hypot(M.x-a.x,M.z-a.z)/this.stepM));for(let l=0;l<r;l++){const p=l/r,h=a.altitudeM!==void 0&&M.altitudeM!==void 0?a.altitudeM+(M.altitudeM-a.altitudeM)*p:void 0;s.push({x:a.x+(M.x-a.x)*p,z:a.z+(M.z-a.z)*p,altitudeM:h})}}if(s.push(n[n.length-1]),s.length<2)return;const e=[0];for(let i=1;i<s.length;i++)e.push(e[i-1]+Math.hypot(s[i].x-s[i-1].x,s[i].z-s[i-1].z));if(e[e.length-1]<.5)return;const o=s.map((i,a)=>{const M=s[Math.max(0,a-1)],r=s[Math.min(s.length-1,a+1)],l=r.x-M.x,p=r.z-M.z,h=Math.hypot(l,p);return h<1e-6?{x:1,z:0}:{x:l/h,z:p/h}});return{kind:t.kind,...t.highSpeed?{highSpeed:!0}:{},level:t.level,centre:s,along:e,dir:o}}lay(t,n,s,e){const o=t.highSpeed?c.TRACK_SPACING_M.highSpeed:c.TRACK_SPACING_M[t.kind],i=Math.min(8,Math.max(1,t.tracks)),a=Array.from({length:i},(g,_)=>(_-(i-1)/2)*o),M=t.kind==="tram",r=M?0:c.BALLAST_HEIGHT_M,l=c.LIFT_M,p=(g,_,u)=>({x:n.centre[g].x-n.dir[g].z*_,y:n.y[g]+u,z:n.centre[g].z+n.dir[g].x*_}),h=n.centre.map((g,_)=>_);if(!M){const g=c.SLEEPER_LENGTH_M/2+c.BALLAST_SHOULDER_M+(a[a.length-1]??0),_=h.map(A=>p(A,g,r+l)),u=h.map(A=>p(A,-g,r+l));if(e.ballast.strip(_,u),t.level===0){const A=g+r*c.BALLAST_SLOPE;for(const d of[1,-1]){const x=[],v=[];let m=!1;for(const z of h){const D=p(z,d*A,l),C=s(D.x,D.z)+l,b=D.y-C;b<0&&(D.y=Math.min(C,n.y[z]+r-.05+l)),x.push(D);const B=p(z,d*(A+Math.max(0,b)*c.BANK_SLOPE),l);B.y=Math.min(s(B.x,B.z)+l,D.y),D.y-B.y>.02&&(m=!0),v.push(B)}const T=d>0?_:u;d>0?e.ballast.strip(x,T):e.ballast.strip(T,x),m&&(d>0?e.earth.strip(v,x):e.earth.strip(x,v))}}else{const A=-c.DECK_DEPTH_M,d=g+.15,x=h.map(z=>p(z,d,r+l+.1)),v=h.map(z=>p(z,-d,r+l+.1)),m=h.map(z=>p(z,d,A)),T=h.map(z=>p(z,-d,A));e.deck.strip(m,x),e.deck.strip(v,T),e.deck.strip(T,m),e.deck.strip(x,h.map(z=>p(z,g,r+l+.1))),e.deck.strip(h.map(z=>p(z,-g,r+l+.1)),v)}}const E=t.service?e.wood:e.concrete,L=t.gaugeMm/2e3+c.RAIL_HEAD_M/2,f=M?c.TRAM_RAIL_HEIGHT_M:c.RAIL_HEIGHT_M,O=r+l;for(const g of a){if(!M){const _=c.SLEEPER_LENGTH_M/2;E.strip(h.map(u=>p(u,g+_,O+.004)),h.map(u=>p(u,g-_,O+.004)),n.along)}for(const _ of[1,-1]){const u=g+_*L,A=c.RAIL_HEAD_M/2,d=h.map(v=>p(v,u+A,O+f)),x=h.map(v=>p(v,u-A,O+f));e.head.strip(d,x),e.rust.strip(h.map(v=>p(v,u+A,O)),d),e.rust.strip(x,h.map(v=>p(v,u-A,O)))}}t.electrification==="overhead"&&t.kind!=="subway"&&t.kind!=="funicular"&&this.catenary(t,n,a,O+f,p,s,e)}catenary(t,n,s,e,o,i,a){const M=t.kind==="tram"?c.CATENARY.tram:t.highSpeed?c.CATENARY.highSpeed:t.service?c.CATENARY.service:c.CATENARY.rail,r=n.along[n.along.length-1],l=Math.max(1,Math.round(r/M.spanM)),p=r/l,h=Array.from({length:l},(d,x)=>(x+.5)*p),E=e+M.contactM,L=E+M.systemM,f=(M.systemM>0?L:E)+c.MAST_ABOVE_M,O=s[s.length-1],g=s.length>2,_=s.length===1?[1]:[1,-1],u=(d,x,v)=>{let m=0,T=n.along.length-2;for(;m<T;){const b=m+T+1>>1;n.along[b]<=d?m=b:T=b-1}const z=Math.min(1,Math.max(0,(d-n.along[m])/Math.max(1e-6,n.along[m+1]-n.along[m]))),D=o(m,x,v),C=o(m+1,x,v);return{x:D.x+(C.x-D.x)*z,y:D.y+(C.y-D.y)*z,z:D.z+(C.z-D.z)*z}};for(const d of h){for(const x of _){const v=x*(O+c.MAST_OFFSET_M),m=u(d,v,0);t.level===0&&(m.y=i(m.x,m.z));const T=u(d,v,f);if(a.steel.beam(m,T,c.MAST_SIDE_M),g)continue;const D=(_.length===1?s[0]:x*O)-x*.6,C=M.systemM>0?L:E+.3;a.steel.beam(u(d,v,C),u(d,D,C),c.ARM_SIDE_M),a.steel.beam(u(d,v,E-.4),u(d,D,C),c.ARM_SIDE_M)}if(g){const x=O+c.MAST_OFFSET_M;a.steel.beam(u(d,x,f-.2),u(d,-x,f-.2),c.MAST_SIDE_M*.8)}}const A=[0,...h,r];for(const[d,x]of s.entries()){const v=m=>m===0||m===A.length-1?0:((m+d)%2===0?1:-1)*M.staggerM;for(let m=0;m<A.length-1;m++){const T=A[m],z=A[m+1];if(z-T<.1||(a.wire.beam(u(T,x+v(m),E),u(z,x+v(m+1),E),c.CONTACT_DIAMETER_M,!1),M.systemM<=0))continue;const D=4,C=b=>{const B=m===0?.5+b/2:m===A.length-2?b/2:b;return L-c.MESSENGER_SAG_M*4*B*(1-B)};for(let b=0;b<D;b++){const B=b/D,G=(b+1)/D;a.wire.beam(u(T+(z-T)*B,x,C(B)),u(T+(z-T)*G,x,C(G)),c.MESSENGER_DIAMETER_M,!1)}}}}static meshOf(t,n){if(t.indices.length===0)return;const s=new K;return s.setAttribute("position",new N(new Float32Array(t.positions),3)),t.along.length>0&&s.setAttribute("aAlong",new N(new Float32Array(t.along),1)),s.setIndex(new N(new Uint32Array(t.indices),1)),s.computeVertexNormals(),new U(s,n)}static lambert(t,n){return new k({color:new H(...t),...n?{polygonOffset:!0,polygonOffsetFactor:-2,polygonOffsetUnits:-2}:{}})}static pebbled(t){return t.onBeforeCompile=n=>{n.vertexShader=n.vertexShader.replace("#include <common>",`#include <common>
1
+ import{G as F,F as P,a4 as H,a5 as w,a8 as K,aa as N,z as U,ab as k}from"./rr0-sighting-editor.mjs";class S{static HOLLOW_M=1;static WINDOW_M=30;static SAMPLE_M=4;static MAX_GRADE={rail:.025,highSpeed:.035,subway:.04,light_rail:.06,tram:.08,funicular:1/0};static heights(t,n,s){const e=t.map(r=>r.level===0),o=t.map((r,l)=>e[l]?S.targets(r,n,s):[]),i=t.map((r,l)=>e[l]?S.samples(r,o[l]):[]),a=new Map;t.forEach((r,l)=>{if(e[l])for(const p of S.ends(r)){const h=S.key(p),E=a.get(h);E?E.push(l):a.set(h,[l])}});const u=r=>{const l=a.get(S.key(r));if(l)return S.median(l.flatMap(p=>i[p]),r)};return t.map((r,l)=>{if(e[l]){const p=[...new Set([l,...S.ends(r).flatMap(f=>a.get(S.key(f))??[])])].flatMap(f=>i[f]),h=r.centre.map((f,O)=>S.median(p,f)??o[l][O]),[E,L]=S.ends(r);return h[0]=u(E)??h[0],h[h.length-1]=u(L)??h[h.length-1],S.graded(h,r.along,r.highSpeed?S.MAX_GRADE.highSpeed:S.MAX_GRADE[r.kind])}return S.carried(r,n,s,u)})}static targets(t,n,s){return t.centre.map(e=>{const o=n(e.x,e.z);if(s===void 0||e.altitudeM===void 0)return o;const i=e.altitudeM+s;return i-o>S.HOLLOW_M?i:o})}static samples(t,n){const s=[];let e=0;return t.centre.forEach((o,i)=>{t.along[i]+1e-6<e&&i<t.centre.length-1||(s.push({x:o.x,z:o.z,y:n[i]}),e=t.along[i]+S.SAMPLE_M)}),s}static median(t,n){const s=[];for(const o of t)Math.hypot(o.x-n.x,o.z-n.z)<=S.WINDOW_M&&s.push(o.y);if(s.length===0)return;s.sort((o,i)=>o-i);const e=s.length>>1;return s.length%2===1?s[e]:(s[e-1]+s[e])/2}static graded(t,n,s){if(!Number.isFinite(s)||t.length<3)return t;const e=[...t],o=e.length-1,i=n[o];if(Math.abs(e[o]-e[0])>s*i)return n.map(a=>e[0]+(e[o]-e[0])*a/i);for(let a=1;a<o;a++){const u=s*(n[a]-n[a-1]);e[a]=Math.min(e[a-1]+u,Math.max(e[a-1]-u,e[a]))}for(let a=o-1;a>0;a--){const u=s*(n[a+1]-n[a]);e[a]=Math.min(e[a+1]+u,Math.max(e[a+1]-u,e[a]))}return e}static carried(t,n,s,e){const[o,i]=S.ends(t),a=t.along[t.along.length-1],u=e(o),r=e(i);if(s!==void 0&&t.centre.every(h=>h.altitudeM!==void 0)){const h=t.centre.map(f=>f.altitudeM+s),E=u!==void 0?u-h[0]:0,L=r!==void 0?r-h[h.length-1]:0;return h.map((f,O)=>f+E+(L-E)*t.along[O]/a)}const l=u??n(o.x,o.z),p=r??n(i.x,i.z);return t.along.map(h=>l+(p-l)*h/a)}static ends(t){return[t.centre[0],t.centre[t.centre.length-1]]}static key(t){return`${Math.round(t.x*2)},${Math.round(t.z*2)}`}}class I{positions=[];indices=[];along=[];get vertexCount(){return this.positions.length/3}strip(t,n,s){const e=this.vertexCount;for(let o=0;o<t.length;o++)this.positions.push(t[o].x,t[o].y,t[o].z,n[o].x,n[o].y,n[o].z),s&&this.along.push(s[o],s[o]);for(let o=0;o<t.length-1;o++){const i=e+o*2;this.indices.push(i,i+2,i+1,i+1,i+2,i+3)}}beam(t,n,s,e=!0){const o=n.x-t.x,i=n.y-t.y,a=n.z-t.z,u=Math.hypot(o,i,a);if(u<1e-6)return;const r={x:o/u,y:i/u,z:a/u},l=Math.abs(r.y)>.9?{x:1,y:0,z:0}:{x:0,y:1,z:0},p=r.y*l.z-r.z*l.y,h=r.z*l.x-r.x*l.z,E=r.x*l.y-r.y*l.x,L=Math.hypot(p,h,E),f={x:p/L*s/2,y:h/L*s/2,z:E/L*s/2},O={x:r.y*f.z-r.z*f.y,y:r.z*f.x-r.x*f.z,z:r.x*f.y-r.y*f.x},g=(M,A,d)=>({x:M.x+f.x*A+O.x*d,y:M.y+f.y*A+O.y*d,z:M.z+f.z*A+O.z*d}),_=[[1,1],[-1,1],[-1,-1],[1,-1]];for(let M=0;M<4;M++){const[A,d]=_[M],[x,v]=_[(M+1)%4];this.quad(g(t,A,d),g(t,x,v),g(n,x,v),g(n,A,d))}e&&(this.quad(...[..._].reverse().map(([M,A])=>g(t,M,A))),this.quad(..._.map(([M,A])=>g(n,M,A))))}quad(t,n,s,e){const o=this.vertexCount;this.positions.push(t.x,t.y,t.z,n.x,n.y,n.z,s.x,s.y,s.z,e.x,e.y,e.z),this.indices.push(o,o+1,o+2,o,o+2,o+3)}}class c{static STEP_M=6;static BALLAST_HEIGHT_M=.5;static BALLAST_SLOPE=1.5;static BALLAST_SHOULDER_M=.45;static DECK_DEPTH_M=.8;static BANK_SLOPE=1.5;static SLEEPER_LENGTH_M=2.4;static SLEEPER_WIDTH_M=.29;static SLEEPER_SPACING_M=.6;static RAIL_HEAD_M=.072;static RAIL_HEIGHT_M=.18;static TRAM_RAIL_HEIGHT_M=.03;static LIFT_M=.06;static CATENARY={rail:{contactM:5.5,systemM:1.4,spanM:54,staggerM:.2},highSpeed:{contactM:5.08,systemM:1.4,spanM:63,staggerM:.2},service:{contactM:5.5,systemM:1.2,spanM:45,staggerM:.2},tram:{contactM:6,systemM:0,spanM:30,staggerM:.2}};static MESSENGER_SAG_M=.55;static MAST_SIDE_M=.26;static MAST_OFFSET_M=3.1;static MAST_ABOVE_M=.6;static CONTACT_DIAMETER_M=.012;static MESSENGER_DIAMETER_M=.011;static ARM_SIDE_M=.06;static TRACK_SPACING_M={rail:3.7,highSpeed:4.5,tram:3.1,subway:3.4,light_rail:3.4,funicular:3.2};static BALLAST_ALBEDO=[.17,.16,.15];static BANK_ALBEDO=[.085,.09,.05];static DECK_ALBEDO=[.26,.255,.24];static CONCRETE_ALBEDO=[.36,.35,.33];static WOOD_ALBEDO=[.07,.055,.045];static RUST_ALBEDO=[.085,.068,.058];static STEEL_ALBEDO=[.3,.31,.32];static COPPER_ALBEDO=[.09,.085,.07];group=new F;stepM=c.STEP_M;drawn=0;ballastMaterial=c.pebbled(c.lambert(c.BALLAST_ALBEDO,!0));earthMaterial=c.lambert(c.BANK_ALBEDO,!0);deckMaterial=c.lambert(c.DECK_ALBEDO,!1);concreteSleepers=c.sleeperMaterial(c.CONCRETE_ALBEDO);woodSleepers=c.sleeperMaterial(c.WOOD_ALBEDO);rustMaterial=c.lambert(c.RUST_ALBEDO,!0);headMaterial=new P({color:new H(.62,.62,.62),metalness:1,roughness:.28,polygonOffset:!0,polygonOffsetFactor:-2,polygonOffsetUnits:-2});steelMaterial=c.lambert(c.STEEL_ALBEDO,!1);wireMaterial=c.lambert(c.COPPER_ALBEDO,!1);constructor(){this.group.name="railways"}get count(){return this.drawn}setGroundSpacing(t){this.stepM=Number.isFinite(t)&&t>0?Math.min(c.STEP_M,Math.max(1.5,t/2)):c.STEP_M}set(t,n,s,e,o=1/0){this.clear();const a=t.map(E=>({line:E,path:E.points.map(L=>({...w(L.lat,L.lng,n,s),altitudeM:L.altitudeM}))})).filter(({line:E,path:L})=>E.level>=0&&c.within(L,o)),u=c.altitudeOffset(a,e),r=a.flatMap(({line:E,path:L})=>{const f=this.layoutOf(E,L);return f?[{line:E,layout:f}]:[]}),l=S.heights(r.map(({layout:E})=>E),e,u),p={ballast:new I,earth:new I,deck:new I,concrete:new I,wood:new I,rust:new I,head:new I,steel:new I,wire:new I};r.forEach(({line:E,layout:L},f)=>{this.lay(E,{...L,y:l[f]},e,p),this.drawn++});const h=[[p.ballast,this.ballastMaterial,"ballast",!1],[p.earth,this.earthMaterial,"embankments",!1],[p.deck,this.deckMaterial,"decks",!0],[p.concrete,this.concreteSleepers,"sleepers",!1],[p.wood,this.woodSleepers,"sleepers wood",!1],[p.rust,this.rustMaterial,"rails",!1],[p.head,this.headMaterial,"rail heads",!1],[p.steel,this.steelMaterial,"catenary masts",!0],[p.wire,this.wireMaterial,"catenary wires",!1]];for(const[E,L,f,O]of h){const g=c.meshOf(E,L);g&&(g.name=`railways ${f}`,g.castShadow=O,g.receiveShadow=!0,this.group.add(g))}}clear(){for(const t of[...this.group.children])this.group.remove(t),t.geometry?.dispose();this.drawn=0}dispose(){this.clear();for(const t of[this.ballastMaterial,this.earthMaterial,this.deckMaterial,this.concreteSleepers,this.woodSleepers,this.rustMaterial,this.headMaterial,this.steelMaterial,this.wireMaterial])t.dispose()}static within(t,n){if(!Number.isFinite(n))return!0;const s=n*1.1+100;return t.some((e,o)=>Math.hypot(e.x,e.z)<=s||o>0&&Math.hypot((e.x+t[o-1].x)/2,(e.z+t[o-1].z)/2)<=s)}static altitudeOffset(t,n){const s=[];for(const{line:e,path:o}of t)if(e.level===0)for(const i of o)i.altitudeM!==void 0&&s.push(n(i.x,i.z)-i.altitudeM);if(!(s.length<5))return s.sort((e,o)=>e-o),s[Math.floor(s.length/2)]}layoutOf(t,n){const s=[];for(let i=0;i<n.length-1;i++){const a=n[i],u=n[i+1],r=Math.max(1,Math.ceil(Math.hypot(u.x-a.x,u.z-a.z)/this.stepM));for(let l=0;l<r;l++){const p=l/r,h=a.altitudeM!==void 0&&u.altitudeM!==void 0?a.altitudeM+(u.altitudeM-a.altitudeM)*p:void 0;s.push({x:a.x+(u.x-a.x)*p,z:a.z+(u.z-a.z)*p,altitudeM:h})}}if(s.push(n[n.length-1]),s.length<2)return;const e=[0];for(let i=1;i<s.length;i++)e.push(e[i-1]+Math.hypot(s[i].x-s[i-1].x,s[i].z-s[i-1].z));if(e[e.length-1]<.5)return;const o=s.map((i,a)=>{const u=s[Math.max(0,a-1)],r=s[Math.min(s.length-1,a+1)],l=r.x-u.x,p=r.z-u.z,h=Math.hypot(l,p);return h<1e-6?{x:1,z:0}:{x:l/h,z:p/h}});return{kind:t.kind,...t.highSpeed?{highSpeed:!0}:{},level:t.level,centre:s,along:e,dir:o}}lay(t,n,s,e){const o=t.highSpeed?c.TRACK_SPACING_M.highSpeed:c.TRACK_SPACING_M[t.kind],i=Math.min(8,Math.max(1,t.tracks)),a=Array.from({length:i},(g,_)=>(_-(i-1)/2)*o),u=t.kind==="tram",r=u?0:c.BALLAST_HEIGHT_M,l=c.LIFT_M,p=(g,_,M)=>({x:n.centre[g].x-n.dir[g].z*_,y:n.y[g]+M,z:n.centre[g].z+n.dir[g].x*_}),h=n.centre.map((g,_)=>_);if(!u){const g=c.SLEEPER_LENGTH_M/2+c.BALLAST_SHOULDER_M+(a[a.length-1]??0),_=h.map(A=>p(A,g,r+l)),M=h.map(A=>p(A,-g,r+l));if(e.ballast.strip(_,M),t.level===0){const A=g+r*c.BALLAST_SLOPE;for(const d of[1,-1]){const x=[],v=[];let m=!1;for(const z of h){const D=p(z,d*A,l),B=s(D.x,D.z)+l,T=D.y-B;T<0&&(D.y=Math.min(B,n.y[z]+r-.05+l)),x.push(D);const C=p(z,d*(A+Math.max(0,T)*c.BANK_SLOPE),l);C.y=Math.min(s(C.x,C.z)+l,D.y),D.y-C.y>.02&&(m=!0),v.push(C)}const b=d>0?_:M;d>0?e.ballast.strip(x,b):e.ballast.strip(b,x),m&&(d>0?e.earth.strip(v,x):e.earth.strip(x,v))}}else{const A=-c.DECK_DEPTH_M,d=g+.15,x=h.map(z=>p(z,d,r+l+.1)),v=h.map(z=>p(z,-d,r+l+.1)),m=h.map(z=>p(z,d,A)),b=h.map(z=>p(z,-d,A));e.deck.strip(m,x),e.deck.strip(v,b),e.deck.strip(b,m),e.deck.strip(x,h.map(z=>p(z,g,r+l+.1))),e.deck.strip(h.map(z=>p(z,-g,r+l+.1)),v)}}const E=t.service?e.wood:e.concrete,L=t.gaugeMm/2e3+c.RAIL_HEAD_M/2,f=u?c.TRAM_RAIL_HEIGHT_M:c.RAIL_HEIGHT_M,O=r+l;for(const g of a){if(!u){const _=c.SLEEPER_LENGTH_M/2;E.strip(h.map(M=>p(M,g+_,O+.004)),h.map(M=>p(M,g-_,O+.004)),n.along)}for(const _ of[1,-1]){const M=g+_*L,A=c.RAIL_HEAD_M/2,d=h.map(v=>p(v,M+A,O+f)),x=h.map(v=>p(v,M-A,O+f));e.head.strip(d,x),e.rust.strip(h.map(v=>p(v,M+A,O)),d),e.rust.strip(x,h.map(v=>p(v,M-A,O)))}}t.electrification==="overhead"&&t.kind!=="subway"&&t.kind!=="funicular"&&this.catenary(t,n,a,O+f,p,s,e)}catenary(t,n,s,e,o,i,a){const u=t.kind==="tram"?c.CATENARY.tram:t.highSpeed?c.CATENARY.highSpeed:t.service?c.CATENARY.service:c.CATENARY.rail,r=n.along[n.along.length-1],l=Math.max(1,Math.round(r/u.spanM)),p=r/l,h=Array.from({length:l},(d,x)=>(x+.5)*p),E=e+u.contactM,L=E+u.systemM,f=(u.systemM>0?L:E)+c.MAST_ABOVE_M,O=s[s.length-1],g=s.length>2,_=s.length===1?[1]:[1,-1],M=(d,x,v)=>{let m=0,b=n.along.length-2;for(;m<b;){const T=m+b+1>>1;n.along[T]<=d?m=T:b=T-1}const z=Math.min(1,Math.max(0,(d-n.along[m])/Math.max(1e-6,n.along[m+1]-n.along[m]))),D=o(m,x,v),B=o(m+1,x,v);return{x:D.x+(B.x-D.x)*z,y:D.y+(B.y-D.y)*z,z:D.z+(B.z-D.z)*z}};for(const d of h){for(const x of _){const v=x*(O+c.MAST_OFFSET_M),m=M(d,v,0);t.level===0&&(m.y=i(m.x,m.z));const b=M(d,v,f);if(a.steel.beam(m,b,c.MAST_SIDE_M),g)continue;const D=(_.length===1?s[0]:x*O)-x*.6,B=u.systemM>0?L:E+.3;a.steel.beam(M(d,v,B),M(d,D,B),c.ARM_SIDE_M),a.steel.beam(M(d,v,E-.4),M(d,D,B),c.ARM_SIDE_M)}if(g){const x=O+c.MAST_OFFSET_M;a.steel.beam(M(d,x,f-.2),M(d,-x,f-.2),c.MAST_SIDE_M*.8)}}const A=[0,...h,r];for(const[d,x]of s.entries()){const v=m=>m===0||m===A.length-1?0:((m+d)%2===0?1:-1)*u.staggerM;for(let m=0;m<A.length-1;m++){const b=A[m],z=A[m+1];if(z-b<.1||(a.wire.beam(M(b,x+v(m),E),M(z,x+v(m+1),E),c.CONTACT_DIAMETER_M,!1),u.systemM<=0))continue;const D=4,B=T=>{const C=m===0?.5+T/2:m===A.length-2?T/2:T;return L-c.MESSENGER_SAG_M*4*C*(1-C)};for(let T=0;T<D;T++){const C=T/D,G=(T+1)/D;a.wire.beam(M(b+(z-b)*C,x,B(C)),M(b+(z-b)*G,x,B(G)),c.MESSENGER_DIAMETER_M,!1)}}}}static meshOf(t,n){if(t.indices.length===0)return;const s=new K;return s.setAttribute("position",new N(new Float32Array(t.positions),3)),t.along.length>0&&s.setAttribute("aAlong",new N(new Float32Array(t.along),1)),s.setIndex(new N(new Uint32Array(t.indices),1)),s.computeVertexNormals(),new U(s,n)}static lambert(t,n){return new k({color:new H(...t),...n?{polygonOffset:!0,polygonOffsetFactor:-2,polygonOffsetUnits:-2}:{}})}static pebbled(t){return t.onBeforeCompile=n=>{n.vertexShader=n.vertexShader.replace("#include <common>",`#include <common>
2
2
  varying vec3 vBallast;`).replace("#include <begin_vertex>",`#include <begin_vertex>
3
3
  vBallast = position;`),n.fragmentShader=n.fragmentShader.replace("#include <common>",`#include <common>
4
4
  varying vec3 vBallast;
@@ -1 +1 @@
1
- import{a4 as D}from"./rr0-sighting-editor.mjs";class l{static MIN_ROAD_M=5.5;static WIDE_ROAD_M=9;static LINE_WIDTH_M=.12;static DASH_M=3;static GAP_M=10;static RIVE_DASH_M=2.5;static RIVE_GAP_M=3.5;static MIN_DASH_M=.5;static LANE_M=3.5;static SHOULDER_MIN_M=1.5;static SOLID_EDGE_FROM_M=7;static SOLID_EDGE_FROM_KMH=80;static BEND_RADIUS_M=300;static EDGE_SETBACK_M=.4;static PAINT_RADIUS_M=450;static LIFT_M=.015;static BARRIER_MAX_AXES_M=40;static BARRIER_MIN_AXES_M=5;static BARRIER_HEIGHT_M=.8;static BARRIER_HALF_WIDTH_M=.2;static BARRIER_STEP_M=4;static painted(t){return t.surface==="paved"&&t.widthM>=l.MIN_ROAD_M&&t.kind!=="roundabout"}static plan(t){if(!l.painted(t))return[];const M=t.widthM,r=M/2,c=l.EDGE_SETBACK_M;if(!(t.direction!==void 0&&t.lanes!==void 0)){const I=[{offsetM:r-c,pattern:"solid"},{offsetM:-(r-c),pattern:"solid"}],A=M>=l.WIDE_ROAD_M?[-M/4,M/4]:[0];for(const x of A)I.push({offsetM:x,pattern:"dashed"});return I}const s=t.lanes,n=M>=l.SOLID_EDGE_FROM_M||(t.speedKmh??0)>=l.SOLID_EDGE_FROM_KMH?"solid":"rive";if(t.direction==="both"){if(s<2)return[];const I=[{offsetM:r-c,pattern:n},{offsetM:-(r-c),pattern:n}];if(s>=4){I.push({offsetM:.1,pattern:"solid"},{offsetM:-.1,pattern:"solid"});const A=Math.floor(s/2),x=M/s;for(let z=1;z<A;z++)I.push({offsetM:z*x,pattern:"dashed"},{offsetM:-z*x,pattern:"dashed"})}else I.push({offsetM:0,pattern:"dashed",solidInBends:!0});return I}const u=t.direction==="backward"?-1:1,o=I=>u*(r-I),i=Math.min(l.LANE_M,M/Math.max(s,1)),h=s*i,_=M-h,d=(t.kind==="motorway"||t.kind==="dual")&&_>=l.SHOULDER_MIN_M,E=[{offsetM:o(c),pattern:t.kind==="motorway"||t.kind==="dual"?"solid":n}];E.push({offsetM:o(d?h:M-c),pattern:t.kind==="motorway"||t.kind==="dual"?"solid":n});for(let I=1;I<s;I++)E.push({offsetM:o(I*i),pattern:"dashed"});return E}static lay(t,M,r,c){let e=0;const s=(f,n)=>{c(f,l.LINE_WIDTH_M,{offsetM:n,liftM:l.LIFT_M,minHalfM:l.LINE_WIDTH_M/2}),e++};for(const f of t){const n=l.plan(f);if(n.length===0)continue;const u=f.points.map(o=>D(o.lat,o.lng,M,r));for(const o of l.near(u,l.PAINT_RADIUS_M))for(const i of n){if(i.pattern==="solid"){s(o,i.offsetM);continue}const[h,_]=i.pattern==="dashed"?[l.DASH_M,l.GAP_M]:[l.RIVE_DASH_M,l.RIVE_GAP_M];for(const d of i.solidInBends?l.byBends(o):[{path:o,bend:!1}])if(d.bend)s(d.path,i.offsetM);else for(const E of l.dashes(d.path,h,_))s(E,i.offsetM)}}return e}static byBends(t){if(t.length<3)return[{path:t,bend:!1}];const M=(e,s)=>Math.atan2(s.x-e.x,-(s.z-e.z)),r=new Array(t.length-1).fill(!1);for(let e=1;e<t.length-1;e++){const s=Math.hypot(t[e].x-t[e-1].x,t[e].z-t[e-1].z),f=Math.hypot(t[e+1].x-t[e].x,t[e+1].z-t[e].z);if(s<1e-6||f<1e-6)continue;let n=Math.abs(M(t[e],t[e+1])-M(t[e-1],t[e]));n>Math.PI&&(n=2*Math.PI-n),(s+f)/2/Math.max(n,1e-6)<l.BEND_RADIUS_M&&(r[e-1]=!0,r[e]=!0)}const c=[];for(let e=0;e<r.length;e++){const s=c.at(-1);s&&s.bend===r[e]?s.path.push(t[e+1]):c.push({path:[t[e],t[e+1]],bend:r[e]})}return c}static barriers(t,M,r){const c=t.filter(n=>(n.kind==="motorway"||n.kind==="dual")&&(n.direction==="forward"||n.direction==="backward")),e=c.map(n=>{const u=n.points.map(o=>D(o.lat,o.lng,M,r));return n.direction==="backward"?[...u].reverse():u}),s=[],f=l.BARRIER_STEP_M;return c.forEach((n,u)=>{for(const o of l.near(e[u],l.PAINT_RADIUS_M)){let i=[];for(const h of l.resample(o,f)){const _=l.midwayToOpposite(h,u,c,e);_?i.push(_):i.length>0&&(i.length>=2&&s.push(i),i=[])}i.length>=2&&s.push(i)}}),s}static midwayToOpposite(t,M,r,c){let e;for(let s=0;s<c.length;s++){if(s===M||r[s].id<r[M].id)continue;const f=c[s];for(let n=0;n<f.length-1;n++){const u=f[n+1].x-f[n].x,o=f[n+1].z-f[n].z,i=u*u+o*o;if(i<1e-9||(u*t.dx+o*t.dz)/Math.sqrt(i)>-.9)continue;const h=Math.max(0,Math.min(1,((t.x-f[n].x)*u+(t.z-f[n].z)*o)/i)),_={x:f[n].x+u*h,z:f[n].z+o*h},d=Math.hypot(t.x-_.x,t.z-_.z);d<l.BARRIER_MIN_AXES_M||d>l.BARRIER_MAX_AXES_M||(!e||d<e.distance)&&(e={distance:d,point:_})}}return e?{x:(t.x+e.point.x)/2,z:(t.z+e.point.z)/2}:void 0}static resample(t,M){const r=[];for(let c=0;c<t.length-1;c++){const e=Math.hypot(t[c+1].x-t[c].x,t[c+1].z-t[c].z);if(e<1e-6)continue;const s=(t[c+1].x-t[c].x)/e,f=(t[c+1].z-t[c].z)/e;for(let n=0;n<e;n+=M)r.push({x:t[c].x+s*n,z:t[c].z+f*n,dx:s,dz:f})}return r}static barrierGeometry(t,M){const r=[],c=[],e=l.BARRIER_HALF_WIDTH_M;for(const s of t){if(s.length<2)continue;const f=r.length/3;for(let n=0;n<s.length;n++){const u=s[Math.max(0,n-1)],o=s[Math.min(s.length-1,n+1)],i=Math.hypot(o.x-u.x,o.z-u.z)||1,h=-(o.z-u.z)/i*e,_=(o.x-u.x)/i*e,d=M(s[n].x,s[n].z);r.push(s[n].x+h,d,s[n].z+_,s[n].x+h,d+l.BARRIER_HEIGHT_M,s[n].z+_,s[n].x-h,d+l.BARRIER_HEIGHT_M,s[n].z-_,s[n].x-h,d,s[n].z-_)}for(let n=0;n<s.length-1;n++){const u=f+n*4,o=u+4;for(let i=0;i<3;i++)c.push(u+i,o+i,u+i+1,u+i+1,o+i,o+i+1)}}return{positions:r,indices:c}}static near(t,M){const r=[];let c;for(let e=0;e<t.length-1;e++)Math.min(Math.hypot(t[e].x,t[e].z),Math.hypot(t[e+1].x,t[e+1].z))<=M||Math.hypot((t[e].x+t[e+1].x)/2,(t[e].z+t[e+1].z)/2)<=M?(c||(c=[t[e]]),c.push(t[e+1])):c&&(r.push(c),c=void 0);return c&&r.push(c),r}static dashes(t,M,r){const c=[],e=M+r;let s=0,f;const n=(o,i)=>({x:t[o].x+(t[o+1].x-t[o].x)*i,z:t[o].z+(t[o+1].z-t[o].z)*i});for(let o=0;o<t.length-1;o++){const i=Math.hypot(t[o+1].x-t[o].x,t[o+1].z-t[o].z);if(i<1e-6)continue;let h=0;for(;h<i;){const _=(s+h)%e,d=_<M,E=d?M-_:e-_,I=Math.min(i,h+E);d&&(f||(f=[n(o,h/i)]),f.push(n(o,I/i)),I-h>=E-1e-9&&(c.push(f),f=void 0)),h=I}s+=i}f&&f.length>=2&&c.push(f);const u=o=>o.slice(1).reduce((i,h,_)=>i+Math.hypot(h.x-o[_].x,h.z-o[_].z),0);return c.filter(o=>o.length>=2&&u(o)>=l.MIN_DASH_M)}}export{l as RoadMarkings};
1
+ import{a5 as D}from"./rr0-sighting-editor.mjs";class l{static MIN_ROAD_M=5.5;static WIDE_ROAD_M=9;static LINE_WIDTH_M=.12;static DASH_M=3;static GAP_M=10;static RIVE_DASH_M=2.5;static RIVE_GAP_M=3.5;static MIN_DASH_M=.5;static LANE_M=3.5;static SHOULDER_MIN_M=1.5;static SOLID_EDGE_FROM_M=7;static SOLID_EDGE_FROM_KMH=80;static BEND_RADIUS_M=300;static EDGE_SETBACK_M=.4;static PAINT_RADIUS_M=450;static LIFT_M=.015;static BARRIER_MAX_AXES_M=40;static BARRIER_MIN_AXES_M=5;static BARRIER_HEIGHT_M=.8;static BARRIER_HALF_WIDTH_M=.2;static BARRIER_STEP_M=4;static painted(t){return t.surface==="paved"&&t.widthM>=l.MIN_ROAD_M&&t.kind!=="roundabout"}static plan(t){if(!l.painted(t))return[];const M=t.widthM,r=M/2,c=l.EDGE_SETBACK_M;if(!(t.direction!==void 0&&t.lanes!==void 0)){const I=[{offsetM:r-c,pattern:"solid"},{offsetM:-(r-c),pattern:"solid"}],A=M>=l.WIDE_ROAD_M?[-M/4,M/4]:[0];for(const x of A)I.push({offsetM:x,pattern:"dashed"});return I}const s=t.lanes,n=M>=l.SOLID_EDGE_FROM_M||(t.speedKmh??0)>=l.SOLID_EDGE_FROM_KMH?"solid":"rive";if(t.direction==="both"){if(s<2)return[];const I=[{offsetM:r-c,pattern:n},{offsetM:-(r-c),pattern:n}];if(s>=4){I.push({offsetM:.1,pattern:"solid"},{offsetM:-.1,pattern:"solid"});const A=Math.floor(s/2),x=M/s;for(let z=1;z<A;z++)I.push({offsetM:z*x,pattern:"dashed"},{offsetM:-z*x,pattern:"dashed"})}else I.push({offsetM:0,pattern:"dashed",solidInBends:!0});return I}const u=t.direction==="backward"?-1:1,o=I=>u*(r-I),i=Math.min(l.LANE_M,M/Math.max(s,1)),h=s*i,_=M-h,d=(t.kind==="motorway"||t.kind==="dual")&&_>=l.SHOULDER_MIN_M,E=[{offsetM:o(c),pattern:t.kind==="motorway"||t.kind==="dual"?"solid":n}];E.push({offsetM:o(d?h:M-c),pattern:t.kind==="motorway"||t.kind==="dual"?"solid":n});for(let I=1;I<s;I++)E.push({offsetM:o(I*i),pattern:"dashed"});return E}static lay(t,M,r,c){let e=0;const s=(f,n)=>{c(f,l.LINE_WIDTH_M,{offsetM:n,liftM:l.LIFT_M,minHalfM:l.LINE_WIDTH_M/2}),e++};for(const f of t){const n=l.plan(f);if(n.length===0)continue;const u=f.points.map(o=>D(o.lat,o.lng,M,r));for(const o of l.near(u,l.PAINT_RADIUS_M))for(const i of n){if(i.pattern==="solid"){s(o,i.offsetM);continue}const[h,_]=i.pattern==="dashed"?[l.DASH_M,l.GAP_M]:[l.RIVE_DASH_M,l.RIVE_GAP_M];for(const d of i.solidInBends?l.byBends(o):[{path:o,bend:!1}])if(d.bend)s(d.path,i.offsetM);else for(const E of l.dashes(d.path,h,_))s(E,i.offsetM)}}return e}static byBends(t){if(t.length<3)return[{path:t,bend:!1}];const M=(e,s)=>Math.atan2(s.x-e.x,-(s.z-e.z)),r=new Array(t.length-1).fill(!1);for(let e=1;e<t.length-1;e++){const s=Math.hypot(t[e].x-t[e-1].x,t[e].z-t[e-1].z),f=Math.hypot(t[e+1].x-t[e].x,t[e+1].z-t[e].z);if(s<1e-6||f<1e-6)continue;let n=Math.abs(M(t[e],t[e+1])-M(t[e-1],t[e]));n>Math.PI&&(n=2*Math.PI-n),(s+f)/2/Math.max(n,1e-6)<l.BEND_RADIUS_M&&(r[e-1]=!0,r[e]=!0)}const c=[];for(let e=0;e<r.length;e++){const s=c.at(-1);s&&s.bend===r[e]?s.path.push(t[e+1]):c.push({path:[t[e],t[e+1]],bend:r[e]})}return c}static barriers(t,M,r){const c=t.filter(n=>(n.kind==="motorway"||n.kind==="dual")&&(n.direction==="forward"||n.direction==="backward")),e=c.map(n=>{const u=n.points.map(o=>D(o.lat,o.lng,M,r));return n.direction==="backward"?[...u].reverse():u}),s=[],f=l.BARRIER_STEP_M;return c.forEach((n,u)=>{for(const o of l.near(e[u],l.PAINT_RADIUS_M)){let i=[];for(const h of l.resample(o,f)){const _=l.midwayToOpposite(h,u,c,e);_?i.push(_):i.length>0&&(i.length>=2&&s.push(i),i=[])}i.length>=2&&s.push(i)}}),s}static midwayToOpposite(t,M,r,c){let e;for(let s=0;s<c.length;s++){if(s===M||r[s].id<r[M].id)continue;const f=c[s];for(let n=0;n<f.length-1;n++){const u=f[n+1].x-f[n].x,o=f[n+1].z-f[n].z,i=u*u+o*o;if(i<1e-9||(u*t.dx+o*t.dz)/Math.sqrt(i)>-.9)continue;const h=Math.max(0,Math.min(1,((t.x-f[n].x)*u+(t.z-f[n].z)*o)/i)),_={x:f[n].x+u*h,z:f[n].z+o*h},d=Math.hypot(t.x-_.x,t.z-_.z);d<l.BARRIER_MIN_AXES_M||d>l.BARRIER_MAX_AXES_M||(!e||d<e.distance)&&(e={distance:d,point:_})}}return e?{x:(t.x+e.point.x)/2,z:(t.z+e.point.z)/2}:void 0}static resample(t,M){const r=[];for(let c=0;c<t.length-1;c++){const e=Math.hypot(t[c+1].x-t[c].x,t[c+1].z-t[c].z);if(e<1e-6)continue;const s=(t[c+1].x-t[c].x)/e,f=(t[c+1].z-t[c].z)/e;for(let n=0;n<e;n+=M)r.push({x:t[c].x+s*n,z:t[c].z+f*n,dx:s,dz:f})}return r}static barrierGeometry(t,M){const r=[],c=[],e=l.BARRIER_HALF_WIDTH_M;for(const s of t){if(s.length<2)continue;const f=r.length/3;for(let n=0;n<s.length;n++){const u=s[Math.max(0,n-1)],o=s[Math.min(s.length-1,n+1)],i=Math.hypot(o.x-u.x,o.z-u.z)||1,h=-(o.z-u.z)/i*e,_=(o.x-u.x)/i*e,d=M(s[n].x,s[n].z);r.push(s[n].x+h,d,s[n].z+_,s[n].x+h,d+l.BARRIER_HEIGHT_M,s[n].z+_,s[n].x-h,d+l.BARRIER_HEIGHT_M,s[n].z-_,s[n].x-h,d,s[n].z-_)}for(let n=0;n<s.length-1;n++){const u=f+n*4,o=u+4;for(let i=0;i<3;i++)c.push(u+i,o+i,u+i+1,u+i+1,o+i,o+i+1)}}return{positions:r,indices:c}}static near(t,M){const r=[];let c;for(let e=0;e<t.length-1;e++)Math.min(Math.hypot(t[e].x,t[e].z),Math.hypot(t[e+1].x,t[e+1].z))<=M||Math.hypot((t[e].x+t[e+1].x)/2,(t[e].z+t[e+1].z)/2)<=M?(c||(c=[t[e]]),c.push(t[e+1])):c&&(r.push(c),c=void 0);return c&&r.push(c),r}static dashes(t,M,r){const c=[],e=M+r;let s=0,f;const n=(o,i)=>({x:t[o].x+(t[o+1].x-t[o].x)*i,z:t[o].z+(t[o+1].z-t[o].z)*i});for(let o=0;o<t.length-1;o++){const i=Math.hypot(t[o+1].x-t[o].x,t[o+1].z-t[o].z);if(i<1e-6)continue;let h=0;for(;h<i;){const _=(s+h)%e,d=_<M,E=d?M-_:e-_,I=Math.min(i,h+E);d&&(f||(f=[n(o,h/i)]),f.push(n(o,I/i)),I-h>=E-1e-9&&(c.push(f),f=void 0)),h=I}s+=i}f&&f.length>=2&&c.push(f);const u=o=>o.slice(1).reduce((i,h,_)=>i+Math.hypot(h.x-o[_].x,h.z-o[_].z),0);return c.filter(o=>o.length>=2&&u(o)>=l.MIN_DASH_M)}}export{l as RoadMarkings};
@@ -9,4 +9,4 @@ Terminar con ? si es incierto, ~ si es aproximado, % para ambos
9
9
  1965-07-01 — un día
10
10
  1965-07-01T05:00 — un día y una hora
11
11
  05:00 — una hora, fecha desconocida
12
- Terminar con ? si es incierto, ~ si es aproximado, % para ambos`,edtfModeTitle:"Escribe en su lugar una fecha imprecisa: solo un año, un mes, una hora sin fecha",locationGroup:"Posición",observationGroup:"Resumen",weatherWhilePlaying:"Pausa la grabación para indicar el tiempo — mientras se reproduce, el instante en que se escribiría se está moviendo",weatherInferred:"Según los registros",weatherInferredTitle:"La meteorología no es un relato: es un hecho medible, registrado para la fecha, la hora y el lugar de la observación. Desmarca para indicar las condiciones que refirió el observador, que entonces prevalecen sobre el registro.",weatherLookingUp:"Buscando el registro…",weatherNeedsDateAndPlace:"Se necesitan una fecha completa y un lugar para buscar el registro",weatherNeedsDate:"Se necesita una fecha completa (año, mes y día) para buscar los registros meteorológicos",weatherNeedsPlace:"Se necesita un lugar con coordenadas para buscar los registros meteorológicos",weatherNoRecord:"Ningún registro para esta fecha y este lugar",weatherLookupFailed:"Registros meteorológicos inaccesibles por el momento",lightPollutionLookingUp:"Consultando el atlas…",lightPollutionFound:"{artificial} µcd/m² de luz artificial,",lightPollutionNatural:"Ninguna luz artificial aquí,",lightPollutionOutside:"Fuera del atlas (85°N a 60°S),",lightPollutionFailed:"Atlas inaccesible por ahora",lightPollutionTooEarly:"El atlas describe {atlasYear}; el cielo de {year} era más oscuro, indíquelo si se conoce",instrumentOutOfPeriod:"{name} — no es de esta fecha",instrumentCategoryEye:"Ojo desnudo",instrumentCategoryCamera:"Cámaras",instrumentCategoryDslr:"Réflex digitales",instrumentCategoryPhone:"Teléfonos",instrumentCategoryBinoculars:"Prismáticos",instrumentCategoryTelescope:"Telescopios",instrumentNotYetOnSale:"Aún no existía en {year} (a la venta desde {from})",instrumentNoLongerOnSale:"Ya no existía en {year} (a la venta hasta {to})",filterNotForInstrument:"No se puede usar con este instrumento",unitMillimetres:"mm",unitDegrees:"°",fieldOfViewReadout:"{deg}° de campo",soundSrcPlaceholder:"URL de una grabación real",referenceGroup:"Fotos",reference:"Foto",referenceTitle:"Nombre",referenceSrc:"Dirección",referenceSrcPlaceholder:"https://…/photo.jpg",referenceKind:"Tipo",referencePhoto:"Foto",referencePanorama:"Panorama (360°)",referenceCredit:"Crédito",referenceCreditUrl:"Enlace del crédito",referenceT:"Tomada en",referenceDrawing:"Dibujo encima",referenceOpacity:"Opacidad",referenceHeading:"Rumbo",referencePitch:"Cabeceo",referenceRoll:"Alabeo",referenceFov:"Campo vertical",referenceUsePose:"Usar la pose del observador",addReferenceUrl:"Añadir desde una dirección",addReferenceFile:"Añadir un archivo",deleteReference:"Eliminar foto",referenceEmbedded:"{kb} kB incrustados en la grabación — una dirección la mantendría ligera",referenceUnreachable:"No se pudo cargar la foto: revisa la dirección y que su sitio permita que otros sitios la lean",referenceRegisterHint:"Arrastra para girar la foto, rueda para cambiar su campo; «Añadir un punto de referencia» para señalar un detalle en la foto y luego el mismo en el render",referenceLandmarkPicture:"Punto de referencia {n}: haz clic en el punto de la foto",referenceLandmarkScene:"Punto de referencia {n}: haz clic en el mismo punto del render",referenceLandmarkOffPicture:"Ese clic no cae en la foto",referenceNotLoaded:"La foto aún no ha llegado",referenceLandmarksFit:"{n} puntos de referencia — desviación media de {deg}°",referenceLandmarks:"Puntos de referencia",addReferenceLandmark:"Añadir un punto de referencia",deleteReferenceLandmark:"Eliminar punto de referencia",referenceLandmarkLabel:"Nombre",referenceLandmarkLabelPlaceholder:"Árbol que tapa, valla…",referenceAdoptPose:"Adoptar como pose del observador",referenceAdoptRationale:"Medido en la foto «{title}»: {n} puntos de referencia alineados, {deg}° de desviación residual",referenceStreetSearch:"Fotos a pie de calle cercanas",referenceStreetSearching:"Buscando fotos tomadas cerca…",referenceStreetNone:"Ninguna foto a pie de calle a menos de {m} m (Panoramax)",referenceStreetFailed:"No se pudo contactar con Panoramax",referenceStreetAdd:"Añadir",traceImport:"Trazos del investigador (KML, KMZ)",trace:"Trazo",deleteTrace:"Eliminar el trazo",traceTitle:"Nombre",traceSource:"Fuente",traceImported:"{n} importado(s) de {name}.",traceSkipped:"Omitido: {what}.",traceNone:"Ninguna línea, lugar ni contorno en este archivo.",traceFailed:"No se pudo leer este archivo.",traceKindPoint:"lugar",traceKindLine:"línea",traceKindPolygon:"contorno",referenceStreetItem:"{distance} m a {bearing}°, {date}{panorama}",referenceStreetPanorama:" — 360°",referenceStreetTitle:"Foto a pie de calle a {distance} m a {bearing}°, {date}",skyLine:"Cielo: {parts}",skyStarsEye:"estrellas hasta la magnitud {limit}, lo más tenue que alcanzaba un ojo bajo este cielo",skyStarsDeeper:"estrellas hasta la magnitud {limit} a través de un {device} — {gain} magnitudes más allá de las {eye} que alcanzaban los ojos del observador",skyStarsShallower:"estrellas hasta la magnitud {limit} a través de un {device} — {gain} magnitudes por debajo de las {eye} que alcanzaban los ojos del observador",skyStarsCatalogue:", dibujadas hasta {catalogue}, donde se detiene el catálogo de este proyecto",skyStarsNone:"ninguna estrella se distinguía en un cielo tan claro",skyDetails:"Ver los registros completos",skyDetailsHide:"Ocultar los registros",skyShowerActive:"{name} — radiante a {altitude}° sobre el horizonte, {bearing} — unos {rate}/h bajo este cielo, sobre un fondo esporádico de {sporadic}/h",skyShowerBelowHorizon:"{name} está activa, pero su radiante está bajo el horizonte — no ha podido producir nada",skyNothingActive:"ninguna lluvia de meteoros activa en esta fecha — un fondo esporádico de unos {sporadic}/h",showMeteor:"Muéstrame uno",skyComet:"El {name}, magnitud {magnitude}, a {altitude}° sobre el horizonte {bearing}, cola de {tail}° de largo",skyCometNoTail:"El {name}, magnitud {magnitude}, a {altitude}° sobre el horizonte {bearing}",skyCometBelowHorizon:"El {name} estaba ahí, de magnitud {magnitude}, pero bajo el horizonte — nadie aquí lo vio",skyCometInDaylight:"El {name}, magnitud {magnitude}, a {altitude}° sobre el horizonte {bearing} — pero a solo {elongation}° del Sol",showComet:"Muéstrame el cometa",skyNova:"La {name}, una estrella nueva de magnitud {magnitude}, a {altitude}° sobre el horizonte {bearing}",skyNovaBelowHorizon:"La {name} brillaba con magnitud {magnitude}, pero bajo el horizonte: nadie aquí la vio",showNova:"Muéstrame la estrella nueva",skyEclipsePartial:"Eclipse de Sol: la Luna oculta el {percent} % del Sol a las {time}, a {altitude}° sobre el horizonte {bearing}",skyEclipseTotal:"Eclipse total de Sol: el Sol queda totalmente oculto desde las {time} durante {duration}, a {altitude}° sobre el horizonte {bearing}",skySupermoon:"Luna llena a {distance} km: {diameter}° de ancho, un {percent} % más que a su distancia media — una «superluna», y no más grande en el horizonte que en lo alto",skyMicromoon:"Luna llena a {distance} km: {diameter}° de ancho, un {percent} % menos que a su distancia media — una «microluna», y no más pequeña en el horizonte que en lo alto",skyRedMoon:"La «lune rousse»: la Luna llena de la lunación que sigue a la Pascua, a {altitude}° sobre el horizonte {bearing} — baja, y por eso enrojecida por el aire que atraviesa, y ni más grande ni más brillante que otra",skySatellitePasses:"{count} satélites cruzaron este cielo con brillo suficiente para ser vistos, el más brillante {name}, magnitud {magnitude}, a {altitude}° sobre el horizonte {bearing} a las {time}",skySatellitePassesOne:"un satélite cruzó este cielo con brillo suficiente para ser visto: {name}, magnitud {magnitude}, a {altitude}° sobre el horizonte {bearing} a las {time}",skySatelliteTrain:"entre ellos un tren de {count} Starlink lanzados el {date}",skySatellitePassesNone:"según los elementos orbitales archivados para esa fecha, ningún satélite iluminado cruzó este cielo con brillo suficiente para ser visto",skySatelliteElementsGap:"ningún elemento orbital archivado cerca de esa fecha",skyReentries:"reentradas registradas: {list}",skyReentriesMore:"{count} más",skyReentrySeen:"{name} cayó a las {time}, visto desde {place} (a {distance} km)",skyReentryObserved:"{name} cayó a las {time}, visto",skyReentryOffset:", a {minutes} min de la observación",skyReentryPredicted:"{name} cayó hacia las {time} ± {hours} h, no se sabe dónde",skyReentryDay:"{name} cayó el {date} (UTC), sin hora ni lugar conocidos",skyFireballs:"{count} bólidos registrados por la Global Meteor Network, el más brillante de magnitud {magnitude} a las {time}, a {altitude}° de altura {bearing}, a {distance} km ({stations} estaciones)",skyFireballsOne:"un bólido registrado por la Global Meteor Network: magnitud {magnitude} a las {time}, a {altitude}° de altura {bearing}, a {distance} km ({stations} estaciones)",showFireball:"Mostrar el bólido",showSatellite:"Muéstrame un satélite",skyOpticsPossible:"nubes de hielo suficientes, alrededor {source}, para {forms}",skyOpticsAlignment:" — todo salvo los anillos necesita cristales que caigan horizontales, aquí supuestos alineados al {alignment} %, ya que ningún registro lo da",skyOpticsHalo22:"un anillo de {angle}°",skyOpticsHalo46:"un anillo de {angle}°",skyOpticsParhelia:"parhelios a {angle}° a cada lado",skyOpticsTangentArc:"un arco tangente encima",skyOpticsParhelicCircle:"un círculo blanco que da la vuelta al cielo a su misma altura",skyOpticsCircumzenithal:"un arco circuncenital a {angle}° de altura",skyOpticsCircumhorizontal:"un arco circunhorizontal muy por debajo",skyOpticsPillar:"un pilar alzado sobre él",skyOpticsNoIce:"sin nubes de hielo: ni halo ni parhelios",skyOpticsHidden:"nubes de hielo en altura, pero una capa más baja entre ellas y el observador",skyOpticsSun:"del Sol",skyOpticsMoon:"de la Luna",skyBowPossible:"lluvia y sol suficientes para {forms}",skyBowMoon:"lluvia bajo una Luna iluminada al {lit} %, suficiente para {forms} — un arcoíris lunar, que el ojo ve como un arco blanco",skyGlowBand:"la Vía Láctea a {contrast}× el fondo del cielo, a {altitude}° de altura {bearing}",skyGlowCone:"la luz zodiacal a {contrast}× el fondo del cielo, a {altitude}° de altura {bearing}, a {elongation}° del Sol — un tenue cono de luz inclinado, de bordes difusos, desaparecido en menos de una hora",skyGlowZodiacalBand:"la banda zodiacal a {contrast}× el fondo del cielo, a {altitude}° de altura {bearing} — toda la eclíptica débilmente encendida, que no es lo que la gente cuenta",skyGlowMoon:"ni Vía Láctea ni luz zodiacal: una Luna iluminada al {lit} % mantenía el cielo en {sky} magnitudes por segundo de arco cuadrado, cuando necesitan 22",skyGlowTwilight:"ni Vía Láctea ni luz zodiacal: el crepúsculo aún mantenía el cielo en {sky} magnitudes por segundo de arco cuadrado, cuando necesitan 22",skyGlowTowns:"ni Vía Láctea ni luz zodiacal: el resplandor de las ciudades mantenía el cielo en {sky} magnitudes por segundo de arco cuadrado, cuando necesitan 22",skyGlowNothingUp:"cielo bastante oscuro ({sky} magnitudes por segundo de arco cuadrado), pero ni el plano galáctico ni la eclíptica estaban lo bastante altos en él",skyBowPrimary:"un arco de {radius}° de radio, con la cima a {top}° de altura",skyBowSecondary:"un segundo, más tenue, a {radius}°, con los colores invertidos",skyBowSourceTooHigh:"lluvia, pero con el astro a {altitude}° de altura ningún arco podía asomar sobre el horizonte: se sitúan a {radius}° del punto opuesto",skyBowHidden:"lluvia, pero una capa continua entre ella y la luz: ningún arco",skyBowNoSource:"lluvia, y nada iluminado para formar un arco con ella",skySatellitesLit:"la sombra de la Tierra estaba a {height} km sobre el observador, así que la órbita baja seguía al sol — {count} objetos catalogados estaban en órbita ese mes",skySatellitesLitWith:"la sombra de la Tierra estaba a {height} km sobre el observador, así que la órbita baja seguía al sol — {count} objetos catalogados estaban en órbita ese mes, entre ellos {eras}",skySatellitesShadowed:"la sombra de la Tierra estaba a {height} km sobre el observador: de los {count} objetos catalogados en órbita ese mes, nada en órbita baja estaba iluminado",skySatellitesNotYet:"aún no se había puesto nada en órbita",skySatellitesDaylight:"todo lo que estaba en órbita estaba iluminado, como siempre de día, y {eras} podían brillar más que incluso este cielo",skySatellitesDaylightOne:"todo lo que estaba en órbita estaba iluminado, como siempre de día, y {eras} podía brillar más que incluso este cielo",skyUnknown:"no se puede determinar sin una fecha y un lugar",lookAtDecor:"Mirarlo",addDecor:"Añadir",deleteDecor:"Eliminar elemento del decorado",undo:"Deshacer",redo:"Rehacer",viewAccount:"Ver el relato",noObserverRecording:"No hay URL de grabación para este observador",masks:"Oculta",masksNone:"Aún no hay fenómeno que ocultar",masksBodyFully:"oculto por este objeto",masksBodyPartly:"oculto al {share} % por este objeto",masksBodyNot:"no oculto por este objeto",modelPickerTitle:"Elegir un modelo 3D",modelPickerClose:"Cerrar",modelPickerChoose:"Elegir un modelo 3D",modelPickerUse:"Usar este modelo",modelPickerIncomplete:"No se dibuja hasta indicar el nombre y la licencia del modelo",addObserver:"Añadir observador",surveyLabel:"Decorado tomado de un levantamiento",surveySource:"Decorado tomado de",surveyDated:"Levantado el: {dates}.",surveyLaserLabel:"láser",surveyPhotoLabel:"foto aérea",surveyMapLabel:"mapa",surveyLampsLabel:"OpenStreetMap",surveyWarning:"⚠ Este decorado viene de levantamientos del {survey}, posteriores a la observación ({observation}): no es lo que había allí entonces. Consérvalo como referencia, o elimínalo.",surveyRadius:"Radio",surveyRadiusTitle:"Hasta dónde alrededor del observador se consulta el levantamiento, en metros. Un radio mayor trae edificios, puentes y líneas más lejanos; los árboles vienen del láser, que solo se consulta dentro de 150 m.",surveySourceTitle:"El levantamiento del que se toman, por sí solos, los árboles, edificios, puentes y líneas aéreas alrededor del lugar cuando das un lugar al registro: se ponen en la lista, en su lugar, altura y anchura medidos. Las coordenadas del lugar se envían a ese servicio. Ninguno deja el decorado a tu cargo. Lo que colocaste tú nunca se toca.",surveySourceNone:"Ninguno (todo a mano)",surveyBusy:"Buscando el decorado alrededor del observador…",surveyDone:"Según {source}: árboles {trees}, edificios {buildings}, puentes {bridges}, líneas eléctricas {lines}. Son los del día del levantamiento, no los de la grabación: consérvelos, muévalos o elimínelos.",surveyNone:"No se encontró ningún árbol, edificio, puente ni línea eléctrica en un radio de {radius} m.",surveyKept:"Lo que usted colocó se queda como está.",surveyUnreachable:"No se pudo contactar con el levantamiento. Inténtelo más tarde.",surveyFurniturePending:"Alumbrado público y semáforos: esperando a OpenStreetMap…",surveyFurnitureDone:"Según {source}: farolas {lamps}, semáforos {signals}, pasos de peatones {crossings}, señales {signs}.",surveyFurnitureUnavailable:"Alumbrado público y semáforos no disponibles por ahora: OpenStreetMap no responde.",surveyFurnitureRetry:"Reintentar",narrativePlaceholder:"Lo que refirió el observador, con sus propias palabras",narrativeSource:"Redactado por",narrativeNeedsSetting:'Rellena "{setting}" ({source}) para generar una reconstrucción a partir del relato',narrativeNeedsAsk:"Nada que enviar todavía",narrativeRemember:"Recordar en este dispositivo",narrativeDraft:"Generar reconstrucción",narrativeStop:"Detener",narrativeWorking:"Leyendo el relato…",narrativeApplied:"{count} campos escritos en el editor",narrativeUnchanged:"El relato no dice nada que la grabación pueda contener todavía",narrativeStated:"Lo que dijo el observador",narrativeDerived:"Deducido del relato",narrativeAssumed:"Supuesto, para que la reconstrucción funcione — compruébalo",narrativeGaps:"Lo que nada pudo resolver",narrativeErrorCredential:"No hay clave, o fue rechazada — compruébala en console.anthropic.com",narrativeErrorRateLimited:"Demasiadas solicitudes en tu cuenta: espera un momento y vuelve a pedirlo",narrativeErrorRefused:"El relato no obtuvo respuesta. Reformularlo puede ayudar; volver a pedirlo, no",narrativeErrorMalformed:"La respuesta no era un borrador utilizable — vale la pena pedirlo una vez más",narrativeErrorUnreachable:"Nada respondió: revisa la conexión",narrativeErrorRejected:"Rechazado: {detail}",observerAge:"Edad entonces",observerBirth:"Nacido el",observerPerception:{"color-vision":"Visión del color","color-vision.hint":"Cómo se ven los colores con conos distintos (Machado et al. 2009). Solo recolorea: brillo y resolución no cambian.","color-vision.type":"Tipo","color-vision.type.normal":"Típica","color-vision.type.protan":"Protán (rojo débil o ciego)","color-vision.type.deutan":"Deután (verde débil o ciego)","color-vision.type.tritan":"Tritán (azul débil o ciego)","color-vision.severity":"Gravedad",intoxication:"Alcohol","intoxication.hint":"Reduce la sensibilidad al contraste unos 0,9 dB con 0,08 % de alcohol en sangre (un estudio controlado; los resultados varían), mostrado hasta 0,1 % como máximo: un nivel mayor se registra pero se muestra como 0,1 %, ya que nada se midió por encima. La visión doble, el campo reducido y otras drogas no se modelan: ninguna fuente los cuantifica.","intoxication.bloodAlcohol":"Alcoholemia",fatigue:"Fatiga","fatigue.hint":"Solo declarada: no se ha demostrado que la falta de sueño cambie lo que recibe un ojo sano, así que la imagen no cambia. Afecta a la atención y la memoria, no a la vista.","fatigue.hoursAwake":"Despierto desde hace"},observerOccupation:"Profesión",accountSource:"Relato obtenido",accountUrl:"Fuente (URL)",accountSourceUnknown:"desconocido",accountSourceOnSite:"investigación in situ",accountSourceInterview:"entrevista en persona",accountSourceTelephone:"por teléfono",accountSourceQuestionnaire:"cuestionario",accountSourceLetter:"lo escribió el observador",accountSourceSocialMedia:"lo publicó el observador en internet",accountSourcePress:"prensa o radiodifusión",accountFollowedUp:"Recontactado",accountUnknown:"desconocido",accountYes:"sí",accountNo:"no",questionUnanswered:"Nada en esta grabación responde a una de las preguntas que una reconstrucción necesita resolver",durationRequired:"La observación necesita una duración para poder reproducirse — indícala, o una hora de fin, que puede ser aproximada",questionsUnanswered:"{count} de las preguntas que responde una reconstrucción completa quedan sin respuesta aquí"};export{a as sightingEditorMessages_es};
12
+ Terminar con ? si es incierto, ~ si es aproximado, % para ambos`,edtfModeTitle:"Escribe en su lugar una fecha imprecisa: solo un año, un mes, una hora sin fecha",locationGroup:"Posición",observationGroup:"Resumen",weatherWhilePlaying:"Pausa la grabación para indicar el tiempo — mientras se reproduce, el instante en que se escribiría se está moviendo",weatherInferred:"Según los registros",weatherInferredTitle:"La meteorología no es un relato: es un hecho medible, registrado para la fecha, la hora y el lugar de la observación. Desmarca para indicar las condiciones que refirió el observador, que entonces prevalecen sobre el registro.",weatherLookingUp:"Buscando el registro…",weatherNeedsDateAndPlace:"Se necesitan una fecha completa y un lugar para buscar el registro",weatherNeedsDate:"Se necesita una fecha completa (año, mes y día) para buscar los registros meteorológicos",weatherNeedsPlace:"Se necesita un lugar con coordenadas para buscar los registros meteorológicos",weatherNoRecord:"Ningún registro para esta fecha y este lugar",weatherLookupFailed:"Registros meteorológicos inaccesibles por el momento",lightPollutionLookingUp:"Consultando el atlas…",lightPollutionFound:"{artificial} µcd/m² de luz artificial,",lightPollutionNatural:"Ninguna luz artificial aquí,",lightPollutionOutside:"Fuera del atlas (85°N a 60°S),",lightPollutionFailed:"Atlas inaccesible por ahora",lightPollutionTooEarly:"El atlas describe {atlasYear}; el cielo de {year} era más oscuro, indíquelo si se conoce",instrumentOutOfPeriod:"{name} — no es de esta fecha",instrumentCategoryEye:"Ojo desnudo",instrumentCategoryCamera:"Cámaras",instrumentCategoryDslr:"Réflex digitales",instrumentCategoryPhone:"Teléfonos",instrumentCategoryBinoculars:"Prismáticos",instrumentCategoryTelescope:"Telescopios",instrumentNotYetOnSale:"Aún no existía en {year} (a la venta desde {from})",instrumentNoLongerOnSale:"Ya no existía en {year} (a la venta hasta {to})",filterNotForInstrument:"No se puede usar con este instrumento",unitMillimetres:"mm",unitDegrees:"°",fieldOfViewReadout:"{deg}° de campo",soundSrcPlaceholder:"URL de una grabación real",referenceGroup:"Fotos",reference:"Foto",referenceTitle:"Nombre",referenceSrc:"Dirección",referenceSrcPlaceholder:"https://…/photo.jpg",referenceKind:"Tipo",referencePhoto:"Foto",referencePanorama:"Panorama (360°)",referenceCredit:"Crédito",referenceCreditUrl:"Enlace del crédito",referenceT:"Tomada en",referenceDrawing:"Dibujo encima",referenceOpacity:"Opacidad",referenceHeading:"Rumbo",referencePitch:"Cabeceo",referenceRoll:"Alabeo",referenceFov:"Campo vertical",referenceUsePose:"Usar la pose del observador",addReferenceUrl:"Añadir desde una dirección",addReferenceFile:"Añadir un archivo",deleteReference:"Eliminar foto",referenceEmbedded:"{kb} kB incrustados en la grabación — una dirección la mantendría ligera",referenceUnreachable:"No se pudo cargar la foto: revisa la dirección y que su sitio permita que otros sitios la lean",referenceRegisterHint:"Arrastra para girar la foto, rueda para cambiar su campo; «Añadir un punto de referencia» para señalar un detalle en la foto y luego el mismo en el render",referenceLandmarkPicture:"Punto de referencia {n}: haz clic en el punto de la foto",referenceLandmarkScene:"Punto de referencia {n}: haz clic en el mismo punto del render",referenceLandmarkOffPicture:"Ese clic no cae en la foto",referenceNotLoaded:"La foto aún no ha llegado",referenceLandmarksFit:"{n} puntos de referencia — desviación media de {deg}°",referenceLandmarks:"Puntos de referencia",addReferenceLandmark:"Añadir un punto de referencia",deleteReferenceLandmark:"Eliminar punto de referencia",referenceLandmarkLabel:"Nombre",referenceLandmarkLabelPlaceholder:"Árbol que tapa, valla…",referenceAdoptPose:"Adoptar como pose del observador",referenceAdoptRationale:"Medido en la foto «{title}»: {n} puntos de referencia alineados, {deg}° de desviación residual",referenceStreetSearch:"Fotos a pie de calle cercanas",referenceStreetSearching:"Buscando fotos tomadas cerca…",referenceStreetNone:"Ninguna foto a pie de calle a menos de {m} m (Panoramax)",referenceStreetFailed:"No se pudo contactar con Panoramax",referenceStreetAdd:"Añadir",traceImport:"Trazos del investigador (KML, KMZ)",trace:"Trazo",deleteTrace:"Eliminar el trazo",traceTitle:"Nombre",traceSource:"Fuente",traceImported:"{n} importado(s) de {name}.",traceSkipped:"Omitido: {what}.",traceNone:"Ninguna línea, lugar ni contorno en este archivo.",traceFailed:"No se pudo leer este archivo.",traceKindPoint:"lugar",traceKindLine:"línea",traceKindPolygon:"contorno",referenceStreetItem:"{distance} m a {bearing}°, {date}{panorama}",referenceStreetPanorama:" — 360°",referenceStreetTitle:"Foto a pie de calle a {distance} m a {bearing}°, {date}",skyLine:"Cielo: {parts}",skyStarsEye:"estrellas hasta la magnitud {limit}, lo más tenue que alcanzaba un ojo bajo este cielo",skyStarsDeeper:"estrellas hasta la magnitud {limit} a través de un {device} — {gain} magnitudes más allá de las {eye} que alcanzaban los ojos del observador",skyStarsShallower:"estrellas hasta la magnitud {limit} a través de un {device} — {gain} magnitudes por debajo de las {eye} que alcanzaban los ojos del observador",skyStarsCatalogue:", dibujadas hasta {catalogue}, donde se detiene el catálogo de este proyecto",skyStarsNone:"ninguna estrella se distinguía en un cielo tan claro",skyDetails:"Ver los registros completos",skyDetailsHide:"Ocultar los registros",skyShowerActive:"{name} — radiante a {altitude}° sobre el horizonte, {bearing} — unos {rate}/h bajo este cielo, sobre un fondo esporádico de {sporadic}/h",skyShowerBelowHorizon:"{name} está activa, pero su radiante está bajo el horizonte — no ha podido producir nada",skyNothingActive:"ninguna lluvia de meteoros activa en esta fecha — un fondo esporádico de unos {sporadic}/h",showMeteor:"Muéstrame uno",skyComet:"El {name}, magnitud {magnitude}, a {altitude}° sobre el horizonte {bearing}, cola de {tail}° de largo",skyCometNoTail:"El {name}, magnitud {magnitude}, a {altitude}° sobre el horizonte {bearing}",skyCometBelowHorizon:"El {name} estaba ahí, de magnitud {magnitude}, pero bajo el horizonte — nadie aquí lo vio",skyCometInDaylight:"El {name}, magnitud {magnitude}, a {altitude}° sobre el horizonte {bearing} — pero a solo {elongation}° del Sol",showComet:"Muéstrame el cometa",skyNova:"La {name}, una estrella nueva de magnitud {magnitude}, a {altitude}° sobre el horizonte {bearing}",skyNovaBelowHorizon:"La {name} brillaba con magnitud {magnitude}, pero bajo el horizonte: nadie aquí la vio",showNova:"Muéstrame la estrella nueva",skyEclipsePartial:"Eclipse de Sol: la Luna oculta el {percent} % del Sol a las {time}, a {altitude}° sobre el horizonte {bearing}",skyEclipseTotal:"Eclipse total de Sol: el Sol queda totalmente oculto desde las {time} durante {duration}, a {altitude}° sobre el horizonte {bearing}",skySupermoon:"Luna llena a {distance} km: {diameter}° de ancho, un {percent} % más que a su distancia media — una «superluna», y no más grande en el horizonte que en lo alto",skyMicromoon:"Luna llena a {distance} km: {diameter}° de ancho, un {percent} % menos que a su distancia media — una «microluna», y no más pequeña en el horizonte que en lo alto",skyRedMoon:"La «lune rousse»: la Luna llena de la lunación que sigue a la Pascua, a {altitude}° sobre el horizonte {bearing} — baja, y por eso enrojecida por el aire que atraviesa, y ni más grande ni más brillante que otra",skySatellitePasses:"{count} satélites cruzaron este cielo con brillo suficiente para ser vistos, el más brillante {name}, magnitud {magnitude}, a {altitude}° sobre el horizonte {bearing} a las {time}",skySatellitePassesOne:"un satélite cruzó este cielo con brillo suficiente para ser visto: {name}, magnitud {magnitude}, a {altitude}° sobre el horizonte {bearing} a las {time}",skySatelliteTrain:"entre ellos un tren de {count} Starlink lanzados el {date}",skySatellitePassesNone:"según los elementos orbitales archivados para esa fecha, ningún satélite iluminado cruzó este cielo con brillo suficiente para ser visto",skySatelliteElementsGap:"ningún elemento orbital archivado cerca de esa fecha",skyReentries:"reentradas registradas: {list}",skyReentriesMore:"{count} más",skyReentrySeen:"{name} cayó a las {time}, visto desde {place} (a {distance} km)",skyReentryObserved:"{name} cayó a las {time}, visto",skyReentryOffset:", a {minutes} min de la observación",skyReentryPredicted:"{name} cayó hacia las {time} ± {hours} h, no se sabe dónde",skyReentryDay:"{name} cayó el {date} (UTC), sin hora ni lugar conocidos",skyFireballs:"{count} bólidos registrados por la Global Meteor Network, el más brillante de magnitud {magnitude} a las {time}, a {altitude}° de altura {bearing}, a {distance} km ({stations} estaciones)",skyFireballsOne:"un bólido registrado por la Global Meteor Network: magnitud {magnitude} a las {time}, a {altitude}° de altura {bearing}, a {distance} km ({stations} estaciones)",showFireball:"Mostrar el bólido",showSatellite:"Muéstrame un satélite",skyOpticsPossible:"nubes de hielo suficientes, alrededor {source}, para {forms}",skyOpticsAlignment:" — todo salvo los anillos necesita cristales que caigan horizontales, aquí supuestos alineados al {alignment} %, ya que ningún registro lo da",skyOpticsHalo22:"un anillo de {angle}°",skyOpticsHalo46:"un anillo de {angle}°",skyOpticsParhelia:"parhelios a {angle}° a cada lado",skyOpticsTangentArc:"un arco tangente encima",skyOpticsParhelicCircle:"un círculo blanco que da la vuelta al cielo a su misma altura",skyOpticsCircumzenithal:"un arco circuncenital a {angle}° de altura",skyOpticsCircumhorizontal:"un arco circunhorizontal muy por debajo",skyOpticsPillar:"un pilar alzado sobre él",skyOpticsNoIce:"sin nubes de hielo: ni halo ni parhelios",skyOpticsHidden:"nubes de hielo en altura, pero una capa más baja entre ellas y el observador",skyOpticsSun:"del Sol",skyOpticsMoon:"de la Luna",skyBowPossible:"lluvia y sol suficientes para {forms}",skyBowMoon:"lluvia bajo una Luna iluminada al {lit} %, suficiente para {forms} — un arcoíris lunar, que el ojo ve como un arco blanco",skyGlowBand:"la Vía Láctea a {contrast}× el fondo del cielo, a {altitude}° de altura {bearing}",skyGlowCone:"la luz zodiacal a {contrast}× el fondo del cielo, a {altitude}° de altura {bearing}, a {elongation}° del Sol — un tenue cono de luz inclinado, de bordes difusos, desaparecido en menos de una hora",skyGlowZodiacalBand:"la banda zodiacal a {contrast}× el fondo del cielo, a {altitude}° de altura {bearing} — toda la eclíptica débilmente encendida, que no es lo que la gente cuenta",skyGlowMoon:"ni Vía Láctea ni luz zodiacal: una Luna iluminada al {lit} % mantenía el cielo en {sky} magnitudes por segundo de arco cuadrado, cuando necesitan 22",skyGlowTwilight:"ni Vía Láctea ni luz zodiacal: el crepúsculo aún mantenía el cielo en {sky} magnitudes por segundo de arco cuadrado, cuando necesitan 22",skyGlowTowns:"ni Vía Láctea ni luz zodiacal: el resplandor de las ciudades mantenía el cielo en {sky} magnitudes por segundo de arco cuadrado, cuando necesitan 22",skyGlowNothingUp:"cielo bastante oscuro ({sky} magnitudes por segundo de arco cuadrado), pero ni el plano galáctico ni la eclíptica estaban lo bastante altos en él",skyBowPrimary:"un arco de {radius}° de radio, con la cima a {top}° de altura",skyBowSecondary:"un segundo, más tenue, a {radius}°, con los colores invertidos",skyBowSourceTooHigh:"lluvia, pero con el astro a {altitude}° de altura ningún arco podía asomar sobre el horizonte: se sitúan a {radius}° del punto opuesto",skyBowHidden:"lluvia, pero una capa continua entre ella y la luz: ningún arco",skyBowNoSource:"lluvia, y nada iluminado para formar un arco con ella",skySatellitesLit:"la sombra de la Tierra estaba a {height} km sobre el observador, así que la órbita baja seguía al sol — {count} objetos catalogados estaban en órbita ese mes",skySatellitesLitWith:"la sombra de la Tierra estaba a {height} km sobre el observador, así que la órbita baja seguía al sol — {count} objetos catalogados estaban en órbita ese mes, entre ellos {eras}",skySatellitesShadowed:"la sombra de la Tierra estaba a {height} km sobre el observador: de los {count} objetos catalogados en órbita ese mes, nada en órbita baja estaba iluminado",skySatellitesNotYet:"aún no se había puesto nada en órbita",skySatellitesDaylight:"todo lo que estaba en órbita estaba iluminado, como siempre de día, y {eras} podían brillar más que incluso este cielo",skySatellitesDaylightOne:"todo lo que estaba en órbita estaba iluminado, como siempre de día, y {eras} podía brillar más que incluso este cielo",skyUnknown:"no se puede determinar sin una fecha y un lugar",lookAtDecor:"Mirarlo",addDecor:"Añadir",deleteDecor:"Eliminar elemento del decorado",undo:"Deshacer",redo:"Rehacer",viewAccount:"Ver el relato",noObserverRecording:"No hay URL de grabación para este observador",masks:"Oculta",masksNone:"Aún no hay fenómeno que ocultar",masksBodyFully:"oculto por este objeto",masksBodyPartly:"oculto al {share} % por este objeto",masksBodyNot:"no oculto por este objeto",modelPickerTitle:"Elegir un modelo 3D",modelPickerClose:"Cerrar",modelPickerChoose:"Elegir un modelo 3D",modelPickerUse:"Usar este modelo",modelPickerIncomplete:"No se dibuja hasta indicar el nombre y la licencia del modelo",addObserver:"Añadir observador",surveyLabel:"Decorado tomado de un levantamiento",surveySource:"Decorado tomado de",surveyDated:"Levantado el: {dates}.",surveyLaserLabel:"láser",surveyPhotoLabel:"foto aérea",surveyMapLabel:"mapa",surveyLampsLabel:"OpenStreetMap",surveyWarning:"⚠ Este decorado viene de levantamientos del {survey}, posteriores a la observación ({observation}): no es lo que había allí entonces. Consérvalo como referencia, o elimínalo.",surveyRadius:"Radio",surveyRadiusTitle:"Hasta dónde alrededor del observador se consulta el levantamiento, en metros. Un radio mayor trae edificios, puentes y líneas más lejanos; los árboles vienen del láser, que solo se consulta dentro de 150 m.",surveySourceTitle:"El levantamiento del que se toman, por sí solos, los árboles, edificios, puentes y líneas aéreas alrededor del lugar cuando das un lugar al registro: se ponen en la lista, en su lugar, altura y anchura medidos. Las coordenadas del lugar se envían a ese servicio. Ninguno deja el decorado a tu cargo. Lo que colocaste tú nunca se toca.",surveySourceNone:"Ninguno (todo a mano)",surveyBusy:"Buscando el decorado alrededor del observador…",surveyDone:"Según {source}: árboles {trees}, edificios {buildings}, puentes {bridges}, líneas eléctricas {lines}. Son los del día del levantamiento, no los de la grabación: consérvelos, muévalos o elimínelos.",surveyNone:"No se encontró ningún árbol, edificio, puente ni línea eléctrica en un radio de {radius} m.",surveyKept:"Lo que usted colocó se queda como está.",surveyUnreachable:"No se pudo contactar con el levantamiento. Inténtelo más tarde.",surveyFurniturePending:"Alumbrado público y semáforos: esperando a OpenStreetMap…",surveyFurnitureDone:"Según {source}: farolas {lamps}, semáforos {signals}, pasos de peatones {crossings}, señales {signs}.",surveyFurnitureUnavailable:"Alumbrado público y semáforos no disponibles por ahora: OpenStreetMap no responde.",surveyFurnitureRetry:"Reintentar",narrativePlaceholder:"Lo que refirió el observador, con sus propias palabras",narrativeSource:"Redactado por",narrativeNeedsSetting:'Rellena "{setting}" ({source}) para generar una reconstrucción a partir del relato',narrativeNeedsAsk:"Nada que enviar todavía",narrativeRemember:"Recordar en este dispositivo",narrativeDraft:"Generar reconstrucción",narrativeStop:"Detener",narrativeWorking:"Leyendo el relato…",narrativeApplied:"{count} campos escritos en el editor",narrativeUnchanged:"El relato no dice nada que la grabación pueda contener todavía",narrativeStated:"Lo que dijo el observador",narrativeDerived:"Deducido del relato",narrativeAssumed:"Supuesto, para que la reconstrucción funcione — compruébalo",narrativeGaps:"Lo que nada pudo resolver",narrativeErrorCredential:"No hay clave, o fue rechazada — compruébala en console.anthropic.com",narrativeErrorRateLimited:"Demasiadas solicitudes en tu cuenta: espera un momento y vuelve a pedirlo",narrativeErrorRefused:"El relato no obtuvo respuesta. Reformularlo puede ayudar; volver a pedirlo, no",narrativeErrorMalformed:"La respuesta no era un borrador utilizable — vale la pena pedirlo una vez más",narrativeErrorUnreachable:"Nada respondió: revisa la conexión",narrativeErrorRejected:"Rechazado: {detail}",observerAge:"Edad entonces",observerBirth:"Nacido el",observerPerception:{"color-vision":"Visión del color","color-vision.hint":"Cómo se ven los colores con conos distintos (Machado et al. 2009). Solo recolorea: brillo y resolución no cambian.","color-vision.type":"Tipo","color-vision.type.normal":"Típica","color-vision.type.protan":"Protán (rojo débil o ciego)","color-vision.type.deutan":"Deután (verde débil o ciego)","color-vision.type.tritan":"Tritán (azul débil o ciego)","color-vision.severity":"Gravedad",intoxication:"Alcohol","intoxication.hint":"Reduce la sensibilidad al contraste unos 0,9 dB con 0,08 % de alcohol en sangre (un estudio controlado; los resultados varían), mostrado hasta 0,1 % como máximo: un nivel mayor se registra pero se muestra como 0,1 %, ya que nada se midió por encima. La visión doble, el campo reducido y otras drogas no se modelan: ninguna fuente los cuantifica.","intoxication.bloodAlcohol":"Alcoholemia",fatigue:"Fatiga","fatigue.hint":"Solo declarada: no se ha demostrado que la falta de sueño cambie lo que recibe un ojo sano, así que la imagen no cambia. Afecta a la atención y la memoria, no a la vista.","fatigue.hoursAwake":"Despierto desde hace"},observerOccupation:"Profesión",accountSource:"Relato obtenido",accountUrl:"Fuente (URL)",accountSourceUnknown:"desconocido",accountSourceOnSite:"investigación in situ",accountSourceInterview:"entrevista en persona",accountSourceTelephone:"por teléfono",accountSourceQuestionnaire:"cuestionario",accountSourceLetter:"lo escribió el observador",accountSourceSocialMedia:"lo publicó el observador en internet",accountSourcePress:"prensa o radiodifusión",accountFollowedUp:"Recontactado",accountUnknown:"desconocido",accountYes:"sí",accountNo:"no",questionUnanswered:"Nada en esta grabación responde a una de las preguntas que una reconstrucción necesita resolver",durationRequired:"La observación necesita una duración para poder reproducirse — indícala, o una hora de fin, que puede ser aproximada",questionsUnanswered:"{count} de las preguntas que responde una reconstrucción completa quedan sin respuesta aquí",emptyDecor:"Ningún elemento del decorado",emptyMilestones:"Ningún momento",emptyReferences:"Ninguna foto",emptyReferenceLandmarks:"Ningún punto de referencia",emptyTraces:"Ningún trazado del investigador",emptyShapes:"Ninguna forma",addReference:"Añadir una foto",principalObserver:"Observador de este relato",deleteObserver:"Eliminar el observador"};export{a as sightingEditorMessages_es};
@@ -9,4 +9,4 @@ Finir par ? si incertain, ~ si approximatif, % pour les deux
9
9
  1965-07-01 — un jour
10
10
  1965-07-01T05:00 — un jour et une heure
11
11
  05:00 — une heure, date inconnue
12
- Finir par ? si incertain, ~ si approximatif, % pour les deux`,edtfModeTitle:"Saisir plutôt une date imprécise : une année seule, un mois, une heure sans date",locationGroup:"Position",observationGroup:"Résumé",weatherWhilePlaying:"Mettez la lecture en pause pour décrire le temps — pendant qu'elle tourne, l'instant où ceci s'écrirait se déplace",weatherInferred:"D'après les relevés",weatherInferredTitle:"La météo n'est pas un compte rendu : c'est un fait mesurable, relevé pour la date, l'heure et le lieu de l'observation. Décochez pour saisir les conditions rapportées par l'observateur, qui priment alors sur le relevé.",weatherLookingUp:"Recherche du relevé…",weatherNeedsDateAndPlace:"Date complète et lieu requis pour retrouver le relevé",weatherNeedsDate:"Une date complète (année, mois et jour) est requise pour retrouver les relevés météo",weatherNeedsPlace:"Un lieu avec ses coordonnées est requis pour retrouver les relevés météo",weatherNoRecord:"Aucun relevé pour cette date et ce lieu",weatherLookupFailed:"Relevés météo momentanément inaccessibles",lightPollutionLookingUp:"Consultation de l'atlas…",lightPollutionFound:"{artificial} µcd/m² de lumière artificielle,",lightPollutionNatural:"Aucune lumière artificielle ici,",lightPollutionOutside:"Hors de l'atlas (85°N à 60°S),",lightPollutionFailed:"Atlas momentanément inaccessible",lightPollutionTooEarly:"L'atlas décrit {atlasYear} ; le ciel de {year} était plus sombre, à indiquer s'il est connu",instrumentOutOfPeriod:"{name} — hors de son époque",instrumentCategoryEye:"Œil nu",instrumentCategoryCamera:"Appareils photo",instrumentCategoryDslr:"Reflex numériques",instrumentCategoryPhone:"Téléphones",instrumentCategoryBinoculars:"Jumelles",instrumentCategoryTelescope:"Télescopes",instrumentNotYetOnSale:"N'existait pas encore en {year} (en vente à partir de {from})",instrumentNoLongerOnSale:"N'existait plus en {year} (en vente jusqu'en {to})",filterNotForInstrument:"Inutilisable avec cet instrument",unitMillimetres:"mm",unitDegrees:"°",fieldOfViewReadout:"{deg}° de champ",soundSrcPlaceholder:"URL d'un enregistrement réel",referenceGroup:"Photos",reference:"Photo",referenceTitle:"Nom",referenceSrc:"Adresse",referenceSrcPlaceholder:"https://…/photo.jpg",referenceKind:"Type",referencePhoto:"Photo",referencePanorama:"Panorama (360°)",referenceCredit:"Crédit",referenceCreditUrl:"Lien du crédit",referenceT:"Prise à",referenceDrawing:"Dessin par-dessus",referenceOpacity:"Opacité",referenceHeading:"Cap",referencePitch:"Assiette",referenceRoll:"Roulis",referenceFov:"Champ vertical",referenceUsePose:"Prendre la pose de l'observateur",addReferenceUrl:"Ajouter depuis une adresse",addReferenceFile:"Ajouter un fichier",deleteReference:"Supprimer la photo",referenceEmbedded:"{kb} ko embarqués dans l'enregistrement — une adresse le garderait léger",referenceUnreachable:"La photo n'a pas pu être chargée : vérifiez l'adresse, et que son site autorise les autres sites à la lire",referenceRegisterHint:"Glissez pour orienter la photo, molette pour son champ ; « Ajouter un repère » pour pointer un détail sur la photo, puis le même dans le rendu",referenceLandmarkPicture:"Repère {n} : cliquez le point sur la photo",referenceLandmarkScene:"Repère {n} : cliquez le même point dans le rendu",referenceLandmarkOffPicture:"Ce clic ne tombe pas sur la photo",referenceNotLoaded:"La photo n'est pas encore arrivée",referenceLandmarksFit:"{n} repères — écart moyen {deg}°",referenceLandmarks:"Repères",addReferenceLandmark:"Ajouter un repère",deleteReferenceLandmark:"Supprimer le repère",referenceLandmarkLabel:"Nom",referenceLandmarkLabelPlaceholder:"Arbre masquant, barrière…",referenceAdoptPose:"Adopter comme pose de l'observateur",referenceAdoptRationale:"Mesuré sur la photo « {title} » : {n} repères recalés, {deg}° d'écart résiduel",referenceStreetSearch:"Photos de rue à proximité",referenceStreetSearching:"Recherche de photos prises à proximité…",referenceStreetNone:"Aucune photo de rue à moins de {m} m (Panoramax)",referenceStreetFailed:"Panoramax est injoignable",referenceStreetAdd:"Ajouter",traceImport:"Tracés d'enquêteur (KML, KMZ)",trace:"Tracé",deleteTrace:"Supprimer le tracé",traceTitle:"Nom",traceSource:"Source",traceImported:"{n} importé(s) depuis {name}.",traceSkipped:"Écarté : {what}.",traceNone:"Aucune ligne, aucun lieu ni contour dans ce fichier.",traceFailed:"Ce fichier n'a pas pu être lu.",traceKindPoint:"lieu",traceKindLine:"ligne",traceKindPolygon:"contour",referenceStreetItem:"{distance} m au {bearing}°, {date}{panorama}",referenceStreetPanorama:" — 360°",referenceStreetTitle:"Photo de rue à {distance} m au {bearing}°, {date}",skyLine:"Ciel : {parts}",skyStarsEye:"étoiles jusqu'à la magnitude {limit}, ce que l'œil atteignait sous ce ciel",skyStarsDeeper:"étoiles jusqu'à la magnitude {limit} à travers un {device} — {gain} magnitudes au-delà des {eye} qu'atteignaient les yeux de l'observateur",skyStarsShallower:"étoiles jusqu'à la magnitude {limit} à travers un {device} — {gain} magnitudes en deçà des {eye} qu'atteignaient les yeux de l'observateur",skyStarsCatalogue:", dessinées jusqu'à {catalogue}, où s'arrête le catalogue de ce projet",skyStarsNone:"aucune étoile ne se détachait d'un ciel aussi clair",skyDetails:"Voir le détail des relevés",skyDetailsHide:"Masquer le détail des relevés",skyShowerActive:"{name} — radiant à {altitude}° de hauteur, {bearing} — environ {rate}/h sous ce ciel, sur un fond sporadique de {sporadic}/h",skyShowerBelowHorizon:"{name} est actif, mais son radiant est sous l'horizon — il n'a rien pu produire",skyNothingActive:"aucune pluie de météores active à cette date — un fond sporadique d'environ {sporadic}/h",showMeteor:"Montrer un météore",skyComet:"La {name}, magnitude {magnitude}, à {altitude}° de hauteur {bearing}, queue longue de {tail}°",skyCometNoTail:"La {name}, magnitude {magnitude}, à {altitude}° de hauteur {bearing}",skyCometBelowHorizon:"La {name} était là, magnitude {magnitude}, mais sous l'horizon — personne ici ne l'a vue",skyCometInDaylight:"La {name}, magnitude {magnitude}, à {altitude}° de hauteur {bearing} — mais à {elongation}° du Soleil seulement",showComet:"Montrer la comète",skyNova:"La {name}, étoile nouvelle de magnitude {magnitude}, à {altitude}° de hauteur {bearing}",skyNovaBelowHorizon:"La {name} brillait, magnitude {magnitude}, mais sous l'horizon : personne ici ne l'a vue",showNova:"Montrer l'étoile nouvelle",skyEclipsePartial:"Éclipse de Soleil : la Lune cache {percent} % du Soleil à {time}, à {altitude}° de hauteur {bearing}",skyEclipseTotal:"Éclipse totale de Soleil : le Soleil est entièrement caché à partir de {time} pendant {duration}, à {altitude}° de hauteur {bearing}",skySupermoon:"Pleine Lune à {distance} km : {diameter}° de large, {percent} % de plus qu'à sa distance moyenne — une « super-lune », et pas plus grosse à l'horizon qu'au zénith",skyMicromoon:"Pleine Lune à {distance} km : {diameter}° de large, {percent} % de moins qu'à sa distance moyenne — une « micro-lune », et pas plus petite à l'horizon qu'au zénith",skyRedMoon:"La « lune rousse » : la pleine Lune de la lunaison qui suit Pâques, à {altitude}° de hauteur {bearing} — basse, donc rougie par l'air qu'elle traverse, et ni plus grosse ni plus brillante qu'une autre",skySatellitePasses:"{count} satellites ont traversé ce ciel assez brillants pour être vus, le plus brillant {name}, magnitude {magnitude}, à {altitude}° de hauteur {bearing} à {time}",skySatellitePassesOne:"un satellite a traversé ce ciel assez brillant pour être vu : {name}, magnitude {magnitude}, à {altitude}° de hauteur {bearing} à {time}",skySatelliteTrain:"dont un train de {count} Starlink lancés le {date}",skySatellitePassesNone:"d'après les éléments orbitaux archivés pour cette date, aucun satellite éclairé n'a traversé ce ciel assez brillant pour être vu",skySatelliteElementsGap:"aucun élément orbital archivé près de cette date",skyReentries:"rentrées au registre : {list}",skyReentriesMore:"{count} autres",skyReentrySeen:"{name} est retombé à {time}, vu depuis {place} (à {distance} km)",skyReentryObserved:"{name} est retombé à {time}, vu",skyReentryOffset:", à {minutes} min de l'observation",skyReentryPredicted:"{name} est retombé vers {time} ± {hours} h, on ne sait où",skyReentryDay:"{name} est retombé le {date} (UTC), ni l'heure ni le lieu connus",skyFireballs:"{count} bolides enregistrés par le Global Meteor Network, le plus brillant de magnitude {magnitude} à {time}, à {altitude}° de hauteur {bearing}, à {distance} km ({stations} stations)",skyFireballsOne:"un bolide enregistré par le Global Meteor Network : magnitude {magnitude} à {time}, à {altitude}° de hauteur {bearing}, à {distance} km ({stations} stations)",showFireball:"Montrer le bolide",showSatellite:"Montrer un satellite",skyOpticsPossible:"nuages de glace suffisants, autour {source}, pour {forms}",skyOpticsAlignment:" — tout sauf les halos exige des cristaux tombant à plat, ici supposés alignés à {alignment} %, qu'aucun relevé ne donne",skyOpticsHalo22:"un halo à {angle}°",skyOpticsHalo46:"un halo à {angle}°",skyOpticsParhelia:"des parhélies à {angle}° de part et d'autre",skyOpticsTangentArc:"un arc tangent au sommet",skyOpticsParhelicCircle:"un cercle parhélique blanc faisant le tour du ciel à sa hauteur",skyOpticsCircumzenithal:"un arc circumzénithal à {angle}° de hauteur",skyOpticsCircumhorizontal:"un arc circumhorizontal très au-dessous",skyOpticsPillar:"un pilier dressé au-dessus",skyOpticsNoIce:"aucun nuage de glace : ni halo ni parhélie",skyOpticsHidden:"des nuages de glace en altitude, mais une couche plus basse les cache",skyOpticsSun:"du Soleil",skyOpticsMoon:"de la Lune",skyBowPossible:"pluie et soleil suffisants pour {forms}",skyBowMoon:"pluie sous une Lune éclairée à {lit} %, de quoi former {forms} — un arc-en-ciel lunaire, que l'œil voit blanc",skyGlowBand:"la Voie lactée à {contrast}× le fond du ciel, à {altitude}° de hauteur {bearing}",skyGlowCone:"la lumière zodiacale à {contrast}× le fond du ciel, à {altitude}° de hauteur {bearing}, à {elongation}° du Soleil — une lueur en cône incliné, aux contours flous, disparue en moins d'une heure",skyGlowZodiacalBand:"la bande zodiacale à {contrast}× le fond du ciel, à {altitude}° de hauteur {bearing} — toute l'écliptique faiblement allumée, ce qui n'est pas ce que les gens rapportent",skyGlowMoon:"ni Voie lactée ni lumière zodiacale : une Lune éclairée à {lit} % tenait le ciel à {sky} magnitudes par seconde d'arc, là où il leur en faut 22",skyGlowTwilight:"ni Voie lactée ni lumière zodiacale : le crépuscule tenait encore le ciel à {sky} magnitudes par seconde d'arc, là où il leur en faut 22",skyGlowTowns:"ni Voie lactée ni lumière zodiacale : la lueur des villes tenait le ciel à {sky} magnitudes par seconde d'arc, là où il leur en faut 22",skyGlowNothingUp:"ciel assez noir ({sky} magnitudes par seconde d'arc), mais ni le plan de la Galaxie ni l'écliptique ne s'y tenaient assez haut",skyBowPrimary:"un arc de {radius}° de rayon, dont le sommet montait à {top}°",skyBowSecondary:"un second, plus pâle, à {radius}°, aux couleurs inversées",skyBowSourceTooHigh:"pluie, mais l'astre à {altitude}° de hauteur : aucun arc ne pouvait dépasser l'horizon, ils se tiennent à {radius}° du point opposé",skyBowHidden:"pluie, mais une couche continue entre elle et la lumière : aucun arc",skyBowNoSource:"pluie, et rien d'allumé pour en tirer un arc",skySatellitesLit:"l'ombre de la Terre montait à {height} km au-dessus de l'observateur, l'orbite basse était donc encore éclairée — {count} objets suivis étaient en orbite ce mois-là",skySatellitesLitWith:"l'ombre de la Terre montait à {height} km au-dessus de l'observateur, l'orbite basse était donc encore éclairée — {count} objets suivis étaient en orbite ce mois-là, dont {eras}",skySatellitesShadowed:"l'ombre de la Terre montait à {height} km au-dessus de l'observateur : sur les {count} objets suivis en orbite ce mois-là, rien en orbite basse n'était éclairé",skySatellitesNotYet:"rien n'était encore en orbite",skySatellitesDaylight:"tout ce qui est en orbite était éclairé, comme toujours de jour, et {eras} pouvaient l'emporter même sur ce ciel",skySatellitesDaylightOne:"tout ce qui est en orbite était éclairé, comme toujours de jour, et {eras} pouvait l'emporter même sur ce ciel",skyUnknown:"indéterminable sans date ni lieu",lookAtDecor:"Regarder cet élément",addDecor:"Ajouter",deleteDecor:"Supprimer l'élément de décor",undo:"Annuler",redo:"Rétablir",viewAccount:"Voir le compte rendu",noObserverRecording:"Aucune URL d'enregistrement définie pour cet observateur",masks:"Masque",masksNone:"Aucun phénomène à masquer pour l'instant",masksBodyFully:"masqué par cet objet",masksBodyPartly:"masqué à {share} % par cet objet",masksBodyNot:"non masqué par cet objet",modelPickerTitle:"Choisir un modèle 3D",modelPickerClose:"Fermer",modelPickerChoose:"Choisir un modèle 3D",modelPickerUse:"Utiliser ce modèle",modelPickerIncomplete:"Non dessiné tant que le nom et la licence du modèle ne sont pas donnés",addObserver:"Ajouter un observateur",surveyLabel:"Décor tiré d'un relevé",surveySource:"Décor tiré de",surveyDated:"Relevés du : {dates}.",surveyLaserLabel:"laser",surveyPhotoLabel:"photo aérienne",surveyMapLabel:"carte",surveyLampsLabel:"OpenStreetMap",surveyWarning:"⚠ Ce décor vient de relevés du {survey}, postérieurs à l'observation ({observation}) : ce n'est pas ce qui se tenait là alors. Gardez-le comme repère, ou supprimez-le.",surveyRadius:"Rayon",surveyRadiusTitle:"Jusqu'où autour de l'observateur le relevé est interrogé, en mètres. Un rayon plus large ramène des bâtiments, ponts et lignes plus éloignés ; les arbres viennent du laser, qui n'est interrogé que dans 150 m.",surveySourceTitle:"Le relevé d'où sont tirés, tout seuls, les arbres, bâtiments, ponts et lignes aériennes autour du lieu quand vous donnez un lieu à l'enregistrement : ils sont mis dans la liste, à leur place, leur hauteur et leur largeur mesurées. Les coordonnées du lieu sont envoyées à ce service. Aucun laisse le décor à vous seul. Ce que vous avez placé vous-même n'est jamais touché.",surveySourceNone:"Aucun (tout à la main)",surveyBusy:"Recherche du décor autour de l'observateur…",surveyDone:"D'après {source} : arbres {trees}, bâtiments {buildings}, ponts {bridges}, lignes électriques {lines}. Ce sont ceux du jour du relevé, pas ceux de l'enregistrement : gardez-les, déplacez-les ou supprimez-les.",surveyNone:"Aucun arbre, bâtiment, pont ni ligne électrique trouvé dans un rayon de {radius} m.",surveyKept:"Ce que vous avez placé vous-même reste tel quel.",surveyUnreachable:"Le relevé n'a pas pu être joint. Réessayez plus tard.",surveyFurniturePending:"Éclairage public et feux en attente d'OpenStreetMap…",surveyFurnitureDone:"D'après {source} : lampadaires {lamps}, feux {signals}, passages piétons {crossings}, panneaux {signs}.",surveyFurnitureUnavailable:"Éclairage public et feux non disponibles pour l'instant : OpenStreetMap ne répond pas.",surveyFurnitureRetry:"Réessayer",narrativePlaceholder:"Ce que l'observateur a rapporté, dans ses propres mots",narrativeSource:"Rédigé par",narrativeNeedsSetting:"Renseignez « {setting} » ({source}) pour générer la reconstitution d'après le récit",narrativeNeedsAsk:"Rien à envoyer pour l'instant",narrativeRemember:"Retenir sur cet appareil",narrativeDraft:"Générer la reconstitution",narrativeStop:"Arrêter",narrativeWorking:"Lecture du récit…",narrativeApplied:"{count} champs écrits dans l'éditeur",narrativeUnchanged:"Le récit n'énonce rien que l'enregistrement sache encore porter",narrativeStated:"Ce que l'observateur a dit",narrativeDerived:"Déduit du récit",narrativeAssumed:"Supposé, pour que la reconstitution tourne : à vérifier",narrativeGaps:"Ce que rien n'a pu trancher",narrativeErrorCredential:"Pas de clé, ou une clé refusée : vérifiez-la sur console.anthropic.com",narrativeErrorRateLimited:"Trop de requêtes sur votre compte : patientez un instant et redemandez",narrativeErrorRefused:"Le récit n'a pas reçu de réponse. Le reformuler peut aider, le redemander non",narrativeErrorMalformed:"La réponse n'était pas un brouillon exploitable : cela vaut la peine de redemander",narrativeErrorUnreachable:"Rien n'a répondu : vérifiez la connexion",narrativeErrorRejected:"Refusé : {detail}",observerAge:"Âge alors",observerBirth:"Né le",observerPerception:{"color-vision":"Vision des couleurs","color-vision.hint":"Comment les couleurs apparaissent à qui a des cônes différents (Machado et al. 2009). Ne fait que recolorer : luminosité et résolution inchangées.","color-vision.type":"Type","color-vision.type.normal":"Typique","color-vision.type.protan":"Protan (rouge faible ou aveugle)","color-vision.type.deutan":"Deutan (vert faible ou aveugle)","color-vision.type.tritan":"Tritan (bleu faible ou aveugle)","color-vision.severity":"Sévérité",intoxication:"Alcool","intoxication.hint":"Abaisse la sensibilité au contraste d'environ 0,9 dB à 0,08 % d'alcool dans le sang (une étude contrôlée ; les résultats varient), montré jusqu'à 0,1 % au plus : un taux supérieur est consigné mais montré comme 0,1 %, rien n'ayant été mesuré au-delà. Vision double, champ rétréci et autres drogues ne sont pas modélisés : aucune source ne les chiffre.","intoxication.bloodAlcohol":"Alcoolémie",fatigue:"Fatigue","fatigue.hint":"Énoncée seulement : le manque de sommeil n'a pas été montré comme changeant ce que reçoit un œil sain, l'image est donc inchangée. Il touche l'attention et la mémoire, pas la vue.","fatigue.hoursAwake":"Éveillé depuis"},observerOccupation:"Profession",accountSource:"Récit recueilli",accountUrl:"Source (URL)",accountSourceUnknown:"on ne sait pas",accountSourceOnSite:"enquête sur site",accountSourceInterview:"entretien en personne",accountSourceTelephone:"par téléphone",accountSourceQuestionnaire:"questionnaire",accountSourceLetter:"écrit par l'observateur",accountSourceSocialMedia:"publié en ligne par l'observateur",accountSourcePress:"presse ou radiodiffusion",accountFollowedUp:"Recontacté",accountUnknown:"on ne sait pas",accountYes:"oui",accountNo:"non",questionUnanswered:"Rien dans cet enregistrement ne répond à l'une des questions qu'une reconstitution doit trancher",durationRequired:"L'observation a besoin d'une longueur pour être rejouée — indiquez-la, ou une heure de fin, qui peut être approximative",questionsUnanswered:"{count} des questions auxquelles une reconstitution complète répond restent sans réponse ici"};export{r as sightingEditorMessages_fr};
12
+ Finir par ? si incertain, ~ si approximatif, % pour les deux`,edtfModeTitle:"Saisir plutôt une date imprécise : une année seule, un mois, une heure sans date",locationGroup:"Position",observationGroup:"Résumé",weatherWhilePlaying:"Mettez la lecture en pause pour décrire le temps — pendant qu'elle tourne, l'instant où ceci s'écrirait se déplace",weatherInferred:"D'après les relevés",weatherInferredTitle:"La météo n'est pas un compte rendu : c'est un fait mesurable, relevé pour la date, l'heure et le lieu de l'observation. Décochez pour saisir les conditions rapportées par l'observateur, qui priment alors sur le relevé.",weatherLookingUp:"Recherche du relevé…",weatherNeedsDateAndPlace:"Date complète et lieu requis pour retrouver le relevé",weatherNeedsDate:"Une date complète (année, mois et jour) est requise pour retrouver les relevés météo",weatherNeedsPlace:"Un lieu avec ses coordonnées est requis pour retrouver les relevés météo",weatherNoRecord:"Aucun relevé pour cette date et ce lieu",weatherLookupFailed:"Relevés météo momentanément inaccessibles",lightPollutionLookingUp:"Consultation de l'atlas…",lightPollutionFound:"{artificial} µcd/m² de lumière artificielle,",lightPollutionNatural:"Aucune lumière artificielle ici,",lightPollutionOutside:"Hors de l'atlas (85°N à 60°S),",lightPollutionFailed:"Atlas momentanément inaccessible",lightPollutionTooEarly:"L'atlas décrit {atlasYear} ; le ciel de {year} était plus sombre, à indiquer s'il est connu",instrumentOutOfPeriod:"{name} — hors de son époque",instrumentCategoryEye:"Œil nu",instrumentCategoryCamera:"Appareils photo",instrumentCategoryDslr:"Reflex numériques",instrumentCategoryPhone:"Téléphones",instrumentCategoryBinoculars:"Jumelles",instrumentCategoryTelescope:"Télescopes",instrumentNotYetOnSale:"N'existait pas encore en {year} (en vente à partir de {from})",instrumentNoLongerOnSale:"N'existait plus en {year} (en vente jusqu'en {to})",filterNotForInstrument:"Inutilisable avec cet instrument",unitMillimetres:"mm",unitDegrees:"°",fieldOfViewReadout:"{deg}° de champ",soundSrcPlaceholder:"URL d'un enregistrement réel",referenceGroup:"Photos",reference:"Photo",referenceTitle:"Nom",referenceSrc:"Adresse",referenceSrcPlaceholder:"https://…/photo.jpg",referenceKind:"Type",referencePhoto:"Photo",referencePanorama:"Panorama (360°)",referenceCredit:"Crédit",referenceCreditUrl:"Lien du crédit",referenceT:"Prise à",referenceDrawing:"Dessin par-dessus",referenceOpacity:"Opacité",referenceHeading:"Cap",referencePitch:"Assiette",referenceRoll:"Roulis",referenceFov:"Champ vertical",referenceUsePose:"Prendre la pose de l'observateur",addReferenceUrl:"Ajouter depuis une adresse",addReferenceFile:"Ajouter un fichier",deleteReference:"Supprimer la photo",referenceEmbedded:"{kb} ko embarqués dans l'enregistrement — une adresse le garderait léger",referenceUnreachable:"La photo n'a pas pu être chargée : vérifiez l'adresse, et que son site autorise les autres sites à la lire",referenceRegisterHint:"Glissez pour orienter la photo, molette pour son champ ; « Ajouter un repère » pour pointer un détail sur la photo, puis le même dans le rendu",referenceLandmarkPicture:"Repère {n} : cliquez le point sur la photo",referenceLandmarkScene:"Repère {n} : cliquez le même point dans le rendu",referenceLandmarkOffPicture:"Ce clic ne tombe pas sur la photo",referenceNotLoaded:"La photo n'est pas encore arrivée",referenceLandmarksFit:"{n} repères — écart moyen {deg}°",referenceLandmarks:"Repères",addReferenceLandmark:"Ajouter un repère",deleteReferenceLandmark:"Supprimer le repère",referenceLandmarkLabel:"Nom",referenceLandmarkLabelPlaceholder:"Arbre masquant, barrière…",referenceAdoptPose:"Adopter comme pose de l'observateur",referenceAdoptRationale:"Mesuré sur la photo « {title} » : {n} repères recalés, {deg}° d'écart résiduel",referenceStreetSearch:"Photos de rue à proximité",referenceStreetSearching:"Recherche de photos prises à proximité…",referenceStreetNone:"Aucune photo de rue à moins de {m} m (Panoramax)",referenceStreetFailed:"Panoramax est injoignable",referenceStreetAdd:"Ajouter",traceImport:"Tracés d'enquêteur (KML, KMZ)",trace:"Tracé",deleteTrace:"Supprimer le tracé",traceTitle:"Nom",traceSource:"Source",traceImported:"{n} importé(s) depuis {name}.",traceSkipped:"Écarté : {what}.",traceNone:"Aucune ligne, aucun lieu ni contour dans ce fichier.",traceFailed:"Ce fichier n'a pas pu être lu.",traceKindPoint:"lieu",traceKindLine:"ligne",traceKindPolygon:"contour",referenceStreetItem:"{distance} m au {bearing}°, {date}{panorama}",referenceStreetPanorama:" — 360°",referenceStreetTitle:"Photo de rue à {distance} m au {bearing}°, {date}",skyLine:"Ciel : {parts}",skyStarsEye:"étoiles jusqu'à la magnitude {limit}, ce que l'œil atteignait sous ce ciel",skyStarsDeeper:"étoiles jusqu'à la magnitude {limit} à travers un {device} — {gain} magnitudes au-delà des {eye} qu'atteignaient les yeux de l'observateur",skyStarsShallower:"étoiles jusqu'à la magnitude {limit} à travers un {device} — {gain} magnitudes en deçà des {eye} qu'atteignaient les yeux de l'observateur",skyStarsCatalogue:", dessinées jusqu'à {catalogue}, où s'arrête le catalogue de ce projet",skyStarsNone:"aucune étoile ne se détachait d'un ciel aussi clair",skyDetails:"Voir le détail des relevés",skyDetailsHide:"Masquer le détail des relevés",skyShowerActive:"{name} — radiant à {altitude}° de hauteur, {bearing} — environ {rate}/h sous ce ciel, sur un fond sporadique de {sporadic}/h",skyShowerBelowHorizon:"{name} est actif, mais son radiant est sous l'horizon — il n'a rien pu produire",skyNothingActive:"aucune pluie de météores active à cette date — un fond sporadique d'environ {sporadic}/h",showMeteor:"Montrer un météore",skyComet:"La {name}, magnitude {magnitude}, à {altitude}° de hauteur {bearing}, queue longue de {tail}°",skyCometNoTail:"La {name}, magnitude {magnitude}, à {altitude}° de hauteur {bearing}",skyCometBelowHorizon:"La {name} était là, magnitude {magnitude}, mais sous l'horizon — personne ici ne l'a vue",skyCometInDaylight:"La {name}, magnitude {magnitude}, à {altitude}° de hauteur {bearing} — mais à {elongation}° du Soleil seulement",showComet:"Montrer la comète",skyNova:"La {name}, étoile nouvelle de magnitude {magnitude}, à {altitude}° de hauteur {bearing}",skyNovaBelowHorizon:"La {name} brillait, magnitude {magnitude}, mais sous l'horizon : personne ici ne l'a vue",showNova:"Montrer l'étoile nouvelle",skyEclipsePartial:"Éclipse de Soleil : la Lune cache {percent} % du Soleil à {time}, à {altitude}° de hauteur {bearing}",skyEclipseTotal:"Éclipse totale de Soleil : le Soleil est entièrement caché à partir de {time} pendant {duration}, à {altitude}° de hauteur {bearing}",skySupermoon:"Pleine Lune à {distance} km : {diameter}° de large, {percent} % de plus qu'à sa distance moyenne — une « super-lune », et pas plus grosse à l'horizon qu'au zénith",skyMicromoon:"Pleine Lune à {distance} km : {diameter}° de large, {percent} % de moins qu'à sa distance moyenne — une « micro-lune », et pas plus petite à l'horizon qu'au zénith",skyRedMoon:"La « lune rousse » : la pleine Lune de la lunaison qui suit Pâques, à {altitude}° de hauteur {bearing} — basse, donc rougie par l'air qu'elle traverse, et ni plus grosse ni plus brillante qu'une autre",skySatellitePasses:"{count} satellites ont traversé ce ciel assez brillants pour être vus, le plus brillant {name}, magnitude {magnitude}, à {altitude}° de hauteur {bearing} à {time}",skySatellitePassesOne:"un satellite a traversé ce ciel assez brillant pour être vu : {name}, magnitude {magnitude}, à {altitude}° de hauteur {bearing} à {time}",skySatelliteTrain:"dont un train de {count} Starlink lancés le {date}",skySatellitePassesNone:"d'après les éléments orbitaux archivés pour cette date, aucun satellite éclairé n'a traversé ce ciel assez brillant pour être vu",skySatelliteElementsGap:"aucun élément orbital archivé près de cette date",skyReentries:"rentrées au registre : {list}",skyReentriesMore:"{count} autres",skyReentrySeen:"{name} est retombé à {time}, vu depuis {place} (à {distance} km)",skyReentryObserved:"{name} est retombé à {time}, vu",skyReentryOffset:", à {minutes} min de l'observation",skyReentryPredicted:"{name} est retombé vers {time} ± {hours} h, on ne sait où",skyReentryDay:"{name} est retombé le {date} (UTC), ni l'heure ni le lieu connus",skyFireballs:"{count} bolides enregistrés par le Global Meteor Network, le plus brillant de magnitude {magnitude} à {time}, à {altitude}° de hauteur {bearing}, à {distance} km ({stations} stations)",skyFireballsOne:"un bolide enregistré par le Global Meteor Network : magnitude {magnitude} à {time}, à {altitude}° de hauteur {bearing}, à {distance} km ({stations} stations)",showFireball:"Montrer le bolide",showSatellite:"Montrer un satellite",skyOpticsPossible:"nuages de glace suffisants, autour {source}, pour {forms}",skyOpticsAlignment:" — tout sauf les halos exige des cristaux tombant à plat, ici supposés alignés à {alignment} %, qu'aucun relevé ne donne",skyOpticsHalo22:"un halo à {angle}°",skyOpticsHalo46:"un halo à {angle}°",skyOpticsParhelia:"des parhélies à {angle}° de part et d'autre",skyOpticsTangentArc:"un arc tangent au sommet",skyOpticsParhelicCircle:"un cercle parhélique blanc faisant le tour du ciel à sa hauteur",skyOpticsCircumzenithal:"un arc circumzénithal à {angle}° de hauteur",skyOpticsCircumhorizontal:"un arc circumhorizontal très au-dessous",skyOpticsPillar:"un pilier dressé au-dessus",skyOpticsNoIce:"aucun nuage de glace : ni halo ni parhélie",skyOpticsHidden:"des nuages de glace en altitude, mais une couche plus basse les cache",skyOpticsSun:"du Soleil",skyOpticsMoon:"de la Lune",skyBowPossible:"pluie et soleil suffisants pour {forms}",skyBowMoon:"pluie sous une Lune éclairée à {lit} %, de quoi former {forms} — un arc-en-ciel lunaire, que l'œil voit blanc",skyGlowBand:"la Voie lactée à {contrast}× le fond du ciel, à {altitude}° de hauteur {bearing}",skyGlowCone:"la lumière zodiacale à {contrast}× le fond du ciel, à {altitude}° de hauteur {bearing}, à {elongation}° du Soleil — une lueur en cône incliné, aux contours flous, disparue en moins d'une heure",skyGlowZodiacalBand:"la bande zodiacale à {contrast}× le fond du ciel, à {altitude}° de hauteur {bearing} — toute l'écliptique faiblement allumée, ce qui n'est pas ce que les gens rapportent",skyGlowMoon:"ni Voie lactée ni lumière zodiacale : une Lune éclairée à {lit} % tenait le ciel à {sky} magnitudes par seconde d'arc, là où il leur en faut 22",skyGlowTwilight:"ni Voie lactée ni lumière zodiacale : le crépuscule tenait encore le ciel à {sky} magnitudes par seconde d'arc, là où il leur en faut 22",skyGlowTowns:"ni Voie lactée ni lumière zodiacale : la lueur des villes tenait le ciel à {sky} magnitudes par seconde d'arc, là où il leur en faut 22",skyGlowNothingUp:"ciel assez noir ({sky} magnitudes par seconde d'arc), mais ni le plan de la Galaxie ni l'écliptique ne s'y tenaient assez haut",skyBowPrimary:"un arc de {radius}° de rayon, dont le sommet montait à {top}°",skyBowSecondary:"un second, plus pâle, à {radius}°, aux couleurs inversées",skyBowSourceTooHigh:"pluie, mais l'astre à {altitude}° de hauteur : aucun arc ne pouvait dépasser l'horizon, ils se tiennent à {radius}° du point opposé",skyBowHidden:"pluie, mais une couche continue entre elle et la lumière : aucun arc",skyBowNoSource:"pluie, et rien d'allumé pour en tirer un arc",skySatellitesLit:"l'ombre de la Terre montait à {height} km au-dessus de l'observateur, l'orbite basse était donc encore éclairée — {count} objets suivis étaient en orbite ce mois-là",skySatellitesLitWith:"l'ombre de la Terre montait à {height} km au-dessus de l'observateur, l'orbite basse était donc encore éclairée — {count} objets suivis étaient en orbite ce mois-là, dont {eras}",skySatellitesShadowed:"l'ombre de la Terre montait à {height} km au-dessus de l'observateur : sur les {count} objets suivis en orbite ce mois-là, rien en orbite basse n'était éclairé",skySatellitesNotYet:"rien n'était encore en orbite",skySatellitesDaylight:"tout ce qui est en orbite était éclairé, comme toujours de jour, et {eras} pouvaient l'emporter même sur ce ciel",skySatellitesDaylightOne:"tout ce qui est en orbite était éclairé, comme toujours de jour, et {eras} pouvait l'emporter même sur ce ciel",skyUnknown:"indéterminable sans date ni lieu",lookAtDecor:"Regarder cet élément",addDecor:"Ajouter",deleteDecor:"Supprimer l'élément de décor",undo:"Annuler",redo:"Rétablir",viewAccount:"Voir le compte rendu",noObserverRecording:"Aucune URL d'enregistrement définie pour cet observateur",masks:"Masque",masksNone:"Aucun phénomène à masquer pour l'instant",masksBodyFully:"masqué par cet objet",masksBodyPartly:"masqué à {share} % par cet objet",masksBodyNot:"non masqué par cet objet",modelPickerTitle:"Choisir un modèle 3D",modelPickerClose:"Fermer",modelPickerChoose:"Choisir un modèle 3D",modelPickerUse:"Utiliser ce modèle",modelPickerIncomplete:"Non dessiné tant que le nom et la licence du modèle ne sont pas donnés",addObserver:"Ajouter un observateur",surveyLabel:"Décor tiré d'un relevé",surveySource:"Décor tiré de",surveyDated:"Relevés du : {dates}.",surveyLaserLabel:"laser",surveyPhotoLabel:"photo aérienne",surveyMapLabel:"carte",surveyLampsLabel:"OpenStreetMap",surveyWarning:"⚠ Ce décor vient de relevés du {survey}, postérieurs à l'observation ({observation}) : ce n'est pas ce qui se tenait là alors. Gardez-le comme repère, ou supprimez-le.",surveyRadius:"Rayon",surveyRadiusTitle:"Jusqu'où autour de l'observateur le relevé est interrogé, en mètres. Un rayon plus large ramène des bâtiments, ponts et lignes plus éloignés ; les arbres viennent du laser, qui n'est interrogé que dans 150 m.",surveySourceTitle:"Le relevé d'où sont tirés, tout seuls, les arbres, bâtiments, ponts et lignes aériennes autour du lieu quand vous donnez un lieu à l'enregistrement : ils sont mis dans la liste, à leur place, leur hauteur et leur largeur mesurées. Les coordonnées du lieu sont envoyées à ce service. Aucun laisse le décor à vous seul. Ce que vous avez placé vous-même n'est jamais touché.",surveySourceNone:"Aucun (tout à la main)",surveyBusy:"Recherche du décor autour de l'observateur…",surveyDone:"D'après {source} : arbres {trees}, bâtiments {buildings}, ponts {bridges}, lignes électriques {lines}. Ce sont ceux du jour du relevé, pas ceux de l'enregistrement : gardez-les, déplacez-les ou supprimez-les.",surveyNone:"Aucun arbre, bâtiment, pont ni ligne électrique trouvé dans un rayon de {radius} m.",surveyKept:"Ce que vous avez placé vous-même reste tel quel.",surveyUnreachable:"Le relevé n'a pas pu être joint. Réessayez plus tard.",surveyFurniturePending:"Éclairage public et feux en attente d'OpenStreetMap…",surveyFurnitureDone:"D'après {source} : lampadaires {lamps}, feux {signals}, passages piétons {crossings}, panneaux {signs}.",surveyFurnitureUnavailable:"Éclairage public et feux non disponibles pour l'instant : OpenStreetMap ne répond pas.",surveyFurnitureRetry:"Réessayer",narrativePlaceholder:"Ce que l'observateur a rapporté, dans ses propres mots",narrativeSource:"Rédigé par",narrativeNeedsSetting:"Renseignez « {setting} » ({source}) pour générer la reconstitution d'après le récit",narrativeNeedsAsk:"Rien à envoyer pour l'instant",narrativeRemember:"Retenir sur cet appareil",narrativeDraft:"Générer la reconstitution",narrativeStop:"Arrêter",narrativeWorking:"Lecture du récit…",narrativeApplied:"{count} champs écrits dans l'éditeur",narrativeUnchanged:"Le récit n'énonce rien que l'enregistrement sache encore porter",narrativeStated:"Ce que l'observateur a dit",narrativeDerived:"Déduit du récit",narrativeAssumed:"Supposé, pour que la reconstitution tourne : à vérifier",narrativeGaps:"Ce que rien n'a pu trancher",narrativeErrorCredential:"Pas de clé, ou une clé refusée : vérifiez-la sur console.anthropic.com",narrativeErrorRateLimited:"Trop de requêtes sur votre compte : patientez un instant et redemandez",narrativeErrorRefused:"Le récit n'a pas reçu de réponse. Le reformuler peut aider, le redemander non",narrativeErrorMalformed:"La réponse n'était pas un brouillon exploitable : cela vaut la peine de redemander",narrativeErrorUnreachable:"Rien n'a répondu : vérifiez la connexion",narrativeErrorRejected:"Refusé : {detail}",observerAge:"Âge alors",observerBirth:"Né le",observerPerception:{"color-vision":"Vision des couleurs","color-vision.hint":"Comment les couleurs apparaissent à qui a des cônes différents (Machado et al. 2009). Ne fait que recolorer : luminosité et résolution inchangées.","color-vision.type":"Type","color-vision.type.normal":"Typique","color-vision.type.protan":"Protan (rouge faible ou aveugle)","color-vision.type.deutan":"Deutan (vert faible ou aveugle)","color-vision.type.tritan":"Tritan (bleu faible ou aveugle)","color-vision.severity":"Sévérité",intoxication:"Alcool","intoxication.hint":"Abaisse la sensibilité au contraste d'environ 0,9 dB à 0,08 % d'alcool dans le sang (une étude contrôlée ; les résultats varient), montré jusqu'à 0,1 % au plus : un taux supérieur est consigné mais montré comme 0,1 %, rien n'ayant été mesuré au-delà. Vision double, champ rétréci et autres drogues ne sont pas modélisés : aucune source ne les chiffre.","intoxication.bloodAlcohol":"Alcoolémie",fatigue:"Fatigue","fatigue.hint":"Énoncée seulement : le manque de sommeil n'a pas été montré comme changeant ce que reçoit un œil sain, l'image est donc inchangée. Il touche l'attention et la mémoire, pas la vue.","fatigue.hoursAwake":"Éveillé depuis"},observerOccupation:"Profession",accountSource:"Récit recueilli",accountUrl:"Source (URL)",accountSourceUnknown:"on ne sait pas",accountSourceOnSite:"enquête sur site",accountSourceInterview:"entretien en personne",accountSourceTelephone:"par téléphone",accountSourceQuestionnaire:"questionnaire",accountSourceLetter:"écrit par l'observateur",accountSourceSocialMedia:"publié en ligne par l'observateur",accountSourcePress:"presse ou radiodiffusion",accountFollowedUp:"Recontacté",accountUnknown:"on ne sait pas",accountYes:"oui",accountNo:"non",questionUnanswered:"Rien dans cet enregistrement ne répond à l'une des questions qu'une reconstitution doit trancher",durationRequired:"L'observation a besoin d'une longueur pour être rejouée — indiquez-la, ou une heure de fin, qui peut être approximative",questionsUnanswered:"{count} des questions auxquelles une reconstitution complète répond restent sans réponse ici",emptyDecor:"Aucun élément de décor",emptyMilestones:"Aucun moment",emptyReferences:"Aucune photo",emptyReferenceLandmarks:"Aucun repère",emptyTraces:"Aucun tracé d'enquêteur",emptyShapes:"Aucune forme",addReference:"Ajouter une photo",principalObserver:"Observateur de ce compte rendu",deleteObserver:"Supprimer l'observateur"};export{r as sightingEditorMessages_fr};
@@ -9,4 +9,4 @@ Terminare con ? se incerto, ~ se approssimativo, % per entrambi
9
9
  1965-07-01 — un giorno
10
10
  1965-07-01T05:00 — un giorno e un'ora
11
11
  05:00 — un'ora, data sconosciuta
12
- Terminare con ? se incerto, ~ se approssimativo, % per entrambi`,edtfModeTitle:"Scrivi invece una data imprecisa: solo un anno, un mese, un'ora senza data",locationGroup:"Posizione",observationGroup:"Riepilogo",weatherWhilePlaying:"Metti in pausa la registrazione per indicare il tempo — mentre scorre, l'istante in cui verrebbe scritto si sposta",weatherInferred:"Dai rilevamenti",weatherInferredTitle:"Il meteo non è un resoconto: è un fatto misurabile, rilevato per la data, l'ora e il luogo dell'osservazione. Deseleziona per indicare le condizioni riferite dall'osservatore, che allora prevalgono sul rilevamento.",weatherLookingUp:"Ricerca del rilevamento…",weatherNeedsDateAndPlace:"Servono una data completa e un luogo per cercare il rilevamento",weatherNeedsDate:"Serve una data completa (anno, mese e giorno) per cercare i rilevamenti meteo",weatherNeedsPlace:"Serve un luogo con coordinate per cercare i rilevamenti meteo",weatherNoRecord:"Nessun rilevamento per questa data e questo luogo",weatherLookupFailed:"Rilevamenti meteo momentaneamente irraggiungibili",lightPollutionLookingUp:"Consultazione dell'atlante…",lightPollutionFound:"{artificial} µcd/m² di luce artificiale,",lightPollutionNatural:"Nessuna luce artificiale qui,",lightPollutionOutside:"Fuori dall'atlante (da 85°N a 60°S),",lightPollutionFailed:"Atlante al momento irraggiungibile",lightPollutionTooEarly:"L'atlante descrive il {atlasYear}; il cielo del {year} era più buio, indicarlo se è noto",instrumentOutOfPeriod:"{name} — non di quest'epoca",instrumentCategoryEye:"Occhio nudo",instrumentCategoryCamera:"Fotocamere",instrumentCategoryDslr:"Reflex digitali",instrumentCategoryPhone:"Telefoni",instrumentCategoryBinoculars:"Binocoli",instrumentCategoryTelescope:"Telescopi",instrumentNotYetOnSale:"Non esisteva ancora nel {year} (in vendita dal {from})",instrumentNoLongerOnSale:"Non esisteva più nel {year} (in vendita fino al {to})",filterNotForInstrument:"Non utilizzabile con questo strumento",unitMillimetres:"mm",unitDegrees:"°",fieldOfViewReadout:"{deg}° di campo",soundSrcPlaceholder:"URL di una registrazione reale",referenceGroup:"Foto",reference:"Foto",referenceTitle:"Nome",referenceSrc:"Indirizzo",referenceSrcPlaceholder:"https://…/photo.jpg",referenceKind:"Tipo",referencePhoto:"Foto",referencePanorama:"Panorama (360°)",referenceCredit:"Crediti",referenceCreditUrl:"Link dei crediti",referenceT:"Scattata a",referenceDrawing:"Disegno sopra",referenceOpacity:"Opacità",referenceHeading:"Direzione",referencePitch:"Beccheggio",referenceRoll:"Rollio",referenceFov:"Campo verticale",referenceUsePose:"Usa la posa dell'osservatore",addReferenceUrl:"Aggiungi da un indirizzo",addReferenceFile:"Aggiungi un file",deleteReference:"Elimina foto",referenceEmbedded:"{kb} kB incorporati nella registrazione — un indirizzo la terrebbe leggera",referenceUnreachable:"Impossibile caricare la foto: controlla l'indirizzo e che il suo sito permetta ad altri siti di leggerla",referenceRegisterHint:"Trascina per ruotare la foto, rotellina per cambiarne il campo; «Aggiungi un punto di riferimento» per indicare un dettaglio sulla foto, poi lo stesso nel rendering",referenceLandmarkPicture:"Punto di riferimento {n}: clicca il punto sulla foto",referenceLandmarkScene:"Punto di riferimento {n}: clicca lo stesso punto nel rendering",referenceLandmarkOffPicture:"Questo clic non cade sulla foto",referenceNotLoaded:"La foto non è ancora arrivata",referenceLandmarksFit:"{n} punti di riferimento — scarto medio di {deg}°",referenceLandmarks:"Punti di riferimento",addReferenceLandmark:"Aggiungi un punto di riferimento",deleteReferenceLandmark:"Elimina punto di riferimento",referenceLandmarkLabel:"Nome",referenceLandmarkLabelPlaceholder:"Albero che copre, recinzione…",referenceAdoptPose:"Adotta come posa dell'osservatore",referenceAdoptRationale:"Misurato sulla foto «{title}»: {n} punti di riferimento allineati, {deg}° di scarto residuo",referenceStreetSearch:"Foto stradali nei dintorni",referenceStreetSearching:"Ricerca di foto scattate nei dintorni…",referenceStreetNone:"Nessuna foto stradale entro {m} m (Panoramax)",referenceStreetFailed:"Impossibile raggiungere Panoramax",referenceStreetAdd:"Aggiungi",traceImport:"Tracciati dell'investigatore (KML, KMZ)",trace:"Tracciato",deleteTrace:"Elimina il tracciato",traceTitle:"Nome",traceSource:"Fonte",traceImported:"{n} importato/i da {name}.",traceSkipped:"Escluso: {what}.",traceNone:"Nessuna linea, luogo o contorno in questo file.",traceFailed:"Impossibile leggere questo file.",traceKindPoint:"luogo",traceKindLine:"linea",traceKindPolygon:"contorno",referenceStreetItem:"{distance} m a {bearing}°, {date}{panorama}",referenceStreetPanorama:" — 360°",referenceStreetTitle:"Foto stradale a {distance} m a {bearing}°, {date}",skyLine:"Cielo: {parts}",skyStarsEye:"stelle fino alla magnitudine {limit}, il limite che un occhio raggiungeva sotto questo cielo",skyStarsDeeper:"stelle fino alla magnitudine {limit} attraverso un {device} — {gain} magnitudini oltre le {eye} raggiunte dagli occhi dell'osservatore",skyStarsShallower:"stelle fino alla magnitudine {limit} attraverso un {device} — {gain} magnitudini al di qua delle {eye} raggiunte dagli occhi dell'osservatore",skyStarsCatalogue:", disegnate fino a {catalogue}, dove si ferma il catalogo di questo progetto",skyStarsNone:"nessuna stella si distingueva in un cielo così chiaro",skyDetails:"Mostra i rilevamenti completi",skyDetailsHide:"Nascondi i rilevamenti",skyShowerActive:"{name} — radiante a {altitude}° sopra l'orizzonte, {bearing} — circa {rate}/h sotto questo cielo, su un fondo sporadico di {sporadic}/h",skyShowerBelowHorizon:"{name} è attivo, ma il suo radiante è sotto l'orizzonte — non ha potuto produrre nulla",skyNothingActive:"nessuno sciame meteorico attivo in questa data — un fondo sporadico di circa {sporadic}/h",showMeteor:"Mostrami una meteora",skyComet:"La {name}, magnitudine {magnitude}, a {altitude}° sopra l'orizzonte {bearing}, coda lunga {tail}°",skyCometNoTail:"La {name}, magnitudine {magnitude}, a {altitude}° sopra l'orizzonte {bearing}",skyCometBelowHorizon:"La {name} c'era, di magnitudine {magnitude}, ma sotto l'orizzonte — nessuno qui l'ha vista",skyCometInDaylight:"La {name}, magnitudine {magnitude}, a {altitude}° sopra l'orizzonte {bearing} — ma a soli {elongation}° dal Sole",showComet:"Mostrami la cometa",skyNova:"La {name}, una stella nuova di magnitudine {magnitude}, a {altitude}° sopra l'orizzonte {bearing}",skyNovaBelowHorizon:"La {name} brillava di magnitudine {magnitude}, ma sotto l'orizzonte: nessuno qui l'ha vista",showNova:"Mostrami la stella nuova",skyEclipsePartial:"Eclissi di Sole: la Luna nasconde il {percent} % del Sole alle {time}, a {altitude}° sopra l'orizzonte {bearing}",skyEclipseTotal:"Eclissi totale di Sole: il Sole è interamente nascosto dalle {time} per {duration}, a {altitude}° sopra l'orizzonte {bearing}",skySupermoon:"Luna piena a {distance} km: {diameter}° di larghezza, il {percent} % in più che alla distanza media — una «superluna», e non più grande all'orizzonte che in alto",skyMicromoon:"Luna piena a {distance} km: {diameter}° di larghezza, il {percent} % in meno che alla distanza media — una «microluna», e non più piccola all'orizzonte che in alto",skyRedMoon:"La «lune rousse»: la Luna piena della lunazione che segue la Pasqua, a {altitude}° sopra l'orizzonte {bearing} — bassa, quindi arrossata dall'aria che attraversa, e né più grande né più luminosa di un'altra",skySatellitePasses:"{count} satelliti hanno attraversato questo cielo abbastanza luminosi da essere visti, il più luminoso {name}, magnitudine {magnitude}, a {altitude}° sopra l'orizzonte {bearing} alle {time}",skySatellitePassesOne:"un satellite ha attraversato questo cielo abbastanza luminoso da essere visto: {name}, magnitudine {magnitude}, a {altitude}° sopra l'orizzonte {bearing} alle {time}",skySatelliteTrain:"tra cui un treno di {count} Starlink lanciati il {date}",skySatellitePassesNone:"secondo gli elementi orbitali archiviati per quella data, nessun satellite illuminato ha attraversato questo cielo abbastanza luminoso da essere visto",skySatelliteElementsGap:"nessun elemento orbitale archiviato vicino a quella data",skyReentries:"rientri registrati: {list}",skyReentriesMore:"altri {count}",skyReentrySeen:"{name} è ricaduto alle {time}, visto da {place} (a {distance} km)",skyReentryObserved:"{name} è ricaduto alle {time}, visto",skyReentryOffset:", a {minutes} min dall'osservazione",skyReentryPredicted:"{name} è ricaduto verso le {time} ± {hours} h, non si sa dove",skyReentryDay:"{name} è ricaduto il {date} (UTC), senza ora né luogo noti",skyFireballs:"{count} bolidi registrati dalla Global Meteor Network, il più luminoso di magnitudine {magnitude} alle {time}, a {altitude}° di altezza {bearing}, a {distance} km ({stations} stazioni)",skyFireballsOne:"un bolide registrato dalla Global Meteor Network: magnitudine {magnitude} alle {time}, a {altitude}° di altezza {bearing}, a {distance} km ({stations} stazioni)",showFireball:"Mostrami il bolide",showSatellite:"Mostrami un satellite",skyOpticsPossible:"nubi di ghiaccio sufficienti, intorno {source}, per {forms}",skyOpticsAlignment:" — tutto tranne gli anelli richiede cristalli che cadono orizzontali, qui supposti allineati al {alignment}%, poiché nessun rilevamento lo indica",skyOpticsHalo22:"un anello di {angle}°",skyOpticsHalo46:"un anello di {angle}°",skyOpticsParhelia:"pareli a {angle}° da entrambi i lati",skyOpticsTangentArc:"un arco tangente sopra",skyOpticsParhelicCircle:"un cerchio bianco che fa il giro del cielo alla sua stessa altezza",skyOpticsCircumzenithal:"un arco circumzenitale a {angle}° di altezza",skyOpticsCircumhorizontal:"un arco circumorizzontale molto più in basso",skyOpticsPillar:"una colonna eretta sopra",skyOpticsNoIce:"nessuna nube di ghiaccio: né alone né pareli",skyOpticsHidden:"nubi di ghiaccio in quota, ma uno strato più basso tra loro e l'osservatore",skyOpticsSun:"al Sole",skyOpticsMoon:"alla Luna",skyBowPossible:"pioggia e sole sufficienti per {forms}",skyBowMoon:"pioggia sotto una Luna illuminata al {lit}%, sufficiente per {forms} — un arcobaleno lunare, che l'occhio vede come un arco bianco",skyGlowBand:"la Via Lattea a {contrast}× il fondo del cielo, a {altitude}° di altezza {bearing}",skyGlowCone:"la luce zodiacale a {contrast}× il fondo del cielo, a {altitude}° di altezza {bearing}, a {elongation}° dal Sole — un tenue cono di luce inclinato, dai bordi sfumati, svanito entro un'ora",skyGlowZodiacalBand:"la banda zodiacale a {contrast}× il fondo del cielo, a {altitude}° di altezza {bearing} — tutta l'eclittica debolmente accesa, che non è ciò che la gente riferisce",skyGlowMoon:"né Via Lattea né luce zodiacale: una Luna illuminata al {lit}% teneva il cielo a {sky} magnitudini per secondo d'arco quadrato, dove ne servono 22",skyGlowTwilight:"né Via Lattea né luce zodiacale: il crepuscolo teneva ancora il cielo a {sky} magnitudini per secondo d'arco quadrato, dove ne servono 22",skyGlowTowns:"né Via Lattea né luce zodiacale: il bagliore delle città teneva il cielo a {sky} magnitudini per secondo d'arco quadrato, dove ne servono 22",skyGlowNothingUp:"cielo abbastanza buio ({sky} magnitudini per secondo d'arco quadrato), ma né il piano galattico né l'eclittica vi stavano abbastanza in alto",skyBowPrimary:"un arco di {radius}° di raggio, con la sommità a {top}° di altezza",skyBowSecondary:"un secondo, più tenue, a {radius}°, con i colori invertiti",skyBowSourceTooHigh:"pioggia, ma con l'astro a {altitude}° di altezza nessun arco poteva superare l'orizzonte: si trovano a {radius}° dal punto opposto",skyBowHidden:"pioggia, ma uno strato continuo tra essa e la luce: nessun arco",skyBowNoSource:"pioggia, e niente di illuminato per farne un arco",skySatellitesLit:"l'ombra della Terra era a {height} km sopra l'osservatore, quindi l'orbita bassa era ancora al sole — {count} oggetti catalogati erano in orbita quel mese",skySatellitesLitWith:"l'ombra della Terra era a {height} km sopra l'osservatore, quindi l'orbita bassa era ancora al sole — {count} oggetti catalogati erano in orbita quel mese, tra cui {eras}",skySatellitesShadowed:"l'ombra della Terra era a {height} km sopra l'osservatore: dei {count} oggetti catalogati in orbita quel mese, niente in orbita bassa era illuminato",skySatellitesNotYet:"non era ancora stato messo niente in orbita",skySatellitesDaylight:"tutto ciò che era in orbita era illuminato, come sempre di giorno, e {eras} potevano superare in luminosità persino questo cielo",skySatellitesDaylightOne:"tutto ciò che era in orbita era illuminato, come sempre di giorno, e {eras} poteva superare in luminosità persino questo cielo",skyUnknown:"non determinabile senza una data e un luogo",lookAtDecor:"Guardalo",addDecor:"Aggiungi",deleteDecor:"Elimina elemento della scenografia",undo:"Annulla",redo:"Ripristina",viewAccount:"Vedi il resoconto",noObserverRecording:"Nessun URL di registrazione per questo osservatore",masks:"Nasconde",masksNone:"Nessun fenomeno da nascondere per ora",masksBodyFully:"nascosto da questo oggetto",masksBodyPartly:"nascosto al {share} % da questo oggetto",masksBodyNot:"non nascosto da questo oggetto",modelPickerTitle:"Scegliere un modello 3D",modelPickerClose:"Chiudere",modelPickerChoose:"Scegliere un modello 3D",modelPickerUse:"Usa questo modello",modelPickerIncomplete:"Non disegnato finché non sono indicati il nome e la licenza del modello",addObserver:"Aggiungi osservatore",surveyLabel:"Scenografia ricavata da un rilievo",surveySource:"Scenografia da",surveyDated:"Rilevato il: {dates}.",surveyLaserLabel:"laser",surveyPhotoLabel:"foto aerea",surveyMapLabel:"carta",surveyLampsLabel:"OpenStreetMap",surveyWarning:"⚠ Questa scenografia viene da rilievi del {survey}, successivi all'osservazione ({observation}): non è ciò che c'era allora. Teneteli come riferimento, o eliminateli.",surveyRadius:"Raggio",surveyRadiusTitle:"Fino a dove intorno all'osservatore si interroga il rilievo, in metri. Un raggio più ampio porta edifici, ponti e linee più lontani; gli alberi vengono dal laser, che si interroga solo entro 150 m.",surveySourceTitle:"Il rilievo da cui sono ricavati, da soli, gli alberi, gli edifici, i ponti e le linee aeree attorno al luogo quando date un luogo alla registrazione: sono messi nell'elenco, al loro posto, con altezza e larghezza misurate. Le coordinate del luogo sono inviate a quel servizio. Nessuno lascia la scenografia a voi soli. Ciò che avete collocato voi non viene mai toccato.",surveySourceNone:"Nessuno (tutto a mano)",surveyBusy:"Ricerca della scenografia attorno all'osservatore…",surveyDone:"Da {source}: alberi {trees}, edifici {buildings}, ponti {bridges}, linee elettriche {lines}. Sono quelli del giorno del rilievo, non della registrazione: teneteli, spostateli o eliminateli.",surveyNone:"Nessun albero, edificio, ponte né linea elettrica trovato entro {radius} m.",surveyKept:"Ciò che avete collocato voi resta com'è.",surveyUnreachable:"Impossibile raggiungere il rilievo. Riprovate più tardi.",surveyFurniturePending:"Illuminazione pubblica e semafori: in attesa di OpenStreetMap…",surveyFurnitureDone:"Da {source}: lampioni {lamps}, semafori {signals}, attraversamenti {crossings}, segnali {signs}.",surveyFurnitureUnavailable:"Illuminazione pubblica e semafori non disponibili per ora: OpenStreetMap non risponde.",surveyFurnitureRetry:"Riprova",narrativePlaceholder:"Ciò che l'osservatore ha riferito, con parole sue",narrativeSource:"Redatto da",narrativeNeedsSetting:'Compila "{setting}" ({source}) per generare una ricostruzione dal resoconto',narrativeNeedsAsk:"Ancora niente da inviare",narrativeRemember:"Ricorda su questo dispositivo",narrativeDraft:"Genera ricostruzione",narrativeStop:"Ferma",narrativeWorking:"Lettura del resoconto…",narrativeApplied:"{count} campi scritti nell'editor",narrativeUnchanged:"Il resoconto non dice ancora nulla che la registrazione possa contenere",narrativeStated:"Ciò che l'osservatore ha detto",narrativeDerived:"Ricavato dal resoconto",narrativeAssumed:"Supposto, perché la ricostruzione funzioni — da verificare",narrativeGaps:"Ciò che niente ha potuto stabilire",narrativeErrorCredential:"Nessuna chiave, o una chiave rifiutata — controllala su console.anthropic.com",narrativeErrorRateLimited:"Troppe richieste sul tuo account: aspetta un momento e richiedi",narrativeErrorRefused:"Il resoconto non ha avuto risposta. Riformularlo può aiutare; richiederlo no",narrativeErrorMalformed:"La risposta non era una bozza utilizzabile — vale la pena richiederla ancora una volta",narrativeErrorUnreachable:"Nulla ha risposto: controlla la connessione",narrativeErrorRejected:"Rifiutato: {detail}",observerAge:"Età allora",observerBirth:"Nato il",observerPerception:{"color-vision":"Visione dei colori","color-vision.hint":"Come appaiono i colori a chi ha coni diversi (Machado et al. 2009). Ricolora soltanto: luminosità e risoluzione restano uguali.","color-vision.type":"Tipo","color-vision.type.normal":"Tipica","color-vision.type.protan":"Protan (rosso debole o cieco)","color-vision.type.deutan":"Deutan (verde debole o cieco)","color-vision.type.tritan":"Tritan (blu debole o cieco)","color-vision.severity":"Gravità",intoxication:"Alcol","intoxication.hint":"Riduce la sensibilità al contrasto di circa 0,9 dB a 0,08 % di alcol nel sangue (uno studio controllato; i risultati variano), mostrato fino a 0,1 % al massimo: un livello più alto viene registrato ma mostrato come 0,1 %, poiché oltre non è stato misurato nulla. Visione doppia, campo ristretto e altre droghe non sono modellati: nessuna fonte li quantifica.","intoxication.bloodAlcohol":"Alcolemia",fatigue:"Stanchezza","fatigue.hint":"Solo dichiarata: non è dimostrato che la mancanza di sonno cambi ciò che riceve un occhio sano, quindi l'immagine non cambia. Riguarda attenzione e memoria, non la vista.","fatigue.hoursAwake":"Sveglio da"},observerOccupation:"Professione",accountSource:"Resoconto raccolto",accountUrl:"Fonte (URL)",accountSourceUnknown:"sconosciuto",accountSourceOnSite:"indagine sul posto",accountSourceInterview:"colloquio di persona",accountSourceTelephone:"per telefono",accountSourceQuestionnaire:"questionario",accountSourceLetter:"l'ha scritto l'osservatore",accountSourceSocialMedia:"l'ha pubblicato l'osservatore in rete",accountSourcePress:"stampa o radiotelevisione",accountFollowedUp:"Ricontattato",accountUnknown:"sconosciuto",accountYes:"sì",accountNo:"no",questionUnanswered:"Nulla in questa registrazione risponde a una delle domande che una ricostruzione deve risolvere",durationRequired:"L'osservazione ha bisogno di una durata per poter essere riprodotta — indicala, o un'ora di fine, che può essere approssimativa",questionsUnanswered:"{count} delle domande a cui risponde una ricostruzione completa restano qui senza risposta"};export{a as sightingEditorMessages_it};
12
+ Terminare con ? se incerto, ~ se approssimativo, % per entrambi`,edtfModeTitle:"Scrivi invece una data imprecisa: solo un anno, un mese, un'ora senza data",locationGroup:"Posizione",observationGroup:"Riepilogo",weatherWhilePlaying:"Metti in pausa la registrazione per indicare il tempo — mentre scorre, l'istante in cui verrebbe scritto si sposta",weatherInferred:"Dai rilevamenti",weatherInferredTitle:"Il meteo non è un resoconto: è un fatto misurabile, rilevato per la data, l'ora e il luogo dell'osservazione. Deseleziona per indicare le condizioni riferite dall'osservatore, che allora prevalgono sul rilevamento.",weatherLookingUp:"Ricerca del rilevamento…",weatherNeedsDateAndPlace:"Servono una data completa e un luogo per cercare il rilevamento",weatherNeedsDate:"Serve una data completa (anno, mese e giorno) per cercare i rilevamenti meteo",weatherNeedsPlace:"Serve un luogo con coordinate per cercare i rilevamenti meteo",weatherNoRecord:"Nessun rilevamento per questa data e questo luogo",weatherLookupFailed:"Rilevamenti meteo momentaneamente irraggiungibili",lightPollutionLookingUp:"Consultazione dell'atlante…",lightPollutionFound:"{artificial} µcd/m² di luce artificiale,",lightPollutionNatural:"Nessuna luce artificiale qui,",lightPollutionOutside:"Fuori dall'atlante (da 85°N a 60°S),",lightPollutionFailed:"Atlante al momento irraggiungibile",lightPollutionTooEarly:"L'atlante descrive il {atlasYear}; il cielo del {year} era più buio, indicarlo se è noto",instrumentOutOfPeriod:"{name} — non di quest'epoca",instrumentCategoryEye:"Occhio nudo",instrumentCategoryCamera:"Fotocamere",instrumentCategoryDslr:"Reflex digitali",instrumentCategoryPhone:"Telefoni",instrumentCategoryBinoculars:"Binocoli",instrumentCategoryTelescope:"Telescopi",instrumentNotYetOnSale:"Non esisteva ancora nel {year} (in vendita dal {from})",instrumentNoLongerOnSale:"Non esisteva più nel {year} (in vendita fino al {to})",filterNotForInstrument:"Non utilizzabile con questo strumento",unitMillimetres:"mm",unitDegrees:"°",fieldOfViewReadout:"{deg}° di campo",soundSrcPlaceholder:"URL di una registrazione reale",referenceGroup:"Foto",reference:"Foto",referenceTitle:"Nome",referenceSrc:"Indirizzo",referenceSrcPlaceholder:"https://…/photo.jpg",referenceKind:"Tipo",referencePhoto:"Foto",referencePanorama:"Panorama (360°)",referenceCredit:"Crediti",referenceCreditUrl:"Link dei crediti",referenceT:"Scattata a",referenceDrawing:"Disegno sopra",referenceOpacity:"Opacità",referenceHeading:"Direzione",referencePitch:"Beccheggio",referenceRoll:"Rollio",referenceFov:"Campo verticale",referenceUsePose:"Usa la posa dell'osservatore",addReferenceUrl:"Aggiungi da un indirizzo",addReferenceFile:"Aggiungi un file",deleteReference:"Elimina foto",referenceEmbedded:"{kb} kB incorporati nella registrazione — un indirizzo la terrebbe leggera",referenceUnreachable:"Impossibile caricare la foto: controlla l'indirizzo e che il suo sito permetta ad altri siti di leggerla",referenceRegisterHint:"Trascina per ruotare la foto, rotellina per cambiarne il campo; «Aggiungi un punto di riferimento» per indicare un dettaglio sulla foto, poi lo stesso nel rendering",referenceLandmarkPicture:"Punto di riferimento {n}: clicca il punto sulla foto",referenceLandmarkScene:"Punto di riferimento {n}: clicca lo stesso punto nel rendering",referenceLandmarkOffPicture:"Questo clic non cade sulla foto",referenceNotLoaded:"La foto non è ancora arrivata",referenceLandmarksFit:"{n} punti di riferimento — scarto medio di {deg}°",referenceLandmarks:"Punti di riferimento",addReferenceLandmark:"Aggiungi un punto di riferimento",deleteReferenceLandmark:"Elimina punto di riferimento",referenceLandmarkLabel:"Nome",referenceLandmarkLabelPlaceholder:"Albero che copre, recinzione…",referenceAdoptPose:"Adotta come posa dell'osservatore",referenceAdoptRationale:"Misurato sulla foto «{title}»: {n} punti di riferimento allineati, {deg}° di scarto residuo",referenceStreetSearch:"Foto stradali nei dintorni",referenceStreetSearching:"Ricerca di foto scattate nei dintorni…",referenceStreetNone:"Nessuna foto stradale entro {m} m (Panoramax)",referenceStreetFailed:"Impossibile raggiungere Panoramax",referenceStreetAdd:"Aggiungi",traceImport:"Tracciati dell'investigatore (KML, KMZ)",trace:"Tracciato",deleteTrace:"Elimina il tracciato",traceTitle:"Nome",traceSource:"Fonte",traceImported:"{n} importato/i da {name}.",traceSkipped:"Escluso: {what}.",traceNone:"Nessuna linea, luogo o contorno in questo file.",traceFailed:"Impossibile leggere questo file.",traceKindPoint:"luogo",traceKindLine:"linea",traceKindPolygon:"contorno",referenceStreetItem:"{distance} m a {bearing}°, {date}{panorama}",referenceStreetPanorama:" — 360°",referenceStreetTitle:"Foto stradale a {distance} m a {bearing}°, {date}",skyLine:"Cielo: {parts}",skyStarsEye:"stelle fino alla magnitudine {limit}, il limite che un occhio raggiungeva sotto questo cielo",skyStarsDeeper:"stelle fino alla magnitudine {limit} attraverso un {device} — {gain} magnitudini oltre le {eye} raggiunte dagli occhi dell'osservatore",skyStarsShallower:"stelle fino alla magnitudine {limit} attraverso un {device} — {gain} magnitudini al di qua delle {eye} raggiunte dagli occhi dell'osservatore",skyStarsCatalogue:", disegnate fino a {catalogue}, dove si ferma il catalogo di questo progetto",skyStarsNone:"nessuna stella si distingueva in un cielo così chiaro",skyDetails:"Mostra i rilevamenti completi",skyDetailsHide:"Nascondi i rilevamenti",skyShowerActive:"{name} — radiante a {altitude}° sopra l'orizzonte, {bearing} — circa {rate}/h sotto questo cielo, su un fondo sporadico di {sporadic}/h",skyShowerBelowHorizon:"{name} è attivo, ma il suo radiante è sotto l'orizzonte — non ha potuto produrre nulla",skyNothingActive:"nessuno sciame meteorico attivo in questa data — un fondo sporadico di circa {sporadic}/h",showMeteor:"Mostrami una meteora",skyComet:"La {name}, magnitudine {magnitude}, a {altitude}° sopra l'orizzonte {bearing}, coda lunga {tail}°",skyCometNoTail:"La {name}, magnitudine {magnitude}, a {altitude}° sopra l'orizzonte {bearing}",skyCometBelowHorizon:"La {name} c'era, di magnitudine {magnitude}, ma sotto l'orizzonte — nessuno qui l'ha vista",skyCometInDaylight:"La {name}, magnitudine {magnitude}, a {altitude}° sopra l'orizzonte {bearing} — ma a soli {elongation}° dal Sole",showComet:"Mostrami la cometa",skyNova:"La {name}, una stella nuova di magnitudine {magnitude}, a {altitude}° sopra l'orizzonte {bearing}",skyNovaBelowHorizon:"La {name} brillava di magnitudine {magnitude}, ma sotto l'orizzonte: nessuno qui l'ha vista",showNova:"Mostrami la stella nuova",skyEclipsePartial:"Eclissi di Sole: la Luna nasconde il {percent} % del Sole alle {time}, a {altitude}° sopra l'orizzonte {bearing}",skyEclipseTotal:"Eclissi totale di Sole: il Sole è interamente nascosto dalle {time} per {duration}, a {altitude}° sopra l'orizzonte {bearing}",skySupermoon:"Luna piena a {distance} km: {diameter}° di larghezza, il {percent} % in più che alla distanza media — una «superluna», e non più grande all'orizzonte che in alto",skyMicromoon:"Luna piena a {distance} km: {diameter}° di larghezza, il {percent} % in meno che alla distanza media — una «microluna», e non più piccola all'orizzonte che in alto",skyRedMoon:"La «lune rousse»: la Luna piena della lunazione che segue la Pasqua, a {altitude}° sopra l'orizzonte {bearing} — bassa, quindi arrossata dall'aria che attraversa, e né più grande né più luminosa di un'altra",skySatellitePasses:"{count} satelliti hanno attraversato questo cielo abbastanza luminosi da essere visti, il più luminoso {name}, magnitudine {magnitude}, a {altitude}° sopra l'orizzonte {bearing} alle {time}",skySatellitePassesOne:"un satellite ha attraversato questo cielo abbastanza luminoso da essere visto: {name}, magnitudine {magnitude}, a {altitude}° sopra l'orizzonte {bearing} alle {time}",skySatelliteTrain:"tra cui un treno di {count} Starlink lanciati il {date}",skySatellitePassesNone:"secondo gli elementi orbitali archiviati per quella data, nessun satellite illuminato ha attraversato questo cielo abbastanza luminoso da essere visto",skySatelliteElementsGap:"nessun elemento orbitale archiviato vicino a quella data",skyReentries:"rientri registrati: {list}",skyReentriesMore:"altri {count}",skyReentrySeen:"{name} è ricaduto alle {time}, visto da {place} (a {distance} km)",skyReentryObserved:"{name} è ricaduto alle {time}, visto",skyReentryOffset:", a {minutes} min dall'osservazione",skyReentryPredicted:"{name} è ricaduto verso le {time} ± {hours} h, non si sa dove",skyReentryDay:"{name} è ricaduto il {date} (UTC), senza ora né luogo noti",skyFireballs:"{count} bolidi registrati dalla Global Meteor Network, il più luminoso di magnitudine {magnitude} alle {time}, a {altitude}° di altezza {bearing}, a {distance} km ({stations} stazioni)",skyFireballsOne:"un bolide registrato dalla Global Meteor Network: magnitudine {magnitude} alle {time}, a {altitude}° di altezza {bearing}, a {distance} km ({stations} stazioni)",showFireball:"Mostrami il bolide",showSatellite:"Mostrami un satellite",skyOpticsPossible:"nubi di ghiaccio sufficienti, intorno {source}, per {forms}",skyOpticsAlignment:" — tutto tranne gli anelli richiede cristalli che cadono orizzontali, qui supposti allineati al {alignment}%, poiché nessun rilevamento lo indica",skyOpticsHalo22:"un anello di {angle}°",skyOpticsHalo46:"un anello di {angle}°",skyOpticsParhelia:"pareli a {angle}° da entrambi i lati",skyOpticsTangentArc:"un arco tangente sopra",skyOpticsParhelicCircle:"un cerchio bianco che fa il giro del cielo alla sua stessa altezza",skyOpticsCircumzenithal:"un arco circumzenitale a {angle}° di altezza",skyOpticsCircumhorizontal:"un arco circumorizzontale molto più in basso",skyOpticsPillar:"una colonna eretta sopra",skyOpticsNoIce:"nessuna nube di ghiaccio: né alone né pareli",skyOpticsHidden:"nubi di ghiaccio in quota, ma uno strato più basso tra loro e l'osservatore",skyOpticsSun:"al Sole",skyOpticsMoon:"alla Luna",skyBowPossible:"pioggia e sole sufficienti per {forms}",skyBowMoon:"pioggia sotto una Luna illuminata al {lit}%, sufficiente per {forms} — un arcobaleno lunare, che l'occhio vede come un arco bianco",skyGlowBand:"la Via Lattea a {contrast}× il fondo del cielo, a {altitude}° di altezza {bearing}",skyGlowCone:"la luce zodiacale a {contrast}× il fondo del cielo, a {altitude}° di altezza {bearing}, a {elongation}° dal Sole — un tenue cono di luce inclinato, dai bordi sfumati, svanito entro un'ora",skyGlowZodiacalBand:"la banda zodiacale a {contrast}× il fondo del cielo, a {altitude}° di altezza {bearing} — tutta l'eclittica debolmente accesa, che non è ciò che la gente riferisce",skyGlowMoon:"né Via Lattea né luce zodiacale: una Luna illuminata al {lit}% teneva il cielo a {sky} magnitudini per secondo d'arco quadrato, dove ne servono 22",skyGlowTwilight:"né Via Lattea né luce zodiacale: il crepuscolo teneva ancora il cielo a {sky} magnitudini per secondo d'arco quadrato, dove ne servono 22",skyGlowTowns:"né Via Lattea né luce zodiacale: il bagliore delle città teneva il cielo a {sky} magnitudini per secondo d'arco quadrato, dove ne servono 22",skyGlowNothingUp:"cielo abbastanza buio ({sky} magnitudini per secondo d'arco quadrato), ma né il piano galattico né l'eclittica vi stavano abbastanza in alto",skyBowPrimary:"un arco di {radius}° di raggio, con la sommità a {top}° di altezza",skyBowSecondary:"un secondo, più tenue, a {radius}°, con i colori invertiti",skyBowSourceTooHigh:"pioggia, ma con l'astro a {altitude}° di altezza nessun arco poteva superare l'orizzonte: si trovano a {radius}° dal punto opposto",skyBowHidden:"pioggia, ma uno strato continuo tra essa e la luce: nessun arco",skyBowNoSource:"pioggia, e niente di illuminato per farne un arco",skySatellitesLit:"l'ombra della Terra era a {height} km sopra l'osservatore, quindi l'orbita bassa era ancora al sole — {count} oggetti catalogati erano in orbita quel mese",skySatellitesLitWith:"l'ombra della Terra era a {height} km sopra l'osservatore, quindi l'orbita bassa era ancora al sole — {count} oggetti catalogati erano in orbita quel mese, tra cui {eras}",skySatellitesShadowed:"l'ombra della Terra era a {height} km sopra l'osservatore: dei {count} oggetti catalogati in orbita quel mese, niente in orbita bassa era illuminato",skySatellitesNotYet:"non era ancora stato messo niente in orbita",skySatellitesDaylight:"tutto ciò che era in orbita era illuminato, come sempre di giorno, e {eras} potevano superare in luminosità persino questo cielo",skySatellitesDaylightOne:"tutto ciò che era in orbita era illuminato, come sempre di giorno, e {eras} poteva superare in luminosità persino questo cielo",skyUnknown:"non determinabile senza una data e un luogo",lookAtDecor:"Guardalo",addDecor:"Aggiungi",deleteDecor:"Elimina elemento della scenografia",undo:"Annulla",redo:"Ripristina",viewAccount:"Vedi il resoconto",noObserverRecording:"Nessun URL di registrazione per questo osservatore",masks:"Nasconde",masksNone:"Nessun fenomeno da nascondere per ora",masksBodyFully:"nascosto da questo oggetto",masksBodyPartly:"nascosto al {share} % da questo oggetto",masksBodyNot:"non nascosto da questo oggetto",modelPickerTitle:"Scegliere un modello 3D",modelPickerClose:"Chiudere",modelPickerChoose:"Scegliere un modello 3D",modelPickerUse:"Usa questo modello",modelPickerIncomplete:"Non disegnato finché non sono indicati il nome e la licenza del modello",addObserver:"Aggiungi osservatore",surveyLabel:"Scenografia ricavata da un rilievo",surveySource:"Scenografia da",surveyDated:"Rilevato il: {dates}.",surveyLaserLabel:"laser",surveyPhotoLabel:"foto aerea",surveyMapLabel:"carta",surveyLampsLabel:"OpenStreetMap",surveyWarning:"⚠ Questa scenografia viene da rilievi del {survey}, successivi all'osservazione ({observation}): non è ciò che c'era allora. Teneteli come riferimento, o eliminateli.",surveyRadius:"Raggio",surveyRadiusTitle:"Fino a dove intorno all'osservatore si interroga il rilievo, in metri. Un raggio più ampio porta edifici, ponti e linee più lontani; gli alberi vengono dal laser, che si interroga solo entro 150 m.",surveySourceTitle:"Il rilievo da cui sono ricavati, da soli, gli alberi, gli edifici, i ponti e le linee aeree attorno al luogo quando date un luogo alla registrazione: sono messi nell'elenco, al loro posto, con altezza e larghezza misurate. Le coordinate del luogo sono inviate a quel servizio. Nessuno lascia la scenografia a voi soli. Ciò che avete collocato voi non viene mai toccato.",surveySourceNone:"Nessuno (tutto a mano)",surveyBusy:"Ricerca della scenografia attorno all'osservatore…",surveyDone:"Da {source}: alberi {trees}, edifici {buildings}, ponti {bridges}, linee elettriche {lines}. Sono quelli del giorno del rilievo, non della registrazione: teneteli, spostateli o eliminateli.",surveyNone:"Nessun albero, edificio, ponte né linea elettrica trovato entro {radius} m.",surveyKept:"Ciò che avete collocato voi resta com'è.",surveyUnreachable:"Impossibile raggiungere il rilievo. Riprovate più tardi.",surveyFurniturePending:"Illuminazione pubblica e semafori: in attesa di OpenStreetMap…",surveyFurnitureDone:"Da {source}: lampioni {lamps}, semafori {signals}, attraversamenti {crossings}, segnali {signs}.",surveyFurnitureUnavailable:"Illuminazione pubblica e semafori non disponibili per ora: OpenStreetMap non risponde.",surveyFurnitureRetry:"Riprova",narrativePlaceholder:"Ciò che l'osservatore ha riferito, con parole sue",narrativeSource:"Redatto da",narrativeNeedsSetting:'Compila "{setting}" ({source}) per generare una ricostruzione dal resoconto',narrativeNeedsAsk:"Ancora niente da inviare",narrativeRemember:"Ricorda su questo dispositivo",narrativeDraft:"Genera ricostruzione",narrativeStop:"Ferma",narrativeWorking:"Lettura del resoconto…",narrativeApplied:"{count} campi scritti nell'editor",narrativeUnchanged:"Il resoconto non dice ancora nulla che la registrazione possa contenere",narrativeStated:"Ciò che l'osservatore ha detto",narrativeDerived:"Ricavato dal resoconto",narrativeAssumed:"Supposto, perché la ricostruzione funzioni — da verificare",narrativeGaps:"Ciò che niente ha potuto stabilire",narrativeErrorCredential:"Nessuna chiave, o una chiave rifiutata — controllala su console.anthropic.com",narrativeErrorRateLimited:"Troppe richieste sul tuo account: aspetta un momento e richiedi",narrativeErrorRefused:"Il resoconto non ha avuto risposta. Riformularlo può aiutare; richiederlo no",narrativeErrorMalformed:"La risposta non era una bozza utilizzabile — vale la pena richiederla ancora una volta",narrativeErrorUnreachable:"Nulla ha risposto: controlla la connessione",narrativeErrorRejected:"Rifiutato: {detail}",observerAge:"Età allora",observerBirth:"Nato il",observerPerception:{"color-vision":"Visione dei colori","color-vision.hint":"Come appaiono i colori a chi ha coni diversi (Machado et al. 2009). Ricolora soltanto: luminosità e risoluzione restano uguali.","color-vision.type":"Tipo","color-vision.type.normal":"Tipica","color-vision.type.protan":"Protan (rosso debole o cieco)","color-vision.type.deutan":"Deutan (verde debole o cieco)","color-vision.type.tritan":"Tritan (blu debole o cieco)","color-vision.severity":"Gravità",intoxication:"Alcol","intoxication.hint":"Riduce la sensibilità al contrasto di circa 0,9 dB a 0,08 % di alcol nel sangue (uno studio controllato; i risultati variano), mostrato fino a 0,1 % al massimo: un livello più alto viene registrato ma mostrato come 0,1 %, poiché oltre non è stato misurato nulla. Visione doppia, campo ristretto e altre droghe non sono modellati: nessuna fonte li quantifica.","intoxication.bloodAlcohol":"Alcolemia",fatigue:"Stanchezza","fatigue.hint":"Solo dichiarata: non è dimostrato che la mancanza di sonno cambi ciò che riceve un occhio sano, quindi l'immagine non cambia. Riguarda attenzione e memoria, non la vista.","fatigue.hoursAwake":"Sveglio da"},observerOccupation:"Professione",accountSource:"Resoconto raccolto",accountUrl:"Fonte (URL)",accountSourceUnknown:"sconosciuto",accountSourceOnSite:"indagine sul posto",accountSourceInterview:"colloquio di persona",accountSourceTelephone:"per telefono",accountSourceQuestionnaire:"questionario",accountSourceLetter:"l'ha scritto l'osservatore",accountSourceSocialMedia:"l'ha pubblicato l'osservatore in rete",accountSourcePress:"stampa o radiotelevisione",accountFollowedUp:"Ricontattato",accountUnknown:"sconosciuto",accountYes:"sì",accountNo:"no",questionUnanswered:"Nulla in questa registrazione risponde a una delle domande che una ricostruzione deve risolvere",durationRequired:"L'osservazione ha bisogno di una durata per poter essere riprodotta — indicala, o un'ora di fine, che può essere approssimativa",questionsUnanswered:"{count} delle domande a cui risponde una ricostruzione completa restano qui senza risposta",emptyDecor:"Nessun elemento della scenografia",emptyMilestones:"Nessun momento",emptyReferences:"Nessuna foto",emptyReferenceLandmarks:"Nessun punto di riferimento",emptyTraces:"Nessun tracciato dell'investigatore",emptyShapes:"Nessuna forma",addReference:"Aggiungi una foto",principalObserver:"Osservatore di questo resoconto",deleteObserver:"Elimina l'osservatore"};export{a as sightingEditorMessages_it};