- catalog: P5 restriction selector flow (mainGroupsPath), grid/tree/columns view modes for brands and models with persisted user settings - translations: bulk translateMany() path with 1d cache-miss TTL, expanded automotive dictionary; categories.service now drives EN→TR via TranslationsService instead of mapper-side strings - pcat: migrate auth from v1 JWT to v3 widget tokens (TWS- api-key + supporting X-* headers, IP-bound via DataImpulse proxy) - pl24: new fetchP5Restrictions() for restriction-level navigation - subscriptions: trial extended 7 → 30 days - design: oklch color tokens, brand semantic color, Geist + Instrument Serif fonts, tinted shadows, button "brand" variant with hover-lift, accessible focus rings, skip link, 404 NotFound page, auth layout polish - nginx: dynamic resolver for Faro upstream - config: OPENROUTER_API_KEY env (used by emex translate bootstrap script) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
58 lines
2.6 KiB
HTML
58 lines
2.6 KiB
HTML
<!doctype html>
|
||
<html lang="tr">
|
||
<head>
|
||
<meta charset="UTF-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||
<title>Şase Numarası Sorgulama & OEM Parça Kataloğu | Sase.tr</title>
|
||
<meta
|
||
name="description"
|
||
content="Araç şase numarasını (VIN) girin, saniyeler içinde OEM parça kodlarına ulaşın. 27+ marka, 243.000+ parça. Yanlış sipariş yapmadan doğru parçayı bulun."
|
||
/>
|
||
<link rel="icon" href="/favicon.svg" type="image/svg+xml" />
|
||
<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
|
||
<link rel="canonical" href="https://sase.tr" />
|
||
|
||
<!-- Open Graph -->
|
||
<meta property="og:type" content="website" />
|
||
<meta property="og:url" content="https://sase.tr" />
|
||
<meta property="og:title" content="Şase Numarası Sorgulama & OEM Parça Kataloğu | Sase.tr" />
|
||
<meta property="og:description" content="Araç şase numarasını girin, saniyeler içinde doğru OEM parça kodlarına ulaşın. 27+ marka, 243.000+ parça." />
|
||
<meta property="og:image" content="https://sase.tr/og-image.png" />
|
||
<meta property="og:locale" content="tr_TR" />
|
||
<meta property="og:site_name" content="Sase.tr" />
|
||
|
||
<!-- Twitter Card -->
|
||
<meta name="twitter:card" content="summary_large_image" />
|
||
<meta name="twitter:title" content="Şase Numarası Sorgulama & OEM Parça Kataloğu | Sase.tr" />
|
||
<meta name="twitter:description" content="Araç şase numarasını girin, saniyeler içinde doğru OEM parça kodlarına ulaşın. 27+ marka, 243.000+ parça." />
|
||
<meta name="twitter:image" content="https://sase.tr/og-image.png" />
|
||
|
||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||
<link
|
||
href="https://fonts.googleapis.com/css2?family=Geist:wght@400;500;600;700;800&family=Geist+Mono:wght@400;500;600&family=Instrument+Serif:ital@0;1&display=swap"
|
||
rel="stylesheet"
|
||
/>
|
||
</head>
|
||
<body>
|
||
<script>
|
||
// Apply theme before React renders to prevent FOUC
|
||
(function () {
|
||
try {
|
||
var s = JSON.parse(localStorage.getItem("userSettings") || "{}");
|
||
var t = s.theme || "dark";
|
||
var dark =
|
||
t === "dark" ||
|
||
(t === "system" &&
|
||
window.matchMedia("(prefers-color-scheme: dark)").matches);
|
||
if (dark) document.documentElement.classList.add("dark");
|
||
} catch (e) {
|
||
document.documentElement.classList.add("dark");
|
||
}
|
||
})();
|
||
</script>
|
||
<div id="root"></div>
|
||
<script type="module" src="/src/main.tsx"></script>
|
||
</body>
|
||
</html>
|