-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
1653 lines (1533 loc) · 181 KB
/
Copy pathindex.html
File metadata and controls
1653 lines (1533 loc) · 181 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title data-es="BioModelling Pro — Biogeografía y modelado de distribución de especies" data-en="BioModelling Pro — Biogeography and species distribution modelling">BioModelling Pro — Biogeografía y modelado de distribución de especies</title>
<meta name="description" content="GBIF records, cleaning, bioclimatic variables, statistics, multivariate methods and species distribution models (MaxEnt and nine more algorithms) in the browser.">
<link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ccircle cx='16' cy='16' r='13' fill='none' stroke='%231f7a4d' stroke-width='3'/%3E%3Cpath d='M5 19c5-7 10-7 14-3s6 2 8-2' stroke='%23cf6a24' stroke-width='2.6' fill='none' stroke-linecap='round'/%3E%3Ccircle cx='12' cy='11' r='2.4' fill='%23e0ac2b'/%3E%3Ccircle cx='21' cy='21' r='2.4' fill='%23e0ac2b'/%3E%3C/svg%3E">
<link rel="stylesheet" href="vendor/leaflet/leaflet.css">
<link rel="stylesheet" href="css/labg-base.css">
<link rel="stylesheet" href="css/style.css">
<link rel="stylesheet" href="css/filters.css">
<link rel="stylesheet" href="css/figstudio.css">
<link rel="stylesheet" href="css/diversity.css">
<link rel="stylesheet" href="css/agroclim.css">
<link rel="stylesheet" href="css/help.css">
<!-- común de la suite primero; i18n.js aplica el tema guardado antes de pintar -->
<script src="js/labg-core.js"></script>
<!-- Estudio de figuras y Navegador LABG: módulos compartidos de la suite (íconos de Lucide, ISC; ver LICENSES-TERCEROS.md) -->
<script src="js/labg-figure-studio.js" defer></script>
<script src="js/labg-navigator.js" defer></script>
<script src="js/labg-fx.js" data-app="biomodellingpro" defer></script>
<script src="js/i18n.js"></script>
</head>
<body class="on-home">
<a class="skip-link" href="#main"><span data-l="es">Saltar al contenido</span><span data-l="en">Skip to content</span></a>
<header class="topbar">
<div class="topbar-inner">
<div class="topbar-row">
<a class="brand" id="brand" href="#" data-es-title="Inicio de BioModelling Pro" data-en-title="BioModelling Pro home"><span id="brandLogo"></span><span>BioModelling <span class="brand-pro">Pro</span></span>
<span class="brand-sub">· <span data-l="es">biogeografía y modelado de distribución</span><span data-l="en">biogeography and distribution modelling</span></span></a>
<div class="top-tools">
<a class="suite-link" href="https://luisangelbg.github.io/" data-es-title="Volver al portal de la LABG Suite" data-en-title="Back to the LABG Suite portal">
<svg class="labg-iso" viewBox="0 0 828 946.2" aria-hidden="true" focusable="false"><defs><linearGradient id="labgIsoHo" gradientUnits="userSpaceOnUse" x1="0" y1="473.1" x2="828" y2="413.1"><stop offset="0" stop-color="#BF8B3C"/><stop offset=".3" stop-color="#C99C49"/><stop offset=".55" stop-color="#D9B05C"/><stop offset=".78" stop-color="#E6C470"/><stop offset="1" stop-color="#F6D985"/></linearGradient><linearGradient id="labgIsoHb"><stop offset="0" stop-color="#FFF8E6" stop-opacity="0"/><stop offset=".5" stop-color="#FFF8E6" stop-opacity=".95"/><stop offset="1" stop-color="#FFF8E6" stop-opacity="0"/></linearGradient><clipPath id="labgIsoHc"><path clip-rule="evenodd" d="M440.8 246.5L421.7 257.7L404.8 247.9L424 236.8ZM318.9 256.4L301.7 266.3L285.7 257.1L302.9 247.2ZM522.2 260.9L438.6 309.1L420.1 298.5L503.7 250.2ZM392.5 269.9L373.4 280.9L356.1 271L375.3 260ZM277 277.3L235 301.6L219.9 292.9L261.9 268.6ZM576.1 291.8L398.2 394.4L380.4 384.1L558.3 281.5ZM348.1 295.6L287.5 330.5L270.1 320.5L330.6 285.6ZM404.3 419.1L577.9 318.9L579.2 318.1C579.6 318 580.7 317.9 581.5 317.6C582.2 317.4 583 317 583.8 316.6C584.5 316.2 585.3 315.8 586 315.5C586.8 315.1 587.6 314.8 588.3 314.4C589 314.1 589.8 313.8 590.6 313.5C591.4 313.2 592.2 313 593 312.9C593.8 312.6 594.6 312.5 595.5 312.4C596.3 312.2 597.1 312.2 597.9 312.1C598.9 312.1 599.7 312.1 600.4 312.1C601.4 312.1 602.2 312.1 603 312.2C603.9 312.3 604.7 312.4 605.5 312.5C606.3 312.7 607.1 313 607.9 313.2C608.7 313.5 609.5 313.9 610.1 314.2C610.9 314.6 611.6 315 612.4 315.5C613.1 315.8 613.8 316.3 614.5 316.7C615.2 317.3 615.8 317.8 616.5 318.3C617.1 318.8 617.8 319.4 618.3 319.9C618.9 320.6 619.5 321.2 620.1 321.9C620.6 322.4 621.1 323.1 621.7 323.8C622.1 324.5 622.6 325.2 623 325.8C623.5 326.5 623.9 327.2 624.4 328C624.8 328.7 625.2 329.4 625.6 330.2C626 330.9 626.4 331.7 626.8 332.3C627.1 333.1 627.5 333.8 627.9 334.6C628.3 335.4 628.6 336.1 628.9 336.9C629.3 337.7 629.6 338.4 630 339.2C630.3 340 630.7 340.7 630.9 341.5C631.2 342.3 631.6 343.1 631.9 343.9C632.1 344.5 632.5 345.3 632.7 346.1C632.9 346.9 633.3 347.7 633.5 348.5C633.7 349.3 634 350.1 634.3 350.9C634.5 351.7 634.8 352.5 635.1 353.3C635.3 354.1 635.7 354.9 635.9 355.7C636.1 356.5 636.5 357.3 636.7 358.1C636.9 358.9 637.2 359.7 637.3 360.5C637.5 361.3 637.7 362.1 638 362.9C638.1 363.8 638.3 364.6 638.5 365.4C638.6 366.2 638.9 367 639.1 367.8C639.2 368.6 639.4 369.4 639.7 370.3C639.9 371.1 640 371.9 640.2 372.7C640.3 373.5 640.5 374.3 640.7 375.2C640.8 376 640.9 376.8 641 377.6C641.1 378.5 641.3 379.3 641.4 380.1C641.5 381 641.5 381.8 641.6 382.6C641.7 383.4 641.7 384.3 641.8 385.1C641.9 385.9 641.9 386.8 642.1 387.6C642.1 388.4 642.2 389.3 642.3 390.1C642.3 390.9 642.4 391.9 642.4 392.7C642.5 393.5 642.6 394.2 642.6 395.2C642.7 396 642.7 396.8 642.9 397.7C642.9 398.5 642.9 399.3 642.9 400.2C642.9 401 642.9 401.8 642.9 402.7C642.9 403.5 642.9 404.3 642.7 405.2C642.6 406 642.6 406.8 642.5 407.7C642.4 408.5 642.3 409.3 642.2 410.1C642.1 411 641.9 411.8 641.7 412.6C641.6 413.4 641.5 414.2 641.3 415.1C641.1 415.9 640.9 416.7 640.8 417.5C640.6 418.3 640.3 419.1 640.2 420C640 420.8 639.8 421.6 639.6 422.4C639.4 423.2 639.2 424 638.9 424.8C638.6 425.6 638.4 426.4 638.2 427.2C637.8 428 637.6 428.8 637.3 429.6C637 430.4 636.8 431.2 636.6 432C636.4 432.8 636.2 433.6 636.1 434.5C636.1 435.3 636.2 436.1 636.4 436.9C636.5 437.8 636.8 438.6 637 439.3C637.4 440.1 637.8 440.9 638.2 441.6C638.6 442.2 639.1 442.9 639.6 443.7C640 444.4 640.5 445.1 640.9 445.8C641.4 446.5 641.8 447.1 642.3 447.9C642.6 448.6 643.1 449.3 643.4 450.1C643.9 450.8 644.2 451.6 644.6 452.4C644.9 453.1 645.3 453.9 645.6 454.7C645.9 455.5 646.2 456.2 646.5 456.9C646.8 457.7 647.1 458.5 647.4 459.3C647.6 460.1 647.9 460.9 648.2 461.7C648.4 462.5 648.7 463.3 648.9 464.1C649.1 464.9 649.2 465.7 649.5 466.5C649.7 467.3 649.8 468.2 650 469C650.2 469.8 650.4 470.6 650.5 471.4C650.6 472.3 650.8 473.1 651 473.9C651.1 474.7 651.3 475.5 651.4 476.4C651.5 477.2 651.7 478 651.9 478.8C652 479.6 652.1 480.5 652.2 481.3C652.3 482.1 652.4 483.1 652.5 483.9C652.7 484.7 652.7 485.4 652.8 486.4C652.8 487.2 652.9 488 652.9 488.9C652.9 489.7 653 490.5 653 491.4C653 492.2 653 493 653 493.9C653 494.7 653 495.5 653 496.4C653 497.2 653 498 653 498.9C653 499.7 653 500.5 652.9 501.4C652.9 502.2 652.9 503 652.9 503.9C652.9 504.7 652.8 505.5 652.8 506.4C652.7 507.2 652.7 508 652.5 508.9C652.5 509.7 652.4 510.5 652.3 511.4C652.3 512.2 652.2 513 652.1 513.8C652 514.7 651.9 515.5 651.7 516.3C651.6 517.1 651.5 518.1 651.3 518.9C651.2 519.6 651.1 520.4 651 521.4C650.8 522.2 650.6 523 650.5 523.8C650.4 524.7 650.3 525.5 650 526.3C649.9 527.1 649.7 527.9 649.6 528.8C649.4 529.6 649.2 530.4 649 531.2C648.9 532 648.7 532.8 648.6 533.7C648.3 534.5 648.1 535.3 648 536.1C647.8 536.9 647.5 537.7 647.3 538.5C647.2 539.3 647 540.2 646.7 541C646.4 541.8 646.2 542.6 645.9 543.4C645.7 544 645.4 544.8 645 545.6C644.8 546.4 644.5 547.2 644.1 548C643.8 548.7 643.5 549.5 643.2 550.3C642.9 551.1 642.5 551.8 642.2 552.6C641.8 553.4 641.6 554.2 641.3 554.9C640.9 555.7 640.6 556.5 640.2 557.3C639.9 558 639.6 558.8 639.2 559.5C638.8 560.2 638.4 561 638 561.7C637.6 562.4 637.2 563.2 636.7 563.9C636.4 564.6 635.9 565.4 635.4 566C635 566.7 634.5 567.4 634 568.1C633.5 568.8 633.1 569.5 632.5 570.2C632 570.7 631.5 571.4 630.9 572.1C630.4 572.7 629.9 573.3 629.3 573.9C628.7 574.6 628.2 575.2 627.6 575.7C626.9 576.3 626.3 576.9 625.6 577.4C625.1 578 624.4 578.5 623.7 579C623 579.5 622.3 580 621.7 580.4C621 581 620.3 581.4 619.6 581.9C618.9 582.3 618 582.9 617.5 583.4C617.2 583.8 617.3 584.4 617.2 584.6L403.2 708.2L380.8 695.3L380.8 575.7L220.4 483.2L218.9 482.3C218.5 482.1 217.4 481.9 216.6 481.7C215.9 481.3 215.1 480.9 214.3 480.5C213.6 480.3 212.8 479.9 212.1 479.7C211.3 479.5 210.3 479.4 209.5 479.4C208.7 479.5 207.5 479.7 207 479.9C206.7 479.9 207 479.9 207 479.9L207 596.8L175.1 578.4L175.1 319.8L203.6 303.3L404.3 419.1ZM400.8 328.5L342.4 362.2L325.6 352.6L384.1 318.8ZM381.2 446.6L381.2 536.9L206.8 436.2L206.8 345.9ZM440.3 521.4L440.3 561.1L605.9 465.6L606.9 464.9C607.2 465.3 607.7 466.4 608.3 467C608.9 467.7 609.7 468 610.4 468.5C610.9 469 611.7 469.5 612.3 470.1C612.9 470.6 613.4 471.2 614 471.9C614.5 472.6 614.9 473.3 615.4 473.9C615.8 474.7 616.2 475.4 616.5 476.2C616.9 476.9 617.2 477.7 617.5 478.5C617.9 479.3 618.1 480.1 618.3 480.9C618.7 481.7 618.9 482.5 619.1 483.3C619.4 484.1 619.6 484.9 619.8 485.7C619.9 486.5 620.2 487.3 620.3 488.1C620.4 489 620.6 489.8 620.7 490.6C620.9 491.4 621 492.3 621 493.1C621.1 493.9 621.2 494.8 621.3 495.6C621.3 496.4 621.4 497.2 621.4 498.1C621.5 498.9 621.5 499.7 621.7 500.6C621.7 501.4 621.8 502.2 621.8 503.1C621.8 503.9 621.8 504.7 621.8 505.6C621.8 506.4 621.8 507.2 621.8 508.1C621.8 508.9 621.7 509.7 621.7 510.6C621.7 511.4 621.5 512.2 621.4 513.2C621.4 513.9 621.3 514.7 621.2 515.5C621.1 516.5 621.1 517.3 621 518.1C620.9 519 620.7 519.8 620.6 520.6C620.5 521.4 620.5 522.3 620.3 523.1C620.2 523.9 620.1 524.8 619.9 525.6C619.7 526.4 619.5 527.2 619.4 528C619.1 528.8 618.8 529.6 618.6 530.4C618.2 531.2 618 532 617.7 532.8C617.3 533.4 617 534.2 616.6 535C616.3 535.8 616 536.5 615.6 537.3C615.3 538.1 614.9 538.8 614.6 539.6C614.1 540.3 613.8 541.1 613.3 541.8C612.9 542.4 612.4 543.1 612 543.8C611.5 544.5 610.9 545.2 610.4 545.8C609.8 546.4 609.2 547 608.7 547.6C608.1 548.1 607.4 548.7 606.7 549.3C606.1 549.7 605.5 550.3 604.8 550.8C604.1 551.3 603.4 552 602.8 552.4C602.2 552.6 601.1 552.8 600.8 552.8C600.4 552.8 600.6 552.6 600.6 552.6L415.5 659.3L415.5 455.6L595.9 351.5L597.6 350.6C597.8 350.8 598.6 351.8 599.3 352.3C600 352.6 600.9 352.6 601.7 352.9C602.5 353.1 603.3 353.6 604 353.9C604.7 354.3 605.4 354.8 606 355.4C606.6 355.9 607.2 356.5 607.7 357.2C608.3 357.9 608.8 358.6 609.2 359.3C609.7 359.9 610.1 360.6 610.5 361.4C610.9 362.1 611.3 362.9 611.6 363.6C612 364.4 612.3 365.2 612.6 366C612.9 366.7 613.2 367.5 613.4 368.3C613.8 369.1 614 369.9 614.4 370.7C614.6 371.4 614.8 372.2 615 373C615.2 373.8 615.4 374.8 615.5 375.6C615.7 376.4 615.8 377.1 616 377.9C616.1 378.9 616.2 379.7 616.3 380.5C616.3 381.4 616.4 382.2 616.5 383C616.5 383.8 616.6 384.7 616.6 385.5C616.8 386.3 616.8 387.2 616.9 388C616.9 388.8 616.9 389.7 616.9 390.5C616.9 391.3 616.9 392.2 616.9 393C616.8 393.8 616.8 394.7 616.8 395.5C616.6 396.3 616.5 397.2 616.5 398C616.4 398.8 616.3 399.6 616.2 400.5C616.1 401.3 615.8 402.1 615.7 402.9C615.5 403.8 615.4 404.6 615.2 405.4C614.9 406.2 614.7 407 614.5 407.8C614.2 408.6 614.1 409.4 613.8 410.2C613.6 411 613.3 411.8 613 412.6C612.8 413.4 612.4 414.2 612.1 414.9C611.7 415.7 611.3 416.5 610.9 417.2C610.5 417.8 610 418.5 609.6 419.2C609 419.9 608.5 420.6 608 421.3C607.4 421.8 606.8 422.5 606.3 423.1C605.7 423.7 605.1 424.3 604.6 424.9C604 425.5 603.4 426.2 602.8 426.7C602.3 427.3 601.6 428 601 428.4C600.6 428.9 600 429.1 599.8 429.2L440.3 521.4ZM596.1 417.6L576.9 428.8L531 402.3L550.4 391.2ZM353.9 441L293.6 475.8L276.3 465.7L336.5 431ZM498.1 481.7L478.6 492.9L423.7 461.3L443.2 450ZM374.5 483.1L343.5 501L326.6 491.3L357.6 473.4ZM603.5 540.4L584 551.7L531.7 521.5L551.2 510.2ZM272.6 534.1L272.6 633.6L255.3 623.6L255.3 524.1ZM320.8 561.3L320.8 596.5L303.7 586.6L303.7 551.5ZM363.7 585.2L363.7 684.2L348.4 675.4L348.4 576.4ZM320.8 609.7L320.8 629.8L302.9 619.4L302.9 599.3ZM320.8 642.9L320.8 661.4L303.3 651.2L303.3 632.9Z"/></clipPath></defs><path fill="url(#labgIsoHo)" fill-rule="evenodd" d="M414 0L828 232.9L828 713.3L414 946.2L0 713.3L0 232.9ZM414 36.6L796 251.5L796 694.7L414 909.6L32 694.7L32 251.5Z"/><path fill="#000" d="M414 36.6L796 251.5L796 694.7L414 909.6L32 694.7L32 251.5Z"/><path class="iso-cubo" fill="url(#labgIsoHo)" fill-rule="evenodd" d="M440.8 246.5L421.7 257.7L404.8 247.9L424 236.8ZM318.9 256.4L301.7 266.3L285.7 257.1L302.9 247.2ZM522.2 260.9L438.6 309.1L420.1 298.5L503.7 250.2ZM392.5 269.9L373.4 280.9L356.1 271L375.3 260ZM277 277.3L235 301.6L219.9 292.9L261.9 268.6ZM576.1 291.8L398.2 394.4L380.4 384.1L558.3 281.5ZM348.1 295.6L287.5 330.5L270.1 320.5L330.6 285.6ZM404.3 419.1L577.9 318.9L579.2 318.1C579.6 318 580.7 317.9 581.5 317.6C582.2 317.4 583 317 583.8 316.6C584.5 316.2 585.3 315.8 586 315.5C586.8 315.1 587.6 314.8 588.3 314.4C589 314.1 589.8 313.8 590.6 313.5C591.4 313.2 592.2 313 593 312.9C593.8 312.6 594.6 312.5 595.5 312.4C596.3 312.2 597.1 312.2 597.9 312.1C598.9 312.1 599.7 312.1 600.4 312.1C601.4 312.1 602.2 312.1 603 312.2C603.9 312.3 604.7 312.4 605.5 312.5C606.3 312.7 607.1 313 607.9 313.2C608.7 313.5 609.5 313.9 610.1 314.2C610.9 314.6 611.6 315 612.4 315.5C613.1 315.8 613.8 316.3 614.5 316.7C615.2 317.3 615.8 317.8 616.5 318.3C617.1 318.8 617.8 319.4 618.3 319.9C618.9 320.6 619.5 321.2 620.1 321.9C620.6 322.4 621.1 323.1 621.7 323.8C622.1 324.5 622.6 325.2 623 325.8C623.5 326.5 623.9 327.2 624.4 328C624.8 328.7 625.2 329.4 625.6 330.2C626 330.9 626.4 331.7 626.8 332.3C627.1 333.1 627.5 333.8 627.9 334.6C628.3 335.4 628.6 336.1 628.9 336.9C629.3 337.7 629.6 338.4 630 339.2C630.3 340 630.7 340.7 630.9 341.5C631.2 342.3 631.6 343.1 631.9 343.9C632.1 344.5 632.5 345.3 632.7 346.1C632.9 346.9 633.3 347.7 633.5 348.5C633.7 349.3 634 350.1 634.3 350.9C634.5 351.7 634.8 352.5 635.1 353.3C635.3 354.1 635.7 354.9 635.9 355.7C636.1 356.5 636.5 357.3 636.7 358.1C636.9 358.9 637.2 359.7 637.3 360.5C637.5 361.3 637.7 362.1 638 362.9C638.1 363.8 638.3 364.6 638.5 365.4C638.6 366.2 638.9 367 639.1 367.8C639.2 368.6 639.4 369.4 639.7 370.3C639.9 371.1 640 371.9 640.2 372.7C640.3 373.5 640.5 374.3 640.7 375.2C640.8 376 640.9 376.8 641 377.6C641.1 378.5 641.3 379.3 641.4 380.1C641.5 381 641.5 381.8 641.6 382.6C641.7 383.4 641.7 384.3 641.8 385.1C641.9 385.9 641.9 386.8 642.1 387.6C642.1 388.4 642.2 389.3 642.3 390.1C642.3 390.9 642.4 391.9 642.4 392.7C642.5 393.5 642.6 394.2 642.6 395.2C642.7 396 642.7 396.8 642.9 397.7C642.9 398.5 642.9 399.3 642.9 400.2C642.9 401 642.9 401.8 642.9 402.7C642.9 403.5 642.9 404.3 642.7 405.2C642.6 406 642.6 406.8 642.5 407.7C642.4 408.5 642.3 409.3 642.2 410.1C642.1 411 641.9 411.8 641.7 412.6C641.6 413.4 641.5 414.2 641.3 415.1C641.1 415.9 640.9 416.7 640.8 417.5C640.6 418.3 640.3 419.1 640.2 420C640 420.8 639.8 421.6 639.6 422.4C639.4 423.2 639.2 424 638.9 424.8C638.6 425.6 638.4 426.4 638.2 427.2C637.8 428 637.6 428.8 637.3 429.6C637 430.4 636.8 431.2 636.6 432C636.4 432.8 636.2 433.6 636.1 434.5C636.1 435.3 636.2 436.1 636.4 436.9C636.5 437.8 636.8 438.6 637 439.3C637.4 440.1 637.8 440.9 638.2 441.6C638.6 442.2 639.1 442.9 639.6 443.7C640 444.4 640.5 445.1 640.9 445.8C641.4 446.5 641.8 447.1 642.3 447.9C642.6 448.6 643.1 449.3 643.4 450.1C643.9 450.8 644.2 451.6 644.6 452.4C644.9 453.1 645.3 453.9 645.6 454.7C645.9 455.5 646.2 456.2 646.5 456.9C646.8 457.7 647.1 458.5 647.4 459.3C647.6 460.1 647.9 460.9 648.2 461.7C648.4 462.5 648.7 463.3 648.9 464.1C649.1 464.9 649.2 465.7 649.5 466.5C649.7 467.3 649.8 468.2 650 469C650.2 469.8 650.4 470.6 650.5 471.4C650.6 472.3 650.8 473.1 651 473.9C651.1 474.7 651.3 475.5 651.4 476.4C651.5 477.2 651.7 478 651.9 478.8C652 479.6 652.1 480.5 652.2 481.3C652.3 482.1 652.4 483.1 652.5 483.9C652.7 484.7 652.7 485.4 652.8 486.4C652.8 487.2 652.9 488 652.9 488.9C652.9 489.7 653 490.5 653 491.4C653 492.2 653 493 653 493.9C653 494.7 653 495.5 653 496.4C653 497.2 653 498 653 498.9C653 499.7 653 500.5 652.9 501.4C652.9 502.2 652.9 503 652.9 503.9C652.9 504.7 652.8 505.5 652.8 506.4C652.7 507.2 652.7 508 652.5 508.9C652.5 509.7 652.4 510.5 652.3 511.4C652.3 512.2 652.2 513 652.1 513.8C652 514.7 651.9 515.5 651.7 516.3C651.6 517.1 651.5 518.1 651.3 518.9C651.2 519.6 651.1 520.4 651 521.4C650.8 522.2 650.6 523 650.5 523.8C650.4 524.7 650.3 525.5 650 526.3C649.9 527.1 649.7 527.9 649.6 528.8C649.4 529.6 649.2 530.4 649 531.2C648.9 532 648.7 532.8 648.6 533.7C648.3 534.5 648.1 535.3 648 536.1C647.8 536.9 647.5 537.7 647.3 538.5C647.2 539.3 647 540.2 646.7 541C646.4 541.8 646.2 542.6 645.9 543.4C645.7 544 645.4 544.8 645 545.6C644.8 546.4 644.5 547.2 644.1 548C643.8 548.7 643.5 549.5 643.2 550.3C642.9 551.1 642.5 551.8 642.2 552.6C641.8 553.4 641.6 554.2 641.3 554.9C640.9 555.7 640.6 556.5 640.2 557.3C639.9 558 639.6 558.8 639.2 559.5C638.8 560.2 638.4 561 638 561.7C637.6 562.4 637.2 563.2 636.7 563.9C636.4 564.6 635.9 565.4 635.4 566C635 566.7 634.5 567.4 634 568.1C633.5 568.8 633.1 569.5 632.5 570.2C632 570.7 631.5 571.4 630.9 572.1C630.4 572.7 629.9 573.3 629.3 573.9C628.7 574.6 628.2 575.2 627.6 575.7C626.9 576.3 626.3 576.9 625.6 577.4C625.1 578 624.4 578.5 623.7 579C623 579.5 622.3 580 621.7 580.4C621 581 620.3 581.4 619.6 581.9C618.9 582.3 618 582.9 617.5 583.4C617.2 583.8 617.3 584.4 617.2 584.6L403.2 708.2L380.8 695.3L380.8 575.7L220.4 483.2L218.9 482.3C218.5 482.1 217.4 481.9 216.6 481.7C215.9 481.3 215.1 480.9 214.3 480.5C213.6 480.3 212.8 479.9 212.1 479.7C211.3 479.5 210.3 479.4 209.5 479.4C208.7 479.5 207.5 479.7 207 479.9C206.7 479.9 207 479.9 207 479.9L207 596.8L175.1 578.4L175.1 319.8L203.6 303.3L404.3 419.1ZM400.8 328.5L342.4 362.2L325.6 352.6L384.1 318.8ZM381.2 446.6L381.2 536.9L206.8 436.2L206.8 345.9ZM440.3 521.4L440.3 561.1L605.9 465.6L606.9 464.9C607.2 465.3 607.7 466.4 608.3 467C608.9 467.7 609.7 468 610.4 468.5C610.9 469 611.7 469.5 612.3 470.1C612.9 470.6 613.4 471.2 614 471.9C614.5 472.6 614.9 473.3 615.4 473.9C615.8 474.7 616.2 475.4 616.5 476.2C616.9 476.9 617.2 477.7 617.5 478.5C617.9 479.3 618.1 480.1 618.3 480.9C618.7 481.7 618.9 482.5 619.1 483.3C619.4 484.1 619.6 484.9 619.8 485.7C619.9 486.5 620.2 487.3 620.3 488.1C620.4 489 620.6 489.8 620.7 490.6C620.9 491.4 621 492.3 621 493.1C621.1 493.9 621.2 494.8 621.3 495.6C621.3 496.4 621.4 497.2 621.4 498.1C621.5 498.9 621.5 499.7 621.7 500.6C621.7 501.4 621.8 502.2 621.8 503.1C621.8 503.9 621.8 504.7 621.8 505.6C621.8 506.4 621.8 507.2 621.8 508.1C621.8 508.9 621.7 509.7 621.7 510.6C621.7 511.4 621.5 512.2 621.4 513.2C621.4 513.9 621.3 514.7 621.2 515.5C621.1 516.5 621.1 517.3 621 518.1C620.9 519 620.7 519.8 620.6 520.6C620.5 521.4 620.5 522.3 620.3 523.1C620.2 523.9 620.1 524.8 619.9 525.6C619.7 526.4 619.5 527.2 619.4 528C619.1 528.8 618.8 529.6 618.6 530.4C618.2 531.2 618 532 617.7 532.8C617.3 533.4 617 534.2 616.6 535C616.3 535.8 616 536.5 615.6 537.3C615.3 538.1 614.9 538.8 614.6 539.6C614.1 540.3 613.8 541.1 613.3 541.8C612.9 542.4 612.4 543.1 612 543.8C611.5 544.5 610.9 545.2 610.4 545.8C609.8 546.4 609.2 547 608.7 547.6C608.1 548.1 607.4 548.7 606.7 549.3C606.1 549.7 605.5 550.3 604.8 550.8C604.1 551.3 603.4 552 602.8 552.4C602.2 552.6 601.1 552.8 600.8 552.8C600.4 552.8 600.6 552.6 600.6 552.6L415.5 659.3L415.5 455.6L595.9 351.5L597.6 350.6C597.8 350.8 598.6 351.8 599.3 352.3C600 352.6 600.9 352.6 601.7 352.9C602.5 353.1 603.3 353.6 604 353.9C604.7 354.3 605.4 354.8 606 355.4C606.6 355.9 607.2 356.5 607.7 357.2C608.3 357.9 608.8 358.6 609.2 359.3C609.7 359.9 610.1 360.6 610.5 361.4C610.9 362.1 611.3 362.9 611.6 363.6C612 364.4 612.3 365.2 612.6 366C612.9 366.7 613.2 367.5 613.4 368.3C613.8 369.1 614 369.9 614.4 370.7C614.6 371.4 614.8 372.2 615 373C615.2 373.8 615.4 374.8 615.5 375.6C615.7 376.4 615.8 377.1 616 377.9C616.1 378.9 616.2 379.7 616.3 380.5C616.3 381.4 616.4 382.2 616.5 383C616.5 383.8 616.6 384.7 616.6 385.5C616.8 386.3 616.8 387.2 616.9 388C616.9 388.8 616.9 389.7 616.9 390.5C616.9 391.3 616.9 392.2 616.9 393C616.8 393.8 616.8 394.7 616.8 395.5C616.6 396.3 616.5 397.2 616.5 398C616.4 398.8 616.3 399.6 616.2 400.5C616.1 401.3 615.8 402.1 615.7 402.9C615.5 403.8 615.4 404.6 615.2 405.4C614.9 406.2 614.7 407 614.5 407.8C614.2 408.6 614.1 409.4 613.8 410.2C613.6 411 613.3 411.8 613 412.6C612.8 413.4 612.4 414.2 612.1 414.9C611.7 415.7 611.3 416.5 610.9 417.2C610.5 417.8 610 418.5 609.6 419.2C609 419.9 608.5 420.6 608 421.3C607.4 421.8 606.8 422.5 606.3 423.1C605.7 423.7 605.1 424.3 604.6 424.9C604 425.5 603.4 426.2 602.8 426.7C602.3 427.3 601.6 428 601 428.4C600.6 428.9 600 429.1 599.8 429.2L440.3 521.4ZM596.1 417.6L576.9 428.8L531 402.3L550.4 391.2ZM353.9 441L293.6 475.8L276.3 465.7L336.5 431ZM498.1 481.7L478.6 492.9L423.7 461.3L443.2 450ZM374.5 483.1L343.5 501L326.6 491.3L357.6 473.4ZM603.5 540.4L584 551.7L531.7 521.5L551.2 510.2ZM272.6 534.1L272.6 633.6L255.3 623.6L255.3 524.1ZM320.8 561.3L320.8 596.5L303.7 586.6L303.7 551.5ZM363.7 585.2L363.7 684.2L348.4 675.4L348.4 576.4ZM320.8 609.7L320.8 629.8L302.9 619.4L302.9 599.3ZM320.8 642.9L320.8 661.4L303.3 651.2L303.3 632.9Z"/><g clip-path="url(#labgIsoHc)"><rect class="iso-brillo" x="-300" y="-40" width="220" height="1030" fill="url(#labgIsoHb)" transform="skewX(-18)"/></g></svg>
<span class="suite-text">LABG Suite</span>
</a>
<div class="seg lang-seg" role="group" aria-label="Idioma / Language">
<button type="button" data-lang="es" title="Español">ES</button><button type="button" data-lang="en" title="English">EN</button>
</div>
<button type="button" class="icon-btn theme-btn" id="themeBtn" aria-label="Cambiar el tema" title="Cambiar el tema">
<svg class="sun" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><circle cx="12" cy="12" r="4.2"/><path d="M12 2v2.5M12 19.5V22M2 12h2.5M19.5 12H22M4.9 4.9l1.8 1.8M17.3 17.3l1.8 1.8M4.9 19.1l1.8-1.8M17.3 6.7l1.8-1.8"/></svg>
<svg class="moon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 14.5A8.5 8.5 0 1 1 9.5 4a7 7 0 0 0 10.5 10.5z"/></svg>
</button>
<button type="button" class="icon-btn" id="helpBtn" data-es-title="Atajos de teclado (?)" data-en-title="Keyboard shortcuts (?)">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="9"/><path d="M9.6 9.3a2.5 2.5 0 0 1 4.8.9c0 1.7-2.4 2.2-2.4 3.6"/><circle cx="12" cy="17" r=".6" fill="currentColor"/></svg>
</button>
</div>
</div>
<nav class="stepper" id="stepper" aria-label="Pasos">
<button type="button" class="step-btn active" data-step="0"><span class="step-num">⌂</span> <span data-l="es">Inicio</span><span data-l="en">Home</span></button>
<button type="button" class="step-btn" data-step="1"><span class="step-num">1</span> <span data-l="es">GBIF</span><span data-l="en">GBIF</span></button>
<button type="button" class="step-btn" data-step="2" disabled><span class="step-num">2</span> <span data-l="es">Filtrar</span><span data-l="en">Filter</span></button>
<button type="button" class="step-btn" data-step="3" disabled><span class="step-num">3</span> <span data-l="es">Depurar</span><span data-l="en">Clean</span></button>
<button type="button" class="step-btn" data-step="4" disabled><span class="step-num">4</span> <span data-l="es">Mapa</span><span data-l="en">Map</span></button>
<button type="button" class="step-btn" data-step="5" disabled><span class="step-num">5</span> <span data-l="es">Variables</span><span data-l="en">Variables</span></button>
<button type="button" class="step-btn" data-step="6" disabled><span class="step-num">6</span> <span data-l="es">Correlación</span><span data-l="en">Correlation</span></button>
<button type="button" class="step-btn" data-step="7" disabled><span class="step-num">7</span> <span data-l="es">Estadística</span><span data-l="en">Statistics</span></button>
<button type="button" class="step-btn" data-step="8" disabled><span class="step-num">8</span> <span data-l="es">ML y ecología</span><span data-l="en">ML and ecology</span></button>
<button type="button" class="step-btn" data-step="9" disabled><span class="step-num">9</span> <span data-l="es">Modelado SDM</span><span data-l="en">SDM modelling</span></button>
<button type="button" class="step-btn" data-step="10" disabled><span class="step-num">10</span> <span data-l="es">Agroclima</span><span data-l="en">Agroclimate</span></button>
</nav>
</div>
</header>
<main id="main" tabindex="-1">
<!-- ==================== HOME ==================== -->
<section class="step-panel active" id="panel-0">
<div class="hero">
<div class="hero-inner">
<div>
<div class="eyebrow"><span data-l="es">Biogeografía · nicho ecológico · modelado de distribución</span><span data-l="en">Biogeography · ecological niche · distribution modelling</span></div>
<h1><span data-l="es">De los <span class="accent">registros</span> al <span class="gold">mapa de idoneidad</span></span><span data-l="en">From <span class="accent">records</span> to the <span class="gold">suitability map</span></span></h1>
<p class="lead"><span data-l="es">Descarga registros de <b>GBIF</b>, depúralos, extrae <b>variables bioclimáticas, de clima y de suelo</b>,
explóralas con estadística y métodos multivariados y modela la <b>distribución de la especie</b> con <b>MaxEnt</b> y otros nueve
algoritmos, un ensamble y proyecciones a escenarios climáticos. Todo guiado, interpretado y sin instalar nada.</span><span data-l="en">Download <b>GBIF</b> records, clean them, extract <b>bioclimatic, climate and soil variables</b>,
explore them with statistics and multivariate methods and model the <b>species distribution</b> with <b>MaxEnt</b> and nine
more algorithms, an ensemble and projections to climate scenarios. Guided, interpreted and with nothing to install.</span></p>
<div class="hero-cta">
<button class="btn btn-primary btn-lg" id="startBtn"><span data-l="es">Empezar con mi especie →</span><span data-l="en">Start with my species →</span></button>
<button class="btn btn-secondary btn-lg" id="labBtn"><span data-l="es">Probar el laboratorio</span><span data-l="en">Try the lab</span></button>
<button class="btn btn-ghost btn-lg" id="theoryBtn"><span data-l="es">Leer la teoría</span><span data-l="en">Read the theory</span></button>
<button class="btn btn-ghost btn-lg" id="citeBtn"><span data-l="es">Cómo citar</span><span data-l="en">How to cite</span></button>
</div>
<div class="badge-row">
<span class="badge ok"><span data-l="es">Funciona completo en tu navegador</span><span data-l="en">Runs entirely in your browser</span></span>
<span class="badge ok"><span data-l="es">Tus archivos y análisis se quedan en tu equipo</span><span data-l="en">Your files and analyses stay on your computer</span></span>
<span class="badge ok"><span data-l="es">Español e inglés</span><span data-l="en">Spanish and English</span></span>
<span class="badge ok"><span data-l="es">Tema claro y oscuro</span><span data-l="en">Light and dark themes</span></span>
<span class="badge ok"><span data-l="es">MaxEnt + 9 algoritmos y ensamble</span><span data-l="en">MaxEnt + 9 algorithms and ensemble</span></span>
</div>
</div>
<div class="hero-art" id="heroArt" role="img" aria-label="Species distribution modelling illustration"></div>
</div>
</div>
<div class="messages" id="homeMessages"></div>
<h2 class="section-title"><span data-l="es">Cómo funciona</span><span data-l="en">How it works</span></h2>
<p class="section-sub"><span data-l="es">Una ruta guiada en el orden en que realmente se hace un estudio de distribución. Cada paso explica la idea,
revisa si tus datos la sostienen y te lleva al siguiente.</span><span data-l="en">A guided route in the order a distribution study really runs. Each step explains the idea,
checks whether your data can support it and takes you to the next.</span></p>
<div class="workflow" id="workflowStrip"></div>
<h2 class="section-title" id="labs"><span data-l="es">Pruébalo: un laboratorio con una especie virtual</span><span data-l="en">Try it: a lab with a virtual species</span></h2>
<p class="section-sub"><span data-l="es">Nada aquí es una animación. La app crea un paisaje con dos variables ambientales y una especie cuyo nicho <i>tú conoces</i>,
«muestrea» presencias (con o sin sesgo) y estima la idoneidad con algoritmos reales. Así ves cuánto se parece cada mapa estimado a la verdad.</span><span data-l="en">Nothing here is an animation. The app creates a landscape with two environmental variables and a species whose niche <i>you know</i>,
«samples» presences (with or without bias) and estimates suitability with real algorithms. You see how close each estimated map gets to the truth.</span></p>
<div class="playground" id="labBox"></div>
<h2 class="section-title"><span data-l="es">Los diez pasos</span><span data-l="en">The ten steps</span></h2>
<p class="section-sub"><span data-l="es">Haz clic en cualquiera para abrirlo (se habilitan conforme avanzas).</span><span data-l="en">Click any of them to open it (they unlock as you progress).</span></p>
<div class="feature-grid" id="featureGrid"></div>
<h2 class="section-title"><span data-l="es">Diez algoritmos y un ensamble</span><span data-l="en">Ten algorithms and an ensemble</span></h2>
<p class="section-sub"><span data-l="es">Métodos de solo presencia y de envoltura ambiental, de regresión y de aprendizaje automático, comparables con la misma validación.</span><span data-l="en">Presence-only and environmental-envelope methods, regression and machine-learning methods, comparable under the same validation.</span></p>
<div class="method-gallery" id="methodGallery"></div>
<h2 class="section-title" id="theory"><span data-l="es">Teoría en breve</span><span data-l="en">Theory in brief</span></h2>
<div class="card" id="theoryBox"></div>
<h2 class="section-title" id="cite"><span data-l="es">Cómo citar</span><span data-l="en">How to cite</span></h2>
<div class="card card-note" id="citeBox"></div>
</section>
<!-- ==================== STEP 1 · GBIF ==================== -->
<section class="step-panel" id="panel-1">
<div class="panel-title"><div class="pt-num">1</div><div>
<h2><span data-l="es">Buscar la especie en GBIF o subir tus registros</span><span data-l="en">Search the species in GBIF or upload your records</span></h2>
<p><span data-l="es">Resuelve el nombre científico y descarga los registros de presencia con coordenadas, o carga los tuyos (especie, longitud, latitud).</span><span data-l="en">Resolve the scientific name and download the presence records with coordinates, or load your own (species, longitude, latitude).</span></p></div></div>
<div class="card">
<p class="hint"><span data-l="es">Escribe el <b>nombre científico</b> (género y epíteto). GBIF resolverá el nombre aceptado y su clave taxonómica.</span><span data-l="en">Type the <b>scientific name</b> (genus and epithet). GBIF will resolve the accepted name and its taxon key.</span></p>
<div class="search-row">
<input type="text" id="speciesInput" aria-label="Nombre científico" data-es-title="Nombre científico" data-en-title="Scientific name" placeholder="Pinus cembroides" value="Pinus cembroides" autocomplete="off">
<button class="btn btn-primary" id="matchBtn"><span data-l="es">Buscar nombre</span><span data-l="en">Look up name</span></button>
<button class="btn btn-secondary" id="loadExampleBtn" data-es-title="Cargar registros de ejemplo incluidos (funciona sin conexión a GBIF)" data-en-title="Load the bundled example records (works without reaching GBIF)"><span data-l="es">Usar registros de ejemplo</span><span data-l="en">Use example records</span></button>
</div>
<div class="messages" id="matchMessages"></div>
<div id="matchResult" class="match-result" style="display:none"></div>
</div>
<div class="card" id="userDataCard">
<h2><span data-l="es">O sube tus propios registros</span><span data-l="en">Or upload your own records</span></h2>
<p class="hint"><span data-l="es">No todo está en GBIF. Sube un archivo <b>CSV, TXT o Excel (.xlsx)</b> con al menos tres columnas: <b>especie</b>, <b>longitud</b> y <b>latitud</b> (grados decimales; también se leen grados-minutos-segundos). Puedes usarlo solo o sumarlo a los registros de GBIF. Las columnas opcionales <i>país, estado, localidad, año, mes, altitud e incertidumbre</i> se reconocen solas.</span><span data-l="en">Not everything is in GBIF. Upload a <b>CSV, TXT or Excel (.xlsx)</b> file with at least three columns: <b>species</b>, <b>longitude</b> and <b>latitude</b> (decimal degrees; degrees-minutes-seconds are read too). You can use it alone or add it to the GBIF records. The optional columns <i>country, state, locality, year, month, elevation and uncertainty</i> are recognised automatically.</span></p>
<div class="dropzone" id="userDrop">
<div><span data-l="es">Arrastra aquí tu archivo o</span><span data-l="en">Drop your file here or</span></div>
<div class="search-row" style="justify-content:center;margin-top:8px">
<input type="file" id="userFile" accept=".csv,.txt,.tsv,.xlsx" aria-label="Elegir el archivo de registros" data-es-title="Elegir el archivo de registros" data-en-title="Choose the records file">
<button class="btn btn-ghost btn-sm" id="userTemplateBtn"><span data-l="es">⬇ Descargar plantilla</span><span data-l="en">⬇ Download template</span></button>
</div>
</div>
<details class="acc" style="margin-top:8px"><summary><span data-l="es">O pega tus datos desde Excel</span><span data-l="en">Or paste your data from a spreadsheet</span></summary>
<div class="acc-body">
<textarea id="userPaste" aria-label="Registros pegados (especie, longitud, latitud)" data-es-title="Registros pegados (especie, longitud, latitud)" data-en-title="Pasted records (species, longitude, latitude)" rows="5" style="width:100%;font-family:var(--mono);font-size:.82rem" data-es-ph="especie	longitud	latitud Pinus cembroides	-99.85	19.42" data-en-ph="species	longitude	latitude Pinus cembroides	-99.85	19.42"></textarea>
<button class="btn btn-secondary btn-sm" id="userPasteBtn"><span data-l="es">Leer el texto pegado</span><span data-l="en">Read the pasted text</span></button>
</div>
</details>
<div class="messages" id="userMessages"></div>
<div id="userMapping" style="display:none"></div>
</div>
<div class="card" id="fetchCard" style="display:none">
<h2><span data-l="es">Traer registros de presencia</span><span data-l="en">Fetch presence records</span></h2>
<div class="config-group">
<label class="checkbox-label"><input type="checkbox" id="optHasCoord" checked disabled> <span data-l="es">Solo registros con coordenadas</span><span data-l="en">Only records with coordinates</span></label>
<label class="checkbox-label"><input type="checkbox" id="optNoGeoIssue" checked> <span data-l="es">Excluir registros con problemas geoespaciales marcados por GBIF</span><span data-l="en">Exclude records with geospatial issues flagged by GBIF</span></label>
<label class="checkbox-label"><input type="checkbox" id="optIncludeInfra" checked> <span data-l="es">Incluir subespecies, variedades y formas</span><span data-l="en">Include subspecies, varieties and forms</span></label>
</div>
<div class="config-group" id="countryGroup">
<h3><span data-l="es">Países (opcional)</span><span data-l="en">Countries (optional)</span></h3>
<p class="hint"><span data-l="es">Pide a GBIF <b>solo</b> los registros de los países que marques. Es el filtro más eficaz cuando la especie tiene cientos de miles de registros en el mundo: la descarga baja de tamaño y el conteo que reporta GBIF ya viene filtrado. Si no marcas ninguno, se descarga de todo el mundo y puedes filtrar después en el paso 2.</span><span data-l="en">Ask GBIF <b>only</b> for records from the countries you tick. It is the most effective filter when a species has hundreds of thousands of records worldwide: the download shrinks and the count GBIF reports already comes filtered. With none ticked, the whole world is downloaded and you can filter later in step 2.</span></p>
<div class="region-btns" id="gbifCountryBtns"></div>
<div class="state-head">
<span data-l="es">Países</span><span data-l="en">Countries</span>
<a href="#" id="gcNone"><span data-l="es">sin filtro</span><span data-l="en">no filter</span></a>
</div>
<div class="state-list" id="gbifCountries"></div>
<div class="messages" id="gbifCountryStatus"></div>
</div>
<div class="config-group">
<label class="inline-label"><span data-l="es">Límite máximo de registros a descargar:</span><span data-l="en">Maximum number of records to download:</span>
<input type="number" id="maxRecords" value="20000" min="300" step="1000" style="width:110px"></label>
<p class="hint"><span data-l="es">GBIF entrega los registros en páginas de 300. Las especies muy comunes pueden tener cientos de miles; el límite evita descargas enormes. GBIF entrega primero los registros más recientes: para un estudio completo sube el límite por encima del total que reporta.</span><span data-l="en">GBIF delivers records in pages of 300. Very common species can have hundreds of thousands; the limit avoids huge downloads. GBIF returns the most recent records first: for a complete study raise the limit above the total it reports.</span></p>
</div>
<button class="btn btn-primary btn-lg" id="fetchBtn"><span data-l="es">Descargar registros →</span><span data-l="en">Download records →</span></button>
<div class="progress-wrap" id="fetchProgress" style="display:none">
<div class="progress-bar"><div class="progress-fill" id="fetchProgressFill"></div></div>
<span class="progress-label" id="fetchProgressLabel"></span>
</div>
<div class="messages" id="fetchMessages"></div>
</div>
<div class="card" id="rawPreviewCard" style="display:none">
<h2><span data-l="es">Registros descargados</span><span data-l="en">Downloaded records</span></h2>
<div class="results-summary" id="rawSummary"></div>
<div class="table-scroll" id="rawTable"></div>
<button class="btn btn-primary" id="toStep2Btn"><span data-l="es">Continuar a filtros →</span><span data-l="en">Continue to filters →</span></button>
</div>
</section>
<!-- ==================== STEP 2 · FILTER ==================== -->
<section class="step-panel" id="panel-2">
<div class="panel-title"><div class="pt-num">2</div><div>
<h2><span data-l="es">Filtrar los registros</span><span data-l="en">Filter the records</span></h2>
<p><span data-l="es">Por rango taxonómico, país, año, tipo de registro y recuadro geográfico.</span><span data-l="en">By taxonomic rank, country, year, record type and bounding box.</span></p></div></div>
<div class="card">
<p class="hint"><span data-l="es">Cada faceta muestra el número de registros. Los cambios se aplican al instante.</span><span data-l="en">Each facet shows the number of records. Changes apply instantly.</span></p>
<div class="filter-grid" id="filterGrid"></div>
</div>
<div class="card" id="stateCard">
<div class="results-header">
<h2><span data-l="es">Filtro por estado o región</span><span data-l="en">Filter by state or region</span></h2>
<label class="inline-label"><span data-l="es">Capa</span><span data-l="en">Layer</span> <select id="regionLayer"></select></label>
</div>
<p class="hint"><span data-l="es">Para estudios regionales. La app trae los <b>32 estados de México</b> y asigna el estado de cada registro por sus <b>coordenadas</b> (prueba de punto en polígono), lo que también completa los registros que llegan de GBIF sin estado. Si prefieres, usa el texto del campo «estado» tal como viene, normalizando las grafías y abreviaturas usuales. También puedes cargar tu propia capa de regiones (municipios, cuencas, áreas naturales protegidas…) en GeoJSON.</span><span data-l="en">For regional studies. The app ships the <b>32 states of Mexico</b> and assigns the state of each record from its <b>coordinates</b> (point-in-polygon test), which also completes the records that arrive from GBIF with no state. If you prefer, use the text of the «state» field as it comes, normalising the usual spellings and abbreviations. You can also load your own region layer (municipalities, watersheds, protected areas…) as GeoJSON.</span></p>
<div class="bbox-row">
<label><span data-l="es">Asignar el estado</span><span data-l="en">Assign the state</span>
<select id="stateMode">
<option value="fill" data-es="por coordenadas cuando falta el texto (recomendado)" data-en="from the coordinates when the text is missing (recommended)">por coordenadas cuando falta el texto (recomendado)</option>
<option value="coord" data-es="siempre por coordenadas" data-en="always from the coordinates">siempre por coordenadas</option>
<option value="text" data-es="solo con el texto del registro" data-en="from the record text only">solo con el texto del registro</option>
</select></label>
<button class="btn btn-secondary" id="regionFileBtn"><span data-l="es">📄 Cargar mi capa (GeoJSON)</span><span data-l="en">📄 Load my layer (GeoJSON)</span></button>
<input type="file" id="regionFile" accept=".geojson,.json" hidden>
<button class="btn btn-secondary" id="stateBboxBtn" data-es-title="Pone el recuadro geográfico en la envolvente de los estados elegidos" data-en-title="Sets the geographic rectangle to the envelope of the chosen states"><span data-l="es">Usar la selección como recuadro</span><span data-l="en">Use the selection as the rectangle</span></button>
<label class="checkbox-label"><input type="checkbox" id="stateOutlineChk" checked> <span data-l="es">Dibujar el contorno en los mapas</span><span data-l="en">Draw the outline on the maps</span></label>
</div>
<div id="stateRegionBtns" class="region-btns"></div>
<div id="stateFacet"></div>
<div id="stateStatus" class="messages"></div>
</div>
<div class="card">
<h2><span data-l="es">Recorte geográfico (opcional)</span><span data-l="en">Geographic clip (optional)</span></h2>
<p class="hint"><span data-l="es">Define un rectángulo de latitud y longitud para quedarte solo con los registros dentro de él, o dibújalo en el mapa.</span><span data-l="en">Define a latitude and longitude rectangle to keep only the records inside it, or draw it on the map.</span></p>
<div class="bbox-row">
<label><span data-l="es">Lat mín</span><span data-l="en">Min lat</span> <input type="number" id="bboxS" step="0.1" placeholder="-90"></label>
<label><span data-l="es">Lat máx</span><span data-l="en">Max lat</span> <input type="number" id="bboxN" step="0.1" placeholder="90"></label>
<label><span data-l="es">Lon mín</span><span data-l="en">Min lon</span> <input type="number" id="bboxW" step="0.1" placeholder="-180"></label>
<label><span data-l="es">Lon máx</span><span data-l="en">Max lon</span> <input type="number" id="bboxE" step="0.1" placeholder="180"></label>
<button class="btn btn-secondary" id="bboxApplyBtn"><span data-l="es">Aplicar</span><span data-l="en">Apply</span></button>
<button class="btn btn-secondary" id="bboxClearBtn"><span data-l="es">Quitar</span><span data-l="en">Remove</span></button>
</div>
<div id="bboxMiniMap" class="mini-map"></div>
</div>
<div class="card">
<div class="results-header">
<h2><span data-l="es">Resultado del filtrado</span><span data-l="en">Filtering result</span></h2>
<span class="big-count" id="filterCount"></span>
</div>
<div class="table-scroll" id="filteredTable"></div>
<button class="btn btn-primary" id="toStep3Btn"><span data-l="es">Continuar a depuración →</span><span data-l="en">Continue to cleaning →</span></button>
</div>
</section>
<!-- ==================== STEP 3 · CLEAN ==================== -->
<section class="step-panel" id="panel-3">
<div class="panel-title"><div class="pt-num">3</div><div>
<h2><span data-l="es">Depurar coordenadas</span><span data-l="en">Clean coordinates</span></h2>
<p><span data-l="es">Nueve reglas contra duplicados, errores de georreferenciación y valores atípicos.</span><span data-l="en">Nine rules against duplicates, georeferencing errors and outliers.</span></p></div></div>
<div class="card">
<h2><span data-l="es">Reglas de depuración</span><span data-l="en">Cleaning rules</span></h2>
<p class="hint"><span data-l="es">Activa las reglas que quieras aplicar. Cada una indica cuántos registros marca. Las reglas «informativas» no eliminan por defecto.</span><span data-l="en">Switch on the rules you want to apply. Each shows how many records it flags. «Informative» rules do not remove records by default.</span></p>
<div id="cleanRules"></div>
<div class="config-group">
<label class="inline-label"><span data-l="es">Decimales para detectar duplicados por redondeo:</span><span data-l="en">Decimals to detect duplicates after rounding:</span>
<input type="number" id="dupDecimals" value="4" min="0" max="6" style="width:60px"></label>
<label class="inline-label"><span data-l="es">Umbral de incertidumbre (m) para «baja precisión»:</span><span data-l="en">Uncertainty threshold (m) for «low precision»:</span>
<input type="number" id="uncThreshold" value="10000" min="0" step="1000" style="width:100px"></label>
<label class="inline-label"><span data-l="es">Factor k para valores atípicos espaciales (k·IQR):</span><span data-l="en">Factor k for spatial outliers (k·IQR):</span>
<input type="number" id="outlierK" value="3" min="1" max="10" step="0.5" style="width:60px"></label>
</div>
<button class="btn btn-primary btn-lg" id="runCleanBtn"><span data-l="es">Aplicar depuración →</span><span data-l="en">Apply cleaning →</span></button>
</div>
<div class="card" id="cleanReportCard" style="display:none">
<h2><span data-l="es">Reporte de depuración</span><span data-l="en">Cleaning report</span></h2>
<div class="results-summary" id="cleanSummary"></div>
<div class="messages" id="cleanMessages"></div>
<div class="table-scroll" id="cleanRuleTable"></div>
<div class="btn-row">
<button class="btn btn-secondary" id="dlRawCsv"><span data-l="es">⬇ CSV crudo</span><span data-l="en">⬇ Raw CSV</span></button>
<button class="btn btn-secondary" id="dlCleanCsv"><span data-l="es">⬇ CSV depurado</span><span data-l="en">⬇ Clean CSV</span></button>
<button class="btn btn-secondary" id="dlCleanGeojson"><span data-l="es">⬇ GeoJSON depurado</span><span data-l="en">⬇ Clean GeoJSON</span></button>
</div>
<button class="btn btn-primary" id="toStep4Btn"><span data-l="es">Ver mapa →</span><span data-l="en">View map →</span></button>
</div>
</section>
<!-- ==================== STEP 4 · MAP ==================== -->
<section class="step-panel" id="panel-4">
<div class="panel-title"><div class="pt-num">4</div><div>
<h2><span data-l="es">Mapa de registros depurados</span><span data-l="en">Map of cleaned records</span></h2>
<p><span data-l="es">Puntos por taxón o tipo de registro, con leyenda, escala, rosa de los vientos y retícula.</span><span data-l="en">Points by taxon or record type, with legend, scale bar, north arrow and graticule.</span></p></div></div>
<div class="card">
<div class="results-header">
<h2><span data-l="es">Distribución de los registros</span><span data-l="en">Distribution of the records</span></h2>
<div class="btn-row">
<label class="inline-label"><span data-l="es">Colorear por</span><span data-l="en">Colour by</span>
<select id="mapColorBy">
<option value="taxon" data-es="Taxón" data-en="Taxon">Taxón</option>
<option value="basisOfRecord" data-es="Tipo de registro" data-en="Record type">Tipo de registro</option>
<option value="none" data-es="Un solo color" data-en="Single colour">Un solo color</option>
</select>
</label>
<button class="btn btn-secondary" id="mapExportBtn"><span data-l="es">⬇ Exportar PNG</span><span data-l="en">⬇ Export PNG</span></button>
</div>
</div>
<div id="map" class="main-map"></div>
<div id="mapLegend" class="map-legend-panel"></div>
<button class="btn btn-primary" id="toStep5Btn" style="margin-top:14px"><span data-l="es">Continuar a variables ambientales →</span><span data-l="en">Continue to environmental variables →</span></button>
</div>
</section>
<!-- ==================== STEP 5 · VARIABLES ==================== -->
<section class="step-panel" id="panel-5">
<div class="panel-title"><div class="pt-num">5</div><div>
<h2><span data-l="es">Variables ambientales en cada punto</span><span data-l="en">Environmental variables at each point</span></h2>
<p><span data-l="es">19 variables bioclimáticas y altitud, clima de Köppen-Geiger y tipo de suelo.</span><span data-l="en">19 bioclimatic variables and elevation, Köppen-Geiger climate and soil type.</span></p></div></div>
<div class="card">
<p class="hint"><span data-l="es">Se extraen los valores ráster en las <span id="envNPts">—</span> coordenadas depuradas: 19 variables bioclimáticas y altitud (WorldClim 2.1), clima de Köppen-Geiger y tipo de suelo (SoilGrids).</span><span data-l="en">Raster values are extracted at the <span id="envNPts2">—</span> cleaned coordinates: 19 bioclimatic variables and elevation (WorldClim 2.1), Köppen-Geiger climate and soil type (SoilGrids).</span></p>
<div class="config-group">
<h3><span data-l="es">1) Capas ráster (GeoTIFF de WorldClim y Köppen)</span><span data-l="en">1) Raster layers (WorldClim and Köppen GeoTIFF)</span></h3>
<p class="hint"><span data-l="es">Tienes <b>tres formas</b> de cargar las capas. Los archivos se leen en tu equipo y nunca se suben. Las instrucciones de descarga están en <code>datos/LEE-ME.md</code>.</span><span data-l="en">There are <b>three ways</b> to load the layers. The files are read on your computer and never uploaded. Download instructions are in <code>datos/LEE-ME.md</code>.</span></p>
<div class="pick-grid">
<div class="pick-card">
<div class="pick-tag">A</div>
<h4><span data-l="es">Una carpeta con los .tif</span><span data-l="en">A folder with the .tif files</span></h4>
<p class="hint"><span data-l="es">Elige la carpeta completa (por ejemplo <code>worldclim</code>); la app toma de ella solo los .tif que reconoce.</span><span data-l="en">Pick the whole folder (for example <code>worldclim</code>); the app takes only the .tif files it recognises.</span></p>
<button class="btn btn-secondary" id="envFolderBtn" type="button"><span data-l="es">📁 Elegir carpeta…</span><span data-l="en">📁 Choose folder…</span></button>
<div class="pick-status" id="envFolderStatus"></div>
<input type="file" id="envFolder" webkitdirectory multiple hidden>
</div>
<div class="pick-card">
<div class="pick-tag">B</div>
<h4><span data-l="es">Archivos .tif sueltos</span><span data-l="en">Individual .tif files</span></h4>
<p class="hint"><span data-l="es">Selecciona varios archivos a la vez (Ctrl o Mayús + clic): las 19 capas bioclimáticas, la altitud y, si quieres, Köppen.</span><span data-l="en">Select several files at once (Ctrl or Shift + click): the 19 bioclimatic layers, elevation and, if you like, Köppen.</span></p>
<button class="btn btn-secondary" id="envFilesBtn" type="button"><span data-l="es">📄 Elegir archivos…</span><span data-l="en">📄 Choose files…</span></button>
<div class="pick-status" id="envFilesStatus"></div>
<input type="file" id="envFiles" multiple accept=".tif,.tiff" hidden>
</div>
<div class="pick-card">
<div class="pick-tag">C</div>
<h4><span data-l="es">Capas de ejemplo</span><span data-l="en">Example layers</span></h4>
<p class="hint"><span data-l="es">Las que estén en la carpeta <code>datos/</code> del programa: WorldClim a 10 arc-min, que se descarga una vez (ver <code>datos/LEE-ME.md</code>), y Köppen-Geiger, que sí viene incluido. Necesita el servidor local.</span><span data-l="en">Whatever sits in the program's <code>datos/</code> folder: WorldClim at 10 arc-minutes, downloaded once (see <code>datos/LEE-ME.md</code>), and Köppen-Geiger, which is bundled. Needs the local server.</span></p>
<button class="btn btn-secondary" id="envUseSample" type="button"><span data-l="es">🧪 Usar las capas de <code>datos/</code></span><span data-l="en">🧪 Use the layers in <code>datos/</code></span></button>
<div class="pick-status" id="envSampleStatus"></div>
</div>
</div>
<div id="envFileReport" class="messages"></div>
</div>
<div class="config-group">
<h3><span data-l="es">2) Opciones de muestreo</span><span data-l="en">2) Sampling options</span></h3>
<label class="inline-label"><span data-l="es">Interpolación para variables continuas:</span><span data-l="en">Interpolation for continuous variables:</span>
<select id="envSampling">
<option value="bilinear" data-es="Bilineal (recomendada)" data-en="Bilinear (recommended)">Bilineal (recomendada)</option>
<option value="nearest" data-es="Vecino más cercano" data-en="Nearest neighbour">Vecino más cercano</option>
</select>
</label>
<label class="checkbox-label" style="margin-top:8px">
<input type="checkbox" id="envDropNoData" checked>
<span data-l="es">Descartar puntos sin dato en alguna variable bioclimática (p. ej. en el mar)</span><span data-l="en">Drop points with no data in any bioclimatic variable (e.g. at sea)</span>
</label>
</div>
<button class="btn btn-primary btn-lg" id="envExtractBtn" disabled><span data-l="es">Extraer valores ráster →</span><span data-l="en">Extract raster values →</span></button>
<div class="progress-wrap" id="envProgress" style="display:none">
<div class="progress-bar"><div class="progress-fill" id="envProgressFill"></div></div>
<span class="progress-label" id="envProgressLabel"></span>
</div>
<div class="messages" id="envMessages"></div>
</div>
<div class="card" id="soilCard" style="display:none">
<h2><span data-l="es">Tipo de suelo (SoilGrids · WRB)</span><span data-l="en">Soil type (SoilGrids · WRB)</span></h2>
<p class="hint"><span data-l="es">Consulta en línea a ISRIC, punto por punto y con pausas por su límite de uso. Para muchos registros conviene agrupar por celda. Es opcional para los pasos siguientes.</span><span data-l="en">Online query to ISRIC, point by point and with pauses because of its usage limit. For many records it pays to group by cell. It is optional for the following steps.</span></p>
<label class="inline-label"><span data-l="es">Agrupar consultas a una rejilla de</span><span data-l="en">Group queries into a grid of</span>
<select id="soilGrid">
<option value="0" data-es="sin agrupar (1 consulta por punto)" data-en="no grouping (1 query per point)">sin agrupar (1 consulta por punto)</option>
<option value="0.01" data-es="~1 km (0.01°)" data-en="~1 km (0.01°)">~1 km (0.01°)</option>
<option value="0.05" selected data-es="~5 km (0.05°)" data-en="~5 km (0.05°)">~5 km (0.05°)</option>
<option value="0.1" data-es="~10 km (0.1°)" data-en="~10 km (0.1°)">~10 km (0.1°)</option>
</select>
</label>
<label class="inline-label"><span data-l="es">Pausa entre consultas (ms)</span><span data-l="en">Pause between queries (ms)</span>
<input type="number" id="soilDelay" value="1100" min="300" step="100" style="width:80px">
</label>
<div style="margin-top:10px">
<button class="btn btn-secondary" id="soilRunBtn"><span data-l="es">Consultar suelo</span><span data-l="en">Query soil</span></button>
<button class="btn btn-secondary" id="soilStopBtn" disabled><span data-l="es">Detener</span><span data-l="en">Stop</span></button>
</div>
<div class="progress-wrap" id="soilProgress" style="display:none">
<div class="progress-bar"><div class="progress-fill" id="soilProgressFill"></div></div>
<span class="progress-label" id="soilProgressLabel"></span>
</div>
<div class="messages" id="soilMessages"></div>
</div>
<div class="card" id="envResultCard" style="display:none">
<div class="results-header">
<h2><span data-l="es">Resultado de la extracción</span><span data-l="en">Extraction result</span></h2>
<div class="btn-row">
<button class="btn btn-secondary" id="dlEnvCsv"><span data-l="es">⬇ CSV puntos × variables</span><span data-l="en">⬇ CSV points × variables</span></button>
</div>
</div>
<div class="results-summary" id="envSummary"></div>
<div class="table-scroll" id="envTable"></div>
</div>
<div class="card" id="envMapCard" style="display:none">
<div class="results-header">
<h2><span data-l="es">Mapa temático</span><span data-l="en">Thematic map</span></h2>
<div class="btn-row">
<label class="inline-label"><span data-l="es">Variable</span><span data-l="en">Variable</span>
<select id="envMapVar"></select>
</label>
<label class="inline-label"><input type="checkbox" id="envMapHull"> <span data-l="es">Polígono de distribución</span><span data-l="en">Distribution polygon</span></label>
<button class="btn btn-secondary" id="envMapExportBtn"><span data-l="es">⬇ Exportar PNG</span><span data-l="en">⬇ Export PNG</span></button>
</div>
</div>
<div id="mapEnv" class="main-map"></div>
<div id="mapEnvLegend" class="map-legend-panel"></div>
</div>
<div class="card">
<button class="btn btn-primary" id="toStep6Btn"><span data-l="es">Continuar a correlación y selección de variables →</span><span data-l="en">Continue to correlation and variable selection →</span></button>
</div>
</section>
<!-- ==================== STEP 6 · CORRELATION AND VARIABLE SELECTION ==================== -->
<section class="step-panel" id="panel-6">
<div class="panel-title"><div class="pt-num">6</div><div>
<h2><span data-l="es">Correlación y selección de variables</span><span data-l="en">Correlation and variable selection</span></h2>
<p><span data-l="es">Detecta la colinealidad y decide qué variables usarán la estadística, el aprendizaje automático y los modelos.</span><span data-l="en">Detect collinearity and decide which variables the statistics, the machine learning and the models will use.</span></p></div></div>
<div class="help-intro" id="helpIntro6"></div>
<div class="card">
<p class="hint"><span data-l="es">Las variables bioclimáticas están muy correlacionadas entre sí (p. ej. BIO10 con BIO8 o BIO16 con BIO13). Un modelo de regresión (GLM, GAM) se vuelve inestable con variables casi redundantes; los métodos de árboles, SVM y MaxEnt lo toleran mejor, pero la importancia de cada variable se reparte. Por eso la app <b>propone</b> un subconjunto poco colineal, pero <b>la decisión es tuya</b>: puedes marcar variables que consideras importantes aunque estén correlacionadas (por ejemplo <b>BIO1</b>, temperatura media anual, y <b>BIO12</b>, precipitación anual) y ver al instante qué efecto tiene tu elección. Lo que elijas aquí será la selección por defecto de los pasos 7, 8 y 9, donde aún podrás cambiarla.</span><span data-l="en">The bioclimatic variables are strongly correlated with each other (e.g. BIO10 with BIO8, or BIO16 with BIO13). A regression model (GLM, GAM) becomes unstable with nearly redundant variables; tree methods, SVM and MaxEnt tolerate it better, but the importance of each variable gets shared. That is why the app <b>proposes</b> a low-collinearity subset, but <b>the decision is yours</b>: you can pin variables you consider important even if they are correlated (for example <b>BIO1</b>, annual mean temperature, and <b>BIO12</b>, annual precipitation) and see at once what your choice does. What you choose here becomes the default selection of steps 7, 8 and 9, where you can still change it.</span></p>
<div class="results-summary" id="corrTiles"></div>
<div id="corrVerdict"></div>
<div class="config-group" style="border-bottom:0;margin-bottom:0">
<div class="bbox-row">
<label><span data-l="es">Método</span><span data-l="en">Method</span>
<select id="corrMethod"><option value="pearson">Pearson</option><option value="spearman">Spearman</option></select></label>
<label><span data-l="es">|r| máximo</span><span data-l="en">Max |r|</span><span data-help="pearson"></span> <input type="number" id="corrR" aria-label="|r| máximo" data-es-title="|r| máximo" data-en-title="Max |r|" value="0.8" step="0.05" min="0.5" max="0.99" style="width:70px"></label>
<label><span data-l="es">VIF máximo</span><span data-l="en">Max VIF</span><span data-help="vif"></span> <input type="number" id="corrVif" aria-label="VIF máximo" data-es-title="VIF máximo" data-en-title="Max VIF" value="10" step="1" min="2" max="30" style="width:70px"></label>
</div>
<div class="btn-row" style="margin-top:10px">
<button class="btn btn-primary" id="corrAuto"><span data-l="es">✨ Selección recomendada</span><span data-l="en">✨ Recommended selection</span></button><span data-help="corrSelection"></span>
<button class="btn btn-secondary" id="corrPinCore" data-es-title="Fija BIO1 y BIO12 y recalcula la selección recomendada respetándolas" data-en-title="Pins BIO1 and BIO12 and recomputes the recommended selection around them"><span data-l="es">📌 Fijar BIO1 y BIO12 y recalcular</span><span data-l="en">📌 Pin BIO1 and BIO12 and recompute</span></button>
<button class="btn btn-secondary" id="corrAll"><span data-l="es">Usar todas</span><span data-l="en">Use all</span></button>
<button class="btn btn-secondary" id="corrNone"><span data-l="es">Quitar todas</span><span data-l="en">Clear all</span></button>
</div>
</div>
</div>
<div class="card">
<h2><span data-l="es">Variables: elige cuáles usar</span><span data-l="en">Variables: choose which to use</span></h2>
<p class="hint"><span data-l="es"><b>Usar</b>: entra a los siguientes pasos. <b>📌 Fijar</b>: la selección recomendada nunca la quitará, aunque esté correlacionada. El VIF y la correlación máxima se calculan <b>con las variables que tienes marcadas</b> y se actualizan al instante. VIF < 5 es bajo, 5–10 moderado y > 10 alto.</span><span data-l="en"><b>Use</b>: goes on to the next steps. <b>📌 Pin</b>: the recommended selection will never drop it, even if it is correlated. VIF and maximum correlation are computed <b>with the variables you have ticked</b> and update instantly. VIF < 5 is low, 5–10 moderate and > 10 high.</span></p>
<div class="table-scroll" id="corrVarTable"></div>
</div>
<div class="card">
<div class="results-header">
<h2><span data-l="es">Matriz de correlación</span><span data-l="en">Correlation matrix</span><span data-help="collinearity"></span></h2>
<div class="btn-row">
<button class="btn btn-secondary btn-sm" id="corrDlSvg"><span data-l="es">⬇ SVG</span><span data-l="en">⬇ SVG</span></button>
<button class="btn btn-secondary btn-sm" id="corrDlPng"><span data-l="es">⬇ PNG</span><span data-l="en">⬇ PNG</span></button>
<button class="btn btn-secondary btn-sm" id="corrDlCsv"><span data-l="es">⬇ CSV</span><span data-l="en">⬇ CSV</span></button>
</div>
</div>
<p class="hint"><span data-l="es">Ordenada por agrupamiento jerárquico (el árbol de la izquierda agrupa las variables que se parecen). Azul = correlación negativa, naranja = positiva; los nombres en negrita son las variables que tienes seleccionadas. <b>Haz clic en una celda</b> para ver el par y decidir con cuál quedarte.</span><span data-l="en">Ordered by hierarchical clustering (the tree on the left groups variables that behave alike). Blue = negative correlation, orange = positive; bold names are the variables you have selected. <b>Click a cell</b> to see the pair and decide which one to keep.</span></p>
<div id="corrHeat" class="fig-box"></div>
<div id="corrPair"></div>
</div>
<div class="card">
<h2><span data-l="es">Pares muy correlacionados</span><span data-l="en">Highly correlated pairs</span></h2>
<div class="table-scroll" id="corrPairs"></div>
</div>
<div class="card">
<div class="btn-row">
<button class="btn btn-secondary" id="corrDlSel"><span data-l="es">⬇ CSV con las variables seleccionadas</span><span data-l="en">⬇ CSV with the selected variables</span></button>
</div>
<button class="btn btn-primary" id="toStep7Btn" style="margin-top:12px"><span data-l="es">Continuar a estadística →</span><span data-l="en">Continue to statistics →</span></button>
</div>
<div class="card" id="helpGuide6"></div>
</section>
<!-- ==================== STEP 7 · STATISTICS ==================== -->
<section class="step-panel" id="panel-7">
<div class="panel-title"><div class="pt-num">7</div><div>
<h2><span data-l="es">Estadística descriptiva y normalidad</span><span data-l="en">Descriptive statistics and normality</span></h2>
<p><span data-l="es">Distribuciones, resumen numérico y pruebas de normalidad de las variables que elegiste en el paso 6.</span><span data-l="en">Distributions, numerical summary and normality tests of the variables you chose in step 6.</span></p></div></div>
<div class="help-intro" id="helpIntro7"></div>
<div class="card">
<p class="hint"><span data-l="es">El cálculo corre en Python dentro de tu navegador. La primera vez se descargan las librerías científicas (~1 min con buena conexión); después es rápido.</span><span data-l="en">The computation runs in Python inside your browser. The first time the scientific libraries are downloaded (~1 min on a good connection); afterwards it is fast.</span></p>
<div class="config-group">
<h3><span data-l="es">Variables a analizar</span><span data-l="en">Variables to analyse</span></h3>
<div class="checkbox-grid" id="statsVarChecklist"></div>
</div>
<button class="btn btn-primary btn-lg" id="statsRunBtn"><span data-l="es">Ejecutar análisis estadístico →</span><span data-l="en">Run statistical analysis →</span></button>
<div class="messages" id="statsMessages"></div>
</div>
<div id="statsResults" style="display:none">
<div class="card">
<h2><span data-l="es">Estadística descriptiva</span><span data-l="en">Descriptive statistics</span></h2>
<div class="table-scroll" id="statsDescTable"></div>
</div>
<div class="card">
<h2><span data-l="es">Histogramas y densidad</span><span data-l="en">Histograms and density</span><span data-help="kde"></span></h2>
<p class="hint"><span data-l="es">Todas las figuras de este paso se dibujan como vectores y se pueden editar hasta el último detalle en su «Estudio de figura»: textos, tipos de letra, ejes, cuadrícula, colores, anotaciones y exportación.</span><span data-l="en">Every figure of this step is drawn as vectors and can be edited down to the last detail in its “Figure studio”: text, fonts, axes, grid, colours, annotations and export.</span></p>
<div id="figHistGrid" class="fig-box"></div>
</div>
<div class="card">
<h2><span data-l="es">Boxplots comparativos</span><span data-l="en">Comparative boxplots</span><span data-help="boxplot"></span></h2>
<div id="figBoxGrid" class="fig-box"></div>
<h3><span data-l="es">Media e intervalo de confianza</span><span data-l="en">Mean and confidence interval</span></h3>
<div id="figCiPlot" class="fig-box"></div>
</div>
<div class="card">
<div class="results-header">
<h2><span data-l="es">Detalle por variable</span><span data-l="en">Detail by variable</span></h2>
<label class="inline-label"><span data-l="es">Variable</span><span data-l="en">Variable</span> <select id="statsDetailVar"></select></label>
</div>
<div id="figDetail">
<div id="figDetHist" class="fig-box"></div>
<div id="figDetBox" class="fig-box"></div>
<div id="figDetViolin" class="fig-box"></div>
<div id="figDetQQ" class="fig-box"></div>
<div id="figDetEcdf" class="fig-box"></div>
</div>
<div id="figGroupWrap" style="display:none">
<h3><span data-l="es">Comparación entre taxones</span><span data-l="en">Comparison between taxa</span></h3>
<div id="figGroup">
<div id="figGroupBox" class="fig-box"></div>
<div id="figGroupDens" class="fig-box"></div>
</div>
</div>
</div>
<div class="card">
<h2><span data-l="es">Pruebas de normalidad</span><span data-l="en">Normality tests</span><span data-help="pvalue"></span></h2>
<p class="hint"><span data-l="es">p > 0.05 → no se rechaza la normalidad. El veredicto es por mayoría de pruebas. Anderson-Darling: normal si A² < valor crítico al 5 %.</span><span data-l="en">p > 0.05 → normality is not rejected. The verdict is by majority of tests. Anderson-Darling: normal if A² < critical value at 5 %.</span></p>
<div class="table-scroll" id="statsNormTable"></div>
<h3><span data-l="es">Transformación sugerida</span><span data-l="en">Suggested transformation</span><span data-help="transform"></span></h3>
<p class="hint"><span data-l="es">Se prueban log, raíz, Box-Cox y Yeo-Johnson y se elige la que más acerca a la normalidad (Shapiro-Wilk).</span><span data-l="en">Log, square root, Box-Cox and Yeo-Johnson are tried and the one that gets closest to normality (Shapiro-Wilk) is chosen.</span></p>
<div class="table-scroll" id="statsTransfTable"></div>
</div>
<div class="card">
<button class="btn btn-primary" id="toStep8Btn"><span data-l="es">Continuar a aprendizaje automático →</span><span data-l="en">Continue to machine learning →</span></button>
</div>
</div>
<div class="card" id="helpGuide7"></div>
</section>
<!-- ==================== STEP 8 · ML + ECOLOGY ==================== -->
<section class="step-panel" id="panel-8">
<div class="panel-title"><div class="pt-num">8</div><div>
<h2><span data-l="es">Métodos multivariados y análisis ecológico</span><span data-l="en">Multivariate methods and ecological analysis</span></h2>
<p><span data-l="es">PCA, agrupamiento, análisis de correspondencias y métricas de nicho y distribución.</span><span data-l="en">PCA, clustering, correspondence analysis and niche and range metrics.</span></p></div></div>
<div class="help-intro" id="helpIntro8"></div>
<div class="card">
<p class="hint"><span data-l="es">Cálculo en Python dentro del navegador.</span><span data-l="en">Computed in Python inside the browser.</span></p>
<div class="config-group">
<h3><span data-l="es">Variables continuas para PCA y agrupamiento</span><span data-l="en">Continuous variables for PCA and clustering</span></h3>
<p class="hint"><span data-l="es">Por defecto va <b>la selección que hiciste en el paso 6</b>. Puedes <b>añadir otras aunque sean colineales</b>: PCA y agrupamiento toleran redundancia y a veces una variable colineal es clave para interpretar.</span><span data-l="en">By default <b>the selection you made in step 6</b> is used. You can <b>add others even if collinear</b>: PCA and clustering tolerate redundancy and a collinear variable is sometimes the key to interpretation.</span></p>
<div class="btn-row">
<button class="btn btn-secondary" id="mlVarsRecommended"><span data-l="es">Las del paso 6</span><span data-l="en">Those of step 6</span></button>
<button class="btn btn-secondary" id="mlVarsAll"><span data-l="es">Todas</span><span data-l="en">All</span></button>
</div>
<div class="checkbox-grid" id="mlVarChecklist"></div>
</div>
<div class="config-group">
<h3><span data-l="es">Variables categóricas para AC / ACM / AFM</span><span data-l="en">Categorical variables for CA / MCA / FAMD</span></h3>
<div class="checkbox-grid" id="mlCatChecklist"></div>
</div>
<div class="config-group">
<label class="checkbox-label"><input type="checkbox" id="mlStandardize" checked>
<span data-l="es">Estandarizar variables continuas (z-score) — recomendado</span><span data-l="en">Standardise continuous variables (z-score) — recommended</span></label>
</div>
<button class="btn btn-primary btn-lg" id="mlPrepareBtn"><span data-l="es">Preparar datos →</span><span data-l="en">Prepare data →</span></button>
<div class="messages" id="mlMessages"></div>
</div>
<div id="mlSections" style="display:none">
<div class="card">
<div class="results-header">
<h2><span data-l="es">Análisis de componentes principales (PCA)</span><span data-l="en">Principal component analysis (PCA)</span></h2>
<button class="btn btn-primary" id="pcaRunBtn"><span data-l="es">Ejecutar PCA</span><span data-l="en">Run PCA</span></button>
</div>
<div id="pcaOut" style="display:none">
<div class="results-summary" id="pcaSummary"></div>
<h3><span data-l="es">Varianza explicada (sedimentación)</span><span data-l="en">Explained variance (scree plot)</span><span data-help="varexplained"></span></h3>
<div id="figScree" class="fig-box"></div>
<div class="table-scroll" id="pcaEigTable"></div>
<h3><span data-l="es">Círculo de correlación de variables</span><span data-l="en">Correlation circle of variables</span><span data-help="corrcircle"></span></h3>
<label class="inline-label"><span data-l="es">Color por</span><span data-l="en">Colour by</span>
<select id="pcaVarColor"><option value="cos2" data-es="calidad (cos²)" data-en="quality (cos²)">calidad (cos²)</option><option value="contrib" data-es="contribución" data-en="contribution">contribución</option></select>
</label>
<label class="inline-label"><span data-l="es">Ejes</span><span data-l="en">Axes</span>
<select id="pcaAxes"><option value="12">Dim 1 – Dim 2</option><option value="13">Dim 1 – Dim 3</option><option value="23">Dim 2 – Dim 3</option></select>
</label>
<div id="figVarCircle" class="fig-box"></div>
<h3><span data-l="es">Mapa de individuos</span><span data-l="en">Individuals map</span></h3>
<label class="inline-label"><span data-l="es">Color por</span><span data-l="en">Colour by</span>
<select id="pcaIndColor"><option value="taxon" data-es="taxón" data-en="taxon">taxón</option><option value="none" data-es="densidad" data-en="density">densidad</option></select>
</label>
<div id="figIndividuals" class="fig-box"></div>
<h3>Biplot</h3>
<div id="figBiplot" class="fig-box"></div>
<h3><span data-l="es">Contribuciones y calidad</span><span data-l="en">Contributions and quality</span><span data-help="contribution"></span><span data-help="cos2"></span></h3>
<div id="figContrib" class="fig-box"></div>
<h3><span data-l="es">Descripción de dimensiones</span><span data-l="en">Description of dimensions</span><span data-help="loadings"></span></h3>
<div class="table-scroll" id="pcaDimDesc"></div>
<button class="btn btn-secondary" id="dlPcaScores"><span data-l="es">⬇ CSV coordenadas de individuos</span><span data-l="en">⬇ CSV individual coordinates</span></button>
</div>
</div>
<div class="card">
<h2><span data-l="es">Agrupamiento (clustering)</span><span data-l="en">Clustering</span><span data-help="clmethods"></span></h2>
<div class="config-group">
<label class="inline-label"><span data-l="es">Datos de entrada</span><span data-l="en">Input data</span>
<select id="clInput">
<option value="pca" data-es="componentes principales" data-en="principal components">componentes principales</option>
<option value="raw" data-es="variables estandarizadas" data-en="standardised variables">variables estandarizadas</option>
</select>
</label>
<label class="inline-label"><span data-l="es">N.º de dimensiones PCA</span><span data-l="en">No. of PCA dimensions</span>
<input type="number" id="clNDims" value="3" min="2" max="10" style="width:56px">
</label>
<button class="btn btn-secondary" id="clTendencyBtn"><span data-l="es">Tendencia de agrupamiento</span><span data-l="en">Clustering tendency</span></button><span data-help="hopkins"></span>
<button class="btn btn-secondary" id="clOptimalBtn"><span data-l="es">N.º óptimo de grupos</span><span data-l="en">Optimal number of clusters</span></button><span data-help="elbow"></span><span data-help="gap"></span><span data-help="silhouette"></span>
</div>
<div id="figTendency" class="fig-box"></div>
<div id="figOptimalK" class="fig-box"></div>
<div id="clOptimalNote" class="messages"></div>
<div class="config-group">
<label class="inline-label"><span data-l="es">Método</span><span data-l="en">Method</span><span data-help="linkage"></span>
<select id="clMethod">
<option value="ward" data-es="Jerárquico – Ward" data-en="Hierarchical – Ward">Jerárquico – Ward</option>
<option value="complete" data-es="Jerárquico – completo" data-en="Hierarchical – complete">Jerárquico – completo</option>
<option value="average" data-es="Jerárquico – promedio" data-en="Hierarchical – average">Jerárquico – promedio</option>
<option value="single" data-es="Jerárquico – simple" data-en="Hierarchical – single">Jerárquico – simple</option>
<option value="kmeans">K-means</option>
<option value="pam" data-es="PAM (k-medoides)" data-en="PAM (k-medoids)">PAM (k-medoides)</option>
<option value="hkmeans" data-es="K-means jerárquico" data-en="Hierarchical k-means">K-means jerárquico</option>
<option value="fuzzy" data-es="Difuso (c-means)" data-en="Fuzzy (c-means)">Difuso (c-means)</option>
<option value="gmm" data-es="Basado en modelos (mezcla gaussiana)" data-en="Model-based (Gaussian mixture)">Basado en modelos (mezcla gaussiana)</option>
<option value="dbscan">DBSCAN</option>
</select>
</label>
<label class="inline-label">k <input type="number" id="clK" value="3" min="2" max="12" style="width:56px"></label>
<span id="clDbscanOpts" style="display:none">
<label class="inline-label">eps <input type="number" id="clEps" value="1.5" step="0.1" style="width:64px"></label>
<label class="inline-label"><span data-l="es">mín. puntos</span><span data-l="en">min. points</span> <input type="number" id="clMinPts" value="5" min="2" style="width:56px"></label>
<button class="btn btn-secondary" id="clKdistBtn"><span data-l="es">Gráfico k-distancias</span><span data-l="en">k-distance plot</span></button>
</span>
<button class="btn btn-primary" id="clRunBtn"><span data-l="es">Ejecutar agrupamiento</span><span data-l="en">Run clustering</span></button>
</div>
<div id="figKdist" class="fig-box"></div>
<div id="clOut" style="display:none">
<div class="results-summary" id="clSummary"></div>
<div id="figDendrogram" class="fig-box"></div>
<div id="figClusterScatter" class="fig-box"></div>
<div id="figClusterProfile" class="fig-box"></div>
<div id="figSilhouette" class="fig-box"></div>
<h3><span data-l="es">Mapa de grupos</span><span data-l="en">Cluster map</span></h3>
<div id="mapCluster" class="main-map"></div>
<div id="mapClusterLegend" class="map-legend-panel"></div>
<button class="btn btn-secondary" id="dlClusters"><span data-l="es">⬇ CSV con la asignación de grupo</span><span data-l="en">⬇ CSV with the cluster assignment</span></button>
</div>
</div>
<div class="card">
<h2><span data-l="es">Análisis de correspondencias</span><span data-l="en">Correspondence analysis</span><span data-help="inertia"></span><span data-help="cadistance"></span></h2>
<div class="config-group">
<label class="inline-label"><span data-l="es">Tipo</span><span data-l="en">Type</span>
<select id="caType">
<option value="ca" data-es="AC simple (2 variables categóricas)" data-en="Simple CA (2 categorical variables)">AC simple (2 variables categóricas)</option>
<option value="mca" data-es="ACM (varias categóricas)" data-en="MCA (several categorical)">ACM (varias categóricas)</option>
<option value="famd" data-es="AFM / FAMD (mixtas)" data-en="FAMD (mixed)">AFM / FAMD (mixtas)</option>
</select>
</label>
<span id="caSimpleVars">
<label class="inline-label"><span data-l="es">Filas</span><span data-l="en">Rows</span> <select id="caRowVar"></select></label>
<label class="inline-label"><span data-l="es">Columnas</span><span data-l="en">Columns</span> <select id="caColVar"></select></label>
</span>
<button class="btn btn-primary" id="caRunBtn"><span data-l="es">Ejecutar</span><span data-l="en">Run</span></button>
</div>
<div id="caOut" style="display:none">
<div class="results-summary" id="caSummary"></div>
<div id="figCaBiplot" class="fig-box"></div>
<div id="figCaContrib" class="fig-box"></div>
<div class="table-scroll" id="caTable"></div>
</div>
</div>
<div class="card">
<div class="results-header">
<h2><span data-l="es">Análisis de datos ecológicos</span><span data-l="en">Ecological data analysis</span></h2>
<button class="btn btn-primary" id="ecoRunBtn"><span data-l="es">Ejecutar análisis ecológico</span><span data-l="en">Run ecological analysis</span></button>
</div>
<div id="ecoOut" style="display:none">
<div class="results-summary" id="ecoSummary"></div>
<h3><span data-l="es">Área de distribución (criterios de área de la lista roja)</span><span data-l="en">Range size (red-list area criteria)</span><span data-help="eoo"></span><span data-help="aoo"></span></h3>
<div class="table-scroll" id="ecoRangeTable"></div>
<h3><span data-l="es">Patrón espacial y amplitud de nicho</span><span data-l="en">Spatial pattern and niche breadth</span><span data-help="clarkevans"></span><span data-help="levins"></span></h3>
<div id="figEcoNiche" class="fig-box"></div>
<div class="table-scroll" id="ecoBreadthTable"></div>
<h3><span data-l="es">Curva de acumulación de registros</span><span data-l="en">Record accumulation curve</span></h3>
<div id="figAccum" class="fig-box"></div>
<h3><span data-l="es">Espacio ambiental (densidad en el plano PCA)</span><span data-l="en">Environmental space (density on the PCA plane)</span></h3>
<div id="figEnvSpace" class="fig-box"></div>
<h3><span data-l="es">Solapamiento de nicho entre taxones</span><span data-l="en">Niche overlap between taxa</span><span data-help="schoener"></span><span data-help="hellinger"></span></h3>
<div class="table-scroll" id="ecoOverlapTable"></div>
<h3><span data-l="es">Resumen ambiental por taxón</span><span data-l="en">Environmental summary by taxon</span></h3>
<div class="table-scroll" id="ecoTaxonTable"></div>
</div>
</div>
<!-- @diversity:begin — owned by js/diversity.js -->
<div id="divGroup">
<div class="card">
<div class="results-header">
<h2><span data-l="es">Diversidad de especies</span><span data-l="en">Species diversity</span></h2>
<button class="btn btn-primary btn-lg" id="divRunBtn"><span data-l="es">Calcular la diversidad</span><span data-l="en">Compute diversity</span></button>
</div>
<p class="hint"><span data-l="es">Índices alfa y beta, números de Hill, estimadores de riqueza, rarefacción, modelos de abundancia y pruebas de comparación. Todo se calcula aquí mismo, sin el motor de Python: la sección abre al instante y funciona sin conexión.</span><span data-l="en">Alpha and beta indices, Hill numbers, richness estimators, rarefaction, abundance models and comparison tests. Everything is computed right here, without the Python engine: the section opens at once and works offline.</span></p>
<div class="msg msg-warning div-caveat">
<span data-l="es"><b>Lee esto primero.</b> En una colección de registros de presencia, el número de registros de un taxón mide <b>esfuerzo de muestreo</b> (colectores, carreteras, proyectos), no abundancia poblacional. Por eso los índices de abajo describen <b>los registros</b>, no las poblaciones. Para comparar sitios usa la rarefacción o la comparación <b>a igual cobertura</b>, nunca el total de registros.</span>
<span data-l="en"><b>Read this first.</b> In a collection of presence records, the number of records of a taxon measures <b>sampling effort</b> (collectors, roads, projects), not population abundance. The indices below therefore describe <b>the records</b>, not the populations. To compare sites use rarefaction or the <b>equal-coverage</b> comparison, never the raw record total.</span>
</div>
<div class="config-group">
<h3><span data-l="es">1 · Qué es un sitio y qué es un taxón</span><span data-l="en">1 · What a site is and what a taxon is</span></h3>
<p class="hint"><span data-l="es">La matriz de comunidad se arma con los registros que ya tiene la app (las variables del paso 5 si existen; si no, los registros limpios del paso 3). Un «sitio» es una unidad de muestreo: una celda de una malla, un país, un estado, una clase climática, un tipo de suelo, un tramo del gradiente altitudinal o un grupo del agrupamiento de arriba.</span><span data-l="en">The community matrix is built from the records the app already holds (the variables of step 5 when they exist, otherwise the clean records of step 3). A "site" is a sampling unit: a grid cell, a country, a state, a climate class, a soil type, a band of the elevation gradient or a cluster from the clustering above.</span></p>
<label class="inline-label"><span data-l="es">Un sitio es</span><span data-l="en">A site is</span> <select id="divSiteMode"></select></label>
<span id="divGridOpts">
<label class="inline-label"><span data-l="es">Tamaño de celda</span><span data-l="en">Cell size</span> <input type="number" id="divGridSize" value="200" min="0.01" step="10" style="width:76px"></label>
<label class="inline-label"><span data-l="es">Unidad</span><span data-l="en">Unit</span> <select id="divGridUnit"></select></label>
</span>
<span id="divElevOpts" style="display:none">
<label class="inline-label"><span data-l="es">N.º de tramos</span><span data-l="en">Number of bands</span> <input type="number" id="divElevBands" value="6" min="2" max="20" style="width:60px"></label>
</span>
<label class="inline-label"><span data-l="es">Un taxón es</span><span data-l="en">A taxon is</span> <select id="divTaxonLevel"></select></label>
<label class="inline-label"><span data-l="es">Descartar sitios con menos de</span><span data-l="en">Drop sites with fewer than</span> <input type="number" id="divMinN" value="5" min="1" step="1" style="width:60px"> <span data-l="es">registros</span><span data-l="en">records</span></label>
</div>
<div class="config-group">
<h3><span data-l="es">2 · Opciones de los índices</span><span data-l="en">2 · Index options</span></h3>
<label class="inline-label"><span data-l="es">Base del logaritmo de H′</span><span data-l="en">Logarithm base of H′</span> <select id="divLogBase"></select></label>
<label class="inline-label"><span data-l="es">Réplicas de remuestreo</span><span data-l="en">Resampling replicates</span> <input type="number" id="divBootReps" value="200" min="50" max="2000" step="50" style="width:72px"></label>
<label class="inline-label"><span data-l="es">Semilla</span><span data-l="en">Seed</span> <input type="number" id="divSeed" value="42" min="1" step="1" style="width:72px"></label>
<p class="hint"><span data-l="es">La semilla fija el azar: con la misma semilla los intervalos y las permutaciones se repiten exactamente.</span><span data-l="en">The seed fixes the randomness: with the same seed the intervals and permutations come out exactly the same.</span></p>
</div>
<div class="messages" id="divMessages"></div>
<div id="divStatus"></div>
<div class="div-progress" id="divProgress" style="display:none"><div class="div-progress-bar"><div id="divProgressFill"></div></div><span id="divProgressLabel"></span></div>
</div>
<div id="divOut" style="display:none">
<!-- ---------- community matrix ---------- -->
<div class="card">
<h2><span data-l="es">Matriz de comunidad (sitios × taxones)</span><span data-l="en">Community matrix (sites × taxa)</span></h2>
<div class="results-summary" id="divMatrixTiles"></div>
<div id="divHonesty"></div>
<div class="table-scroll div-matrix" id="divMatrixTable"></div>
<div class="btn-row">
<button class="btn btn-secondary btn-sm" data-csv="matrix"><span data-l="es">⬇ CSV de la matriz</span><span data-l="en">⬇ Matrix CSV</span></button>
<button class="btn btn-secondary btn-sm" data-csv="long"><span data-l="es">⬇ CSV largo (sitio, taxón, registros)</span><span data-l="en">⬇ Long CSV (site, taxon, records)</span></button>
</div>
<div class="table-scroll" id="divDroppedTable"></div>
</div>
<!-- ---------- alpha diversity ---------- -->
<div class="card">
<h2><span data-l="es">Diversidad alfa</span><span data-l="en">Alpha diversity</span><span data-help="shannon"></span><span data-help="hill"></span></h2>
<p class="hint"><span data-l="es">Una fila por sitio y una fila final con el conjunto completo. H′ de Shannon (1948), índice de Simpson (1949), equitatividad de Pielou (1966), números de Hill (1973), dominancia de Berger y Parker (1970), riqueza de Margalef (1958) y de Menhinick (1964), índice de Brillouin, α de la serie logarítmica (Fisher et al. 1943), cobertura de muestra y estimadores de riqueza Chao1 (Chao 1984, 1987), ACE (Chao y Lee 1992) y navaja de primer y segundo orden.</span><span data-l="en">One row per site and a final row for the whole set. Shannon's H′ (1948), Simpson's index (1949), Pielou's evenness (1966), Hill numbers (1973), Berger and Parker dominance (1970), Margalef (1958) and Menhinick (1964) richness, Brillouin index, log-series α (Fisher et al. 1943), sample coverage and the richness estimators Chao1 (Chao 1984, 1987), ACE (Chao and Lee 1992) and first- and second-order jackknife.</span></p>
<div class="results-summary" id="divAlphaTiles"></div>
<div class="btn-row">
<label class="inline-label"><span data-l="es">Mostrar</span><span data-l="en">Show</span> <select id="divAlphaView"></select></label>
<button class="btn btn-secondary btn-sm" data-csv="alpha"><span data-l="es">⬇ CSV completo</span><span data-l="en">⬇ Full CSV</span></button>
</div>
<div class="table-scroll div-wide" id="divAlphaTable"></div>
<div id="divAlphaNotes"></div>
<h3><span data-l="es">Intervalos de confianza por remuestreo</span><span data-l="en">Confidence intervals by resampling</span></h3>
<p class="hint"><span data-l="es">Intervalos percentil del 95 % obtenidos remuestreando los registros de cada sitio con reemplazo.</span><span data-l="en">95 % percentile intervals obtained by resampling each site's records with replacement.</span></p>
<div class="table-scroll" id="divBootTable"></div>
<div class="btn-row"><button class="btn btn-secondary btn-sm" data-csv="boot"><span data-l="es">⬇ CSV</span><span data-l="en">⬇ CSV</span></button></div>
<h3><span data-l="es">Perfil de diversidad (números de Hill)</span><span data-l="en">Diversity profile (Hill numbers)</span></h3>
<p class="hint"><span data-l="es">Al aumentar q el perfil pesa cada vez más a los taxones dominantes: q = 0 es la riqueza, q = 1 el exponencial de Shannon y q = 2 el inverso de Simpson. <b>Si dos curvas no se cruzan, el orden entre esos sitios es el mismo para cualquier índice de diversidad</b>; si se cruzan, el orden depende del índice que elijas (Hill 1973; Jost 2006).</span><span data-l="en">As q grows the profile weighs dominant taxa more and more: q = 0 is richness, q = 1 the exponential of Shannon and q = 2 the inverse of Simpson. <b>If two curves do not cross, the ranking of those sites is the same for any diversity index</b>; if they cross, the ranking depends on the index you pick (Hill 1973; Jost 2006).</span></p>
<div class="div-fig"><div class="fig-box" id="figDivProfile"></div>
<div class="btn-row div-figbar"><button class="btn btn-ghost btn-sm" data-fig="figDivProfile" data-kind="svg">⬇ SVG</button><button class="btn btn-ghost btn-sm" data-fig="figDivProfile" data-kind="png">⬇ PNG</button><button class="btn btn-ghost btn-sm" data-csv="profile"><span data-l="es">⬇ CSV</span><span data-l="en">⬇ CSV</span></button></div></div>
</div>
<!-- ---------- rarefaction ---------- -->
<div class="card">
<h2><span data-l="es">Rarefacción y acumulación</span><span data-l="en">Rarefaction and accumulation</span><span data-help="rarefaction"></span></h2>
<p class="hint"><span data-l="es">La rarefacción por individuos da la riqueza esperada al submuestrear m registros (Hurlbert 1971), con su varianza analítica y su banda del 95 %. La extrapolación hasta 2n y la comparación a igual cobertura siguen a Colwell et al. (2012) y Chao y Jost (2012).</span><span data-l="en">Individual-based rarefaction gives the expected richness when m records are subsampled (Hurlbert 1971), with its analytical variance and 95 % band. Extrapolation up to 2n and the equal-coverage comparison follow Colwell et al. (2012) and Chao and Jost (2012).</span></p>
<div class="btn-row">
<label class="checkbox-label"><input type="checkbox" id="divExtrap" checked> <span data-l="es">Extrapolar hasta 2n</span><span data-l="en">Extrapolate up to 2n</span></label>
<label class="checkbox-label"><input type="checkbox" id="divRarefBand" checked> <span data-l="es">Banda del 95 %</span><span data-l="en">95 % band</span></label>
<label class="inline-label"><span data-l="es">Eje de los registros</span><span data-l="en">Records axis</span> <select id="divRarefScale"></select></label>
</div>
<div class="div-fig"><div class="fig-box" id="figDivRaref"></div>
<div class="btn-row div-figbar"><button class="btn btn-ghost btn-sm" data-fig="figDivRaref" data-kind="svg">⬇ SVG</button><button class="btn btn-ghost btn-sm" data-fig="figDivRaref" data-kind="png">⬇ PNG</button><button class="btn btn-ghost btn-sm" data-csv="raref"><span data-l="es">⬇ CSV</span><span data-l="en">⬇ CSV</span></button></div></div>
<h3><span data-l="es">Curva de acumulación por sitios</span><span data-l="en">Sample-based accumulation curve</span></h3>
<p class="hint"><span data-l="es">Riqueza acumulada al añadir sitios en orden aleatorio (media de las permutaciones, con la misma semilla).</span><span data-l="en">Richness accumulated as sites are added in random order (mean of the permutations, with the same seed).</span></p>
<div class="div-fig"><div class="fig-box" id="figDivAccum"></div>
<div class="btn-row div-figbar"><button class="btn btn-ghost btn-sm" data-fig="figDivAccum" data-kind="svg">⬇ SVG</button><button class="btn btn-ghost btn-sm" data-fig="figDivAccum" data-kind="png">⬇ PNG</button><button class="btn btn-ghost btn-sm" data-csv="accum"><span data-l="es">⬇ CSV</span><span data-l="en">⬇ CSV</span></button></div></div>
<h3><span data-l="es">Comparación a igual cobertura</span><span data-l="en">Comparison at equal coverage</span><span data-help="coverage"></span></h3>
<p class="hint"><span data-l="es">Comparar sitios al mismo número de registros sigue siendo injusto cuando uno está mejor muestreado. Aquí se comparan a la misma <b>cobertura de muestra</b>: la proporción de registros que pertenece a taxones ya detectados.</span><span data-l="en">Comparing sites at the same number of records is still unfair when one of them is better sampled. Here they are compared at the same <b>sample coverage</b>: the proportion of records belonging to taxa already detected.</span></p>
<div class="table-scroll" id="divCoverTable"></div>
<div class="btn-row"><button class="btn btn-secondary btn-sm" data-csv="cover"><span data-l="es">⬇ CSV</span><span data-l="en">⬇ CSV</span></button></div>
</div>
<!-- ---------- beta diversity ---------- -->
<div class="card">
<h2><span data-l="es">Diversidad beta</span><span data-l="en">Beta diversity</span><span data-help="sorensen"></span><span data-help="betapartition"></span></h2>
<p class="hint"><span data-l="es">Disimilitudes entre sitios: Jaccard, Sørensen, Bray y Curtis (1957), Morisita y Horn (Morisita 1959) y la partición de Sørensen en recambio y anidamiento (Baselga 2010).</span><span data-l="en">Dissimilarities between sites: Jaccard, Sørensen, Bray and Curtis (1957), Morisita and Horn (Morisita 1959) and the partition of Sørensen into turnover and nestedness (Baselga 2010).</span></p>
<div class="results-summary" id="divBetaTiles"></div>
<div id="divBetaNote"></div>
<div class="btn-row">
<label class="inline-label"><span data-l="es">Índice</span><span data-l="en">Index</span> <select id="divBetaIndex"></select></label>
<button class="btn btn-secondary btn-sm" data-csv="beta"><span data-l="es">⬇ CSV de la matriz</span><span data-l="en">⬇ Matrix CSV</span></button>
</div>
<div class="div-fig"><div class="fig-box" id="figDivBeta"></div>
<div class="btn-row div-figbar"><button class="btn btn-ghost btn-sm" data-fig="figDivBeta" data-kind="svg">⬇ SVG</button><button class="btn btn-ghost btn-sm" data-fig="figDivBeta" data-kind="png">⬇ PNG</button></div></div>
<h3><span data-l="es">Ordenación de los sitios</span><span data-l="en">Ordination of the sites</span><span data-help="pcoa"></span><span data-help="nmds"></span></h3>
<p class="hint"><span data-l="es">Coordenadas principales (PCoA) sobre la matriz de disimilitud doblemente centrada, y escalamiento multidimensional no métrico (NMDS) con el estrés 1 de Kruskal desde varios arranques.</span><span data-l="en">Principal coordinates (PCoA) on the double-centred dissimilarity matrix, and non-metric multidimensional scaling (NMDS) with Kruskal's stress 1 from several starts.</span></p>
<div class="div-fig"><div class="fig-box" id="figDivPcoa"></div>
<div class="btn-row div-figbar"><button class="btn btn-ghost btn-sm" data-fig="figDivPcoa" data-kind="svg">⬇ SVG</button><button class="btn btn-ghost btn-sm" data-fig="figDivPcoa" data-kind="png">⬇ PNG</button><button class="btn btn-ghost btn-sm" data-csv="pcoa"><span data-l="es">⬇ CSV coordenadas</span><span data-l="en">⬇ Coordinates CSV</span></button></div></div>
<div class="btn-row">
<label class="inline-label"><span data-l="es">Arranques del NMDS</span><span data-l="en">NMDS starts</span> <input type="number" id="divNmdsStarts" value="5" min="1" max="30" style="width:60px"></label>
<button class="btn btn-secondary btn-sm" id="divNmdsBtn"><span data-l="es">Ejecutar NMDS</span><span data-l="en">Run NMDS</span></button>
</div>
<div id="divNmdsNote"></div>
<div class="div-fig"><div class="fig-box" id="figDivNmds"></div>
<div class="btn-row div-figbar"><button class="btn btn-ghost btn-sm" data-fig="figDivNmds" data-kind="svg">⬇ SVG</button><button class="btn btn-ghost btn-sm" data-fig="figDivNmds" data-kind="png">⬇ PNG</button><button class="btn btn-ghost btn-sm" data-csv="nmds"><span data-l="es">⬇ CSV coordenadas</span><span data-l="en">⬇ Coordinates CSV</span></button></div></div>
<div class="div-fig"><div class="fig-box" id="figDivShepard"></div>
<div class="btn-row div-figbar"><button class="btn btn-ghost btn-sm" data-fig="figDivShepard" data-kind="svg">⬇ SVG</button><button class="btn btn-ghost btn-sm" data-fig="figDivShepard" data-kind="png">⬇ PNG</button></div></div>
<h3><span data-l="es">Qué taxones separan dos conjuntos de sitios</span><span data-l="en">Which taxa separate two sets of sites</span></h3>
<p class="hint"><span data-l="es">Descomposición de la disimilitud media de Bray y Curtis entre los dos conjuntos en la aportación de cada taxón (Clarke 1993). Elige los sitios de cada conjunto con Ctrl o Mayús.</span><span data-l="en">Decomposition of the mean Bray and Curtis dissimilarity between the two sets into each taxon's contribution (Clarke 1993). Pick the sites of each set with Ctrl or Shift.</span></p>
<div class="div-groups">
<label class="div-group-pick"><span data-l="es">Conjunto A</span><span data-l="en">Set A</span><select id="divGroupA" multiple size="6"></select></label>
<label class="div-group-pick"><span data-l="es">Conjunto B</span><span data-l="en">Set B</span><select id="divGroupB" multiple size="6"></select></label>
</div>
<div class="btn-row">
<button class="btn btn-secondary btn-sm" id="divContribBtn"><span data-l="es">Calcular aportaciones</span><span data-l="en">Compute contributions</span></button>
<button class="btn btn-ghost btn-sm" data-csv="contrib"><span data-l="es">⬇ CSV</span><span data-l="en">⬇ CSV</span></button>
</div>
<div class="table-scroll" id="divContribTable"></div>
</div>
<!-- ---------- species-level structure ---------- -->
<div class="card">
<h2><span data-l="es">Estructura de las abundancias</span><span data-l="en">Structure of the abundances</span><span data-help="rankabundance"></span></h2>
<p class="hint"><span data-l="es">Gráfico de rango y abundancia de Whittaker (1960) en escala logarítmica, con cuatro modelos ajustados por máxima verosimilitud de Poisson y comparados por AIC, y el histograma de octavas de Preston (1948).</span><span data-l="en">Whittaker's rank-abundance plot (1960) on a logarithmic scale, with four models fitted by Poisson maximum likelihood and compared by AIC, and Preston's octave histogram (1948).</span></p>
<label class="inline-label"><span data-l="es">Sitio</span><span data-l="en">Site</span> <select id="divRadSite"></select></label>
<div class="div-fig"><div class="fig-box" id="figDivRad"></div>
<div class="btn-row div-figbar"><button class="btn btn-ghost btn-sm" data-fig="figDivRad" data-kind="svg">⬇ SVG</button><button class="btn btn-ghost btn-sm" data-fig="figDivRad" data-kind="png">⬇ PNG</button><button class="btn btn-ghost btn-sm" data-csv="rad"><span data-l="es">⬇ CSV</span><span data-l="en">⬇ CSV</span></button></div></div>
<div class="table-scroll" id="divRadTable"></div>
<div id="divRadNote"></div>
<div class="div-fig"><div class="fig-box" id="figDivPreston"></div>
<div class="btn-row div-figbar"><button class="btn btn-ghost btn-sm" data-fig="figDivPreston" data-kind="svg">⬇ SVG</button><button class="btn btn-ghost btn-sm" data-fig="figDivPreston" data-kind="png">⬇ PNG</button></div></div>
</div>
<!-- ---------- tests ---------- -->
<div class="card">
<h2><span data-l="es">Comparaciones y pruebas</span><span data-l="en">Comparisons and tests</span></h2>
<p class="hint"><span data-l="es">Prueba t de Hutcheson (1970) entre dos índices de Shannon, con sus grados de libertad, y prueba de permutación de la diferencia de H′. Las comparaciones por pares llevan la corrección de Holm para pruebas múltiples.</span><span data-l="en">Hutcheson's t-test (1970) between two Shannon indices, with its degrees of freedom, and a permutation test of the difference in H′. The pairwise comparisons carry Holm's correction for multiple testing.</span></p>
<div class="btn-row">
<label class="inline-label"><span data-l="es">Sitio A</span><span data-l="en">Site A</span> <select id="divTestA"></select></label>
<label class="inline-label"><span data-l="es">Sitio B</span><span data-l="en">Site B</span> <select id="divTestB"></select></label>
<button class="btn btn-secondary btn-sm" id="divTestBtn"><span data-l="es">Comparar los dos sitios</span><span data-l="en">Compare the two sites</span></button>
</div>
<div id="divTestOut"></div>
<h3><span data-l="es">Todas las parejas de sitios</span><span data-l="en">All pairs of sites</span></h3>
<div class="btn-row">
<button class="btn btn-secondary btn-sm" id="divPairBtn"><span data-l="es">Calcular todas las parejas</span><span data-l="en">Compute all pairs</span></button>
<button class="btn btn-ghost btn-sm" data-csv="pairs"><span data-l="es">⬇ CSV</span><span data-l="en">⬇ CSV</span></button>
</div>
<div class="table-scroll" id="divPairTable"></div>
</div>
<!-- ---------- methods ---------- -->
<div class="card card-note">
<h2><span data-l="es">Métodos y referencias</span><span data-l="en">Methods and references</span></h2>
<p class="hint"><span data-l="es">Párrafo listo para pegar en tu manuscrito, con las opciones que realmente usaste.</span><span data-l="en">A paragraph ready to paste into your manuscript, with the options you actually used.</span></p>
<div id="divMethods" class="div-methods"></div>
<div class="btn-row">
<button class="btn btn-secondary btn-sm" id="divCopyMethods"><span data-l="es">Copiar el párrafo</span><span data-l="en">Copy the paragraph</span></button>
<button class="btn btn-secondary btn-sm" data-csv="methods"><span data-l="es">⬇ Métodos y referencias (texto)</span><span data-l="en">⬇ Methods and references (text)</span></button>
</div>
</div>
</div>
</div>
<!-- @diversity:end -->
</div>
<div class="card" id="helpGuide8"></div>
</section>
<!-- ==================== STEP 9 · SDM ==================== -->
<section class="step-panel" id="panel-9">
<div class="panel-title"><div class="pt-num">9</div><div>
<h2><span data-l="es">Modelado de distribución de especies (SDM)</span><span data-l="en">Species distribution modelling (SDM)</span></h2>
<p><span data-l="es">MaxEnt y otros nueve algoritmos, validación, ensamble, mapas y proyección a escenarios.</span><span data-l="en">MaxEnt and nine more algorithms, validation, ensemble, maps and projection to scenarios.</span></p></div></div>
<div class="help-intro" id="helpIntro9"></div>
<div class="card">
<p class="hint"><span data-l="es">Modela la idoneidad del hábitat con <b>MaxEnt</b> y otros algoritmos, los valida, los combina en un ensamble y proyecta mapas (también a otros escenarios climáticos). Cálculo en Python dentro del navegador. Usa las capas ráster cargadas en el paso 5; para una malla fina conviene WorldClim a 2.5 arc-min o 30 arc-seg.</span><span data-l="en">Model habitat suitability with <b>MaxEnt</b> and other algorithms, validate them, combine them into an ensemble and project maps (also to other climate scenarios). Computed in Python inside the browser. It uses the raster layers loaded in step 5; for a fine grid use WorldClim at 2.5 arc-minutes or 30 arc-seconds.</span></p>
<div id="sdmRasterStatus" class="messages"></div>
<div class="config-group">
<h3><span data-l="es">Variables predictoras</span><span data-l="en">Predictor variables</span></h3>
<p class="hint"><span data-l="es">Por defecto va la selección que hiciste en el paso 6; puedes añadir cualquier otra (MaxEnt, GLM y los algoritmos de árboles toleran cierta colinealidad, pero interpreta con cautela las curvas de respuesta).</span><span data-l="en">By default the selection you made in step 6 is used; you can add any other (MaxEnt, GLM and the tree algorithms tolerate some collinearity, but interpret the response curves with care).</span></p>
<div class="btn-row">
<button class="btn btn-secondary" id="sdmVarsRecommended"><span data-l="es">Las del paso 6</span><span data-l="en">Those of step 6</span></button>
<button class="btn btn-secondary" id="sdmVarsAll"><span data-l="es">Todas</span><span data-l="en">All</span></button>
</div>
<div class="checkbox-grid" id="sdmVarChecklist"></div>
</div>
<div class="config-group">
<h3><span data-l="es">Registros de presencia</span><span data-l="en">Presence records</span></h3>
<label class="inline-label"><span data-l="es">Taxón</span><span data-l="en">Taxon</span> <select id="sdmTaxon"></select></label>
<label class="checkbox-label" style="margin-top:6px"><input type="checkbox" id="sdmDedupe" checked>
<span data-l="es">Conservar una sola presencia por celda de la malla (recomendado: reduce el sesgo de muestreo)</span><span data-l="en">Keep a single presence per grid cell (recommended: reduces sampling bias)</span></label>
</div>
<div class="config-group">
<h3><span data-l="es">Área de calibración y malla de proyección</span><span data-l="en">Calibration area and projection grid</span><span data-help="background"></span></h3>
<p class="hint"><span data-l="es">El fondo (pseudo-ausencias) se muestrea en las celdas a ≤ <i>R</i> km de algún registro (área accesible). Los mapas se calculan sobre el recuadro de los registros ampliado por un margen, o sobre la <b>extensión</b> que elijas (por ejemplo todo México): el modelo se proyecta también a las zonas alejadas de los registros, donde la predicción es una extrapolación (el mapa MESS lo señala).</span><span data-l="en">The background (pseudo-absences) is sampled in cells within <i>R</i> km of any record (accessible area). Maps are computed over the bounding box of the records enlarged by a margin, or over the <b>extent</b> you choose (for example all of Mexico): the model is also projected to areas far from the records, where the prediction is an extrapolation (the MESS map flags it).</span></p>
<label class="inline-label"><span data-l="es">Radio</span><span data-l="en">Radius</span> <i>R</i> (km) <input type="number" id="sdmRadius" value="300" min="20" step="50" style="width:80px"></label>
<label class="inline-label"><span data-l="es">Margen del mapa (°)</span><span data-l="en">Map margin (°)</span> <input type="number" id="sdmMargin" value="3" min="0" step="0.5" style="width:64px"></label>
<label class="inline-label"><span data-l="es">Extensión del mapa</span><span data-l="en">Map extent</span>
<select id="sdmExtent">
<option value="records" data-es="Recuadro de los registros + margen" data-en="Bounding box of the records + margin">Recuadro de los registros + margen</option>
<option value="country" id="sdmExtentCountry" data-es="País de los registros" data-en="Country of the records">País de los registros</option>
<option value="states" id="sdmExtentStates" data-es="Estados o regiones elegidos en el paso 2" data-en="States or regions chosen in step 2">Estados o regiones elegidos en el paso 2</option>
<option value="mx" data-es="México completo (con Yucatán)" data-en="All of Mexico (with Yucatán)">México completo (con Yucatán)</option>
<option value="mxca" data-es="México y Centroamérica" data-en="Mexico and Central America">México y Centroamérica</option>
<option value="us" data-es="Estados Unidos continental" data-en="Contiguous United States">Estados Unidos continental</option>
<option value="namer" data-es="Norteamérica" data-en="North America">Norteamérica</option>
<option value="latam" data-es="América Latina" data-en="Latin America">América Latina</option>
<option value="samer" data-es="Sudamérica" data-en="South America">Sudamérica</option>
<option value="eu" data-es="Europa" data-en="Europe">Europa</option>
<option value="af" data-es="África" data-en="Africa">África</option>
<option value="as" data-es="Asia" data-en="Asia">Asia</option>
<option value="oc" data-es="Oceanía" data-en="Oceania">Oceanía</option>
<option value="world" data-es="Mundo" data-en="World">Mundo</option>
<option value="custom" data-es="Personalizada (coordenadas)" data-en="Custom (coordinates)">Personalizada (coordenadas)</option>
</select></label>
<span id="sdmExtentCustom" style="display:none">
<label class="inline-label">S <input type="number" id="sdmExtS" value="14" step="0.5" style="width:64px"></label>
<label class="inline-label">N <input type="number" id="sdmExtN" value="33" step="0.5" style="width:64px"></label>
<label class="inline-label"><span data-l="es">O</span><span data-l="en">W</span> <input type="number" id="sdmExtW" value="-118.5" step="0.5" style="width:70px"></label>
<label class="inline-label"><span data-l="es">E</span><span data-l="en">E</span> <input type="number" id="sdmExtE" value="-86" step="0.5" style="width:70px"></label>
</span>
<label class="inline-label"><span data-l="es">Máx. celdas de la malla</span><span data-l="en">Max. grid cells</span> <input type="number" id="sdmMaxCells" value="80000" min="5000" step="5000" style="width:90px"></label>
<label class="inline-label"><span data-l="es">Puntos de fondo</span><span data-l="en">Background points</span> <input type="number" id="sdmNBg" value="10000" min="500" step="500" style="width:80px"></label>
<label class="inline-label"><span data-l="es">Semilla</span><span data-l="en">Seed</span> <input type="number" id="sdmSeed" value="42" style="width:64px"></label>
</div>
<div id="sdmExtentWarn"></div>
<button class="btn btn-primary btn-lg" id="sdmPrepareBtn"><span data-l="es">Preparar datos del modelo →</span><span data-l="en">Prepare model data →</span></button>
<div class="progress-wrap" id="sdmPrepProgress" style="display:none">
<div class="progress-bar"><div class="progress-fill" id="sdmPrepFill"></div></div>
<span class="progress-label" id="sdmPrepLabel"></span>