{
  "generatedAt": "2026-10-17T07:45:35.077Z",
  "modules": [
    {
      "id": "data.aircraft",
      "kind": "data",
      "name": {
        "tr": "Uçak takibi",
        "en": "Aircraft tracking"
      },
      "description": {
        "tr": "Canlı uçak konumları (ADS-B). Bir uçağa dokunun: hız ve yönünden hesaplanan akıcı hareketle takip edin.",
        "en": "Live aircraft positions (ADS-B). Tap one to follow it with smooth motion computed from its speed and track."
      },
      "category": "transport",
      "icon": "plane",
      "color": "#6366f1",
      "order": 10,
      "attribution": "Aircraft data: adsb.lol, adsb.fi, OpenSky Network, adsbdb.com",
      "entry": "index.js",
      "keywords": {
        "tr": "uçak uçuş ucak takip adsb havayolu helikopter",
        "en": "plane flight tracking adsb airline helicopter"
      },
      "server": "server.js",
      "api": "aircraft",
      "settings": {
        "followOnSelect": {
          "type": "toggle",
          "default": true,
          "label": {
            "tr": "Dokunulan uçağı otomatik takip et",
            "en": "Follow the aircraft I tap"
          }
        },
        "labels": {
          "type": "toggle",
          "default": true,
          "label": {
            "tr": "Çağrı kodlarını göster (yakınlaşınca)",
            "en": "Show callsigns (when zoomed in)"
          }
        },
        "showGround": {
          "type": "toggle",
          "default": false,
          "label": {
            "tr": "Yerdeki uçakları da göster",
            "en": "Show aircraft on the ground"
          }
        }
      },
      "_dir": "modules/data/aircraft/"
    },
    {
      "id": "data.aurora",
      "kind": "data",
      "name": {
        "tr": "Kutup ışığı (Aurora)",
        "en": "Aurora forecast"
      },
      "description": {
        "tr": "Kuzey ve güney ışıklarının görülme olasılığı (NOAA OVATION modeli) ve Kp jeomanyetik indeksi",
        "en": "Probability of seeing the northern / southern lights (NOAA OVATION model) and the Kp geomagnetic index"
      },
      "category": "space",
      "icon": "sparkles",
      "color": "#22c55e",
      "group": {
        "tr": "Gökyüzü",
        "en": "The sky"
      },
      "order": 40,
      "entry": "index.js",
      "keywords": {
        "tr": "kutup ışığı aurora kuzey ışıkları kp jeomanyetik güneş fırtınası",
        "en": "aurora northern lights kp geomagnetic solar storm"
      },
      "server": "server.js",
      "attribution": "Aurora forecast: NOAA Space Weather Prediction Center (OVATION)",
      "settings": {
        "minimum": {
          "type": "range",
          "min": 3,
          "max": 40,
          "step": 1,
          "default": 5,
          "label": {
            "tr": "En düşük olasılık (%)",
            "en": "Minimum probability (%)"
          }
        }
      },
      "_dir": "modules/data/aurora/"
    },
    {
      "id": "data.bikes",
      "kind": "data",
      "name": {
        "tr": "Şehir bisikletleri",
        "en": "City bike share"
      },
      "description": {
        "tr": "Dünyadaki ~700 bisiklet paylaşım sistemi; bir sisteme dokununca istasyonlar ve anlık boş bisiklet / boş yuva sayıları (CityBikes)",
        "en": "~700 bike-share systems worldwide; open one to see its stations with live free bikes and docks (CityBikes)"
      },
      "category": "transport",
      "icon": "bike",
      "color": "#0d9488",
      "order": 30,
      "entry": "index.js",
      "keywords": {
        "tr": "bisiklet kiralama paylaşım şehir bisikleti scooter istasyon bike",
        "en": "bicycle bike share rental station"
      },
      "server": "server.js",
      "attribution": "Bike-share data: CityBikes (citybik.es) and the operators",
      "_dir": "modules/data/bikes/"
    },
    {
      "id": "data.boundaries",
      "kind": "data",
      "name": {
        "tr": "Ülke Sınırları",
        "en": "Country Borders"
      },
      "description": {
        "tr": "Hava durumu katmanlarının üzerinde net görünen ülke sınır çizgileri",
        "en": "Crisp country boundary lines visible on top of weather layers"
      },
      "category": "reference",
      "icon": "globe",
      "color": "#64748b",
      "group": {
        "tr": "Sınırlar ve etiketler",
        "en": "Borders and labels"
      },
      "order": 10,
      "entry": "index.js",
      "keywords": {
        "tr": "ülke sınırı sınır ülkeler",
        "en": "country border boundary"
      },
      "settings": {
        "width": {
          "type": "range",
          "min": 0.5,
          "max": 3,
          "step": 0.5,
          "default": 1.5,
          "label": {
            "tr": "Çizgi kalınlığı",
            "en": "Line width"
          }
        },
        "color": {
          "type": "select",
          "default": "slate",
          "label": {
            "tr": "Renk",
            "en": "Color"
          },
          "options": [
            {
              "value": "slate",
              "label": {
                "tr": "Açık Gri / Slate",
                "en": "Light Slate"
              }
            },
            {
              "value": "white",
              "label": {
                "tr": "Beyaz",
                "en": "White"
              }
            },
            {
              "value": "dark",
              "label": {
                "tr": "Koyu",
                "en": "Dark"
              }
            }
          ]
        }
      },
      "_dir": "modules/data/boundaries/"
    },
    {
      "id": "data.buoys",
      "kind": "data",
      "name": {
        "tr": "Okyanus şamandıraları",
        "en": "Ocean buoys"
      },
      "description": {
        "tr": "Dalga yüksekliği ve periyodu, rüzgâr, deniz ve hava sıcaklığı, basınç (NOAA NDBC, ~900 istasyon; tsunami DART şamandıraları dahil)",
        "en": "Wave height & period, wind, sea and air temperature, pressure (NOAA NDBC, ~900 stations; includes DART tsunami buoys)"
      },
      "category": "weather",
      "icon": "life-buoy",
      "color": "#0284c7",
      "group": {
        "tr": "Gözlem ve tahmin",
        "en": "Observations and forecast"
      },
      "order": 40,
      "entry": "index.js",
      "keywords": {
        "tr": "şamandıra dalga deniz sıcaklığı okyanus tsunami dart",
        "en": "wave height sea temperature ocean tsunami"
      },
      "server": "server.js",
      "attribution": "Buoy data: NOAA National Data Buoy Center",
      "_dir": "modules/data/buoys/"
    },
    {
      "id": "data.duty",
      "kind": "data",
      "name": {
        "tr": "Nöbetçi eczaneler",
        "en": "Duty pharmacies (Turkey)"
      },
      "description": {
        "tr": "Bugün nöbetçi eczaneler: adres, telefon, saat, yol tarifi. İzmir ve Gaziantep anahtarsız hazır; Türkiye geneli için eczaneapi.com'dan ücretsiz anahtar (ECZANEAPI_KEY) yeterli.",
        "en": "Pharmacies on duty today: address, phone, hours, directions. İzmir and Gaziantep work out of the box (open data); all of Turkey needs a free eczaneapi.com key (ECZANEAPI_KEY) on the server."
      },
      "category": "services",
      "icon": "cross",
      "color": "#dc2626",
      "order": 20,
      "entry": "index.js",
      "keywords": {
        "tr": "nöbetçi eczane ilaç gece açık eczane",
        "en": "duty pharmacy on-call night chemist"
      },
      "server": "server.js",
      "attribution": "Duty pharmacies: İzmir Büyükşehir Belediyesi open data, Gaziantep Eczacı Odası, EczaneAPI.com, Eczaneler.org",
      "settings": {
        "showOthers": {
          "type": "toggle",
          "default": false,
          "label": {
            "tr": "Bugün nöbetçi olmayan eczaneleri de göster (solgun)",
            "en": "Also show pharmacies not on duty today (faded)"
          }
        }
      },
      "_dir": "modules/data/duty/"
    },
    {
      "id": "data.earthquakes",
      "kind": "data",
      "name": {
        "tr": "Depremler (Kandilli + AFAD + USGS)",
        "en": "Earthquakes (Kandilli + AFAD + USGS)"
      },
      "description": {
        "tr": "Türkiye için Kandilli (M0.5+) ve AFAD (resmî liste), dünya için USGS. Aynı deprem tek kez gösterilir, her kaynağın büyüklüğü pencerede görünür. Minimum büyüklüğü ayarlardan seçebilirsiniz.",
        "en": "Kandilli (M0.5+) and AFAD (the official list) for Turkey, USGS for the world. The same quake is shown once and every source's magnitude is in the popup. Pick the minimum magnitude in the settings."
      },
      "category": "hazard",
      "icon": "activity",
      "color": "#ea6a12",
      "order": 0,
      "entry": "index.js",
      "keywords": {
        "tr": "deprem sarsıntı kandilli usgs büyüklük richter afad",
        "en": "earthquake quake seismic magnitude"
      },
      "settings": {
        "minMag": {
          "type": "range",
          "min": 0,
          "max": 7,
          "step": 0.1,
          "default": 2,
          "label": {
            "tr": "Minimum büyüklük (1.4 → küçük depremler de görünür)",
            "en": "Minimum magnitude (1.4 → small quakes too)"
          }
        },
        "period": {
          "type": "select",
          "default": "day",
          "label": {
            "tr": "Zaman aralığı",
            "en": "Period"
          },
          "options": [
            {
              "value": "hour",
              "label": {
                "tr": "Son 1 saat",
                "en": "Past hour"
              }
            },
            {
              "value": "day",
              "label": {
                "tr": "Son 24 saat",
                "en": "Past 24 hours"
              }
            },
            {
              "value": "week",
              "label": {
                "tr": "Son 7 gün",
                "en": "Past 7 days"
              }
            },
            {
              "value": "month",
              "label": {
                "tr": "Son 30 gün",
                "en": "Past 30 days"
              }
            }
          ]
        },
        "source": {
          "type": "select",
          "default": "all",
          "label": {
            "tr": "Kaynak",
            "en": "Source"
          },
          "options": [
            {
              "value": "all",
              "label": {
                "tr": "Kandilli + AFAD + USGS (birleşik)",
                "en": "Kandilli + AFAD + USGS (merged)"
              }
            },
            {
              "value": "koeri",
              "label": {
                "tr": "Yalnızca Kandilli (Türkiye)",
                "en": "Kandilli only (Turkey)"
              }
            },
            {
              "value": "afad",
              "label": {
                "tr": "Yalnızca AFAD (Türkiye, resmî liste)",
                "en": "AFAD only (Turkey, official list)"
              }
            },
            {
              "value": "usgs",
              "label": {
                "tr": "Yalnızca USGS (dünya)",
                "en": "USGS only (world)"
              }
            }
          ]
        }
      },
      "server": "server.js",
      "attribution": "Earthquake data: Kandilli Observatory and Earthquake Research Institute (BDTİM), AFAD, USGS",
      "_dir": "modules/data/earthquakes/"
    },
    {
      "id": "data.fields",
      "kind": "data",
      "name": {
        "tr": "Hava modeli alanları (GFS)",
        "en": "Weather model fields (GFS)"
      },
      "description": {
        "tr": "NOAA GFS ızgara verisini sunucuda indirip saklar, harita katmanlarını (rüzgâr, sıcaklık, yağış, kar, bulut…) çizer",
        "en": "Downloads and stores the NOAA GFS grids on the server and paints the map layers (wind, temperature, rain, snow, clouds…)"
      },
      "category": "weather",
      "order": 21,
      "panel": false,
      "entry": "index.js",
      "server": "server.js",
      "api": "fields",
      "_dir": "modules/data/fields/"
    },
    {
      "id": "data.filming",
      "kind": "data",
      "name": {
        "tr": "Film ve dizi çekim yerleri",
        "en": "Film and TV filming locations"
      },
      "description": {
        "tr": "Dünyada film ve dizi çekilen yerler (Wikidata). Noktaya dokununca orada çekilenlerin listesi.",
        "en": "Places where films and TV series were shot (Wikidata). Tap a dot for what was filmed there."
      },
      "category": "media",
      "icon": "clapperboard",
      "color": "#ea580c",
      "order": 40,
      "attribution": "Filming location data: Wikidata (CC0). Images: Wikimedia Commons",
      "entry": "index.js",
      "keywords": {
        "tr": "film dizi çekim yeri sinema mekan set",
        "en": "movie film series filming location cinema set"
      },
      "server": "server.js",
      "api": "filming",
      "settings": {
        "kind": {
          "type": "select",
          "default": "all",
          "label": {
            "tr": "Gösterilen",
            "en": "Show"
          },
          "options": [
            {
              "value": "all",
              "label": {
                "tr": "Film ve diziler",
                "en": "Films and series"
              }
            },
            {
              "value": "film",
              "label": {
                "tr": "Yalnızca filmler",
                "en": "Films only"
              }
            },
            {
              "value": "series",
              "label": {
                "tr": "Yalnızca diziler",
                "en": "Series only"
              }
            }
          ]
        },
        "minProductions": {
          "type": "range",
          "min": 1,
          "max": 50,
          "step": 1,
          "default": 1,
          "label": {
            "tr": "En az kaç yapım çekilmiş olsun",
            "en": "Minimum number of productions"
          }
        }
      },
      "_dir": "modules/data/filming/"
    },
    {
      "id": "data.hazards",
      "kind": "data",
      "name": {
        "tr": "Afet ve doğal olaylar",
        "en": "Hazards & natural events"
      },
      "description": {
        "tr": "Orman yangınları, kasırga/fırtınalar, yanardağlar, seller, kuraklık, buzdağları… (NASA EONET + BM GDACS uyarıları)",
        "en": "Wildfires, cyclones & storms, volcanoes, floods, drought, icebergs… (NASA EONET + UN GDACS alerts)"
      },
      "category": "hazard",
      "icon": "triangle-alert",
      "color": "#dc2626",
      "order": 30,
      "entry": "index.js",
      "keywords": {
        "tr": "yangın orman yangını kasırga fırtına yanardağ volkan sel kuraklık buzdağı afet toz",
        "en": "wildfire fire cyclone hurricane typhoon storm volcano flood drought iceberg disaster"
      },
      "server": "server.js",
      "attribution": "NASA EONET · GDACS (UN/EC JRC)",
      "settings": {
        "kind": {
          "type": "select",
          "label": {
            "tr": "Tür",
            "en": "Kind"
          },
          "default": "all",
          "options": [
            {
              "value": "all",
              "label": "Tümü / All"
            },
            {
              "value": "wildfire",
              "label": "Yangın / Wildfire"
            },
            {
              "value": "storm",
              "label": "Fırtına, kasırga / Storm"
            },
            {
              "value": "volcano",
              "label": "Yanardağ / Volcano"
            },
            {
              "value": "flood",
              "label": "Sel / Flood"
            },
            {
              "value": "drought",
              "label": "Kuraklık / Drought"
            },
            {
              "value": "ice",
              "label": "Buz / Ice"
            },
            {
              "value": "dust",
              "label": "Toz, sis / Dust, haze"
            },
            {
              "value": "landslide",
              "label": "Heyelan / Landslide"
            }
          ]
        }
      },
      "_dir": "modules/data/hazards/"
    },
    {
      "id": "data.landmarks",
      "kind": "data",
      "name": {
        "tr": "Önemli yerler (UNESCO, yanardağ, zirve…)",
        "en": "Landmarks (UNESCO, volcanoes, peaks…)"
      },
      "description": {
        "tr": "UNESCO Dünya Mirası alanları, yanardağlar, 3000 m üstü zirveler, şelaleler, milli parklar, deniz fenerleri, barajlar, köprüler ve nükleer santraller (Wikidata)",
        "en": "UNESCO World Heritage sites, volcanoes, peaks above 3000 m, waterfalls, national parks, lighthouses, dams, bridges and nuclear power plants (Wikidata)"
      },
      "category": "reference",
      "icon": "award",
      "color": "#0d9488",
      "group": {
        "tr": "Yerler",
        "en": "Places"
      },
      "order": 40,
      "entry": "index.js",
      "keywords": {
        "tr": "unesco dünya mirası yanardağ zirve dağ şelale milli park fener baraj köprü nükleer santral",
        "en": "unesco world heritage volcano peak mountain waterfall national park lighthouse dam bridge nuclear power plant"
      },
      "server": "server.js",
      "attribution": "Landmark data: Wikidata (CC0). Images: Wikimedia Commons",
      "settings": {
        "unesco": {
          "type": "toggle",
          "default": true,
          "label": {
            "tr": "UNESCO Dünya Mirası",
            "en": "UNESCO World Heritage"
          }
        },
        "volcano": {
          "type": "toggle",
          "default": true,
          "label": {
            "tr": "Yanardağlar",
            "en": "Volcanoes"
          }
        },
        "peak": {
          "type": "toggle",
          "default": true,
          "label": {
            "tr": "Yüksek zirveler",
            "en": "High peaks"
          }
        },
        "waterfall": {
          "type": "toggle",
          "default": false,
          "label": {
            "tr": "Şelaleler",
            "en": "Waterfalls"
          }
        },
        "park": {
          "type": "toggle",
          "default": false,
          "label": {
            "tr": "Milli parklar",
            "en": "National parks"
          }
        },
        "lighthouse": {
          "type": "toggle",
          "default": false,
          "label": {
            "tr": "Deniz fenerleri",
            "en": "Lighthouses"
          }
        },
        "dam": {
          "type": "toggle",
          "default": false,
          "label": {
            "tr": "Barajlar",
            "en": "Dams"
          }
        },
        "bridge": {
          "type": "toggle",
          "default": false,
          "label": {
            "tr": "Ünlü köprüler",
            "en": "Famous bridges"
          }
        },
        "nuclear": {
          "type": "toggle",
          "default": false,
          "label": {
            "tr": "Nükleer santraller",
            "en": "Nuclear power plants"
          }
        }
      },
      "_dir": "modules/data/landmarks/"
    },
    {
      "id": "data.launches",
      "kind": "data",
      "name": {
        "tr": "Roket fırlatmaları",
        "en": "Rocket launches"
      },
      "description": {
        "tr": "Yaklaşan fırlatmalar fırlatma rampalarında: tarih, roket, görev, durum ve canlı yayın bağlantısı (The Space Devs)",
        "en": "Upcoming launches at their pads: date, rocket, mission, status and the live webcast link (The Space Devs)"
      },
      "category": "space",
      "icon": "rocket",
      "color": "#d97706",
      "group": {
        "tr": "Yörüngede",
        "en": "In orbit"
      },
      "order": 20,
      "entry": "index.js",
      "keywords": {
        "tr": "roket fırlatma uzay nasa spacex rampa cape canaveral baykonur",
        "en": "rocket launch space nasa spacex pad cape canaveral"
      },
      "server": "server.js",
      "attribution": "Launch data: The Space Devs — Launch Library 2",
      "_dir": "modules/data/launches/"
    },
    {
      "id": "data.metar",
      "kind": "data",
      "name": {
        "tr": "Havalimanı hava durumu (METAR)",
        "en": "Airport weather (METAR)"
      },
      "description": {
        "tr": "~5 000 havalimanında anlık rüzgâr, görüş, bulut tavanı, sıcaklık, basınç; renk uçuş kategorisi (VFR / MVFR / IFR / LIFR)",
        "en": "Live wind, visibility, ceiling, temperature and pressure at ~5,000 airports; colour = flight category (VFR / MVFR / IFR / LIFR)"
      },
      "category": "weather",
      "icon": "tower-control",
      "color": "#16a34a",
      "group": {
        "tr": "Gözlem ve tahmin",
        "en": "Observations and forecast"
      },
      "order": 41,
      "entry": "index.js",
      "keywords": {
        "tr": "havalimanı pist uçuş görüş bulut tavanı taf ifr vfr",
        "en": "airport runway flight visibility ceiling aviation"
      },
      "server": "server.js",
      "attribution": "METAR data: NOAA Aviation Weather Center",
      "settings": {
        "only": {
          "type": "select",
          "label": {
            "tr": "Göster",
            "en": "Show"
          },
          "default": "all",
          "options": [
            {
              "value": "all",
              "label": "Tümü / All"
            },
            {
              "value": "poor",
              "label": "Yalnızca düşük görüş (IFR, LIFR) / Poor visibility only"
            }
          ]
        }
      },
      "_dir": "modules/data/metar/"
    },
    {
      "id": "data.parking",
      "kind": "data",
      "name": {
        "tr": "İstanbul otoparkları (İSPARK, canlı doluluk)",
        "en": "Istanbul car parks (İSPARK, live)"
      },
      "description": {
        "tr": "~250 İSPARK otoparkı: kapasite, anlık boş yer sayısı, çalışma saati, ücretsiz süre. Yeşil: yer var, turuncu: neredeyse dolu, kırmızı: dolu.",
        "en": "~250 İSPARK car parks: capacity, free spaces right now, hours, free time. Green: room, amber: nearly full, red: full."
      },
      "category": "services",
      "icon": "square-parking",
      "color": "#2563eb",
      "order": 30,
      "entry": "index.js",
      "keywords": {
        "tr": "otopark park yeri ispark istanbul doluluk araç park etmek",
        "en": "parking car park garage lot occupancy ispark istanbul"
      },
      "server": "server.js",
      "attribution": "Car parks: İBB Open Data — İSPARK",
      "_dir": "modules/data/parking/"
    },
    {
      "id": "data.plates",
      "kind": "data",
      "name": {
        "tr": "Tektonik levha sınırları",
        "en": "Tectonic plate boundaries"
      },
      "description": {
        "tr": "Depremlerin ve yanardağların toplandığı levha sınırları (Bird 2003); dalma-batma kırmızı, diğerleri mavi. Çevrimdışı çalışır.",
        "en": "The plate boundaries where earthquakes and volcanoes cluster (Bird 2003); subduction in red, the rest in blue. Works offline."
      },
      "category": "hazard",
      "icon": "mountain",
      "color": "#9a3412",
      "order": 40,
      "entry": "index.js",
      "keywords": {
        "tr": "fay levha tektonik dalma batma kıta jeoloji",
        "en": "fault tectonic plate subduction geology"
      },
      "attribution": "Plate boundaries: Bird (2003) PB2002, via Hugo Ahlenius / Nordpil (ODC-By)",
      "_dir": "modules/data/plates/"
    },
    {
      "id": "data.radios",
      "kind": "data",
      "name": {
        "tr": "Radyo istasyonları",
        "en": "Radio stations"
      },
      "description": {
        "tr": "Dünya radyoları haritada: bir noktaya dokun, dinle.",
        "en": "Radio stations worldwide on the map: tap one and listen."
      },
      "category": "media",
      "icon": "radio",
      "color": "#7c3aed",
      "order": 10,
      "entry": "index.js",
      "keywords": {
        "tr": "radyo istasyon fm canlı müzik haber",
        "en": "radio station fm live music news"
      },
      "server": "server.js",
      "api": "radios",
      "_dir": "modules/data/radios/"
    },
    {
      "id": "data.satellites",
      "kind": "data",
      "name": {
        "tr": "Uydular (ISS, GPS, Starlink…)",
        "en": "Satellites (ISS, GPS, Starlink…)"
      },
      "description": {
        "tr": "Uzay istasyonları, parlak uydular, hava, GPS/Galileo/GLONASS/BeiDou, Starlink… gerçek zamanlı konum; dokununca yörünge izi (CelesTrak, SGP4)",
        "en": "Space stations, bright satellites, weather, GPS/Galileo/GLONASS/BeiDou, Starlink… live positions; tap one for its orbit track (CelesTrak, SGP4)"
      },
      "category": "space",
      "icon": "satellite",
      "color": "#4f46e5",
      "group": {
        "tr": "Yörüngede",
        "en": "In orbit"
      },
      "order": 10,
      "entry": "index.js",
      "keywords": {
        "tr": "uydu iss uzay istasyonu starlink gps galileo glonass beidou yörünge tiangong",
        "en": "satellite iss space station starlink gps orbit"
      },
      "server": "server.js",
      "attribution": "Orbital elements: CelesTrak (Dr. T.S. Kelso). Propagation: satellite.js (MIT)",
      "settings": {
        "stations": {
          "type": "toggle",
          "default": true,
          "label": {
            "tr": "Uzay istasyonları (ISS, Tiangong)",
            "en": "Space stations (ISS, Tiangong)"
          }
        },
        "visual": {
          "type": "toggle",
          "default": true,
          "label": {
            "tr": "Parlak uydular",
            "en": "Brightest satellites"
          }
        },
        "weather": {
          "type": "toggle",
          "default": true,
          "label": {
            "tr": "Hava uyduları",
            "en": "Weather satellites"
          }
        },
        "gps-ops": {
          "type": "toggle",
          "default": true,
          "label": {
            "tr": "GPS",
            "en": "GPS"
          }
        },
        "galileo": {
          "type": "toggle",
          "default": false,
          "label": {
            "tr": "Galileo",
            "en": "Galileo"
          }
        },
        "glo-ops": {
          "type": "toggle",
          "default": false,
          "label": {
            "tr": "GLONASS",
            "en": "GLONASS"
          }
        },
        "beidou": {
          "type": "toggle",
          "default": false,
          "label": {
            "tr": "BeiDou",
            "en": "BeiDou"
          }
        },
        "geo": {
          "type": "toggle",
          "default": false,
          "label": {
            "tr": "Yer-eşzamanlı kuşak (GEO)",
            "en": "Geostationary belt"
          }
        },
        "starlink": {
          "type": "toggle",
          "default": false,
          "label": {
            "tr": "Starlink (binlerce uydu)",
            "en": "Starlink (thousands)"
          }
        },
        "oneweb": {
          "type": "toggle",
          "default": false,
          "label": {
            "tr": "OneWeb",
            "en": "OneWeb"
          }
        },
        "iridium-NEXT": {
          "type": "toggle",
          "default": false,
          "label": {
            "tr": "Iridium NEXT",
            "en": "Iridium NEXT"
          }
        },
        "science": {
          "type": "toggle",
          "default": false,
          "label": {
            "tr": "Bilim uyduları",
            "en": "Science satellites"
          }
        },
        "amateur": {
          "type": "toggle",
          "default": false,
          "label": {
            "tr": "Amatör radyo uyduları",
            "en": "Amateur radio satellites"
          }
        }
      },
      "_dir": "modules/data/satellites/"
    },
    {
      "id": "data.services",
      "kind": "data",
      "name": {
        "tr": "Hizmet noktaları (şarj, eczane, hastane…)",
        "en": "Service points (EV charging, pharmacies, hospitals…)"
      },
      "description": {
        "tr": "Elektrikli araç şarj istasyonları (soket, güç, işletmeci, ücret), eczaneler, hastaneler, akaryakıt, ATM, tuvalet, içme suyu, polis ve itfaiye (OpenStreetMap). Yakınlaştırınca (10+) yüklenir.",
        "en": "EV charging stations (sockets, power, operator, fee), pharmacies, hospitals, fuel, ATMs, toilets, drinking water, police and fire stations (OpenStreetMap). Loads when you zoom in (10+)."
      },
      "category": "services",
      "icon": "plug-zap",
      "color": "#16a34a",
      "order": 10,
      "entry": "index.js",
      "keywords": {
        "tr": "şarj istasyonu elektrikli araç ev tesla eczane hastane benzin akaryakıt atm tuvalet wc içme suyu çeşme polis itfaiye",
        "en": "ev charging station electric car pharmacy hospital gas petrol fuel atm toilet drinking water fountain police fire"
      },
      "server": "server.js",
      "attribution": "© OpenStreetMap contributors (ODbL), via Overpass API",
      "settings": {
        "charging": {
          "type": "toggle",
          "default": true,
          "label": {
            "tr": "Şarj istasyonları",
            "en": "EV charging"
          }
        },
        "pharmacy": {
          "type": "toggle",
          "default": true,
          "label": {
            "tr": "Eczaneler",
            "en": "Pharmacies"
          }
        },
        "hospital": {
          "type": "toggle",
          "default": true,
          "label": {
            "tr": "Hastaneler",
            "en": "Hospitals"
          }
        },
        "fuel": {
          "type": "toggle",
          "default": false,
          "label": {
            "tr": "Akaryakıt",
            "en": "Fuel stations"
          }
        },
        "atm": {
          "type": "toggle",
          "default": false,
          "label": {
            "tr": "ATM",
            "en": "ATMs"
          }
        },
        "toilets": {
          "type": "toggle",
          "default": false,
          "label": {
            "tr": "Tuvaletler",
            "en": "Toilets"
          }
        },
        "water": {
          "type": "toggle",
          "default": false,
          "label": {
            "tr": "İçme suyu",
            "en": "Drinking water"
          }
        },
        "police": {
          "type": "toggle",
          "default": false,
          "label": {
            "tr": "Polis",
            "en": "Police"
          }
        },
        "fire": {
          "type": "toggle",
          "default": false,
          "label": {
            "tr": "İtfaiye",
            "en": "Fire stations"
          }
        }
      },
      "_dir": "modules/data/services/"
    },
    {
      "id": "data.ships",
      "kind": "data",
      "name": {
        "tr": "Gemiler (AIS)",
        "en": "Ships (AIS)"
      },
      "description": {
        "tr": "Canlı gemi konumları: tür, hız, rota, varış limanı. Anahtarsız kaynak Baltık ve Finlandiya'yı kapsar; dünya çapı için sunucuda AISSTREAM_API_KEY tanımlayın.",
        "en": "Live vessel positions: kind, speed, course, destination. The key-less source covers the Baltic and Finland; set AISSTREAM_API_KEY on the server for worldwide coverage."
      },
      "category": "transport",
      "icon": "ship",
      "color": "#0f766e",
      "order": 20,
      "entry": "index.js",
      "keywords": {
        "tr": "gemi vapur tekne feribot tanker yük gemisi ais liman deniz trafiği",
        "en": "ship vessel boat ferry tanker cargo ais port marine traffic"
      },
      "server": "server.js",
      "attribution": "Ship data: Fintraffic / Digitraffic Marine (CC BY 4.0), AISStream.io",
      "settings": {
        "kind": {
          "type": "select",
          "label": {
            "tr": "Gemi türü",
            "en": "Ship kind"
          },
          "default": "all",
          "options": [
            {
              "value": "all",
              "label": "Tümü / All"
            },
            {
              "value": "cargo",
              "label": "Yük / Cargo"
            },
            {
              "value": "tanker",
              "label": "Tanker"
            },
            {
              "value": "passenger",
              "label": "Yolcu, feribot / Passenger"
            },
            {
              "value": "fishing",
              "label": "Balıkçı / Fishing"
            },
            {
              "value": "pleasure",
              "label": "Yat, yelkenli / Pleasure"
            },
            {
              "value": "service",
              "label": "Römorkör, hizmet / Tug, service"
            },
            {
              "value": "military",
              "label": "Askerî / Military"
            }
          ]
        },
        "movingOnly": {
          "type": "toggle",
          "label": {
            "tr": "Yalnızca seyirdeki gemiler",
            "en": "Only vessels under way"
          },
          "default": false
        }
      },
      "_dir": "modules/data/ships/"
    },
    {
      "id": "data.streams",
      "kind": "data",
      "name": {
        "tr": "Canlı TV",
        "en": "Live TV"
      },
      "description": {
        "tr": "Dünyadan canlı TV kanalları (Famelack / TV Garden verisi). Şehre veya ülkeye dokunun, listeden izleyin.",
        "en": "Live TV channels from around the world (Famelack / TV Garden data). Tap a city or country and watch from the list."
      },
      "category": "media",
      "icon": "tv",
      "color": "#ef4444",
      "order": 20,
      "attribution": "TV list: Famelack data (MIT), iptv-org. Places: iptv-org, Wikidata",
      "entry": "index.js",
      "keywords": {
        "tr": "tv televizyon kanal canlı yayın haber",
        "en": "tv television channel live stream news"
      },
      "server": "server.js",
      "api": "streams",
      "settings": {
        "includeCountryLevel": {
          "type": "toggle",
          "default": true,
          "label": {
            "tr": "Şehri bilinmeyen kanalları da göster (ülke başkentinde, soluk)",
            "en": "Also show channels with no known city (at the capital, faint)"
          }
        },
        "hideDead": {
          "type": "toggle",
          "default": true,
          "label": {
            "tr": "Çalışmadığı denetlenen yayınları gizle",
            "en": "Hide streams found not working"
          }
        }
      },
      "_dir": "modules/data/streams/"
    },
    {
      "id": "data.terminator",
      "kind": "data",
      "name": {
        "tr": "Gündüz–gece, Güneş ve Ay",
        "en": "Day & night, Sun and Moon"
      },
      "description": {
        "tr": "Şu an dünyanın hangi yarısının geceyi yaşadığı (alacakaranlık kuşaklarıyla), Güneş'in tepede olduğu nokta ve Ay'ın konumu ile evresi",
        "en": "Which half of the world is in night right now (with twilight bands), the point below the Sun, and the Moon's position and phase"
      },
      "category": "space",
      "icon": "sun-moon",
      "color": "#7c3aed",
      "group": {
        "tr": "Gökyüzü",
        "en": "The sky"
      },
      "order": 30,
      "entry": "index.js",
      "keywords": {
        "tr": "gece gündüz güneş ay evre alacakaranlık terminatör gün batımı",
        "en": "day night sun moon phase twilight terminator sunset"
      },
      "attribution": "",
      "settings": {
        "strength": {
          "type": "range",
          "min": 0.3,
          "max": 1,
          "step": 0.05,
          "default": 0.8,
          "label": {
            "tr": "Gece karartması",
            "en": "Night shading"
          }
        }
      },
      "_dir": "modules/data/terminator/"
    },
    {
      "id": "data.weather",
      "kind": "data",
      "name": {
        "tr": "Hava durumu (şehirler)",
        "en": "Weather (cities)"
      },
      "description": {
        "tr": "Şehirlerde saatlik hava: WeatherAPI + ECMWF, ICON, GFS harmanı. Sıcaklık, yağış, UV, fırtına, görüş… Şehre dokununca ayrıntılar.",
        "en": "Hourly city weather: WeatherAPI blended with ECMWF, ICON, GFS. Temperature, rain, UV, storms, visibility… tap a city for details."
      },
      "category": "weather",
      "icon": "cloud-sun",
      "color": "#2563eb",
      "group": {
        "tr": "Gözlem ve tahmin",
        "en": "Observations and forecast"
      },
      "order": 0,
      "requires": [
        "ui.timeline"
      ],
      "entry": "index.js",
      "keywords": {
        "tr": "hava durumu sıcaklık yağmur rüzgar tahmin kar nem uv şimşek",
        "en": "forecast temperature rain wind snow humidity lightning"
      },
      "server": "server.js",
      "api": "weather",
      "settings": {
        "mode": {
          "type": "select",
          "default": "temperature",
          "label": {
            "tr": "Gösterilen değer",
            "en": "Shown value"
          },
          "options": [
            {
              "value": "temperature",
              "label": {
                "tr": "Sıcaklık",
                "en": "Temperature"
              }
            },
            {
              "value": "rainchance",
              "label": {
                "tr": "Yağış ihtimali (%)",
                "en": "Rain chance (%)"
              }
            },
            {
              "value": "precip",
              "label": {
                "tr": "Yağış",
                "en": "Precipitation"
              }
            },
            {
              "value": "cloud",
              "label": {
                "tr": "Bulutluluk",
                "en": "Cloud cover"
              }
            },
            {
              "value": "wind",
              "label": {
                "tr": "Rüzgâr",
                "en": "Wind"
              }
            },
            {
              "value": "humidity",
              "label": {
                "tr": "Nem",
                "en": "Humidity"
              }
            },
            {
              "value": "aqi",
              "label": {
                "tr": "Hava kalitesi (AQI)",
                "en": "Air quality (AQI)"
              }
            },
            {
              "value": "uv",
              "label": {
                "tr": "UV indeksi",
                "en": "UV index"
              }
            },
            {
              "value": "thunder",
              "label": {
                "tr": "Fırtına / şimşek riski",
                "en": "Storm / lightning risk"
              }
            },
            {
              "value": "visibility",
              "label": {
                "tr": "Görüş mesafesi",
                "en": "Visibility"
              }
            },
            {
              "value": "freezing",
              "label": {
                "tr": "Donma seviyesi",
                "en": "Freezing level"
              }
            },
            {
              "value": "dust",
              "label": {
                "tr": "Toz (çöl tozu)",
                "en": "Dust"
              }
            },
            {
              "value": "pollen",
              "label": {
                "tr": "Polen (Avrupa)",
                "en": "Pollen (Europe)"
              }
            }
          ]
        },
        "style": {
          "type": "select",
          "default": "clean",
          "label": {
            "tr": "Görünüm stili",
            "en": "Display style"
          },
          "options": [
            {
              "value": "clean",
              "label": {
                "tr": "Net etiket (şehir + değer)",
                "en": "Clean label (city + value)"
              }
            },
            {
              "value": "badge",
              "label": {
                "tr": "Renkli rozet (daire)",
                "en": "Color badge (circle)"
              }
            }
          ]
        },
        "rainDots": {
          "type": "toggle",
          "default": true,
          "label": {
            "tr": "Yağış ihtimali noktacığı",
            "en": "Rain-chance dot"
          }
        },
        "tempSource": {
          "type": "select",
          "default": "blend",
          "label": {
            "tr": "Sıcaklık kaynağı",
            "en": "Temperature source"
          },
          "options": [
            {
              "value": "blend",
              "label": {
                "tr": "Harman (ECMWF + ICON + GFS + WeatherAPI)",
                "en": "Blend (ECMWF + ICON + GFS + WeatherAPI)"
              }
            },
            {
              "value": "ecmwf",
              "label": {
                "tr": "Yalnızca ECMWF",
                "en": "ECMWF only"
              }
            },
            {
              "value": "weatherapi",
              "label": {
                "tr": "Yalnızca WeatherAPI",
                "en": "WeatherAPI only"
              }
            }
          ]
        },
        "thunderDots": {
          "type": "toggle",
          "default": true,
          "label": {
            "tr": "Fırtına işareti (⚡)",
            "en": "Storm marker (⚡)"
          }
        }
      },
      "attribution": "Weather data © WeatherAPI.com · Open-Meteo.com (CC BY 4.0) — ECMWF, DWD, NOAA, Copernicus",
      "_dir": "modules/data/weather/"
    },
    {
      "id": "data.webcams",
      "kind": "data",
      "name": {
        "tr": "Şehir kameraları",
        "en": "City cameras"
      },
      "description": {
        "tr": "Dünya şehirlerinden canlı webcam yayınları (plaj, liman, meydan, trafik, havalimanı…). Kameranın baktığı şehirde gösterilir.",
        "en": "Live webcams from cities around the world (beach, harbor, square, traffic, airport…), shown in the city they look at."
      },
      "category": "media",
      "icon": "cctv",
      "color": "#0ea5e9",
      "order": 30,
      "attribution": "Camera list: Famelack data (MIT). Places: iptv-org, Wikidata",
      "entry": "index.js",
      "keywords": {
        "tr": "kamera webcam şehir kamerası canlı manzara",
        "en": "camera webcam city live view"
      },
      "settings": {
        "includeCountryLevel": {
          "type": "toggle",
          "default": false,
          "label": {
            "tr": "Şehri bilinmeyen kameraları da göster (ülke başkentinde, soluk)",
            "en": "Also show cameras with no known city (at the capital, faint)"
          }
        },
        "hideDead": {
          "type": "toggle",
          "default": true,
          "label": {
            "tr": "Çalışmadığı denetlenen yayınları gizle",
            "en": "Hide streams found not working"
          }
        }
      },
      "_dir": "modules/data/webcams/"
    },
    {
      "id": "aws",
      "kind": "provider",
      "name": "AWS Open Data",
      "description": {
        "tr": "Terrain Tiles — küresel yükseklik verisi",
        "en": "Terrain Tiles — global elevation data"
      },
      "attribution": "Terrain: Mapzen, NASA SRTM, USGS 3DEP, ETOPO1 (AWS Terrain Tiles)",
      "homepage": "https://registry.opendata.aws/terrain-tiles/",
      "order": 90,
      "_dir": "modules/providers/aws/"
    },
    {
      "id": "aws.terrarium",
      "kind": "layer",
      "provider": "aws",
      "role": "dem",
      "name": {
        "tr": "Yükseklik (Terrarium)",
        "en": "Elevation (Terrarium)"
      },
      "description": {
        "tr": "3D arazi görünümü için kullanılır",
        "en": "Used by the 3D terrain view"
      },
      "order": 90,
      "source": {
        "type": "raster-dem",
        "tiles": [
          "https://s3.amazonaws.com/elevation-tiles-prod/terrarium/{z}/{x}/{y}.png"
        ],
        "encoding": "terrarium",
        "tileSize": 256,
        "minzoom": 0,
        "maxzoom": 15
      },
      "upstream": {
        "maxConcurrent": 8
      },
      "_dir": "modules/providers/aws/layers/terrarium/"
    },
    {
      "id": "carto",
      "kind": "provider",
      "name": "CARTO",
      "description": {
        "tr": "Sade, veri görselleştirmeye uygun altlıklar — API anahtarı gerekir (ücretsiz, hesapsız: carto.com/basemaps/apikey) — .env içine CARTO_KEY",
        "en": "Clean basemaps made for data visualisation — needs an API key (free, no account: carto.com/basemaps/apikey) — set CARTO_KEY in .env"
      },
      "attribution": "© OpenStreetMap contributors © CARTO",
      "homepage": "https://carto.com/basemaps",
      "order": 20,
      "_dir": "modules/providers/carto/"
    },
    {
      "id": "carto.dark",
      "kind": "layer",
      "provider": "carto",
      "role": "base",
      "name": {
        "tr": "Koyu",
        "en": "Dark"
      },
      "order": 21,
      "source": {
        "type": "raster",
        "tiles": [
          "https://basemaps.cartocdn.com/rastertiles/dark_all/{z}/{x}/{y}.png?key=${CARTO_KEY}"
        ],
        "tileSize": 256,
        "minzoom": 0,
        "maxzoom": 20
      },
      "requiresBackend": true,
      "upstream": {
        "maxConcurrent": 8
      },
      "_dir": "modules/providers/carto/layers/dark/"
    },
    {
      "id": "carto.labels",
      "kind": "layer",
      "provider": "carto",
      "role": "overlay",
      "name": {
        "tr": "Sınırlar ve Şehirler",
        "en": "Borders and Cities"
      },
      "description": {
        "tr": "Hava durumu katmanlarının üzerinde görünen net sınırlar ve yerleşim isimleri",
        "en": "Crisp borders and place names displayed on top of weather overlays"
      },
      "category": "reference",
      "icon": "tag",
      "color": "#475569",
      "group": {
        "tr": "Sınırlar ve etiketler",
        "en": "Borders and labels"
      },
      "order": 500,
      "defaults": {
        "opacity": 0.95
      },
      "source": {
        "type": "raster",
        "tiles": [
          "https://basemaps.cartocdn.com/rastertiles/dark_only_labels/{z}/{x}/{y}.png?key=${CARTO_KEY}"
        ],
        "tileSize": 256,
        "minzoom": 0,
        "maxzoom": 20
      },
      "requiresBackend": true,
      "upstream": {
        "maxConcurrent": 8
      },
      "_dir": "modules/providers/carto/layers/labels/"
    },
    {
      "id": "carto.light",
      "kind": "layer",
      "provider": "carto",
      "role": "base",
      "name": {
        "tr": "Açık",
        "en": "Light"
      },
      "order": 20,
      "source": {
        "type": "raster",
        "tiles": [
          "https://basemaps.cartocdn.com/rastertiles/light_all/{z}/{x}/{y}.png?key=${CARTO_KEY}"
        ],
        "tileSize": 256,
        "minzoom": 0,
        "maxzoom": 20
      },
      "requiresBackend": true,
      "upstream": {
        "maxConcurrent": 8
      },
      "_dir": "modules/providers/carto/layers/light/"
    },
    {
      "id": "debug",
      "kind": "provider",
      "name": {
        "tr": "Geliştirici",
        "en": "Developer"
      },
      "description": {
        "tr": "Test ve tanılama katmanları",
        "en": "Test and diagnostic layers"
      },
      "attribution": "",
      "order": 99,
      "_dir": "modules/providers/debug/"
    },
    {
      "id": "debug.tile-grid",
      "kind": "layer",
      "provider": "debug",
      "role": "overlay",
      "name": {
        "tr": "Karo ızgarası (LOD)",
        "en": "Tile grid (LOD)"
      },
      "description": {
        "tr": "Üç kademeli karo yığınını (düşük/orta/yüksek) renklerle gösterir",
        "en": "Shows the 3-level tile stack (low/mid/high) in colour"
      },
      "category": "developer",
      "icon": "grid-3x3",
      "color": "#64748b",
      "order": 900,
      "entry": "index.js",
      "lod": {
        "settle": "keep"
      },
      "source": {
        "type": "raster",
        "custom": true,
        "tileSize": 256,
        "minzoom": 0,
        "maxzoom": 22
      },
      "_dir": "modules/providers/debug/layers/tile-grid/"
    },
    {
      "id": "esri",
      "kind": "provider",
      "name": "Esri",
      "description": {
        "tr": "ArcGIS Online uydu ve topoğrafya haritaları",
        "en": "ArcGIS Online imagery and topographic maps"
      },
      "attribution": "Tiles © Esri — Source: Esri, Maxar, Earthstar Geographics and the GIS User Community",
      "homepage": "https://www.arcgis.com",
      "order": 10,
      "_dir": "modules/providers/esri/"
    },
    {
      "id": "esri.imagery",
      "kind": "layer",
      "provider": "esri",
      "role": "base",
      "name": {
        "tr": "Uydu",
        "en": "Satellite"
      },
      "description": {
        "tr": "Dünya uydu görüntüsü",
        "en": "World imagery"
      },
      "order": 10,
      "source": {
        "type": "raster",
        "tiles": [
          "https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}"
        ],
        "tileSize": 256,
        "minzoom": 0,
        "maxzoom": 19
      },
      "upstream": {
        "maxConcurrent": 8
      },
      "_dir": "modules/providers/esri/layers/imagery/"
    },
    {
      "id": "esri.topo",
      "kind": "layer",
      "provider": "esri",
      "role": "base",
      "name": {
        "tr": "Topoğrafya",
        "en": "Topographic"
      },
      "description": {
        "tr": "Kabartma ve yükselti çizgileri",
        "en": "Relief and contours"
      },
      "order": 11,
      "source": {
        "type": "raster",
        "tiles": [
          "https://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer/tile/{z}/{y}/{x}"
        ],
        "tileSize": 256,
        "minzoom": 0,
        "maxzoom": 19
      },
      "upstream": {
        "maxConcurrent": 8
      },
      "_dir": "modules/providers/esri/layers/topo/"
    },
    {
      "id": "gfs",
      "kind": "provider",
      "name": "NOAA GFS",
      "description": {
        "tr": "NOAA küresel hava tahmin modeli (GFS) — rüzgâr, sıcaklık, yağış, kar, bulut… sunucumuzda çizilir",
        "en": "NOAA global forecast model (GFS) — wind, temperature, rain, snow, clouds… drawn on our server"
      },
      "attribution": "Weather model data © NOAA/NCEP (GFS)",
      "homepage": "https://www.nco.ncep.noaa.gov/pmb/products/gfs/",
      "order": 61,
      "_dir": "modules/providers/gfs/"
    },
    {
      "id": "gfs.cloudhigh",
      "kind": "layer",
      "provider": "gfs",
      "role": "overlay",
      "name": {
        "tr": "Yüksek bulut",
        "en": "High clouds"
      },
      "description": {
        "tr": "Bulutlar, görüş · %",
        "en": "Clouds, visibility · %"
      },
      "field": "cloudhigh",
      "category": "weather",
      "weatherGroup": "clouds",
      "panel": false,
      "order": 226,
      "requires": [
        "ui.timeline"
      ],
      "time": {
        "resolver": true,
        "back": 6,
        "ahead": 66,
        "step": 60
      },
      "lod": false,
      "defaults": {
        "opacity": 0.8
      },
      "paint": {
        "raster-resampling": "linear"
      },
      "entry": "index.js",
      "source": {
        "type": "raster",
        "tiles": [
          "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==#{z}/{x}/{y}"
        ],
        "tileSize": 256,
        "minzoom": 0,
        "maxzoom": 6
      },
      "_dir": "modules/providers/gfs/layers/cloudhigh/"
    },
    {
      "id": "gfs.cloudlow",
      "kind": "layer",
      "provider": "gfs",
      "role": "overlay",
      "name": {
        "tr": "Alçak bulut",
        "en": "Low clouds"
      },
      "description": {
        "tr": "Bulutlar, görüş · %",
        "en": "Clouds, visibility · %"
      },
      "field": "cloudlow",
      "category": "weather",
      "weatherGroup": "clouds",
      "panel": false,
      "order": 228,
      "requires": [
        "ui.timeline"
      ],
      "time": {
        "resolver": true,
        "back": 6,
        "ahead": 66,
        "step": 60
      },
      "lod": false,
      "defaults": {
        "opacity": 0.8
      },
      "paint": {
        "raster-resampling": "linear"
      },
      "entry": "index.js",
      "source": {
        "type": "raster",
        "tiles": [
          "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==#{z}/{x}/{y}"
        ],
        "tileSize": 256,
        "minzoom": 0,
        "maxzoom": 6
      },
      "_dir": "modules/providers/gfs/layers/cloudlow/"
    },
    {
      "id": "gfs.cloudmid",
      "kind": "layer",
      "provider": "gfs",
      "role": "overlay",
      "name": {
        "tr": "Orta seviye bulut",
        "en": "Mid-level clouds"
      },
      "description": {
        "tr": "Bulutlar, görüş · %",
        "en": "Clouds, visibility · %"
      },
      "field": "cloudmid",
      "category": "weather",
      "weatherGroup": "clouds",
      "panel": false,
      "order": 227,
      "requires": [
        "ui.timeline"
      ],
      "time": {
        "resolver": true,
        "back": 6,
        "ahead": 66,
        "step": 60
      },
      "lod": false,
      "defaults": {
        "opacity": 0.8
      },
      "paint": {
        "raster-resampling": "linear"
      },
      "entry": "index.js",
      "source": {
        "type": "raster",
        "tiles": [
          "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==#{z}/{x}/{y}"
        ],
        "tileSize": 256,
        "minzoom": 0,
        "maxzoom": 6
      },
      "_dir": "modules/providers/gfs/layers/cloudmid/"
    },
    {
      "id": "gfs.clouds",
      "kind": "layer",
      "provider": "gfs",
      "role": "overlay",
      "name": {
        "tr": "Bulutlar",
        "en": "Clouds"
      },
      "description": {
        "tr": "Bulutlar, görüş · %",
        "en": "Clouds, visibility · %"
      },
      "field": "clouds",
      "category": "weather",
      "weatherGroup": "clouds",
      "panel": false,
      "order": 225,
      "requires": [
        "ui.timeline"
      ],
      "time": {
        "resolver": true,
        "back": 6,
        "ahead": 66,
        "step": 60
      },
      "lod": false,
      "defaults": {
        "opacity": 0.8
      },
      "paint": {
        "raster-resampling": "linear"
      },
      "entry": "index.js",
      "source": {
        "type": "raster",
        "tiles": [
          "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==#{z}/{x}/{y}"
        ],
        "tileSize": 256,
        "minzoom": 0,
        "maxzoom": 6
      },
      "_dir": "modules/providers/gfs/layers/clouds/"
    },
    {
      "id": "gfs.dewpoint",
      "kind": "layer",
      "provider": "gfs",
      "role": "overlay",
      "name": {
        "tr": "Çiy noktası",
        "en": "Dew point"
      },
      "description": {
        "tr": "Sıcaklık · °C",
        "en": "Temperature · °C"
      },
      "field": "dewpoint",
      "category": "weather",
      "weatherGroup": "temperature",
      "panel": false,
      "order": 214,
      "requires": [
        "ui.timeline"
      ],
      "time": {
        "resolver": true,
        "back": 6,
        "ahead": 66,
        "step": 60
      },
      "lod": false,
      "defaults": {
        "opacity": 0.8
      },
      "paint": {
        "raster-resampling": "linear"
      },
      "entry": "index.js",
      "source": {
        "type": "raster",
        "tiles": [
          "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==#{z}/{x}/{y}"
        ],
        "tileSize": 256,
        "minzoom": 0,
        "maxzoom": 6
      },
      "_dir": "modules/providers/gfs/layers/dewpoint/"
    },
    {
      "id": "gfs.gusts",
      "kind": "layer",
      "provider": "gfs",
      "role": "overlay",
      "name": {
        "tr": "Ani rüzgârlar",
        "en": "Wind gusts"
      },
      "description": {
        "tr": "Rüzgâr · km/h",
        "en": "Wind · km/h"
      },
      "field": "gusts",
      "category": "weather",
      "weatherGroup": "wind",
      "panel": false,
      "order": 211,
      "requires": [
        "ui.timeline"
      ],
      "time": {
        "resolver": true,
        "back": 6,
        "ahead": 66,
        "step": 60
      },
      "lod": false,
      "defaults": {
        "opacity": 0.8
      },
      "paint": {
        "raster-resampling": "linear"
      },
      "entry": "index.js",
      "source": {
        "type": "raster",
        "tiles": [
          "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==#{z}/{x}/{y}"
        ],
        "tileSize": 256,
        "minzoom": 0,
        "maxzoom": 6
      },
      "_dir": "modules/providers/gfs/layers/gusts/"
    },
    {
      "id": "gfs.humidity",
      "kind": "layer",
      "provider": "gfs",
      "role": "overlay",
      "name": {
        "tr": "Nem",
        "en": "Humidity"
      },
      "description": {
        "tr": "Sıcaklık · %",
        "en": "Temperature · %"
      },
      "field": "humidity",
      "category": "weather",
      "weatherGroup": "temperature",
      "panel": false,
      "order": 215,
      "requires": [
        "ui.timeline"
      ],
      "time": {
        "resolver": true,
        "back": 6,
        "ahead": 66,
        "step": 60
      },
      "lod": false,
      "defaults": {
        "opacity": 0.8
      },
      "paint": {
        "raster-resampling": "linear"
      },
      "entry": "index.js",
      "source": {
        "type": "raster",
        "tiles": [
          "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==#{z}/{x}/{y}"
        ],
        "tileSize": 256,
        "minzoom": 0,
        "maxzoom": 6
      },
      "_dir": "modules/providers/gfs/layers/humidity/"
    },
    {
      "id": "gfs.newsnow",
      "kind": "layer",
      "provider": "gfs",
      "role": "overlay",
      "name": {
        "tr": "Yeni kar",
        "en": "New snow"
      },
      "description": {
        "tr": "Yağmur, kar · cm/h",
        "en": "Rain, snow · cm/h"
      },
      "field": "newsnow",
      "category": "weather",
      "weatherGroup": "precip",
      "panel": false,
      "order": 221,
      "requires": [
        "ui.timeline"
      ],
      "time": {
        "resolver": true,
        "back": 6,
        "ahead": 66,
        "step": 60
      },
      "lod": false,
      "defaults": {
        "opacity": 0.8
      },
      "paint": {
        "raster-resampling": "linear"
      },
      "entry": "index.js",
      "source": {
        "type": "raster",
        "tiles": [
          "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==#{z}/{x}/{y}"
        ],
        "tileSize": 256,
        "minzoom": 0,
        "maxzoom": 6
      },
      "_dir": "modules/providers/gfs/layers/newsnow/"
    },
    {
      "id": "gfs.preciptype",
      "kind": "layer",
      "provider": "gfs",
      "role": "overlay",
      "name": {
        "tr": "Yağış türü",
        "en": "Precipitation type"
      },
      "description": {
        "tr": "Yağmur, kar · tür",
        "en": "Rain, snow · type"
      },
      "field": "preciptype",
      "category": "weather",
      "weatherGroup": "precip",
      "panel": false,
      "order": 223,
      "requires": [
        "ui.timeline"
      ],
      "time": {
        "resolver": true,
        "back": 6,
        "ahead": 66,
        "step": 60
      },
      "lod": false,
      "defaults": {
        "opacity": 0.8
      },
      "paint": {
        "raster-resampling": "linear"
      },
      "entry": "index.js",
      "source": {
        "type": "raster",
        "tiles": [
          "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==#{z}/{x}/{y}"
        ],
        "tileSize": 256,
        "minzoom": 0,
        "maxzoom": 6
      },
      "_dir": "modules/providers/gfs/layers/preciptype/"
    },
    {
      "id": "gfs.pressure",
      "kind": "layer",
      "provider": "gfs",
      "role": "overlay",
      "name": {
        "tr": "Basınç",
        "en": "Pressure"
      },
      "description": {
        "tr": "Rüzgâr · hPa",
        "en": "Wind · hPa"
      },
      "field": "pressure",
      "category": "weather",
      "weatherGroup": "wind",
      "panel": false,
      "order": 212,
      "requires": [
        "ui.timeline"
      ],
      "time": {
        "resolver": true,
        "back": 6,
        "ahead": 66,
        "step": 60
      },
      "lod": false,
      "defaults": {
        "opacity": 0.8
      },
      "paint": {
        "raster-resampling": "linear"
      },
      "entry": "index.js",
      "source": {
        "type": "raster",
        "tiles": [
          "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==#{z}/{x}/{y}"
        ],
        "tileSize": 256,
        "minzoom": 0,
        "maxzoom": 6
      },
      "_dir": "modules/providers/gfs/layers/pressure/"
    },
    {
      "id": "gfs.rain",
      "kind": "layer",
      "provider": "gfs",
      "role": "overlay",
      "name": {
        "tr": "Yağmur, şimşek",
        "en": "Rain, thunder"
      },
      "description": {
        "tr": "Yağmur, kar · mm/h",
        "en": "Rain, snow · mm/h"
      },
      "field": "rain",
      "category": "weather",
      "weatherGroup": "precip",
      "panel": false,
      "order": 219,
      "requires": [
        "ui.timeline"
      ],
      "time": {
        "resolver": true,
        "back": 6,
        "ahead": 66,
        "step": 60
      },
      "lod": false,
      "defaults": {
        "opacity": 0.8
      },
      "paint": {
        "raster-resampling": "linear"
      },
      "entry": "index.js",
      "source": {
        "type": "raster",
        "tiles": [
          "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==#{z}/{x}/{y}"
        ],
        "tileSize": 256,
        "minzoom": 0,
        "maxzoom": 6
      },
      "_dir": "modules/providers/gfs/layers/rain/"
    },
    {
      "id": "gfs.rainacc",
      "kind": "layer",
      "provider": "gfs",
      "role": "overlay",
      "name": {
        "tr": "Yağmur birikimi",
        "en": "Rain accumulation"
      },
      "description": {
        "tr": "Yağmur, kar · mm",
        "en": "Rain, snow · mm"
      },
      "field": "rainacc",
      "category": "weather",
      "weatherGroup": "precip",
      "panel": false,
      "order": 220,
      "requires": [
        "ui.timeline"
      ],
      "time": {
        "resolver": true,
        "back": 6,
        "ahead": 66,
        "step": 60
      },
      "lod": false,
      "defaults": {
        "opacity": 0.8
      },
      "paint": {
        "raster-resampling": "linear"
      },
      "entry": "index.js",
      "source": {
        "type": "raster",
        "tiles": [
          "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==#{z}/{x}/{y}"
        ],
        "tileSize": 256,
        "minzoom": 0,
        "maxzoom": 6
      },
      "_dir": "modules/providers/gfs/layers/rainacc/"
    },
    {
      "id": "gfs.snowdepth",
      "kind": "layer",
      "provider": "gfs",
      "role": "overlay",
      "name": {
        "tr": "Kar derinliği",
        "en": "Snow depth"
      },
      "description": {
        "tr": "Yağmur, kar · cm",
        "en": "Rain, snow · cm"
      },
      "field": "snowdepth",
      "category": "weather",
      "weatherGroup": "precip",
      "panel": false,
      "order": 222,
      "requires": [
        "ui.timeline"
      ],
      "time": {
        "resolver": true,
        "back": 6,
        "ahead": 66,
        "step": 60
      },
      "lod": false,
      "defaults": {
        "opacity": 0.8
      },
      "paint": {
        "raster-resampling": "linear"
      },
      "entry": "index.js",
      "source": {
        "type": "raster",
        "tiles": [
          "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==#{z}/{x}/{y}"
        ],
        "tileSize": 256,
        "minzoom": 0,
        "maxzoom": 6
      },
      "_dir": "modules/providers/gfs/layers/snowdepth/"
    },
    {
      "id": "gfs.solar",
      "kind": "layer",
      "provider": "gfs",
      "role": "overlay",
      "name": {
        "tr": "Güneş enerjisi",
        "en": "Solar energy"
      },
      "description": {
        "tr": "Sıcaklık · W/m²",
        "en": "Temperature · W/m²"
      },
      "field": "solar",
      "category": "weather",
      "weatherGroup": "temperature",
      "panel": false,
      "order": 217,
      "requires": [
        "ui.timeline"
      ],
      "time": {
        "resolver": true,
        "back": 6,
        "ahead": 66,
        "step": 60
      },
      "lod": false,
      "defaults": {
        "opacity": 0.8
      },
      "paint": {
        "raster-resampling": "linear"
      },
      "entry": "index.js",
      "source": {
        "type": "raster",
        "tiles": [
          "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==#{z}/{x}/{y}"
        ],
        "tileSize": 256,
        "minzoom": 0,
        "maxzoom": 6
      },
      "_dir": "modules/providers/gfs/layers/solar/"
    },
    {
      "id": "gfs.temperature",
      "kind": "layer",
      "provider": "gfs",
      "role": "overlay",
      "name": {
        "tr": "Sıcaklık",
        "en": "Temperature"
      },
      "description": {
        "tr": "Sıcaklık · °C",
        "en": "Temperature · °C"
      },
      "field": "temperature",
      "category": "weather",
      "weatherGroup": "temperature",
      "panel": false,
      "order": 213,
      "requires": [
        "ui.timeline"
      ],
      "time": {
        "resolver": true,
        "back": 6,
        "ahead": 66,
        "step": 60
      },
      "lod": false,
      "defaults": {
        "opacity": 0.8
      },
      "paint": {
        "raster-resampling": "linear"
      },
      "entry": "index.js",
      "source": {
        "type": "raster",
        "tiles": [
          "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==#{z}/{x}/{y}"
        ],
        "tileSize": 256,
        "minzoom": 0,
        "maxzoom": 6
      },
      "_dir": "modules/providers/gfs/layers/temperature/"
    },
    {
      "id": "gfs.thunder",
      "kind": "layer",
      "provider": "gfs",
      "role": "overlay",
      "name": {
        "tr": "Gök gürültülü fırtınalar",
        "en": "Thunderstorms"
      },
      "description": {
        "tr": "Yağmur, kar · J/kg",
        "en": "Rain, snow · J/kg"
      },
      "field": "thunder",
      "category": "weather",
      "weatherGroup": "precip",
      "panel": false,
      "order": 224,
      "requires": [
        "ui.timeline"
      ],
      "time": {
        "resolver": true,
        "back": 6,
        "ahead": 66,
        "step": 60
      },
      "lod": false,
      "defaults": {
        "opacity": 0.8
      },
      "paint": {
        "raster-resampling": "linear"
      },
      "entry": "index.js",
      "source": {
        "type": "raster",
        "tiles": [
          "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==#{z}/{x}/{y}"
        ],
        "tileSize": 256,
        "minzoom": 0,
        "maxzoom": 6
      },
      "_dir": "modules/providers/gfs/layers/thunder/"
    },
    {
      "id": "gfs.uv",
      "kind": "layer",
      "provider": "gfs",
      "role": "overlay",
      "name": {
        "tr": "UV indeksi",
        "en": "UV index"
      },
      "description": {
        "tr": "Sıcaklık · UV · tahmini",
        "en": "Temperature · UV · estimated"
      },
      "field": "uv",
      "category": "weather",
      "weatherGroup": "temperature",
      "panel": false,
      "order": 218,
      "requires": [
        "ui.timeline"
      ],
      "time": {
        "resolver": true,
        "back": 6,
        "ahead": 66,
        "step": 60
      },
      "lod": false,
      "defaults": {
        "opacity": 0.8
      },
      "paint": {
        "raster-resampling": "linear"
      },
      "entry": "index.js",
      "source": {
        "type": "raster",
        "tiles": [
          "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==#{z}/{x}/{y}"
        ],
        "tileSize": 256,
        "minzoom": 0,
        "maxzoom": 6
      },
      "_dir": "modules/providers/gfs/layers/uv/"
    },
    {
      "id": "gfs.visibility",
      "kind": "layer",
      "provider": "gfs",
      "role": "overlay",
      "name": {
        "tr": "Görüş",
        "en": "Visibility"
      },
      "description": {
        "tr": "Bulutlar, görüş · km",
        "en": "Clouds, visibility · km"
      },
      "field": "visibility",
      "category": "weather",
      "weatherGroup": "clouds",
      "panel": false,
      "order": 229,
      "requires": [
        "ui.timeline"
      ],
      "time": {
        "resolver": true,
        "back": 6,
        "ahead": 66,
        "step": 60
      },
      "lod": false,
      "defaults": {
        "opacity": 0.8
      },
      "paint": {
        "raster-resampling": "linear"
      },
      "entry": "index.js",
      "source": {
        "type": "raster",
        "tiles": [
          "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==#{z}/{x}/{y}"
        ],
        "tileSize": 256,
        "minzoom": 0,
        "maxzoom": 6
      },
      "_dir": "modules/providers/gfs/layers/visibility/"
    },
    {
      "id": "gfs.wetbulb",
      "kind": "layer",
      "provider": "gfs",
      "role": "overlay",
      "name": {
        "tr": "Yaş termometre sıc.",
        "en": "Wet-bulb temp."
      },
      "description": {
        "tr": "Sıcaklık · °C",
        "en": "Temperature · °C"
      },
      "field": "wetbulb",
      "category": "weather",
      "weatherGroup": "temperature",
      "panel": false,
      "order": 216,
      "requires": [
        "ui.timeline"
      ],
      "time": {
        "resolver": true,
        "back": 6,
        "ahead": 66,
        "step": 60
      },
      "lod": false,
      "defaults": {
        "opacity": 0.8
      },
      "paint": {
        "raster-resampling": "linear"
      },
      "entry": "index.js",
      "source": {
        "type": "raster",
        "tiles": [
          "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==#{z}/{x}/{y}"
        ],
        "tileSize": 256,
        "minzoom": 0,
        "maxzoom": 6
      },
      "_dir": "modules/providers/gfs/layers/wetbulb/"
    },
    {
      "id": "gfs.wind",
      "kind": "layer",
      "provider": "gfs",
      "role": "overlay",
      "name": {
        "tr": "Rüzgâr",
        "en": "Wind"
      },
      "description": {
        "tr": "Rüzgâr · km/h",
        "en": "Wind · km/h"
      },
      "field": "wind",
      "category": "weather",
      "weatherGroup": "wind",
      "panel": false,
      "order": 210,
      "requires": [
        "ui.timeline"
      ],
      "time": {
        "resolver": true,
        "back": 6,
        "ahead": 66,
        "step": 60
      },
      "lod": false,
      "defaults": {
        "opacity": 0.8
      },
      "paint": {
        "raster-resampling": "linear"
      },
      "entry": "index.js",
      "source": {
        "type": "raster",
        "tiles": [
          "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==#{z}/{x}/{y}"
        ],
        "tileSize": 256,
        "minzoom": 0,
        "maxzoom": 6
      },
      "_dir": "modules/providers/gfs/layers/wind/"
    },
    {
      "id": "opentopomap",
      "kind": "provider",
      "name": "OpenTopoMap",
      "description": {
        "tr": "OpenStreetMap + SRTM tabanlı topoğrafik harita",
        "en": "Topographic map from OpenStreetMap + SRTM"
      },
      "attribution": "© OpenStreetMap contributors, SRTM · Map style © OpenTopoMap (CC-BY-SA)",
      "homepage": "https://opentopomap.org",
      "order": 30,
      "_dir": "modules/providers/opentopomap/"
    },
    {
      "id": "opentopomap.topo",
      "kind": "layer",
      "provider": "opentopomap",
      "role": "base",
      "name": {
        "tr": "Topoğrafya",
        "en": "Topographic"
      },
      "order": 30,
      "source": {
        "type": "raster",
        "tiles": [
          "https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png"
        ],
        "subdomains": [
          "a",
          "b",
          "c"
        ],
        "tileSize": 256,
        "minzoom": 0,
        "maxzoom": 17
      },
      "upstream": {
        "maxConcurrent": 4
      },
      "_dir": "modules/providers/opentopomap/layers/topo/"
    },
    {
      "id": "osm",
      "kind": "provider",
      "name": "OpenStreetMap",
      "description": {
        "tr": "Topluluk tarafından üretilen açık harita verisi",
        "en": "Community-made open map data"
      },
      "attribution": "© OpenStreetMap contributors",
      "homepage": "https://www.openstreetmap.org",
      "order": 0,
      "_dir": "modules/providers/osm/"
    },
    {
      "id": "osm.cyclosm",
      "kind": "layer",
      "provider": "osm",
      "role": "base",
      "name": "CyclOSM",
      "description": {
        "tr": "Bisiklet odaklı harita (openstreetmap.fr)",
        "en": "Cycling-focused map (openstreetmap.fr)"
      },
      "attribution": "© OpenStreetMap contributors. Tiles style by CyclOSM, hosted by OpenStreetMap France",
      "order": 1,
      "source": {
        "type": "raster",
        "tiles": [
          "https://{s}.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.png"
        ],
        "subdomains": [
          "a",
          "b",
          "c"
        ],
        "tileSize": 256,
        "minzoom": 0,
        "maxzoom": 20
      },
      "_dir": "modules/providers/osm/layers/cyclosm/"
    },
    {
      "id": "osm.gps-traces",
      "kind": "layer",
      "provider": "osm",
      "role": "overlay",
      "name": {
        "tr": "GPS izleri",
        "en": "GPS traces"
      },
      "description": {
        "tr": "OpenStreetMap'e yüklenen herkese açık GPS izleri",
        "en": "Public GPS traces uploaded to OpenStreetMap"
      },
      "category": "reference",
      "icon": "route",
      "color": "#b45309",
      "group": {
        "tr": "Yerler",
        "en": "Places"
      },
      "attribution": "GPS traces © OpenStreetMap contributors",
      "order": 100,
      "defaults": {
        "opacity": 0.85
      },
      "source": {
        "type": "raster",
        "tiles": [
          "https://gps.tile.openstreetmap.org/lines/{z}/{x}/{y}.png"
        ],
        "tileSize": 256,
        "minzoom": 0,
        "maxzoom": 20
      },
      "_dir": "modules/providers/osm/layers/gps-traces/"
    },
    {
      "id": "osm.humanitarian",
      "kind": "layer",
      "provider": "osm",
      "role": "base",
      "name": {
        "tr": "İnsancıl (HOT)",
        "en": "Humanitarian (HOT)"
      },
      "description": {
        "tr": "Humanitarian OpenStreetMap Team stili",
        "en": "Humanitarian OpenStreetMap Team style"
      },
      "attribution": "© OpenStreetMap contributors. Tiles style by Humanitarian OpenStreetMap Team, hosted by OpenStreetMap France",
      "order": 2,
      "source": {
        "type": "raster",
        "tiles": [
          "https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png"
        ],
        "subdomains": [
          "a",
          "b",
          "c"
        ],
        "tileSize": 256,
        "minzoom": 0,
        "maxzoom": 20
      },
      "_dir": "modules/providers/osm/layers/humanitarian/"
    },
    {
      "id": "osm.de",
      "kind": "layer",
      "provider": "osm",
      "role": "base",
      "name": {
        "tr": "Standart (Almanya stili)",
        "en": "Standard (German style)"
      },
      "description": {
        "tr": "OpenStreetMap Deutschland — yerel dilde etiketler",
        "en": "OpenStreetMap Deutschland — labels in local language"
      },
      "attribution": "© OpenStreetMap contributors. Tiles by OpenStreetMap Deutschland",
      "order": 3,
      "source": {
        "type": "raster",
        "tiles": [
          "https://tile.openstreetmap.de/{z}/{x}/{y}.png"
        ],
        "tileSize": 256,
        "minzoom": 0,
        "maxzoom": 19
      },
      "_dir": "modules/providers/osm/layers/osm-de/"
    },
    {
      "id": "osm.standard",
      "kind": "layer",
      "provider": "osm",
      "role": "base",
      "name": {
        "tr": "Standart",
        "en": "Standard"
      },
      "description": {
        "tr": "Yollar, yapılar ve yer adları",
        "en": "Roads, buildings and place names"
      },
      "order": 0,
      "source": {
        "type": "raster",
        "tiles": [
          "https://tile.openstreetmap.org/{z}/{x}/{y}.png"
        ],
        "tileSize": 256,
        "minzoom": 0,
        "maxzoom": 19
      },
      "_dir": "modules/providers/osm/layers/standard/"
    },
    {
      "id": "rainviewer",
      "kind": "provider",
      "name": "RainViewer",
      "description": {
        "tr": "Canlı küresel hava durumu radarı (Doppler) — ücretsiz, pürüzsüz",
        "en": "Live global weather radar (Doppler) — free, smoothed"
      },
      "attribution": "Weather radar © RainViewer",
      "homepage": "https://www.rainviewer.com/",
      "order": 62,
      "_dir": "modules/providers/rainviewer/"
    },
    {
      "id": "rainviewer.radar",
      "kind": "layer",
      "provider": "rainviewer",
      "role": "overlay",
      "name": {
        "tr": "Canlı Yağış Radarı (Doppler)",
        "en": "Live Precipitation Radar (Doppler)"
      },
      "description": {
        "tr": "Gerçek zamanlı Doppler yağış radarı — yağış olmayan yerler görünmez. Son 2 saat 10 dakikalık karelerle oynatılır; yakınlaştıkça son desteklenen ayrıntıda büyütülür",
        "en": "Real-time Doppler precipitation radar — dry areas are transparent. Last 2 hours play in 10-minute frames; beyond the last supported detail it is simply enlarged"
      },
      "category": "weather",
      "icon": "radar",
      "color": "#0ea5e9",
      "group": {
        "tr": "Radar ve harita katmanları",
        "en": "Radar and map layers"
      },
      "order": 201,
      "requires": [
        "ui.timeline"
      ],
      "time": {
        "resolver": true,
        "back": 2,
        "ahead": 0,
        "step": 10
      },
      "entry": "index.js",
      "defaults": {
        "opacity": 0.85
      },
      "paint": {
        "raster-resampling": "linear"
      },
      "source": {
        "type": "raster",
        "tiles": [
          "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==#{z}/{x}/{y}"
        ],
        "tileSize": 256,
        "minzoom": 0,
        "maxzoom": 7
      },
      "upstream": {
        "maxConcurrent": 4
      },
      "_dir": "modules/providers/rainviewer/layers/radar/"
    },
    {
      "id": "thunderforest",
      "kind": "provider",
      "name": "Thunderforest",
      "description": {
        "tr": "API anahtarı gerekir (ücretsiz plan var) — .env içine THUNDERFOREST_KEY",
        "en": "Needs an API key (free plan available) — set THUNDERFOREST_KEY in .env"
      },
      "attribution": "Maps © Thunderforest, Data © OpenStreetMap contributors",
      "homepage": "https://www.thunderforest.com",
      "order": 40,
      "_dir": "modules/providers/thunderforest/"
    },
    {
      "id": "thunderforest.cycle",
      "kind": "layer",
      "provider": "thunderforest",
      "role": "base",
      "name": {
        "tr": "Bisiklet Haritası",
        "en": "Cycle Map"
      },
      "order": 40,
      "requiresBackend": true,
      "source": {
        "type": "raster",
        "tiles": [
          "https://tile.thunderforest.com/cycle/{z}/{x}/{y}.png?apikey=${THUNDERFOREST_KEY}"
        ],
        "tileSize": 256,
        "minzoom": 0,
        "maxzoom": 22
      },
      "upstream": {
        "maxConcurrent": 4
      },
      "_dir": "modules/providers/thunderforest/layers/cycle/"
    },
    {
      "id": "thunderforest.transport",
      "kind": "layer",
      "provider": "thunderforest",
      "role": "base",
      "name": {
        "tr": "Ulaşım Haritası",
        "en": "Transport Map"
      },
      "order": 41,
      "requiresBackend": true,
      "source": {
        "type": "raster",
        "tiles": [
          "https://tile.thunderforest.com/transport/{z}/{x}/{y}.png?apikey=${THUNDERFOREST_KEY}"
        ],
        "tileSize": 256,
        "minzoom": 0,
        "maxzoom": 22
      },
      "upstream": {
        "maxConcurrent": 4
      },
      "_dir": "modules/providers/thunderforest/layers/transport/"
    },
    {
      "id": "tracestrack",
      "kind": "provider",
      "name": "Tracestrack",
      "description": {
        "tr": "API anahtarı gerekir — .env içine TRACESTRACK_KEY",
        "en": "Needs an API key — set TRACESTRACK_KEY in .env"
      },
      "attribution": "© Tracestrack, © OpenStreetMap contributors",
      "homepage": "https://www.tracestrack.com",
      "order": 41,
      "_dir": "modules/providers/tracestrack/"
    },
    {
      "id": "tracestrack.topo",
      "kind": "layer",
      "provider": "tracestrack",
      "role": "base",
      "name": {
        "tr": "Tracestrack Topo",
        "en": "Tracestrack Topo"
      },
      "order": 42,
      "requiresBackend": true,
      "source": {
        "type": "raster",
        "tiles": [
          "https://tile.tracestrack.com/topo__/{z}/{x}/{y}.png?key=${TRACESTRACK_KEY}"
        ],
        "tileSize": 256,
        "minzoom": 0,
        "maxzoom": 19
      },
      "upstream": {
        "maxConcurrent": 4
      },
      "_dir": "modules/providers/tracestrack/layers/topo/"
    },
    {
      "id": "weatherapi",
      "kind": "provider",
      "name": "WeatherAPI.com",
      "description": {
        "tr": "Saatlik hava durumu haritaları (3 gün ileri) — anahtarsız, ücretsiz",
        "en": "Hourly weather maps (3 days ahead) — keyless and free"
      },
      "attribution": "Weather maps © WeatherAPI.com",
      "homepage": "https://www.weatherapi.com/",
      "order": 60,
      "_dir": "modules/providers/weatherapi/"
    },
    {
      "id": "weatherapi.pressure",
      "kind": "layer",
      "provider": "weatherapi",
      "role": "overlay",
      "name": {
        "tr": "Basınç",
        "en": "Pressure"
      },
      "description": {
        "tr": "Deniz seviyesi basıncı",
        "en": "Sea-level pressure"
      },
      "category": "weather",
      "icon": "gauge",
      "color": "#7c3aed",
      "group": {
        "tr": "Radar ve harita katmanları",
        "en": "Radar and map layers"
      },
      "order": 202,
      "requires": [
        "ui.timeline"
      ],
      "defaults": {
        "opacity": 0.6
      },
      "time": {
        "format": "yyyyMMddHH",
        "back": 24,
        "ahead": 72
      },
      "upstream": {
        "maxConcurrent": 6,
        "ttlDays": 0.125
      },
      "source": {
        "type": "raster",
        "tiles": [
          "https://weathermaps.weatherapi.com/pressure/tiles/{t}/{z}/{x}/{y}.png"
        ],
        "tileSize": 256,
        "minzoom": 0,
        "maxzoom": 6
      },
      "_dir": "modules/providers/weatherapi/layers/pressure/"
    },
    {
      "id": "weatherapi.temperature",
      "kind": "layer",
      "provider": "weatherapi",
      "role": "overlay",
      "name": {
        "tr": "Sıcaklık (2 m)",
        "en": "Temperature (2 m)"
      },
      "description": {
        "tr": "Saatlik yüzey sıcaklığı haritası",
        "en": "Hourly surface temperature map"
      },
      "category": "weather",
      "icon": "thermometer",
      "color": "#ef4444",
      "group": {
        "tr": "Radar ve harita katmanları",
        "en": "Radar and map layers"
      },
      "order": 200,
      "requires": [
        "ui.timeline"
      ],
      "defaults": {
        "opacity": 0.7
      },
      "time": {
        "format": "yyyyMMddHH",
        "back": 24,
        "ahead": 72
      },
      "paint": {
        "raster-resampling": "linear"
      },
      "upstream": {
        "maxConcurrent": 6,
        "ttlDays": 0.125,
        "transform": "smooth-color"
      },
      "source": {
        "type": "raster",
        "tiles": [
          "https://weathermaps.weatherapi.com/tmp2m/tiles/{t}/{z}/{x}/{y}.png"
        ],
        "tileSize": 256,
        "minzoom": 0,
        "maxzoom": 6
      },
      "_dir": "modules/providers/weatherapi/layers/temperature/"
    },
    {
      "id": "weatherapi.wind",
      "kind": "layer",
      "provider": "weatherapi",
      "role": "overlay",
      "name": {
        "tr": "Rüzgâr hızı",
        "en": "Wind speed"
      },
      "description": {
        "tr": "Saatlik rüzgâr hızı haritası",
        "en": "Hourly wind speed map"
      },
      "category": "weather",
      "icon": "wind",
      "color": "#06b6d4",
      "group": {
        "tr": "Radar ve harita katmanları",
        "en": "Radar and map layers"
      },
      "order": 203,
      "requires": [
        "ui.timeline"
      ],
      "entry": "index.js",
      "defaults": {
        "opacity": 0.75
      },
      "time": {
        "format": "yyyyMMddHH",
        "back": 24,
        "ahead": 72
      },
      "paint": {
        "raster-resampling": "linear"
      },
      "upstream": {
        "maxConcurrent": 6,
        "ttlDays": 0.125,
        "transform": "smooth-color"
      },
      "settings": {
        "streamlines": {
          "type": "toggle",
          "default": true,
          "label": {
            "tr": "Kayan rüzgâr çizgileri (animasyon)",
            "en": "Flowing streamlines (animated)"
          }
        },
        "particles": {
          "type": "range",
          "min": 500,
          "max": 2500,
          "step": 250,
          "default": 1200,
          "label": {
            "tr": "Çizgi yoğunluğu",
            "en": "Streamline density"
          }
        },
        "speed": {
          "type": "range",
          "min": 0.5,
          "max": 2.5,
          "step": 0.25,
          "default": 1,
          "label": {
            "tr": "Akış hızı",
            "en": "Flow speed"
          }
        }
      },
      "source": {
        "type": "raster",
        "tiles": [
          "https://weathermaps.weatherapi.com/wind/tiles/{t}/{z}/{x}/{y}.png"
        ],
        "tileSize": 256,
        "minzoom": 0,
        "maxzoom": 6
      },
      "_dir": "modules/providers/weatherapi/layers/wind/"
    },
    {
      "id": "ui.location-beacons",
      "kind": "ui",
      "name": {
        "tr": "Bluetooth işaretçileri (iç mekân konumu ve doğrulama)",
        "en": "Bluetooth beacons (indoor position and verification)"
      },
      "description": {
        "tr": "Konumunu bildiğiniz BLE işaretçilerinin (iBeacon, Eddystone, herhangi bir Bluetooth cihazı) sinyal gücünden mesafe ve konum hesaplar: GPS'in olmadığı iç mekânda konum verir, açıkta GPS'i bağımsız bir kaynakla doğrular. Tarayıcı Bluetooth'u taramaz; cihazları siz seçersiniz",
        "en": "Turns the signal strength of BLE beacons whose position you know (iBeacon, Eddystone, any Bluetooth device) into distance and position: gives a position indoors where GPS is absent and cross-checks GPS outdoors with an independent source. The browser cannot scan Bluetooth; you pick the devices"
      },
      "icon": "bluetooth",
      "color": "#7c3aed",
      "order": 6,
      "defaultEnabled": true,
      "requires": [
        "ui.location"
      ],
      "entry": "index.js",
      "keywords": {
        "tr": "bluetooth ble ibeacon eddystone işaretçi iç mekan konum mesafe rssi alışveriş merkezi müze",
        "en": "bluetooth ble ibeacon eddystone beacon indoor position distance rssi mall museum"
      },
      "attribution": "",
      "_dir": "modules/ui/location-beacons/"
    },
    {
      "id": "ui.location-gnss",
      "kind": "ui",
      "name": {
        "tr": "Harici GNSS alıcısı (USB / Bluetooth / NMEA)",
        "en": "External GNSS receiver (USB / Bluetooth / NMEA)"
      },
      "description": {
        "tr": "Telefonun GPS'ine ek olarak bir GNSS alıcısı bağlayın: USB veya Bluetooth seri port (NMEA), BLE konum servisi, WebSocket ya da kayıtlı NMEA dosyası. GPS + GLONASS + Galileo + BeiDou uyduları, DOP ve alıcının kendi hata tahmini kullanılır; ikinci bir alıcı konumu doğrular",
        "en": "Add a GNSS receiver next to the phone's GPS: USB or Bluetooth serial (NMEA), BLE location service, WebSocket or a recorded NMEA file. GPS + GLONASS + Galileo + BeiDou satellites, DOP and the receiver's own error estimate are used; a second receiver cross-checks the position"
      },
      "icon": "satellite",
      "color": "#0891b2",
      "order": 4,
      "defaultEnabled": true,
      "requires": [
        "ui.location"
      ],
      "entry": "index.js",
      "keywords": {
        "tr": "gnss gps nmea usb seri bluetooth ble harici alıcı rtk glonass galileo beidou uydu u-blox garmin",
        "en": "gnss gps nmea usb serial bluetooth ble external receiver rtk glonass galileo beidou satellite u-blox garmin"
      },
      "attribution": "",
      "settings": {
        "baud": {
          "type": "select",
          "default": "9600",
          "label": {
            "tr": "Seri port hızı (baud)",
            "en": "Serial speed (baud)"
          },
          "options": [
            {
              "value": "4800",
              "label": "4800"
            },
            {
              "value": "9600",
              "label": "9600"
            },
            {
              "value": "19200",
              "label": "19200"
            },
            {
              "value": "38400",
              "label": "38400"
            },
            {
              "value": "57600",
              "label": "57600"
            },
            {
              "value": "115200",
              "label": "115200"
            }
          ]
        }
      },
      "_dir": "modules/ui/location-gnss/"
    },
    {
      "id": "ui.location-sensors",
      "kind": "ui",
      "name": {
        "tr": "Pusula ve adım sayar (GPS kesilince yürümeye devam)",
        "en": "Compass and step counter (keeps walking when GPS drops)"
      },
      "description": {
        "tr": "Telefonun ivmeölçeri ve pusulası: GPS iyiyken pusula sapmasını ve adım uzunluğunu öğrenir, GPS kesilince (iç mekân, tünel, kanyon) adımlardan hız üretip konumu sürdürür. Sabit dururken haritada bakış yönünüzü gösterir",
        "en": "The phone's accelerometer and compass: while GPS is good it learns the compass offset and your step length; when GPS drops (indoors, tunnels, canyons) it turns steps into velocity and carries the position on. Shows which way you face when standing still"
      },
      "icon": "footprints",
      "color": "#64748b",
      "order": 5,
      "defaultEnabled": true,
      "requires": [
        "ui.location"
      ],
      "entry": "index.js",
      "keywords": {
        "tr": "pusula adım sayar ivmeölçer yürüme iç mekan pdr dead reckoning yön",
        "en": "compass step counter accelerometer walking indoor pdr dead reckoning heading"
      },
      "attribution": "",
      "_dir": "modules/ui/location-sensors/"
    },
    {
      "id": "ui.location",
      "kind": "ui",
      "name": {
        "tr": "Konum (çoklu kaynak, doğrulama, navigasyon)",
        "en": "Location (multi-source, verification, navigation)"
      },
      "description": {
        "tr": "Cihaz GPS'i, ağ/Wi-Fi konumu, harici GNSS alıcısı, Bluetooth işaretçileri ve adım sayarı tek bir konumda birleştirir; kaynakları birbiriyle doğrular; iz kaydı, hedefe gitme ve rota takibi sunar",
        "en": "Fuses the device GPS, network/Wi-Fi position, an external GNSS receiver, Bluetooth beacons and the step counter into one position, cross-checks the sources, and adds track recording, go-to and route following"
      },
      "icon": "locate-fixed",
      "color": "#2f6fed",
      "order": 3,
      "defaultEnabled": true,
      "entry": "index.js",
      "keywords": {
        "tr": "konum gps gnss wifi bluetooth navigasyon rota iz kayıt doğrulama sahte konum pusula uydu nmea gpx hedef",
        "en": "location gps gnss wifi bluetooth navigation route track record verification spoofing compass satellite nmea gpx destination"
      },
      "attribution": "",
      "settings": {
        "profile": {
          "type": "select",
          "default": "auto",
          "label": {
            "tr": "Hareket profili",
            "en": "Movement profile"
          },
          "options": [
            {
              "value": "auto",
              "label": {
                "tr": "Otomatik",
                "en": "Automatic"
              }
            },
            {
              "value": "still",
              "label": {
                "tr": "Sabit (masa/araç durağan)",
                "en": "Stationary"
              }
            },
            {
              "value": "walk",
              "label": {
                "tr": "Yürüyüş",
                "en": "Walking"
              }
            },
            {
              "value": "bike",
              "label": {
                "tr": "Bisiklet",
                "en": "Cycling"
              }
            },
            {
              "value": "drive",
              "label": {
                "tr": "Araç",
                "en": "Driving"
              }
            }
          ]
        },
        "network": {
          "type": "toggle",
          "default": true,
          "label": {
            "tr": "Ağ/Wi-Fi konumunu da dinle (çapraz doğrulama için)",
            "en": "Also listen to the network/Wi-Fi position (cross-check)"
          }
        },
        "showRaw": {
          "type": "toggle",
          "default": false,
          "label": {
            "tr": "Kaynakların ham konumlarını haritada göster",
            "en": "Show each source's raw position on the map"
          }
        },
        "trail": {
          "type": "toggle",
          "default": true,
          "label": {
            "tr": "Gittiğim yolu çiz",
            "en": "Draw the path I took"
          }
        },
        "coords": {
          "type": "select",
          "default": "dd",
          "label": {
            "tr": "Koordinat biçimi",
            "en": "Coordinate format"
          },
          "options": [
            {
              "value": "dd",
              "label": "41.00820, 28.97840"
            },
            {
              "value": "dms",
              "label": "41°00'29.5\"N 28°58'42.2\"E"
            },
            {
              "value": "utm",
              "label": "UTM"
            }
          ]
        },
        "units": {
          "type": "select",
          "default": "metric",
          "label": {
            "tr": "Birim",
            "en": "Unit"
          },
          "options": [
            {
              "value": "metric",
              "label": "km/sa, m"
            },
            {
              "value": "imperial",
              "label": "mph, ft"
            }
          ]
        },
        "keepAwake": {
          "type": "toggle",
          "default": true,
          "label": {
            "tr": "Konum açıkken ekranı uyanık tut",
            "en": "Keep the screen awake while location is on"
          }
        }
      },
      "_dir": "modules/ui/location/"
    },
    {
      "id": "ui.navigation",
      "kind": "ui",
      "name": {
        "tr": "Navigasyon (arama, yol tarifi, sesli yönlendirme)",
        "en": "Navigation (search, directions, voice guidance)"
      },
      "description": {
        "tr": "Yer ve adres arama, haritada bir noktaya tıklayıp oraya yol tarifi, birbirinden farklı rota alternatifleri (en hızlı, en kısa, ücretsiz…), ara duraklar, sesli dönüş dönüş yönlendirme, rotadan çıkınca otomatik yeniden hesaplama ve varış. Araba, motosiklet, bisiklet ve yürüyüş. Canlı trafik yoktur: süreler serbest akış tahminidir. Başlangıç/varış koordinatları sunucunuz üzerinden herkese açık servislere (Valhalla, Photon) gider; kendi sunucunuzu .env ile tanımlayabilirsiniz",
        "en": "Place and address search, directions to any point you tap on the map, genuinely different route alternatives (fastest, shortest, toll-free…), stops, spoken turn-by-turn guidance, automatic rerouting and arrival. Car, motorbike, bike and walking. No live traffic: times are free-flow estimates. Start/destination coordinates go through your server to public services (Valhalla, Photon); you can point to your own servers in .env"
      },
      "icon": "navigation",
      "color": "#2f6fed",
      "order": 7,
      "defaultEnabled": true,
      "requires": [
        "ui.location"
      ],
      "entry": "index.js",
      "server": "server.js",
      "keywords": {
        "tr": "navigasyon yol tarifi rota arama adres yönlendirme sesli gps trafik alternatif durak varış yürüyüş bisiklet motosiklet araba",
        "en": "navigation directions route search address guidance voice gps traffic alternative stop arrival walking bike motorbike car"
      },
      "attribution": "Routing: Valhalla / OSRM · Search: Photon, Nominatim · © OpenStreetMap contributors",
      "settings": {
        "mode": {
          "type": "select",
          "default": "auto",
          "label": {
            "tr": "Varsayılan ulaşım şekli",
            "en": "Default way of travel"
          },
          "options": [
            {
              "value": "auto",
              "label": {
                "tr": "Araba",
                "en": "Car"
              }
            },
            {
              "value": "motorcycle",
              "label": {
                "tr": "Motosiklet",
                "en": "Motorbike"
              }
            },
            {
              "value": "bicycle",
              "label": {
                "tr": "Bisiklet",
                "en": "Bike"
              }
            },
            {
              "value": "pedestrian",
              "label": {
                "tr": "Yürüyüş",
                "en": "Walking"
              }
            }
          ]
        },
        "avoidTolls": {
          "type": "toggle",
          "default": false,
          "label": {
            "tr": "Ücretli yollardan kaçın",
            "en": "Avoid tolls"
          }
        },
        "avoidHighways": {
          "type": "toggle",
          "default": false,
          "label": {
            "tr": "Otoyoldan kaçın",
            "en": "Avoid motorways"
          }
        },
        "avoidFerries": {
          "type": "toggle",
          "default": false,
          "label": {
            "tr": "Feribottan kaçın",
            "en": "Avoid ferries"
          }
        },
        "voice": {
          "type": "toggle",
          "default": true,
          "label": {
            "tr": "Sesli yönlendirme",
            "en": "Voice guidance"
          }
        },
        "volume": {
          "type": "range",
          "min": 0.2,
          "max": 1,
          "step": 0.1,
          "default": 1,
          "label": {
            "tr": "Ses seviyesi",
            "en": "Voice volume"
          }
        },
        "camera": {
          "type": "select",
          "default": "calm",
          "label": {
            "tr": "Kamera hareketi",
            "en": "Camera motion"
          },
          "options": [
            {
              "value": "calm",
              "label": {
                "tr": "Sakin (çok yavaş, sinematik)",
                "en": "Calm (very slow, cinematic)"
              }
            },
            {
              "value": "normal",
              "label": {
                "tr": "Normal",
                "en": "Normal"
              }
            },
            {
              "value": "quick",
              "label": {
                "tr": "Hızlı tepki",
                "en": "Quick"
              }
            }
          ]
        },
        "tilt": {
          "type": "toggle",
          "default": true,
          "label": {
            "tr": "Navigasyonda eğik (3B) görünüm",
            "en": "Tilted (3D) view while navigating"
          }
        },
        "units": {
          "type": "select",
          "default": "metric",
          "label": {
            "tr": "Birim",
            "en": "Unit"
          },
          "options": [
            {
              "value": "metric",
              "label": "km, m"
            },
            {
              "value": "imperial",
              "label": "mi, ft"
            }
          ]
        }
      },
      "_dir": "modules/ui/navigation/"
    },
    {
      "id": "ui.place-card",
      "kind": "ui",
      "name": {
        "tr": "Konum kartı",
        "en": "Place card"
      },
      "description": {
        "tr": "Haritada bir yere (boş alan, şehir, uzun basış) dokununca o noktanın çevresindeki veriler — yalnızca açık olan katmanlarınkiler: açmadığınız bir veri (örneğin sıcaklık) kartta görünmez",
        "en": "Tap anywhere on the map (empty spot, city, long press) to see what is around it — only from the layers that are switched on: data you have not turned on (a temperature, say) does not show up"
      },
      "order": 6,
      "defaultEnabled": true,
      "entry": "index.js",
      "settings": {
        "radius": {
          "type": "select",
          "label": {
            "tr": "Arama yarıçapı",
            "en": "Search radius"
          },
          "default": "100",
          "options": [
            {
              "value": "25",
              "label": "25 km"
            },
            {
              "value": "50",
              "label": "50 km"
            },
            {
              "value": "100",
              "label": "100 km"
            },
            {
              "value": "200",
              "label": "200 km"
            }
          ]
        },
        "onClick": {
          "type": "toggle",
          "label": {
            "tr": "Boş alana dokununca kartı aç",
            "en": "Open the card when tapping empty map"
          },
          "default": true
        },
        "showAll": {
          "type": "toggle",
          "label": {
            "tr": "Kapalı katmanların verilerini de göster",
            "en": "Also show data of layers that are off"
          },
          "default": false
        }
      },
      "_dir": "modules/ui/place-card/"
    },
    {
      "id": "ui.scale",
      "kind": "ui",
      "name": {
        "tr": "Ölçek çubuğu",
        "en": "Scale bar"
      },
      "description": {
        "tr": "Haritanın sol altında ölçek gösterir",
        "en": "Shows a distance scale at the bottom left"
      },
      "order": 0,
      "entry": "index.js",
      "settings": {
        "unit": {
          "type": "select",
          "default": "metric",
          "label": {
            "tr": "Birim",
            "en": "Unit"
          },
          "options": [
            {
              "value": "metric",
              "label": "km / m"
            },
            {
              "value": "imperial",
              "label": "mi / ft"
            }
          ]
        }
      },
      "_dir": "modules/ui/scale/"
    },
    {
      "id": "ui.timeline",
      "kind": "ui",
      "name": {
        "tr": "Zaman çubuğu",
        "en": "Timeline"
      },
      "description": {
        "tr": "Zamana bağlı katmanlar (hava durumu) için saat kaydırıcısı; kullanan katman yoksa gizlenir",
        "en": "Hour slider for time-aware layers (weather); hidden when nothing uses it"
      },
      "order": 5,
      "entry": "index.js",
      "_dir": "modules/ui/timeline/"
    },
    {
      "id": "ui.weather-layers",
      "kind": "ui",
      "name": {
        "tr": "Hava haritaları",
        "en": "Weather maps"
      },
      "description": {
        "tr": "Rüzgâr, sıcaklık, yağış, kar, bulut… kategorili hava haritası seçici ve gösterge",
        "en": "Categorised weather map picker (wind, temperature, rain, snow, clouds…) with a legend"
      },
      "order": 5,
      "requires": [
        "data.fields"
      ],
      "entry": "index.js",
      "_dir": "modules/ui/weather-layers/"
    },
    {
      "id": "view.2d",
      "kind": "view",
      "name": {
        "tr": "2D",
        "en": "2D"
      },
      "description": {
        "tr": "Düz, kuşbakışı harita",
        "en": "Flat top-down map"
      },
      "order": 0,
      "view": {
        "pitch": 0,
        "maxPitch": 0,
        "bearing": null,
        "terrain": null,
        "interactions": {
          "pitch": false,
          "rotate": true
        },
        "transitionMs": 600
      },
      "_dir": "modules/views/2d/"
    },
    {
      "id": "view.3d-terrain",
      "kind": "view",
      "name": {
        "tr": "3D Arazi",
        "en": "3D Terrain"
      },
      "shortName": {
        "tr": "3D Arazi",
        "en": "Terrain"
      },
      "description": {
        "tr": "Dağlar ve vadiler yükseltilmiş, katmanlar araziye giydirilmiş",
        "en": "Mountains and valleys extruded, layers draped over the terrain"
      },
      "order": 2,
      "requires": [
        "aws.terrarium"
      ],
      "view": {
        "pitch": 62,
        "maxPitch": 85,
        "bearing": null,
        "terrain": {
          "exaggeration": 1.6,
          "hillshade": true,
          "sky": true
        },
        "interactions": {
          "pitch": true,
          "rotate": true
        },
        "transitionMs": 1000
      },
      "settings": {
        "exaggeration": {
          "type": "range",
          "min": 1,
          "max": 5,
          "step": 0.1,
          "default": 1.6,
          "label": {
            "tr": "Yükseklik abartısı",
            "en": "Elevation exaggeration"
          }
        },
        "hillshade": {
          "type": "toggle",
          "default": true,
          "label": {
            "tr": "Tepe gölgelendirme",
            "en": "Hillshade"
          }
        }
      },
      "_dir": "modules/views/3d-terrain/"
    },
    {
      "id": "view.3d",
      "kind": "view",
      "name": {
        "tr": "3D",
        "en": "3D"
      },
      "description": {
        "tr": "Eğimli perspektif görünüm",
        "en": "Tilted perspective view"
      },
      "order": 1,
      "view": {
        "pitch": 58,
        "maxPitch": 80,
        "bearing": null,
        "terrain": null,
        "interactions": {
          "pitch": true,
          "rotate": true
        },
        "transitionMs": 900
      },
      "_dir": "modules/views/3d/"
    }
  ],
  "errors": []
}
