{
  "belgeTuru": "CSSOlcekAgentSozlesmesi",
  "surum": "1.0.0",
  "dil": "tr",
  "ad": "CSS Ölçek — px/rem/vw clamp() üretici",
  "amac": "İki viewport–boyut noktasından doğrulanabilir doğrusal CSS clamp() ifadesi, rem karşılığı ve örnek değer tablosu üretmek.",
  "kisaCevap": "İki viewport noktası arasındaki akışkan CSS değeri, doğrusal b + m·viewport bağıntısının clamp(alt, tercih, üst) ile sınırlandırılmasıdır.",
  "calismaSekli": {
    "tur": "tek-dosya-statik-uygulama",
    "giris": "./index.html",
    "motorGlobali": "CSSOlcekMotoru",
    "motorMetodu": "CSSOlcekMotoru.hesapla(girdi)",
    "httpApiYok": true,
    "offline": true,
    "runtimeAgBagimliligi": false
  },
  "girdiSemasi": {
    "type": "object",
    "additionalProperties": false,
    "required": [
      "minViewport",
      "maxViewport",
      "minViewportBoyut",
      "maxViewportBoyut",
      "ondalik"
    ],
    "properties": {
      "minViewport": {
        "type": "number",
        "unit": "CSS px",
        "minimum": 1,
        "rule": "Sonlu sayı ve en az 1 olmalıdır.",
        "ruleUrl": "./css-olcek-API.md#girdi-sözleşmesi"
      },
      "maxViewport": {
        "type": "number",
        "unit": "CSS px",
        "exclusiveRelation": "maxViewport > minViewport",
        "rule": "Sonlu sayı ve minViewport değerinden büyük olmalıdır.",
        "ruleUrl": "./css-olcek-API.md#girdi-sözleşmesi"
      },
      "minViewportBoyut": {
        "type": "number",
        "unit": "CSS px",
        "minimum": 0,
        "rule": "Sonlu sayı ve 0 veya daha büyük olmalıdır.",
        "ruleUrl": "./css-olcek-API.md#girdi-sözleşmesi"
      },
      "maxViewportBoyut": {
        "type": "number",
        "unit": "CSS px",
        "minimum": 0,
        "rule": "Sonlu sayı ve 0 veya daha büyük olmalıdır; minViewportBoyut değerinden küçük olması geçerli bir azalan ölçektir.",
        "ruleUrl": "./css-olcek-API.md#girdi-sözleşmesi"
      },
      "rootFontPx": {
        "type": "number",
        "unit": "CSS px/rem",
        "exclusiveMinimum": 0,
        "default": 16,
        "rule": "Sonlu sayı ve 0'dan büyük olmalıdır. 16 yalnız CSSOlcek kullanıcı varsayılanıdır; evrensel CSS sabiti değildir.",
        "ruleUrl": "./css-olcek-API.md#girdi-sözleşmesi",
        "cssFontSizeUrl": "https://www.w3.org/TR/css-fonts-4/#font-size-prop",
        "unitDefinitionUrl": "https://www.w3.org/TR/css-values-4/#rem"
      },
      "ondalik": {
        "type": "integer",
        "unit": "basamak",
        "minimum": 2,
        "maximum": 8,
        "rule": "Yalnız gösterilen ve kopyalanan sayıları biçimlendirir; ara hesapları etkilemez.",
        "ruleUrl": "./css-olcek-API.md#hassasiyet-yuvarlama-ve-negatif-sıfır"
      },
      "ornekViewportlar": {
        "type": "array",
        "unit": "CSS px",
        "default": [],
      "items": {
        "type": "number",
        "finite": true
      },
      "rule": "İsteğe bağlıdır ve yalnız gerçekten omit edildiğinde [] varsayılır; verilirse boş indeks içermeyen yoğun bir sonlu number[] olmalıdır. Sayılar verilen sırada korunur. Uçların dışındaki değerler hata değil uyarı üretir.",
        "ruleUrl": "./css-olcek-API.md#girdi-sözleşmesi"
      }
    }
  },
  "basariliCiktiSemasi": {
    "type": "object",
    "required": [
      "ok",
      "surum",
      "girdi",
      "sonuc",
      "hesapIzi",
      "gosterim",
      "uyarilar",
      "hatalar",
      "meta"
    ],
    "properties": {
      "ok": {
        "const": true
      },
      "surum": {
        "type": "string"
      },
      "girdi": {
        "description": "Varsayılan uygulanmış ve negatif sıfırı temizlenmiş girdi.",
        "allOf": [
          {
            "$ref": "#/girdiSemasi"
          }
        ],
        "required": [
          "minViewport",
          "maxViewport",
          "minViewportBoyut",
          "maxViewportBoyut",
          "rootFontPx",
          "ondalik",
          "ornekViewportlar"
        ]
      },
      "sonuc": {
        "type": "object",
        "required": [
          "egimPxPerPx",
          "vwKatsayisi",
          "kesisim",
          "clampAlt",
          "clampUst",
          "clampPx",
          "clampRem",
          "ornekler",
          "pxRemDonusumleri"
        ],
        "properties": {
          "egimPxPerPx": {
            "type": "number",
            "unit": "px/px",
            "description": "Yuvarlanmamış m eğimi."
          },
          "vwKatsayisi": {
            "type": "number",
            "unit": "vw katsayısı",
            "description": "Yuvarlanmamış 100m. rem dönüşümünde değişmez.",
            "definitionUrl": "https://www.w3.org/TR/css-values-4/#viewport-relative-units"
          },
          "kesisim": {
            "type": "object",
            "properties": {
              "px": {
                "type": "number",
                "unit": "CSS px"
              },
              "rem": {
                "type": "number",
                "unit": "rem"
              }
            },
            "required": [
              "px",
              "rem"
            ]
          },
          "clampAlt": {
            "type": "object",
            "description": "s1 ve s2 değerlerinin küçük olanı.",
            "properties": {
              "px": {
                "type": "number",
                "unit": "CSS px"
              },
              "rem": {
                "type": "number",
                "unit": "rem"
              }
            },
            "required": [
              "px",
              "rem"
            ]
          },
          "clampUst": {
            "type": "object",
            "description": "s1 ve s2 değerlerinin büyük olanı.",
            "properties": {
              "px": {
                "type": "number",
                "unit": "CSS px"
              },
              "rem": {
                "type": "number",
                "unit": "rem"
              }
            },
            "required": [
              "px",
              "rem"
            ]
          },
          "clampPx": {
            "type": "string",
            "unit": "CSS <length>",
            "description": "ondalik ayarında biçimlenmiş kopyalanabilir px clamp() değeri.",
            "definitionUrl": "https://www.w3.org/TR/css-values-4/#funcdef-clamp"
          },
          "clampRem": {
            "type": "string",
            "unit": "CSS <length>",
            "description": "ondalik ayarında biçimlenmiş kopyalanabilir rem+vw clamp() değeri.",
            "definitionUrl": "https://www.w3.org/TR/css-values-4/#funcdef-clamp"
          },
          "ornekler": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "viewportPx",
                "tercihPx",
                "tercihRem",
                "sonucPx",
                "sonucRem",
                "sinirDurumu",
                "sinirEtiketi"
              ],
              "properties": {
                "viewportPx": {
                  "type": "number",
                  "unit": "CSS px"
                },
                "tercihPx": {
                  "type": "number",
                  "unit": "CSS px"
                },
                "tercihRem": {
                  "type": "number",
                  "unit": "rem"
                },
                "sonucPx": {
                  "type": "number",
                  "unit": "CSS px"
                },
                "sonucRem": {
                  "type": "number",
                  "unit": "rem"
                },
                "sinirDurumu": {
                  "enum": [
                    "ALT_SINIR",
                    "ARALIKTA",
                    "UST_SINIR"
                  ]
                },
                "sinirEtiketi": {
                  "type": "string"
                }
              }
            }
          },
          "pxRemDonusumleri": {
            "type": "array",
            "description": "Alt sınır, kesişim ve üst sınır için px↔rem tablosu.",
            "items": {
              "type": "object",
              "required": [
                "etiket",
                "px",
                "rem"
              ],
              "properties": {
                "etiket": {
                  "type": "string"
                },
                "px": {
                  "type": "number",
                  "unit": "CSS px"
                },
                "rem": {
                  "type": "number",
                  "unit": "rem"
                }
              }
            }
          }
        }
      },
      "hesapIzi": {
        "type": "array",
        "description": "Arayüzde görünür olan formül, yerine koyma, ham değer ve birim adımları.",
        "items": {
          "type": "object",
          "required": [
            "ad",
            "formul",
            "yerineKoyma",
            "deger",
            "birim"
          ],
          "properties": {
            "ad": {
              "type": "string"
            },
            "formul": {
              "type": "string"
            },
            "yerineKoyma": {
              "type": "string"
            },
            "deger": {
              "oneOf": [
                {
                  "type": "number"
                },
                {
                  "type": "array",
                  "items": {
                    "type": "number"
                  }
                }
              ]
            },
            "birim": {
              "type": "string"
            }
          }
        }
      },
      "gosterim": {
        "type": "object",
        "description": "Aynı ham sonuçtan ondalik ayarıyla biçimlenen metin değerleri.",
        "required": [
          "egim",
          "vwKatsayisi",
          "kesisimPx",
          "kesisimRem",
          "clampAltPx",
          "clampAltRem",
          "clampUstPx",
          "clampUstRem"
        ],
        "properties": {
          "egim": {
            "type": "string"
          },
          "vwKatsayisi": {
            "type": "string"
          },
          "kesisimPx": {
            "type": "string"
          },
          "kesisimRem": {
            "type": "string"
          },
          "clampAltPx": {
            "type": "string"
          },
          "clampAltRem": {
            "type": "string"
          },
          "clampUstPx": {
            "type": "string"
          },
          "clampUstRem": {
            "type": "string"
          }
        }
      },
      "uyarilar": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "kod": {
              "enum": [
                "ROOT_FONT_VARSAYILAN",
                "AZALAN_OLCEK",
                "SABIT_OLCEK",
                "ORNEK_ARALIK_DISINDA",
                "GOSTERIM_HASSASIYET_KAYBI"
              ]
            },
            "mesaj": {
              "type": "string"
            }
          },
          "required": [
            "kod",
            "mesaj"
          ]
        }
      },
      "hatalar": {
        "const": []
      },
      "meta": {
        "type": "object",
        "required": [
          "aritmetik",
          "yuvarlama",
          "rootFontVarsayilani"
        ],
        "properties": {
          "aritmetik": {
            "type": "string"
          },
          "yuvarlama": {
            "type": "string"
          },
          "rootFontVarsayilani": {
            "const": 16,
            "unit": "CSS px/rem",
            "ruleUrl": "./css-olcek-API.md#girdi-sözleşmesi"
          }
        }
      }
    }
  },
  "hataliCiktiSemasi": {
    "type": "object",
    "required": [
      "ok",
      "surum",
      "hatalar",
      "uyarilar"
    ],
    "properties": {
      "ok": {
        "const": false
      },
      "surum": {
        "type": "string"
      },
      "hatalar": {
        "type": "array",
        "minItems": 1,
        "items": {
          "type": "object",
          "required": [
            "kod",
            "alanlar",
            "mesaj"
          ],
          "properties": {
            "kod": {
              "enum": [
                "GECERSIZ_SAYI",
                "VIEWPORT_SIRASI",
                "ROOT_SIFIR",
                "NEGATIF_BOYUT",
                "ONDALIK_ARALIK_DISI"
              ]
            },
            "alanlar": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "mesaj": {
              "type": "string"
            }
          }
        }
      },
      "uyarilar": {
        "const": []
      }
    }
  },
  "hataKodlari": [
    {
      "kod": "GECERSIZ_SAYI",
      "kosul": "ondalik dışındaki zorunlu sayısal alan eksik, number tipinde değil veya sonlu değil; tanımsız fazladan alan var; minViewport < 1; örnek listesi dizi değil veya sonlu olmayan öğe içeriyor; türetilen sonuç sonlu olmuyor; ya da farklı uç boyutlarının eğimi sıfıra alt-taşıyor.",
      "ruleUrl": "./css-olcek-API.md#hatalar"
    },
    {
      "kod": "VIEWPORT_SIRASI",
      "kosul": "Geçerli viewport sayılarında maxViewport <= minViewport.",
      "ruleUrl": "./css-olcek-API.md#hatalar"
    },
    {
      "kod": "ROOT_SIFIR",
      "kosul": "Geçerli sayısal rootFontPx <= 0.",
      "ruleUrl": "./css-olcek-API.md#hatalar"
    },
    {
      "kod": "NEGATIF_BOYUT",
      "kosul": "Geçerli sayısal minViewportBoyut veya maxViewportBoyut < 0.",
      "ruleUrl": "./css-olcek-API.md#hatalar"
    },
    {
      "kod": "ONDALIK_ARALIK_DISI",
      "kosul": "ondalik bir tam sayı değil veya 2–8 kapalı aralığının dışında.",
      "ruleUrl": "./css-olcek-API.md#hatalar"
    }
  ],
  "uyariKodlari": [
    {
      "kod": "ROOT_FONT_VARSAYILAN",
      "kosul": "rootFontPx omit edilmiştir; 16 araç varsayılanı uygulanır.",
      "ruleUrl": "./css-olcek-API.md#uyarılar"
    },
    {
      "kod": "AZALAN_OLCEK",
      "kosul": "m < 0.",
      "ruleUrl": "./css-olcek-API.md#uyarılar"
    },
    {
      "kod": "SABIT_OLCEK",
      "kosul": "m = 0.",
      "ruleUrl": "./css-olcek-API.md#uyarılar"
    },
    {
      "kod": "ORNEK_ARALIK_DISINDA",
      "kosul": "En az bir örnek viewport v1–v2 aralığının dışındadır.",
      "ruleUrl": "./css-olcek-API.md#uyarılar"
    },
    {
      "kod": "GOSTERIM_HASSASIYET_KAYBI",
      "kosul": "Seçilen ondalık basamakta kopyalanan CSS'in sonlu ve sıfır olmayan vw katsayısı 0 olur, farklı px/rem clamp sınırları aynı metne yuvarlanır veya biçimlenmiş px/rem clamp uçlarda ham ölçeğin yönünü koruyamaz.",
      "ruleUrl": "./css-olcek-API.md#uyarılar"
    }
  ],
  "formuller": [
    {
      "id": "egim",
      "ifade": "m = (s2 - s1) / (v2 - v1)",
      "birim": "px/px",
      "ruleUrl": "./css-olcek-API.md#hesap"
    },
    {
      "id": "kesisim",
      "ifade": "b = s1 - m * v1",
      "birim": "CSS px",
      "ruleUrl": "./css-olcek-API.md#hesap"
    },
    {
      "id": "vwKatsayisi",
      "ifade": "k = 100 * m",
      "birim": "vw katsayısı",
      "ruleUrl": "https://www.w3.org/TR/css-values-4/#viewport-relative-units",
      "aciklama": "CSS Values Level 4'te 1vw büyük viewport genişliğinin %1'i olduğundan m*viewport, (100m)*1vw olur."
    },
    {
      "id": "tercih",
      "ifade": "tercih(v) = b + m * v",
      "birim": "CSS px",
      "ruleUrl": "./css-olcek-API.md#hesap"
    },
    {
      "id": "sinirlar",
      "ifade": "alt = min(s1, s2); ust = max(s1, s2)",
      "birim": "CSS px",
      "ruleUrl": "https://www.w3.org/TR/css-values-4/#funcdef-clamp"
    },
    {
      "id": "sikistirma",
      "ifade": "sonuc(v) = min(ust, max(alt, tercih(v)))",
      "birim": "CSS px",
      "ruleUrl": "https://www.w3.org/TR/css-values-4/#funcdef-clamp"
    },
    {
      "id": "remDonusumu",
      "ifade": "rem = px / rootFontPx",
      "birim": "rem",
      "ruleUrl": "https://www.w3.org/TR/css-values-4/#rem",
      "aciklama": "Yalnız px uzunlukları bölünür; vw katsayısı değişmez."
    }
  ],
  "sayisalPolitika": {
    "araHesap": "JavaScript Number, IEEE 754 double",
    "yuvarlama": "Yalnız gosterim alanlarında ve clampPx/clampRem dizgilerinde ondalik kadar en fazla basamak; sondaki sıfırlar atılır.",
    "ucNokta": "Örnek viewport v1 veya v2 ile tam eşitse, cebirsel olarak b + m*v ile aynı olan s1 veya s2 ankrajı doğrudan korunur; diğer örneklerde b + m*v hesaplanır.",
    "negatifSifir": "Tüm girdi ve türetilen sayısal çıktılarda Object.is(x, -0) ise 0 döndürülür.",
    "ruleUrl": "./css-olcek-API.md#hassasiyet-yuvarlama-ve-negatif-sıfır",
    "numberTypeUrl": "https://tc39.es/ecma262/multipage/ecmascript-data-types-and-values.html#sec-ecmascript-language-types-number-type",
    "toFixedUrl": "https://tc39.es/ecma262/multipage/numbers-and-dates.html#sec-number.prototype.tofixed"
  },
  "ornekCagrilar": [
    {
      "ad": "Artan ölçek",
      "cagri": {
        "motor": "CSSOlcekMotoru.hesapla",
        "girdi": {
          "minViewport": 320,
          "maxViewport": 1280,
          "minViewportBoyut": 16,
          "maxViewportBoyut": 24,
          "rootFontPx": 16,
          "ondalik": 6,
          "ornekViewportlar": [
            320,
            800,
            1280
          ]
        }
      },
      "beklenenOzet": {
        "egimPxPerPx": 0.008333333333333333,
        "vwKatsayisi": 0.8333333333333334,
        "kesisimPx": 13.333333333333334,
        "viewport800SonucPx": 20
      },
      "uretilenCss": {
        "px": "clamp(16px, 13.333333px + 0.833333vw, 24px)",
        "rem": "clamp(1rem, 0.833333rem + 0.833333vw, 1.5rem)"
      },
      "query": "./index.html?minViewport=320&maxViewport=1280&minViewportBoyut=16&maxViewportBoyut=24&rootFontPx=16&ondalik=6&ornekViewportlar=320%2C800%2C1280"
    },
    {
      "ad": "Azalan ölçek",
      "cagri": {
        "motor": "CSSOlcekMotoru.hesapla",
        "girdi": {
          "minViewport": 320,
          "maxViewport": 1280,
          "minViewportBoyut": 24,
          "maxViewportBoyut": 16,
          "rootFontPx": 16,
          "ondalik": 6,
          "ornekViewportlar": [
            320,
            800,
            1280
          ]
        }
      },
      "beklenenOzet": {
        "egimPxPerPx": -0.008333333333333333,
        "vwKatsayisi": -0.8333333333333334,
        "kesisimPx": 26.666666666666668,
        "viewport800SonucPx": 20,
        "clampAltPx": 16,
        "clampUstPx": 24
      },
      "uretilenCss": {
        "px": "clamp(16px, 26.666667px - 0.833333vw, 24px)",
        "rem": "clamp(1rem, 1.666667rem - 0.833333vw, 1.5rem)"
      }
    },
    {
      "ad": "Eşit viewport hatası",
      "cagri": {
        "motor": "CSSOlcekMotoru.hesapla",
        "girdi": {
          "minViewport": 320,
          "maxViewport": 320,
          "minViewportBoyut": 16,
          "maxViewportBoyut": 24,
          "rootFontPx": 16,
          "ondalik": 6
        }
      },
      "beklenen": {
        "ok": false,
        "ilkHataKodu": "VIEWPORT_SIRASI"
      }
    }
  ],
  "kaynaklar": [
    {
      "konu": "CSS px ve mutlak uzunluklar",
      "url": "https://www.w3.org/TR/css-values-4/#absolute-lengths",
      "durum": "2026-07-29 tarihinde GLM WebFetch ile kaynak metninden doğrulandı"
    },
    {
      "konu": "rem ve font-relative uzunluklar",
      "url": "https://www.w3.org/TR/css-values-4/#rem",
      "durum": "2026-07-29 tarihinde GLM WebFetch ile kaynak metninden doğrulandı"
    },
    {
      "konu": "vw ve viewport-percentage uzunluklar",
      "url": "https://www.w3.org/TR/css-values-4/#viewport-relative-units",
      "durum": "2026-07-29 tarihinde GLM WebFetch ile kaynak metninden doğrulandı"
    },
    {
      "konu": "clamp() karşılaştırma işlevi",
      "url": "https://www.w3.org/TR/css-values-4/#funcdef-clamp",
      "durum": "2026-07-29 tarihinde GLM hedef gövde erişimi eksik kaldıktan sonra AGY ile tam resmi URL içeriğinden doğrulandı"
    },
    {
      "konu": "font-size başlangıç ve hesaplanan değer",
      "url": "https://www.w3.org/TR/css-fonts-4/#font-size-prop",
      "durum": "2026-07-29 tarihinde GLM kısmi erişiminden sonra AGY ile resmi URL'nin arama indeksindeki metninden doğrulandı"
    },
    {
      "konu": "ECMAScript Number, IEEE 754 binary64 ve negatif sıfır",
      "url": "https://tc39.es/ecma262/multipage/ecmascript-data-types-and-values.html#sec-ecmascript-language-types-number-type",
      "durum": "2026-07-29 tarihinde GLM hedef gövde erişimi eksik kaldıktan sonra AGY ile tam resmi URL içeriğinden doğrulandı"
    },
    {
      "konu": "ECMAScript Number.prototype.toFixed ve 10^21 eşiği",
      "url": "https://tc39.es/ecma262/multipage/numbers-and-dates.html#sec-number.prototype.tofixed",
      "durum": "2026-07-29 tarihinde GLM hedef gövde erişimi eksik kaldıktan sonra AGY ile tam resmi URL içeriğinden doğrulandı"
    },
    {
      "konu": "Akışkan tip hesaplayıcı rekabet örneği",
      "url": "https://utopia.fyi/type/calculator/",
      "durum": "2026-07-29 tarihinde GLM WebFetch ile kaynak metninden doğrulandı"
    },
    {
      "konu": "px to rem calculator sorgu önerileri",
      "url": "https://suggestqueries.google.com/complete/search?client=firefox&hl=en&q=px%20to%20rem%20calculator",
      "durum": "2026-07-29 tarihinde GLM WebFetch ile doğrulandı; yalnız değişken talep sinyalidir, arama hacmi değildir"
    }
  ]
}
