StreamTranslate — production (main) vs staging

Fresh pull, July 24 2026. Red = production version / production-only. Green = staging version / staging-only.

Code & config files (10) — full diffs

ext/video_overlay.html changed +4 -23
diff --git a/ext/video_overlay.html b/ext/video_overlay.html
index dc37a4ed0..649bd5de8 100644
--- a/ext/video_overlay.html
+++ b/ext/video_overlay.html
@@ -54,33 +54,14 @@
         <span class="setting-label">Box style</span>
       </div>
       <div class="box-options" id="box-options" style="margin-top:4px; display:flex; gap:8px;">
-        <div class="box-opt" data-box="none" title="No box" style="width:30px;height:22px;border-radius:4px;background:transparent;border:2px solid #fff;cursor:pointer;pointer-events:auto;display:flex;align-items:center;justify-content:center;font-size:9px;font-weight:700;color:#fff;">Aa</div>
-        <div class="box-opt" data-box="white" style="width:30px;height:22px;border-radius:4px;background:rgba(255,255,255,0.92);border:2px solid transparent;cursor:pointer;pointer-events:auto;"></div>
+        <div class="box-opt" data-box="white" style="width:30px;height:22px;border-radius:4px;background:rgba(255,255,255,0.92);border:2px solid #fff;cursor:pointer;pointer-events:auto;"></div>
         <div class="box-opt" data-box="dark" style="width:30px;height:22px;border-radius:4px;background:rgba(0,0,0,0.85);border:2px solid transparent;cursor:pointer;pointer-events:auto;"></div>
       </div>
 
-      <div class="setting-row" style="margin-top:8px;">
-        <span class="setting-label">Top text color</span>
-      </div>
-      <div class="color-options" id="top-color-options" style="margin-top:4px;">
-        <div class="color-swatch active" data-color="#ffffff" style="background:#ffffff;"></div>
-        <div class="color-swatch" data-color="#f8efd6" style="background:#f8efd6;"></div>
-        <div class="color-swatch" data-color="#ffdd00" style="background:#ffdd00;"></div>
-        <div class="color-swatch" data-color="#ff8c00" style="background:#ff8c00;"></div>
-        <div class="color-swatch" data-color="#ff4444" style="background:#ff4444;"></div>
-        <div class="color-swatch" data-color="#ff69b4" style="background:#ff69b4;"></div>
-        <div class="color-swatch" data-color="#00e696" style="background:#00e696;"></div>
-        <div class="color-swatch" data-color="#00e6c8" style="background:#00e6c8;"></div>
-        <div class="color-swatch" data-color="#4da6ff" style="background:#4da6ff;"></div>
-        <div class="color-swatch" data-color="#bf94ff" style="background:#bf94ff;"></div>
-        <div class="color-swatch" data-color="#a3e635" style="background:#a3e635;"></div>
-        <div class="color-swatch" data-color="#ff1493" style="background:#ff1493;"></div>
-      </div>
-
-      <div class="setting-row" style="margin-top:8px;">
-        <span class="setting-label">Bottom text color</span>
+      <div class="setting-row" style="margin-top:4px;">
+        <span class="setting-label">Text color</span>
       </div>
-      <div class="color-options" id="bottom-color-options" style="margin-top:4px;">
+      <div class="color-options" id="color-options" style="margin-top:4px;">
         <div class="color-swatch active" data-color="#ffffff" style="background:#ffffff;"></div>
         <div class="color-swatch" data-color="#f8efd6" style="background:#f8efd6;"></div>
         <div class="color-swatch" data-color="#ffdd00" style="background:#ffdd00;"></div>
ext/viewer.css changed +7 -11
diff --git a/ext/viewer.css b/ext/viewer.css
index 2deceecab..a38c7c3f2 100644
--- a/ext/viewer.css
+++ b/ext/viewer.css
@@ -64,21 +64,17 @@ body {
   text-shadow: none;
 }
 
-/* Box style variants — applied via JS to BOTH original + translated lines.
-   Color is set inline by JS (topColor / bottomColor); these only control the box + shadow. */
-.subtitle-line.box-white {
-  background: rgba(255, 255, 255, 0.97) !important;
+/* Box style variants — applied via JS */
+.subtitle-line.translated.box-white {
+  background: rgba(255, 255, 255, 0.97);
+  color: #000;
   text-shadow: none;
 }
-.subtitle-line.box-dark {
-  background: rgba(0, 0, 0, 0.82) !important;
+.subtitle-line.translated.box-dark {
+  background: rgba(0, 0, 0, 0.82);
+  color: #fff;
   text-shadow: 0 1px 4px rgba(0,0,0,0.9);
 }
-.subtitle-line.box-none {
-  background: transparent !important;
-  padding: 2px 6px;
-  text-shadow: 0 2px 6px rgba(0,0,0,0.95), 0 0 4px rgba(0,0,0,0.9), 0 1px 2px rgba(0,0,0,1);
-}
 
 /* Translation-only mode */
 .trans-only .subtitle-line.original { display: none; }
ext/viewer.js changed +16 -23
diff --git a/ext/viewer.js b/ext/viewer.js
index 2f08a15e0..98f5094a1 100644
--- a/ext/viewer.js
+++ b/ext/viewer.js
@@ -69,9 +69,8 @@
   var showOriginal = safeGetItem('st-ext-original', 'true') !== 'false';
   var enabled = safeGetItem('st-ext-enabled', 'true') !== 'false';
   var fontSize = parseInt(safeGetItem('st-ext-fontsize', '20')) || 20;
-  var topColor = safeGetItem('st-ext-topcolor', safeGetItem('st-ext-textcolor', '#ffffff'));
-  var bottomColor = safeGetItem('st-ext-bottomcolor', safeGetItem('st-ext-textcolor', '#ffffff'));
-  var boxStyle = safeGetItem('st-ext-boxstyle', 'none');
+  var textColor = safeGetItem('st-ext-textcolor', '#ffffff');
+  var boxStyle = safeGetItem('st-ext-boxstyle', 'white');
   var position = safeGetItem('st-ext-position', 'bottom');
   var pickerOpen = false;
   var clearTimer = null;
@@ -236,26 +235,23 @@
       });
     }
 
-    // Color pickers — TOP (original) + BOTTOM (translated)
-    function wireColorPicker(elId, getVal, setVal, storageKey) {
-      var opts = document.getElementById(elId);
-      if (!opts) return;
-      var swatches = opts.querySelectorAll('.color-swatch');
+    // Color picker
+    var colorOptions = document.getElementById('color-options');
+    if (colorOptions) {
+      var swatches = colorOptions.querySelectorAll('.color-swatch');
+      // Set initial active
       swatches.forEach(function(sw) {
-        if (sw.getAttribute('data-color') === getVal()) sw.classList.add('active');
+        if (sw.getAttribute('data-color') === textColor) sw.classList.add('active');
         else sw.classList.remove('active');
         sw.addEventListener('click', function() {
-          var v = this.getAttribute('data-color');
-          setVal(v);
-          safeSetItem(storageKey, v);
+          textColor = this.getAttribute('data-color');
+          safeSetItem('st-ext-textcolor', textColor);
           swatches.forEach(function(s) { s.classList.remove('active'); });
           this.classList.add('active');
           applySettings();
         });
       });
     }
-    wireColorPicker('top-color-options', function(){ return topColor; }, function(v){ topColor = v; }, 'st-ext-topcolor');
-    wireColorPicker('bottom-color-options', function(){ return bottomColor; }, function(v){ bottomColor = v; }, 'st-ext-bottomcolor');
   }
 
   function buildLanguageList() {
@@ -301,18 +297,15 @@
   function applySettings() {
     container.className = 'subtitle-container pos-' + position;
     translatedLine.style.fontSize = fontSize + 'px';
+    // Fix white-on-white: if box is white and text is default white, use black
+    var effectiveColor = (boxStyle === 'white' && textColor === '#ffffff') ? '#000000' : textColor;
+    translatedLine.style.color = effectiveColor;
     originalLine.style.fontSize = Math.max(12, fontSize - 4) + 'px';
-    // Colors — white-on-white guard only when a WHITE box is behind the text.
-    var effTop = (boxStyle === 'white' && topColor === '#ffffff') ? '#000000' : topColor;
-    var effBottom = (boxStyle === 'white' && bottomColor === '#ffffff') ? '#000000' : bottomColor;
-    originalLine.style.color = effTop;
-    translatedLine.style.color = effBottom;
     if (!showOriginal) container.classList.add('trans-only');
-    // Box style applied to BOTH lines (none / white / dark)
-    originalLine.classList.remove('box-white', 'box-dark', 'box-none');
-    translatedLine.classList.remove('box-white', 'box-dark', 'box-none');
-    originalLine.classList.add('box-' + boxStyle);
+    // Box style
+    translatedLine.classList.remove('box-white', 'box-dark');
     translatedLine.classList.add('box-' + boxStyle);
+    // If white box, auto-set text shadow off (handled in CSS)
   }
 
   // ===== Handle incoming subtitle =====
lib/personal-dictionary.js staging only +33 -0
diff --git a/lib/personal-dictionary.js b/lib/personal-dictionary.js
new file mode 100644
index 000000000..d0a6f78b2
--- /dev/null
+++ b/lib/personal-dictionary.js
@@ -0,0 +1,33 @@
+'use strict';
+
+const MAX_PERSONAL_DICTIONARY_TERMS = 50;
+const MAX_PERSONAL_DICTIONARY_TERM_LENGTH = 80;
+
+function normalizePersonalDictionary(value) {
+  if (!Array.isArray(value)) return [];
+
+  const terms = [];
+  const seen = new Set();
+  for (const raw of value) {
+    const term = String(raw || '')
+      .normalize('NFKC')
+      .replace(/[\u0000-\u001F\u007F]/g, ' ')
+      .replace(/\s+/g, ' ')
+      .trim()
+      .slice(0, MAX_PERSONAL_DICTIONARY_TERM_LENGTH);
+    if (!term) continue;
+
+    const key = term.toLocaleLowerCase('en-US');
+    if (seen.has(key)) continue;
+    seen.add(key);
+    terms.push(term);
+    if (terms.length >= MAX_PERSONAL_DICTIONARY_TERMS) break;
+  }
+  return terms;
+}
+
+module.exports = {
+  MAX_PERSONAL_DICTIONARY_TERMS,
+  MAX_PERSONAL_DICTIONARY_TERM_LENGTH,
+  normalizePersonalDictionary,
+};
public/control-i18n.js changed +203 -203
diff --git a/public/control-i18n.js b/public/control-i18n.js
index 9448d60e9..401a0c8cb 100644
--- a/public/control-i18n.js
+++ b/public/control-i18n.js
@@ -16,7 +16,7 @@
           "Sign In": "Iniciar sesión",
           "Log Out": "Cerrar sesión",
           "account": "cuenta",
-          "6 hours free": "6 horas gratis",
+          "6 hours free": "3 horas gratis",
           "no credit card needed": "sin tarjeta de crédito",
           "· no credit card needed": "· sin tarjeta de crédito",
           "NO CREDIT CARD NEEDED": "SIN TARJETA DE CRÉDITO",
@@ -180,7 +180,7 @@
           "Copy": "Copiar",
           "Regen": "Regen",
           "You are almost live": "Ya casi estás en vivo",
-          "Sign up to start streaming in 58 languages — free for 6 hours.": "Regístrate para empezar a transmitir en más de 30 idiomas — gratis durante 6 horas.",
+          "Sign up to start streaming in 58 languages — free for 6 hours.": "Regístrate para empezar a transmitir en más de 30 idiomas — gratis durante 3 horas.",
           "Continue with Google": "Continuar con Google",
           "Continue with Twitch": "Continuar con Twitch",
           "or email": "o email",
@@ -203,7 +203,7 @@
           "Your preview time is up": "Tu tiempo de vista previa terminó",
           "Sign up to keep translating.": "Regístrate para seguir traduciendo.",
           "Continue Free": "Continuar gratis",
-          "No spam. Just 6 hours of real-time translations.": "Sin spam. Solo 6 horas de traducciones en tiempo real.",
+          "Free Plan — 3 hours of real-time translations.": "Sin spam. Solo 3 horas de traducciones en tiempo real.",
           "Verification code": "Código de verificación",
           "Start Free Trial": "Iniciar prueba gratis",
           "My Account": "Mi cuenta",
@@ -265,9 +265,9 @@
           "Stream Pass ready — hours tracked when OBS is live": "Stream Pass listo — horas rastreadas cuando OBS está en vivo",
           "Don't press until you're ready to go live. Timer won't pause.": "No presiones hasta que estés listo para ir a vivir. El temporero no se detendrá.",
           "🚀 Start My Stream Pass": "🚀 Iniciar mi paso de corriente",
-          "Free trial active · 6 hours from when you generated your OBS link": "Activo de prueba gratuita · 6 horas desde cuando generó su enlace OBS",
-          "Your 6-hour trial is active": "Su juicio de 6 horas está activo",
-          "Generate your OBS link to start your 6-hour free trial": "Genera tu enlace OBS para iniciar tu prueba gratuita de 6 horas",
+          "Free Plan active · 3 hours from when you generated your OBS link": "Activo de prueba gratuita · 3 horas desde cuando generó su enlace OBS",
+          "Your Free Plan (3 hours) is active": "Su juicio de 3 horas está activo",
+          "Generate your OBS link to start your Free Plan (3 hours)": "Genera tu enlace OBS para iniciar tu prueba gratuita de 3 horas",
           "⏰ EXPIRED": "vertido",
           "Your free trial has ended · upgrade to keep streaming": "Su prueba gratuita ha terminado · actualización para mantener el streaming",
           "Trial expired — upgrade to continue": "El juicio expirado: actualización para continuar",
@@ -277,7 +277,7 @@
           "Upgrade Now →": "Actualizar ahora →",
           "FREE": "LIBERTAD",
           "Your first stream is free · sign up to get your OBS link": "Su primer flujo es gratuito · registrarse para obtener su enlace OBS",
-          "Enter your email to start your free 6-hour trial": "Introduzca su correo electrónico para iniciar su prueba gratuita de 6 horas",
+          "Enter your email to start your Free Plan (3 hours)": "Introduzca su correo electrónico para iniciar su prueba gratuita de 3 horas",
           "(supported: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)": "(compatible: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)",
           "→ click": "→ clic",
           "Upgrade →": "Mejorar plan →",
@@ -297,7 +297,7 @@
           "Sign In": "ログイン",
           "Log Out": "ログアウト",
           "account": "アカウント",
-          "6 hours free": "6時間無料",
+          "6 hours free": "3時間無料",
           "no credit card needed": "クレジットカード不要",
           "· no credit card needed": "· クレジットカード不要",
           "NO CREDIT CARD NEEDED": "クレジットカード不要",
@@ -461,7 +461,7 @@
           "Copy": "コピー",
           "Regen": "ログイン",
           "You are almost live": "もうすぐ配信できます",
-          "Sign up to start streaming in 58 languages — free for 6 hours.": "登録すると30以上の言語で配信できます — 6時間無料。",
+          "Sign up to start streaming in 58 languages — free for 6 hours.": "登録すると30以上の言語で配信できます — 3時間無料。",
           "Continue with Google": "Googleで続ける",
           "Continue with Twitch": "Twitchで続ける",
           "or email": "またはメール",
@@ -484,7 +484,7 @@
           "Your preview time is up": "プレビュー時間が終了しました",
           "Sign up to keep translating.": "翻訳を続けるには登録してください。",
           "Continue Free": "無料で続ける",
-          "No spam. Just 6 hours of real-time translations.": "迷惑メールなし。リアルタイム翻訳を6時間だけ。",
+          "Free Plan — 3 hours of real-time translations.": "迷惑メールなし。リアルタイム翻訳を3時間だけ。",
           "Verification code": "検証コード",
           "Start Free Trial": "無料トライアルを開始",
           "My Account": "マイアカウント",
@@ -546,9 +546,9 @@
           "Stream Pass ready — hours tracked when OBS is live": "ストリームパスの準備 — OBS がライブ中に追跡される時間",
           "Don't press until you're ready to go live. Timer won't pause.": "あなたがライブに行く準備が整っているまでプレスしないでください。 タイマーは一時停止しません。",
           "🚀 Start My Stream Pass": "私のストリームパスを開始する",
-          "Free trial active · 6 hours from when you generated your OBS link": "OBSリンクを生成したときに無料トライアルアクティブ・6時間",
-          "Your 6-hour trial is active": "6時間のトライアルが有効",
-          "Generate your OBS link to start your 6-hour free trial": "OBSリンクを生成して6時間無料トライアルを開始",
+          "Free Plan active · 3 hours from when you generated your OBS link": "OBSリンクを生成したときに無料トライアルアクティブ・3時間",
+          "Your Free Plan (3 hours) is active": "3時間のトライアルが有効",
+          "Generate your OBS link to start your Free Plan (3 hours)": "OBSリンクを生成して3時間無料トライアルを開始",
           "⏰ EXPIRED": "エクスピレッド",
           "Your free trial has ended · upgrade to keep streaming": "無料トライアル終了・ストリーミングを維持するためのアップグレード",
           "Trial expired — upgrade to continue": "期限切れのトライアル — アップグレード",
@@ -558,7 +558,7 @@
           "Upgrade Now →": "今すぐアップグレード →",
           "FREE": "無料",
           "Your first stream is free · sign up to get your OBS link": "あなたの最初のストリームは無料です · あなたのOBSリンクを取得するサインアップ",
-          "Enter your email to start your free 6-hour trial": "無料の6時間トライアルを開始するには、電子メールを入力してください",
+          "Enter your email to start your Free Plan (3 hours)": "無料の3時間トライアルを開始するには、電子メールを入力してください",
           "(supported: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)": "(対応: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)",
           "→ click": "→ クリック",
           "Upgrade →": "アップグレード →",
@@ -606,7 +606,7 @@
           "Online": "متصل",
           "Live": "مباشر",
           "Dismiss": "الانصراف",
-          "6 hours free": "6 ساعات",
+          "6 hours free": "3 ساعات",
           "no credit card needed": "لا حاجة لبطاقة ائتمانية",
           "· no credit card needed": ":: عدم الحاجة إلى بطاقة ائتمانية",
           "NO CREDIT CARD NEEDED": "لا حاجة لـ (كريد)",
@@ -699,7 +699,7 @@
           "Regen": "Regen",
           "Overlay Preview & Style": "Overlay Preview &apos; Style",
           "You are almost live": "أنت على وشك البث",
-          "Sign up to start streaming in 58 languages — free for 6 hours.": "سجّل لبدء البث بأكثر من 30 لغة — مجانًا لمدة 6 ساعات.",
+          "Sign up to start streaming in 58 languages — free for 6 hours.": "سجّل لبدء البث بأكثر من 30 لغة — مجانًا لمدة 3 ساعات.",
           "Continue with Google": "المتابعة باستخدام Google",
           "Continue with Twitch": "المتابعة باستخدام Twitch",
           "or email": "أو البريد الإلكتروني",
@@ -722,7 +722,7 @@
           "Your preview time is up": "انتهى وقت المعاينة",
           "Sign up to keep translating.": "سجّل لمتابعة الترجمة.",
           "Continue Free": "المتابعة مجانًا",
-          "No spam. Just 6 hours of real-time translations.": "لا رسائل مزعجة. فقط 6 ساعات من الترجمة الفورية.",
+          "Free Plan — 3 hours of real-time translations.": "لا رسائل مزعجة. فقط 3 ساعات من الترجمة الفورية.",
           "Verification code": "رمز التحقق",
           "Start Free Trial": "بدء التجربة المجانية",
           "My Account": "حسابي",
@@ -802,9 +802,9 @@
           "Stream Pass ready — hours tracked when OBS is live": "ممر طارئ جاهز الساعات التي تعقبت عندما يقطن",
           "Don't press until you're ready to go live. Timer won't pause.": "لا تضغط حتى تكون مستعداً للعيش التوقيت لن يتوقف",
           "🚀 Start My Stream Pass": "ابدأي تمريري",
-          "Free trial active · 6 hours from when you generated your OBS link": "6ساعات من عندما ولدت رابطك",
-          "Your 6-hour trial is active": "محاكمة ست ساعات عمل نشطة",
-          "Generate your OBS link to start your 6-hour free trial": "تولد وصلة مكتب خدمات الرقابة الداخلية الخاص بك لبدء المحاكمة الحرة لمدة 6 ساعات",
+          "Free Plan active · 3 hours from when you generated your OBS link": "3ساعات من عندما ولدت رابطك",
+          "Your Free Plan (3 hours) is active": "محاكمة ست ساعات عمل نشطة",
+          "Generate your OBS link to start your Free Plan (3 hours)": "تولد وصلة مكتب خدمات الرقابة الداخلية الخاص بك لبدء المحاكمة الحرة لمدة 3 ساعات",
           "⏰ EXPIRED": "EXPIRED",
           "Your free trial has ended · upgrade to keep streaming": "مُحاكمتك المجانية انتهت..",
           "Trial expired — upgrade to continue": "المحاكمات التي انتهت صلاحيتها - رفع مستواها لمواصلة",
@@ -814,7 +814,7 @@
           "Upgrade Now →": "أعلى الآن",
           "FREE": "FREE",
           "Your first stream is free · sign up to get your OBS link": "تيارك الأول مجاني",
-          "Enter your email to start your free 6-hour trial": "أدخلي بريدك الإلكتروني لبدء محاكمة مجانية لمدة 6 ساعات",
+          "Enter your email to start your Free Plan (3 hours)": "أدخلي بريدك الإلكتروني لبدء محاكمة مجانية لمدة 3 ساعات",
           "(supported: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)": "(مدعوم: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)",
           "→ click": "→",
           "Upgrade →": "ترقية →",
@@ -862,7 +862,7 @@
           "Online": "Online",
           "Live": "Live",
           "Dismiss": "Entlassung",
-          "6 hours free": "6 Stunden kostenlos",
+          "6 hours free": "3 Stunden kostenlos",
           "no credit card needed": "keine Kreditkarte erforderlich",
           "· no credit card needed": "· keine Kreditkarte erforderlich",
           "NO CREDIT CARD NEEDED": "NO CREDIT CARD benötigt",
@@ -955,7 +955,7 @@
           "Regen": "Regen",
           "Overlay Preview & Style": "Vorschau &amp; Style",
           "You are almost live": "Du bist fast live",
-          "Sign up to start streaming in 58 languages — free for 6 hours.": "Registriere dich, um in über 30 Sprachen zu streamen — 6 Stunden kostenlos.",
+          "Sign up to start streaming in 58 languages — free for 6 hours.": "Registriere dich, um in über 30 Sprachen zu streamen — 3 Stunden kostenlos.",
           "Continue with Google": "Weiter mit Google",
           "Continue with Twitch": "Weiter mit Twitch",
           "or email": "oder E-Mail",
@@ -978,7 +978,7 @@
           "Your preview time is up": "Deine Vorschauzeit ist abgelaufen",
           "Sign up to keep translating.": "Registriere dich, um weiter zu übersetzen.",
           "Continue Free": "Kostenlos fortfahren",
-          "No spam. Just 6 hours of real-time translations.": "Kein Spam. Nur 6 Stunden Echtzeitübersetzungen.",
+          "Free Plan — 3 hours of real-time translations.": "Kein Spam. Nur 3 Stunden Echtzeitübersetzungen.",
           "Verification code": "Überprüfungscode",
           "Start Free Trial": "Kostenlose Testversion starten",
           "My Account": "Mein Konto",
@@ -1058,9 +1058,9 @@
           "Stream Pass ready — hours tracked when OBS is live": "Stream Pass bereit — Stunden, wenn OBS live ist",
           "Don't press until you're ready to go live. Timer won't pause.": "Drücken Sie nicht, bis Sie bereit sind zu leben. Timer wird nicht Pause machen.",
           "🚀 Start My Stream Pass": "Starten Sie meinen Stream Pass",
-          "Free trial active · 6 hours from when you generated your OBS link": "Kostenloser Test aktiv · 6 Stunden, wenn Sie Ihren OBS Link generiert haben",
-          "Your 6-hour trial is active": "Ihr 6-Stunden-Test ist aktiv",
-          "Generate your OBS link to start your 6-hour free trial": "Generieren Sie Ihren OBS Link, um Ihre 6-stündige kostenlose Testversion zu starten",
+          "Free Plan active · 3 hours from when you generated your OBS link": "Kostenloser Test aktiv · 3 Stunden, wenn Sie Ihren OBS Link generiert haben",
+          "Your Free Plan (3 hours) is active": "Ihr 3-Stunden-Test ist aktiv",
+          "Generate your OBS link to start your Free Plan (3 hours)": "Generieren Sie Ihren OBS Link, um Ihre 3-stündige kostenlose Testversion zu starten",
           "⏰ EXPIRED": "⏰ EXPIRE",
           "Your free trial has ended · upgrade to keep streaming": "Ihre kostenlose Testversion ist beendet · Upgrade zu halten Streaming",
           "Trial expired — upgrade to continue": "Trial abgelaufen — Upgrade zur Fortsetzung",
@@ -1070,7 +1070,7 @@
           "Upgrade Now →": "Jetzt aktualisieren →",
           "FREE": "KOSTENLOS",
           "Your first stream is free · sign up to get your OBS link": "Ihr erster Stream ist kostenlos · Melden Sie sich an, um Ihren OBS Link zu erhalten",
-          "Enter your email to start your free 6-hour trial": "Geben Sie Ihre E-Mail an, um Ihre kostenlose 6-Stunden-Testversion zu starten",
+          "Enter your email to start your Free Plan (3 hours)": "Geben Sie Ihre E-Mail an, um Ihre kostenlose 3-Stunden-Testversion zu starten",
           "(supported: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)": "(unterstützt: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)",
           "→ click": "→ klicken",
           "Upgrade →": "Plan upgraden →",
@@ -1118,7 +1118,7 @@
           "Online": "En ligne",
           "Live": "En direct",
           "Dismiss": "Rejet",
-          "6 hours free": "6 heures gratuites",
+          "6 hours free": "3 heures gratuites",
           "no credit card needed": "pas de carte de crédit nécessaire",
           "· no credit card needed": "· pas de carte de crédit nécessaire",
           "NO CREDIT CARD NEEDED": "Pas besoin de carte de crédit",
@@ -1211,7 +1211,7 @@
           "Regen": "Régenre",
           "Overlay Preview & Style": "Aperçu et style de recouvrement",
           "You are almost live": "Vous êtes presque en direct",
-          "Sign up to start streaming in 58 languages — free for 6 hours.": "Inscrivez-vous pour streamer en plus de 30 langues — gratuit pendant 6 heures.",
+          "Sign up to start streaming in 58 languages — free for 6 hours.": "Inscrivez-vous pour streamer en plus de 30 langues — gratuit pendant 3 heures.",
           "Continue with Google": "Continuer avec Google",
           "Continue with Twitch": "Continuer avec Twitch",
           "or email": "ou email",
@@ -1234,7 +1234,7 @@
           "Your preview time is up": "Votre temps d’aperçu est terminé",
           "Sign up to keep translating.": "Inscrivez-vous pour continuer à traduire.",
           "Continue Free": "Continuer gratuitement",
-          "No spam. Just 6 hours of real-time translations.": "Pas de spam. Juste 6 heures de traductions en temps réel.",
+          "Free Plan — 3 hours of real-time translations.": "Pas de spam. Juste 3 heures de traductions en temps réel.",
           "Verification code": "Code de vérification",
           "Start Free Trial": "Commencer l’essai gratuit",
           "My Account": "Mon compte",
@@ -1314,9 +1314,9 @@
           "Stream Pass ready — hours tracked when OBS is live": "Prêt à passer — heures suivies lorsque l'OSB est en direct",
           "Don't press until you're ready to go live. Timer won't pause.": "Ne pressez pas avant d'être prêt à vivre. Le minuteur ne s'arrêtera pas.",
           "🚀 Start My Stream Pass": "Démarrer mon passe Stream",
-          "Free trial active · 6 hours from when you generated your OBS link": "Essai gratuit actif · 6 heures à partir de quand vous avez généré votre lien OBS",
-          "Your 6-hour trial is active": "Votre essai de 6 heures est actif",
-          "Generate your OBS link to start your 6-hour free trial": "Générez votre lien OBS pour commencer votre essai gratuit de 6 heures",
+          "Free Plan active · 3 hours from when you generated your OBS link": "Essai gratuit actif · 3 heures à partir de quand vous avez généré votre lien OBS",
+          "Your Free Plan (3 hours) is active": "Votre essai de 3 heures est actif",
+          "Generate your OBS link to start your Free Plan (3 hours)": "Générez votre lien OBS pour commencer votre essai gratuit de 3 heures",
           "⏰ EXPIRED": "EXPIRE",
           "Your free trial has ended · upgrade to keep streaming": "Votre essai gratuit s'est terminé · mise à jour pour maintenir le streaming",
           "Trial expired — upgrade to continue": "Échéance du procès — mise à niveau pour continuer",
@@ -1326,7 +1326,7 @@
           "Upgrade Now →": "Mettre à jour maintenant →",
           "FREE": "GRATUIT",
           "Your first stream is free · sign up to get your OBS link": "Votre premier flux est gratuit · inscrivez-vous pour obtenir votre lien OBS",
-          "Enter your email to start your free 6-hour trial": "Entrez votre email pour commencer votre essai gratuit de 6 heures",
+          "Enter your email to start your Free Plan (3 hours)": "Entrez votre email pour commencer votre essai gratuit de 3 heures",
           "(supported: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)": "(compatible: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)",
           "→ click": "→ cliquez",
           "Upgrade →": "Mettre à niveau →",
@@ -1374,7 +1374,7 @@
           "Online": "ऑनलाइन",
           "Live": "लाइव",
           "Dismiss": "Dismis",
-          "6 hours free": "6 घंटे मुफ्त",
+          "6 hours free": "3 घंटे मुफ्त",
           "no credit card needed": "क्रेडिट कार्ड की जरूरत नहीं",
           "· no credit card needed": "· कोई क्रेडिट कार्ड की जरूरत नहीं",
           "NO CREDIT CARD NEEDED": "कोई क्रेडिट कार्ड की जरूरत नहीं",
@@ -1467,7 +1467,7 @@
           "Regen": "रीजन",
           "Overlay Preview & Style": "ओवरले पूर्वावलोकन और शैली",
           "You are almost live": "आप लगभग लाइव हैं",
-          "Sign up to start streaming in 58 languages — free for 6 hours.": "30+ भाषाओं में स्ट्रीमिंग शुरू करने के लिए साइन अप करें — 6 घंटे मुफ़्त।",
+          "Sign up to start streaming in 58 languages — free for 6 hours.": "30+ भाषाओं में स्ट्रीमिंग शुरू करने के लिए साइन अप करें — 3 घंटे मुफ़्त।",
           "Continue with Google": "Google से जारी रखें",
           "Continue with Twitch": "Twitch से जारी रखें",
           "or email": "या ईमेल",
@@ -1490,7 +1490,7 @@
           "Your preview time is up": "आपका प्रीव्यू समय खत्म हो गया",
           "Sign up to keep translating.": "अनुवाद जारी रखने के लिए साइन अप करें।",
           "Continue Free": "मुफ़्त जारी रखें",
-          "No spam. Just 6 hours of real-time translations.": "कोई स्पैम नहीं। बस 6 घंटे की रीयल-टाइम अनुवाद सेवा।",
+          "Free Plan — 3 hours of real-time translations.": "कोई स्पैम नहीं। बस 3 घंटे की रीयल-टाइम अनुवाद सेवा।",
           "Verification code": "सत्यापन कोड",
           "Start Free Trial": "निःशुल्क परीक्षण शुरू करें",
           "My Account": "मेरा खाता",
@@ -1570,9 +1570,9 @@
           "Stream Pass ready — hours tracked when OBS is live": "स्ट्रीम पास तैयार - ओबीएस लाइव होने पर घंटों का ट्रैक",
           "Don't press until you're ready to go live. Timer won't pause.": "जब तक आप जीवित रहने के लिए तैयार नहीं हैं तब तक प्रेस न करें। टाइमर मना नहीं करेगा।",
           "🚀 Start My Stream Pass": "To start My Stream Pass.",
-          "Free trial active · 6 hours from when you generated your OBS link": "जब आप अपने ओबीएस लिंक उत्पन्न करते हैं तो फ्री ट्रायल सक्रिय · 6 घंटे",
-          "Your 6-hour trial is active": "आपका 6 घंटे का परीक्षण सक्रिय है",
-          "Generate your OBS link to start your 6-hour free trial": "अपने 6 घंटे के नि: शुल्क परीक्षण शुरू करने के लिए अपने OBS लिंक उत्पन्न",
+          "Free Plan active · 3 hours from when you generated your OBS link": "जब आप अपने ओबीएस लिंक उत्पन्न करते हैं तो फ्री ट्रायल सक्रिय · 3 घंटे",
+          "Your Free Plan (3 hours) is active": "आपका 3 घंटे का परीक्षण सक्रिय है",
+          "Generate your OBS link to start your Free Plan (3 hours)": "अपने 3 घंटे के नि: शुल्क परीक्षण शुरू करने के लिए अपने OBS लिंक उत्पन्न",
           "⏰ EXPIRED": "To make amplific.",
           "Your free trial has ended · upgrade to keep streaming": "आपका मुफ्त परीक्षण समाप्त हो गया है · स्ट्रीमिंग रखने के लिए अपग्रेड",
           "Trial expired — upgrade to continue": "परीक्षण समाप्त हो गया - उन्नयन जारी रखने के लिए",
@@ -1582,7 +1582,7 @@
           "Upgrade Now →": "अपग्रेड करें",
           "FREE": "मुफ्त",
           "Your first stream is free · sign up to get your OBS link": "आपकी पहली स्ट्रीम मुफ्त है · अपने ओबीएस लिंक प्राप्त करने के लिए साइन अप करें",
-          "Enter your email to start your free 6-hour trial": "अपने निशुल्क 6 घंटे के परीक्षण शुरू करने के लिए अपना ईमेल दर्ज करें",
+          "Enter your email to start your Free Plan (3 hours)": "अपने निशुल्क 3 घंटे के परीक्षण शुरू करने के लिए अपना ईमेल दर्ज करें",
           "(supported: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)": "(समर्थित: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)",
           "→ click": "→ क्लिक करें",
           "Upgrade →": "अपग्रेड →",
@@ -1630,7 +1630,7 @@
           "Online": "온라인",
           "Live": "라이브",
           "Dismiss": "닫기",
-          "6 hours free": "6시간 무료",
+          "6 hours free": "3시간 무료",
           "no credit card needed": "신용 카드 불필요",
           "· no credit card needed": "· 필요한 신용 카드 없음",
           "NO CREDIT CARD NEEDED": "신용 카드 없음",
@@ -1723,7 +1723,7 @@
           "Regen": "재생성",
           "Overlay Preview & Style": "오버레이 미리보기 및 스타일",
           "You are almost live": "곧 라이브를 시작할 수 있어요",
-          "Sign up to start streaming in 58 languages — free for 6 hours.": "가입하면 30개 이상 언어로 방송할 수 있습니다 — 6시간 무료.",
+          "Sign up to start streaming in 58 languages — free for 6 hours.": "가입하면 30개 이상 언어로 방송할 수 있습니다 — 3시간 무료.",
           "Continue with Google": "Google로 계속",
           "Continue with Twitch": "Twitch로 계속",
           "or email": "또는 이메일",
@@ -1746,7 +1746,7 @@
           "Your preview time is up": "미리보기 시간이 끝났습니다",
           "Sign up to keep translating.": "번역을 계속하려면 가입하세요.",
           "Continue Free": "무료로 계속",
-          "No spam. Just 6 hours of real-time translations.": "스팸 없음. 실시간 번역 6시간만 제공합니다.",
+          "Free Plan — 3 hours of real-time translations.": "스팸 없음. 실시간 번역 3시간만 제공합니다.",
           "Verification code": "인증 코드",
           "Start Free Trial": "무료 체험 시작",
           "My Account": "내 계정",
@@ -1827,9 +1827,9 @@
           "Stream Pass ready — hours tracked when OBS is live": "Stream Pass 준비됨 — OBS가 라이브일 때 시간이 계산됩니다",
           "Don't press until you're ready to go live. Timer won't pause.": "라이브할 준비가 되기 전에는 누르지 마세요. 타이머는 멈추지 않습니다.",
           "🚀 Start My Stream Pass": "🚀 내 Stream Pass 시작",
-          "Free trial active · 6 hours from when you generated your OBS link": "무료 체험 활성화 · OBS 링크 생성 시점부터 6시간",
-          "Your 6-hour trial is active": "6시간 무료 체험이 활성화되었습니다",
-          "Generate your OBS link to start your 6-hour free trial": "6시간 무료 체험을 시작하려면 OBS 링크를 생성하세요",
+          "Free Plan active · 3 hours from when you generated your OBS link": "무료 체험 활성화 · OBS 링크 생성 시점부터 3시간",
+          "Your Free Plan (3 hours) is active": "3시간 무료 체험이 활성화되었습니다",
+          "Generate your OBS link to start your Free Plan (3 hours)": "3시간 무료 체험을 시작하려면 OBS 링크를 생성하세요",
           "⏰ EXPIRED": "⏰ 만료됨",
           "Your free trial has ended · upgrade to keep streaming": "무료 체험이 종료되었습니다 · 계속 방송하려면 업그레이드하세요",
           "Trial expired — upgrade to continue": "체험이 만료되었습니다 — 계속하려면 업그레이드하세요",
@@ -1839,7 +1839,7 @@
           "Upgrade Now →": "지금 업그레이드 →",
           "FREE": "무료",
           "Your first stream is free · sign up to get your OBS link": "첫 방송은 무료입니다 · OBS 링크를 받으려면 가입하세요",
-          "Enter your email to start your free 6-hour trial": "무료 6시간 체험을 시작하려면 이메일을 입력하세요",
+          "Enter your email to start your Free Plan (3 hours)": "무료 3시간 체험을 시작하려면 이메일을 입력하세요",
           "→ click": "→ 클릭",
           "Upgrade →": "업그레이드 →",
           "⏱ Your 6 free hours are tracked when OBS is live": "⏱ 무료 6시간은 OBS가 라이브일 때 계산됩니다",
@@ -1958,7 +1958,7 @@
           "Online": "Online",
           "Live": "Ao vivo",
           "Dismiss": "Demitir",
-          "6 hours free": "6 horas livre",
+          "6 hours free": "3 horas livre",
           "no credit card needed": "sem necessidade de cartão de crédito",
           "· no credit card needed": "· nenhum cartão de crédito necessário",
           "NO CREDIT CARD NEEDED": "NENHUM CARTÃO DE CRÉDITO NECESSÁRIO",
@@ -2051,7 +2051,7 @@
           "Regen": "Regen",
           "Overlay Preview & Style": "Sobrepor & Estilo de Visualização",
           "You are almost live": "Você está quase ao vivo",
-          "Sign up to start streaming in 58 languages — free for 6 hours.": "Crie uma conta para começar a transmitir em mais de 30 idiomas — grátis por 6 horas.",
+          "Sign up to start streaming in 58 languages — free for 6 hours.": "Crie uma conta para começar a transmitir em mais de 30 idiomas — grátis por 3 horas.",
           "Continue with Google": "Continuar com Google",
           "Continue with Twitch": "Continuar com Twitch",
           "or email": "ou email",
@@ -2074,7 +2074,7 @@
           "Your preview time is up": "Seu tempo de prévia acabou",
           "Sign up to keep translating.": "Crie uma conta para continuar traduzindo.",
           "Continue Free": "Continuar grátis",
-          "No spam. Just 6 hours of real-time translations.": "Sem spam. Apenas 6 horas de traduções em tempo real.",
+          "Free Plan — 3 hours of real-time translations.": "Sem spam. Apenas 3 horas de traduções em tempo real.",
           "Verification code": "Código de verificação",
           "Start Free Trial": "Iniciar teste grátis",
           "My Account": "Minha conta",
@@ -2154,9 +2154,9 @@
           "Stream Pass ready — hours tracked when OBS is live": "Passagem de fluxo pronta — horas de seguimento quando o OBS estiver vivo",
           "Don't press until you're ready to go live. Timer won't pause.": "Não pressiones até estares pronto para entrar ao vivo. O temporizador não pára.",
           "🚀 Start My Stream Pass": "Iniciar meu passe de fluxo",
-          "Free trial active · 6 hours from when you generated your OBS link": "Teste gratuito ativo · 6 horas a partir de quando você gerou seu link OBS",
-          "Your 6-hour trial is active": "Seu teste de 6 horas está ativo",
-          "Generate your OBS link to start your 6-hour free trial": "Gere seu link OBS para iniciar sua avaliação gratuita de 6 horas",
+          "Free Plan active · 3 hours from when you generated your OBS link": "Teste gratuito ativo · 3 horas a partir de quando você gerou seu link OBS",
+          "Your Free Plan (3 hours) is active": "Seu teste de 3 horas está ativo",
+          "Generate your OBS link to start your Free Plan (3 hours)": "Gere seu link OBS para iniciar sua avaliação gratuita de 3 horas",
           "⏰ EXPIRED": "□ EXPIRAÇÃO",
           "Your free trial has ended · upgrade to keep streaming": "Sua avaliação gratuita terminou · atualização para manter o streaming",
           "Trial expired — upgrade to continue": "O teste expirou — atualização para continuar",
@@ -2166,7 +2166,7 @@
           "Upgrade Now →": "Atualizar agora →",
           "FREE": "LIVRE",
           "Your first stream is free · sign up to get your OBS link": "Seu primeiro fluxo é livre · inscreva-se para obter seu link OBS",
-          "Enter your email to start your free 6-hour trial": "Digite seu e-mail para iniciar sua avaliação gratuita de 6 horas",
+          "Enter your email to start your Free Plan (3 hours)": "Digite seu e-mail para iniciar sua avaliação gratuita de 3 horas",
           "(supported: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)": "(compatível: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)",
           "→ click": "→ clique",
           "Upgrade →": "Fazer upgrade →",
@@ -2214,7 +2214,7 @@
           "Online": "Онлайн",
           "Live": "В эфире",
           "Dismiss": "Увольнение",
-          "6 hours free": "6 часов бесплатно",
+          "6 hours free": "3 часов бесплатно",
           "no credit card needed": "Кредитная карта не нужна",
           "· no credit card needed": "Кредитная карта не нужна",
           "NO CREDIT CARD NEEDED": "Кредитная карта не нужна",
@@ -2307,7 +2307,7 @@
           "Regen": "Реген",
           "Overlay Preview & Style": "Overlay Preview и стиль",
           "You are almost live": "Вы почти в эфире",
-          "Sign up to start streaming in 58 languages — free for 6 hours.": "Зарегистрируйтесь, чтобы начать стримить на 30+ языках — 6 часов бесплатно.",
+          "Sign up to start streaming in 58 languages — free for 6 hours.": "Зарегистрируйтесь, чтобы начать стримить на 30+ языках — 3 часов бесплатно.",
           "Continue with Google": "Продолжить с Google",
           "Continue with Twitch": "Продолжить с Twitch",
           "or email": "или email",
@@ -2330,7 +2330,7 @@
           "Your preview time is up": "Время предпросмотра закончилось",
           "Sign up to keep translating.": "Зарегистрируйтесь, чтобы продолжить перевод.",
           "Continue Free": "Продолжить бесплатно",
-          "No spam. Just 6 hours of real-time translations.": "Без спама. Просто 6 часов переводов в реальном времени.",
+          "Free Plan — 3 hours of real-time translations.": "Без спама. Просто 3 часов переводов в реальном времени.",
           "Verification code": "Контрольный код",
           "Start Free Trial": "Начать бесплатный пробный период",
           "My Account": "Мой аккаунт",
@@ -2410,9 +2410,9 @@
           "Stream Pass ready — hours tracked when OBS is live": "Stream Pass готов — часы отслеживаются, когда OBS жив",
           "Don't press until you're ready to go live. Timer won't pause.": "Не нажимайте, пока не будете готовы к жизни. Таймер не остановится.",
           "🚀 Start My Stream Pass": "Скачать My Stream Pass",
-          "Free trial active · 6 hours from when you generated your OBS link": "Бесплатная пробная активация · 6 часов с момента создания ссылки OBS",
-          "Your 6-hour trial is active": "Ваш 6-часовой тест активен",
-          "Generate your OBS link to start your 6-hour free trial": "Создайте ссылку OBS, чтобы начать 6-часовую бесплатную пробную версию",
+          "Free Plan active · 3 hours from when you generated your OBS link": "Бесплатная пробная активация · 3 часов с момента создания ссылки OBS",
+          "Your Free Plan (3 hours) is active": "Ваш 3-часовой тест активен",
+          "Generate your OBS link to start your Free Plan (3 hours)": "Создайте ссылку OBS, чтобы начать 3-часовую бесплатную пробную версию",
           "⏰ EXPIRED": "ИСПОЛНИТЕЛЬ",
           "Your free trial has ended · upgrade to keep streaming": "Ваша бесплатная пробная версия закончилась · обновление для продолжения потоковой передачи",
           "Trial expired — upgrade to continue": "Испытание истекло — обновление продолжается",
@@ -2422,7 +2422,7 @@
           "Upgrade Now →": "Обновление сейчас",
           "FREE": "бесплатно",
           "Your first stream is free · sign up to get your OBS link": "Ваш первый поток бесплатный · зарегистрируйтесь, чтобы получить ссылку OBS",
-          "Enter your email to start your free 6-hour trial": "Введите свою электронную почту, чтобы начать бесплатную 6-часовую пробную версию",
+          "Enter your email to start your Free Plan (3 hours)": "Введите свою электронную почту, чтобы начать бесплатную 3-часовую пробную версию",
           "(supported: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)": "(поддерживается: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)",
           "→ click": "→ нажмите",
           "Upgrade →": "Улучшить план →",
@@ -2470,7 +2470,7 @@
           "Online": "在线",
           "Live": "直播",
           "Dismiss": "开除",
-          "6 hours free": "6小时免费",
+          "6 hours free": "3小时免费",
           "no credit card needed": "无需信用卡",
           "· no credit card needed": "不需要信用卡",
           "NO CREDIT CARD NEEDED": "不需要信用标准",
@@ -2563,7 +2563,7 @@
           "Regen": "瑞根,你好吗?",
           "Overlay Preview & Style": "重叠预览样式( S)",
           "You are almost live": "你快可以开播了",
-          "Sign up to start streaming in 58 languages — free for 6 hours.": "注册即可开始用 30 多种语言直播 — 免费 6 小时。",
+          "Sign up to start streaming in 58 languages — free for 6 hours.": "注册即可开始用 30 多种语言直播 — 免费 3 小时。",
           "Continue with Google": "继续使用 Google",
           "Continue with Twitch": "继续使用 Twitch",
           "or email": "或邮箱",
@@ -2586,7 +2586,7 @@
           "Your preview time is up": "预览时间已用完",
           "Sign up to keep translating.": "注册即可继续翻译。",
           "Continue Free": "继续免费使用",
-          "No spam. Just 6 hours of real-time translations.": "无垃圾邮件。只有 6 小时实时翻译。",
+          "Free Plan — 3 hours of real-time translations.": "无垃圾邮件。只有 3 小时实时翻译。",
           "Verification code": "核查代码",
           "Start Free Trial": "开始免费试用",
           "My Account": "我的账户",
@@ -2666,9 +2666,9 @@
           "Stream Pass ready — hours tracked when OBS is live": "电流通道准备就绪——OBS直播时跟踪小时数",
           "Don't press until you're ready to go live. Timer won't pause.": "不要按 直到你准备好去现场。 计时器不会暂停。",
           "🚀 Start My Stream Pass": "启动我的流传",
-          "Free trial active · 6 hours from when you generated your OBS link": "自由审判活动 ^ 从您创建 OBS 链接时起6小时",
-          "Your 6-hour trial is active": "你6小时的审判正在进行中",
-          "Generate your OBS link to start your 6-hour free trial": "创建您的 OBS 链接开始您6小时的免费审判",
+          "Free Plan active · 3 hours from when you generated your OBS link": "自由审判活动 ^ 从您创建 OBS 链接时起3小时",
+          "Your Free Plan (3 hours) is active": "你3小时的审判正在进行中",
+          "Generate your OBS link to start your Free Plan (3 hours)": "创建您的 OBS 链接开始您3小时的免费审判",
           "⏰ EXPIRED": "希望",
           "Your free trial has ended · upgrade to keep streaming": "你的自由审判已经结束了...",
           "Trial expired — upgrade to continue": "审判期满——继续升级",
@@ -2678,7 +2678,7 @@
           "Upgrade Now →": "现在升级 ~",
           "FREE": "自由主义",
           "Your first stream is free · sign up to get your OBS link": "您的第一个流是免费的 ^ 注册以获取您的 OBS 链接",
-          "Enter your email to start your free 6-hour trial": "输入您的电子邮件开始免费的6小时审判",
+          "Enter your email to start your Free Plan (3 hours)": "输入您的电子邮件开始免费的3小时审判",
           "(supported: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)": "(支持: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)",
           "→ click": "→",
           "Upgrade →": "升级 →",
@@ -2726,7 +2726,7 @@
           "Online": "Online",
           "Live": "In diretta",
           "Dismiss": "Oggetto",
-          "6 hours free": "6 ore gratis",
+          "6 hours free": "3 ore gratis",
           "no credit card needed": "nessuna carta di credito necessaria",
           "· no credit card needed": "· nessuna carta di credito necessaria",
           "NO CREDIT CARD NEEDED": "Non c'è bisogno di CREDIT CARD",
@@ -2819,7 +2819,7 @@
           "Regen": "Regen",
           "Overlay Preview & Style": "Anteprima sovrapposizione e stile",
           "You are almost live": "Sei quasi in diretta",
-          "Sign up to start streaming in 58 languages — free for 6 hours.": "Registrati per iniziare a trasmettere in oltre 30 lingue — gratis per 6 ore.",
+          "Sign up to start streaming in 58 languages — free for 6 hours.": "Registrati per iniziare a trasmettere in oltre 30 lingue — gratis per 3 ore.",
           "Continue with Google": "Continua con Google",
           "Continue with Twitch": "Continua con Twitch",
           "or email": "o email",
@@ -2842,7 +2842,7 @@
           "Your preview time is up": "Il tempo di anteprima è finito",
           "Sign up to keep translating.": "Registrati per continuare a tradurre.",
           "Continue Free": "Continua gratis",
-          "No spam. Just 6 hours of real-time translations.": "Niente spam. Solo 6 ore di traduzioni in tempo reale.",
+          "Free Plan — 3 hours of real-time translations.": "Niente spam. Solo 3 ore di traduzioni in tempo reale.",
           "Verification code": "Codice di verifica",
           "Start Free Trial": "Inizia prova gratuita",
           "My Account": "Il mio account",
@@ -2922,9 +2922,9 @@
           "Stream Pass ready — hours tracked when OBS is live": "Stream Pass pronto — ore tracciate quando OBS è in diretta",
           "Don't press until you're ready to go live. Timer won't pause.": "Non premere finché non sei pronto a vivere. Timer non si fermerà.",
           "🚀 Start My Stream Pass": "🚀 Avviare il mio passaggio di flusso",
-          "Free trial active · 6 hours from when you generated your OBS link": "Prova gratuita attiva · 6 ore da quando hai generato il tuo link OBS",
-          "Your 6-hour trial is active": "Il tuo processo di 6 ore è attivo",
-          "Generate your OBS link to start your 6-hour free trial": "Genera il tuo link OBS per iniziare la tua prova gratuita di 6 ore",
+          "Free Plan active · 3 hours from when you generated your OBS link": "Prova gratuita attiva · 3 ore da quando hai generato il tuo link OBS",
+          "Your Free Plan (3 hours) is active": "Il tuo processo di 3 ore è attivo",
+          "Generate your OBS link to start your Free Plan (3 hours)": "Genera il tuo link OBS per iniziare la tua prova gratuita di 3 ore",
           "⏰ EXPIRED": "⏰ ESPIRED",
           "Your free trial has ended · upgrade to keep streaming": "La tua prova gratuita è finita · aggiornamento per mantenere lo streaming",
           "Trial expired — upgrade to continue": "Prova scaduta — aggiornamento per continuare",
@@ -2934,7 +2934,7 @@
           "Upgrade Now →": "Aggiorna ora →",
           "FREE": "GRATIS",
           "Your first stream is free · sign up to get your OBS link": "Il tuo primo flusso è gratuito · Iscriviti per ottenere il tuo link OBS",
-          "Enter your email to start your free 6-hour trial": "Inserisci la tua email per iniziare la prova gratuita di 6 ore",
+          "Enter your email to start your Free Plan (3 hours)": "Inserisci la tua email per iniziare la prova gratuita di 3 ore",
           "(supported: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)": "(supportato: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)",
           "→ click": "→ clicca",
           "Upgrade →": "Upgrade →",
@@ -2982,7 +2982,7 @@
           "Online": "Online",
           "Live": "Live",
           "Dismiss": "Ingetrokken",
-          "6 hours free": "6 uur gratis",
+          "6 hours free": "3 uur gratis",
           "no credit card needed": "geen creditcard nodig",
           "· no credit card needed": "· geen creditcard nodig",
           "NO CREDIT CARD NEEDED": "Geen kredietkaart nodig",
@@ -3075,7 +3075,7 @@
           "Regen": "Regen",
           "Overlay Preview & Style": "Overlay voorbeeld & stijl",
           "You are almost live": "Je bent bijna live",
-          "Sign up to start streaming in 58 languages — free for 6 hours.": "Meld je aan om te streamen in 30+ talen — 6 uur gratis.",
+          "Sign up to start streaming in 58 languages — free for 6 hours.": "Meld je aan om te streamen in 30+ talen — 3 uur gratis.",
           "Continue with Google": "Doorgaan met Google",
           "Continue with Twitch": "Doorgaan met Twitch",
           "or email": "of email",
@@ -3098,7 +3098,7 @@
           "Your preview time is up": "Je previewtijd is op",
           "Sign up to keep translating.": "Meld je aan om te blijven vertalen.",
           "Continue Free": "Gratis doorgaan",
-          "No spam. Just 6 hours of real-time translations.": "Geen spam. Alleen 6 uur realtime vertalingen.",
+          "Free Plan — 3 hours of real-time translations.": "Geen spam. Alleen 3 uur realtime vertalingen.",
           "Verification code": "Verificatiecode",
           "Start Free Trial": "Gratis proefperiode starten",
           "My Account": "Mijn account",
@@ -3178,9 +3178,9 @@
           "Stream Pass ready — hours tracked when OBS is live": "Stream Pass is klaar, uren getraceerd als OBS live is",
           "Don't press until you're ready to go live. Timer won't pause.": "Druk niet totdat je klaar bent om live te gaan. Timer pauzeert niet.",
           "🚀 Start My Stream Pass": "Mijn Stream Pass starten",
-          "Free trial active · 6 hours from when you generated your OBS link": "Gratis proefversie actief · 6 uur vanaf wanneer u uw OBS-link gegenereerd",
-          "Your 6-hour trial is active": "Uw 6 uur proefperiode is actief",
-          "Generate your OBS link to start your 6-hour free trial": "Genereer uw OBS-link om uw gratis proefperiode van 6 uur te starten",
+          "Free Plan active · 3 hours from when you generated your OBS link": "Gratis proefversie actief · 3 uur vanaf wanneer u uw OBS-link gegenereerd",
+          "Your Free Plan (3 hours) is active": "Uw 3 uur proefperiode is actief",
+          "Generate your OBS link to start your Free Plan (3 hours)": "Genereer uw OBS-link om uw gratis proefperiode van 3 uur te starten",
           "⏰ EXPIRED": "VERKLAART",
           "Your free trial has ended · upgrade to keep streaming": "Uw gratis proefversie is afgelopen · upgrade om te blijven streamen",
           "Trial expired — upgrade to continue": "Proef verlopen upgrade om door te gaan",
@@ -3190,7 +3190,7 @@
           "Upgrade Now →": "Nu upgraden →",
           "FREE": "VRIJ",
           "Your first stream is free · sign up to get your OBS link": "Je eerste stream is gratis · meld je aan om je OBS link te krijgen",
-          "Enter your email to start your free 6-hour trial": "Voer uw e-mail in om uw gratis proefperiode van 6 uur te starten",
+          "Enter your email to start your Free Plan (3 hours)": "Voer uw e-mail in om uw gratis proefperiode van 3 uur te starten",
           "(supported: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)": "(ondersteund: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)",
           "→ click": "→ klik",
           "Upgrade →": "Upgraden →",
@@ -3238,7 +3238,7 @@
           "Online": "Çevrim içi",
           "Live": "Canlı",
           "Dismiss": "Başarısızlık",
-          "6 hours free": "6 saat ücretsiz",
+          "6 hours free": "3 saat ücretsiz",
           "no credit card needed": "Hiçbir kredi kartı gerekli değildi",
           "· no credit card needed": "· Hiçbir kredi kartı gerekli",
           "NO CREDIT CARD NEEDED": "NO CREDIT CARD NEEDEDED",
@@ -3331,7 +3331,7 @@
           "Regen": "Regen",
           "Overlay Preview & Style": "Overlay Preview & Style",
           "You are almost live": "Neredeyse canlı yayındasın",
-          "Sign up to start streaming in 58 languages — free for 6 hours.": "30+ dilde yayın yapmaya başlamak için kaydol — 6 saat ücretsiz.",
+          "Sign up to start streaming in 58 languages — free for 6 hours.": "30+ dilde yayın yapmaya başlamak için kaydol — 3 saat ücretsiz.",
           "Continue with Google": "Google ile devam et",
           "Continue with Twitch": "Twitch ile devam et",
           "or email": "veya e-posta",
@@ -3354,7 +3354,7 @@
           "Your preview time is up": "Önizleme süren doldu",
           "Sign up to keep translating.": "Çeviriye devam etmek için kaydol.",
           "Continue Free": "Ücretsiz devam et",
-          "No spam. Just 6 hours of real-time translations.": "Spam yok. Sadece 6 saat gerçek zamanlı çeviri.",
+          "Free Plan — 3 hours of real-time translations.": "Spam yok. Sadece 3 saat gerçek zamanlı çeviri.",
           "Verification code": "Doğrulama kodu",
           "Start Free Trial": "Ücretsiz denemeyi başlat",
           "My Account": "Hesabım",
@@ -3434,9 +3434,9 @@
           "Stream Pass ready — hours tracked when OBS is live": "Stream Pass hazır - OBS'nin yaşadığı saatler takip edildi",
           "Don't press until you're ready to go live. Timer won't pause.": "Yaşamaya hazır olana kadar basın. Timer durmayacak.",
           "🚀 Start My Stream Pass": "Start My Stream Pass",
-          "Free trial active · 6 hours from when you generated your OBS link": "Ücretsiz deneme aktif · OBS bağlantınızı oluştururken 6 saat",
-          "Your 6-hour trial is active": "6 saatlik denemeniz aktiftir",
-          "Generate your OBS link to start your 6-hour free trial": "OBS bağlantınızı 6 saatlik ücretsiz deneme başlatmak için",
+          "Free Plan active · 3 hours from when you generated your OBS link": "Ücretsiz deneme aktif · OBS bağlantınızı oluştururken 3 saat",
+          "Your Free Plan (3 hours) is active": "3 saatlik denemeniz aktiftir",
+          "Generate your OBS link to start your Free Plan (3 hours)": "OBS bağlantınızı 3 saatlik ücretsiz deneme başlatmak için",
           "⏰ EXPIRED": "RED EXPIRED",
           "Your free trial has ended · upgrade to keep streaming": "Ücretsiz denemeniz sona erdi · akış tutmak için yükseltme",
           "Trial expired — upgrade to continue": "Deneme süresi doldu - devam etmek için yükseltme",
@@ -3446,7 +3446,7 @@
           "Upgrade Now →": "Şimdi →",
           "FREE": "ÜCRETSİZ ÜCRETSİZ",
           "Your first stream is free · sign up to get your OBS link": "İlk akışınız ücretsizdir · OBS bağlantınızı almak için kaydolun",
-          "Enter your email to start your free 6-hour trial": "Ücretsiz 6 saatlik deneme başlatmak için e-postanızı girin",
+          "Enter your email to start your Free Plan (3 hours)": "Ücretsiz 3 saatlik deneme başlatmak için e-postanızı girin",
           "(supported: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)": "(desteklenen: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)",
           "→ click": "→ tıklayın",
           "Upgrade →": "Yükselt →",
@@ -3494,7 +3494,7 @@
           "Online": "Online",
           "Live": "Na żywo",
           "Dismiss": "Rozejść się",
-          "6 hours free": "6 godzin wolnego",
+          "6 hours free": "3 godzin wolnego",
           "no credit card needed": "nie jest potrzebna karta kredytowa",
           "· no credit card needed": "· nie jest potrzebna karta kredytowa",
           "NO CREDIT CARD NEEDED": "BRAK KARTY KREDYTOWEJ",
@@ -3587,7 +3587,7 @@
           "Regen": "Regen",
           "Overlay Preview & Style": "Nakładanie podglądu & stylu",
           "You are almost live": "Już prawie jesteś na żywo",
-          "Sign up to start streaming in 58 languages — free for 6 hours.": "Zarejestruj się, aby streamować w 30+ językach — 6 godzin za darmo.",
+          "Sign up to start streaming in 58 languages — free for 6 hours.": "Zarejestruj się, aby streamować w 30+ językach — 3 godzin za darmo.",
           "Continue with Google": "Kontynuuj z Google",
           "Continue with Twitch": "Kontynuuj z Twitch",
           "or email": "lub email",
@@ -3610,7 +3610,7 @@
           "Your preview time is up": "Czas podglądu dobiegł końca",
           "Sign up to keep translating.": "Zarejestruj się, aby dalej tłumaczyć.",
           "Continue Free": "Kontynuuj za darmo",
-          "No spam. Just 6 hours of real-time translations.": "Bez spamu. Tylko 6 godzin tłumaczeń w czasie rzeczywistym.",
+          "Free Plan — 3 hours of real-time translations.": "Bez spamu. Tylko 3 godzin tłumaczeń w czasie rzeczywistym.",
           "Verification code": "Kod weryfikacji",
           "Start Free Trial": "Rozpocznij darmowy okres próbny",
           "My Account": "Moje konto",
@@ -3690,9 +3690,9 @@
           "Stream Pass ready — hours tracked when OBS is live": "Stream Pass gotowy - godziny śledzone, gdy OBS jest żywy",
           "Don't press until you're ready to go live. Timer won't pause.": "Nie naciskaj, dopóki nie będziesz gotowy na żywo. Timer się nie zatrzyma.",
           "🚀 Start My Stream Pass": "Rozpocznij moją przepustkę strumieniową",
-          "Free trial active · 6 hours from when you generated your OBS link": "Bezpłatne próby aktywne · 6 godzin od momentu wygenerowania łącza OBS",
-          "Your 6-hour trial is active": "Twój 6-godzinny proces jest aktywny.",
-          "Generate your OBS link to start your 6-hour free trial": "Generuj swój link OBS, aby rozpocząć 6- godzinny wolny proces",
+          "Free Plan active · 3 hours from when you generated your OBS link": "Bezpłatne próby aktywne · 3 godzin od momentu wygenerowania łącza OBS",
+          "Your Free Plan (3 hours) is active": "Twój 3-godzinny proces jest aktywny.",
+          "Generate your OBS link to start your Free Plan (3 hours)": "Generuj swój link OBS, aby rozpocząć 3- godzinny wolny proces",
           "⏰ EXPIRED": "ZAINTERESOWANE",
           "Your free trial has ended · upgrade to keep streaming": "Twój wolny proces zakończył · upgrade, aby utrzymać streaming",
           "Trial expired — upgrade to continue": "Proces wygasł - uaktualnienie, aby kontynuować",
@@ -3702,7 +3702,7 @@
           "Upgrade Now →": "Aktualizacja teraz →",
           "FREE": "DARMOWY",
           "Your first stream is free · sign up to get your OBS link": "Twój pierwszy strumień jest wolny · zaloguj się, aby uzyskać łącze OBS",
-          "Enter your email to start your free 6-hour trial": "Wpisz swój e-mail, aby rozpocząć darmową próbę 6- godzinną",
+          "Enter your email to start your Free Plan (3 hours)": "Wpisz swój e-mail, aby rozpocząć darmową próbę 3- godzinną",
           "(supported: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)": "(obsługiwane: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)",
           "→ click": "→ kliknij",
           "Upgrade →": "Ulepsz →",
@@ -3750,7 +3750,7 @@
           "Online": "Trực tuyến",
           "Live": "Đang live",
           "Dismiss": "Giải tán!",
-          "6 hours free": "6 tiếng miễn phí",
+          "6 hours free": "3 tiếng miễn phí",
           "no credit card needed": "không cần thẻ tín dụng",
           "· no credit card needed": "* Không cần thẻ tín dụng",
           "NO CREDIT CARD NEEDED": "Không có gì cần thiết",
@@ -3843,7 +3843,7 @@
           "Regen": "Bản sao",
           "Overlay Preview & Style": "Từ bỏ & Kiểu xem thử",
           "You are almost live": "Bạn sắp live rồi",
-          "Sign up to start streaming in 58 languages — free for 6 hours.": "Đăng ký để bắt đầu phát trực tiếp bằng hơn 30 ngôn ngữ — miễn phí 6 giờ.",
+          "Sign up to start streaming in 58 languages — free for 6 hours.": "Đăng ký để bắt đầu phát trực tiếp bằng hơn 30 ngôn ngữ — miễn phí 3 giờ.",
           "Continue with Google": "Tiếp tục với Google",
           "Continue with Twitch": "Tiếp tục với Twitch",
           "or email": "hoặc email",
@@ -3866,7 +3866,7 @@
           "Your preview time is up": "Hết thời gian xem trước",
           "Sign up to keep translating.": "Đăng ký để tiếp tục dịch.",
           "Continue Free": "Tiếp tục miễn phí",
-          "No spam. Just 6 hours of real-time translations.": "Không spam. Chỉ 6 giờ dịch thời gian thực.",
+          "Free Plan — 3 hours of real-time translations.": "Không spam. Chỉ 3 giờ dịch thời gian thực.",
           "Verification code": "Mã xác định",
           "Start Free Trial": "Bắt đầu dùng thử miễn phí",
           "My Account": "Tài khoản của tôi",
@@ -3946,9 +3946,9 @@
           "Stream Pass ready — hours tracked when OBS is live": "Dòng chảy sẵn sàng — theo dõi giờ khi còn sống",
           "Don't press until you're ready to go live. Timer won't pause.": "Đừng bấm báo cho đến khi sẵn sàng lên sóng. Đồng hồ không dừng đâu.",
           "🚀 Start My Stream Pass": "Bắt đầu luồng của tôi",
-          "Free trial active · 6 hours from when you generated your OBS link": "Bản dùng thử miễn phí đang hoạt động · 6 giờ từ khi bạn tạo liên kết OBS",
-          "Your 6-hour trial is active": "Phiên tòa 6 tiếng đã bắt đầu.",
-          "Generate your OBS link to start your 6-hour free trial": "Tạo ra liên kết OBS để bắt đầu thử nghiệm miễn phí 6 giờ",
+          "Free Plan active · 3 hours from when you generated your OBS link": "Bản dùng thử miễn phí đang hoạt động · 3 giờ từ khi bạn tạo liên kết OBS",
+          "Your Free Plan (3 hours) is active": "Phiên tòa 3 tiếng đã bắt đầu.",
+          "Generate your OBS link to start your Free Plan (3 hours)": "Tạo ra liên kết OBS để bắt đầu thử nghiệm miễn phí 3 giờ",
           "⏰ EXPIRED": "(TIẾNG CÒI)",
           "Your free trial has ended · upgrade to keep streaming": "Thử nghiệm miễn phí của bạn đã kết thúc . nâng cấp để tiếp tục truyền",
           "Trial expired — upgrade to continue": "Comment",
@@ -3958,7 +3958,7 @@
           "Upgrade Now →": "Nâng cấp bây giờ",
           "FREE": "Tự do",
           "Your first stream is free · sign up to get your OBS link": "Dòng nước đầu tiên của bạn là tự do . đăng ký để có được liên kết OBS của bạn",
-          "Enter your email to start your free 6-hour trial": "Hãy nhập email của bạn để bắt đầu thử nghiệm 6 giờ rảnh",
+          "Enter your email to start your Free Plan (3 hours)": "Hãy nhập email của bạn để bắt đầu thử nghiệm 3 giờ rảnh",
           "(supported: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)": "(hỗ trợ: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)",
           "→ click": "→ nhấp",
           "Upgrade →": "Nâng cấp →",
@@ -4006,7 +4006,7 @@
           "Online": "Online",
           "Live": "Live",
           "Dismiss": "Bubarkan",
-          "6 hours free": "6 jam kosong",
+          "6 hours free": "3 jam kosong",
           "no credit card needed": "tidak ada kartu kredit dibutuhkan",
           "· no credit card needed": "tak ada kartu kredit yang dibutuhkan",
           "NO CREDIT CARD NEEDED": "NO CREDIT CARD NEEDED",
@@ -4099,7 +4099,7 @@
           "Regen": "Regen",
           "Overlay Preview & Style": "Pratilik Berlebihan & Gaya",
           "You are almost live": "Anda hampir live",
-          "Sign up to start streaming in 58 languages — free for 6 hours.": "Daftar untuk mulai streaming dalam 30+ bahasa — gratis selama 6 jam.",
+          "Sign up to start streaming in 58 languages — free for 6 hours.": "Daftar untuk mulai streaming dalam 30+ bahasa — gratis selama 3 jam.",
           "Continue with Google": "Lanjutkan dengan Google",
           "Continue with Twitch": "Lanjutkan dengan Twitch",
           "or email": "atau email",
@@ -4122,7 +4122,7 @@
           "Your preview time is up": "Waktu pratinjau Anda habis",
           "Sign up to keep translating.": "Daftar untuk terus menerjemahkan.",
           "Continue Free": "Lanjut gratis",
-          "No spam. Just 6 hours of real-time translations.": "Tanpa spam. Hanya 6 jam terjemahan real-time.",
+          "Free Plan — 3 hours of real-time translations.": "Tanpa spam. Hanya 3 jam terjemahan real-time.",
           "Verification code": "Kode verifikasi",
           "Start Free Trial": "Mulai uji coba gratis",
           "My Account": "Akun saya",
@@ -4202,9 +4202,9 @@
           "Stream Pass ready — hours tracked when OBS is live": "Stream Pass siap - jam dilacak ketika OBS hidup",
           "Don't press until you're ready to go live. Timer won't pause.": "Jangan tekan sampai kau siap untuk siaran langsung. Waktu tidak akan berhenti.",
           "🚀 Start My Stream Pass": "♪ Start My Stream Pass ♪",
-          "Free trial active · 6 hours from when you generated your OBS link": "Percobaan bebas aktif 6 jam dari ketika Anda menghasilkan link OBS Anda",
-          "Your 6-hour trial is active": "Sidang 6 jam Anda aktif",
-          "Generate your OBS link to start your 6-hour free trial": "Hasilkan link OBS anda untuk memulai percobaan bebas 6 jam anda",
+          "Free Plan active · 3 hours from when you generated your OBS link": "Percobaan bebas aktif 3 jam dari ketika Anda menghasilkan link OBS Anda",
+          "Your Free Plan (3 hours) is active": "Sidang 3 jam Anda aktif",
+          "Generate your OBS link to start your Free Plan (3 hours)": "Hasilkan link OBS anda untuk memulai percobaan bebas 3 jam anda",
           "⏰ EXPIRED": "DIKELUARKAN",
           "Your free trial has ended · upgrade to keep streaming": "Uji coba bebasmu telah berakhir untuk menjaga streaming",
           "Trial expired — upgrade to continue": "Trial expired - upgrade untuk melanjutkan",
@@ -4214,7 +4214,7 @@
           "Upgrade Now →": "Tingkatkan Sekarang",
           "FREE": "FREE",
           "Your first stream is free · sign up to get your OBS link": "Arus pertama Anda bebas",
-          "Enter your email to start your free 6-hour trial": "Masukkan email Anda untuk memulai percobaan bebas 6 jam",
+          "Enter your email to start your Free Plan (3 hours)": "Masukkan email Anda untuk memulai percobaan bebas 3 jam",
           "(supported: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)": "(didukung: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)",
           "→ click": "→ klik",
           "Upgrade →": "Upgrade →",
@@ -4262,7 +4262,7 @@
           "Online": "Онлайн",
           "Live": "У прямому ефірі",
           "Dismiss": "Відмова",
-          "6 hours free": "6 годин безкоштовно",
+          "6 hours free": "3 годин безкоштовно",
           "no credit card needed": "не потрібна кредитна картка",
           "· no credit card needed": "· не потрібна кредитна картка",
           "NO CREDIT CARD NEEDED": "НЕ КРЕДИТНА КАРТА",
@@ -4355,7 +4355,7 @@
           "Regen": "Регент",
           "Overlay Preview & Style": "Рецензування та стиль",
           "You are almost live": "Ви майже в ефірі",
-          "Sign up to start streaming in 58 languages — free for 6 hours.": "Зареєструйтеся, щоб стрімити 30+ мовами — 6 годин безкоштовно.",
+          "Sign up to start streaming in 58 languages — free for 6 hours.": "Зареєструйтеся, щоб стрімити 30+ мовами — 3 годин безкоштовно.",
           "Continue with Google": "Продовжити з Google",
           "Continue with Twitch": "Продовжити з Twitch",
           "or email": "або email",
@@ -4378,7 +4378,7 @@
           "Your preview time is up": "Час попереднього перегляду закінчився",
           "Sign up to keep translating.": "Зареєструйтеся, щоб продовжити переклад.",
           "Continue Free": "Продовжити безкоштовно",
-          "No spam. Just 6 hours of real-time translations.": "Без спаму. Лише 6 годин перекладу в реальному часі.",
+          "Free Plan — 3 hours of real-time translations.": "Без спаму. Лише 3 годин перекладу в реальному часі.",
           "Verification code": "Код підтвердження",
           "Start Free Trial": "Почати безкоштовний пробний період",
           "My Account": "Мій обліковий запис",
@@ -4458,9 +4458,9 @@
           "Stream Pass ready — hours tracked when OBS is live": "Потоковий прохід готовий — година, що відстежуються, коли OBS живе",
           "Don't press until you're ready to go live. Timer won't pause.": "Не натискайте, поки ви не будете жити. Час не буде пауза.",
           "🚀 Start My Stream Pass": "🚀 Запустити мій Stream Pass",
-          "Free trial active · 6 hours from when you generated your OBS link": "Безкоштовна пробна активна · 6 годин після створення посилання на OBS",
-          "Your 6-hour trial is active": "6-годинна пробна робота",
-          "Generate your OBS link to start your 6-hour free trial": "Отримайте безкоштовну пробну версію OBS для запуску безкоштовного тестування на 6 годин",
+          "Free Plan active · 3 hours from when you generated your OBS link": "Безкоштовна пробна активна · 3 годин після створення посилання на OBS",
+          "Your Free Plan (3 hours) is active": "3-годинна пробна робота",
+          "Generate your OBS link to start your Free Plan (3 hours)": "Отримайте безкоштовну пробну версію OBS для запуску безкоштовного тестування на 3 годин",
           "⏰ EXPIRED": "й",
           "Your free trial has ended · upgrade to keep streaming": "Ваша безкоштовна пробна версія закінчилася · оновлення для збереження потокового передавання",
           "Trial expired — upgrade to continue": "Тривалий вибух — оновлення для продовження",
@@ -4470,7 +4470,7 @@
           "Upgrade Now →": "Оновлення зараз →",
           "FREE": "Безкоштовно",
           "Your first stream is free · sign up to get your OBS link": "Ваш перший потік безкоштовно · зареєструватися, щоб отримати посилання OBS",
-          "Enter your email to start your free 6-hour trial": "Введіть вашу електронну пошту, щоб запустити безкоштовну пробну версію",
+          "Enter your email to start your Free Plan (3 hours)": "Введіть вашу електронну пошту, щоб запустити безкоштовну пробну версію",
           "(supported: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)": "(підтримується: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)",
           "→ click": "→ натисніть",
           "Upgrade →": "Оновити →",
@@ -4518,7 +4518,7 @@
           "Online": "Online",
           "Live": "Live",
           "Dismiss": "Avfärda",
-          "6 hours free": "6 timmar gratis",
+          "6 hours free": "3 timmar gratis",
           "no credit card needed": "Inget kreditkort behövs",
           "· no credit card needed": "• Inget kreditkort behövs",
           "NO CREDIT CARD NEEDED": "Ingen CREDIT CARD behövs",
@@ -4611,7 +4611,7 @@
           "Regen": "Regen",
           "Overlay Preview & Style": "Overlay Preview och Style",
           "You are almost live": "Du är nästan live",
-          "Sign up to start streaming in 58 languages — free for 6 hours.": "Registrera dig för att streama på 30+ språk — gratis i 6 timmar.",
+          "Sign up to start streaming in 58 languages — free for 6 hours.": "Registrera dig för att streama på 30+ språk — gratis i 3 timmar.",
           "Continue with Google": "Fortsätt med Google",
           "Continue with Twitch": "Fortsätt med Twitch",
           "or email": "eller email",
@@ -4634,7 +4634,7 @@
           "Your preview time is up": "Din previewtid är slut",
           "Sign up to keep translating.": "Registrera dig för att fortsätta översätta.",
           "Continue Free": "Fortsätt gratis",
-          "No spam. Just 6 hours of real-time translations.": "Ingen spam. Bara 6 timmar realtidsöversättningar.",
+          "Free Plan — 3 hours of real-time translations.": "Ingen spam. Bara 3 timmar realtidsöversättningar.",
           "Verification code": "Verifieringskod",
           "Start Free Trial": "Starta gratis provperiod",
           "My Account": "Mitt konto",
@@ -4714,9 +4714,9 @@
           "Stream Pass ready — hours tracked when OBS is live": "Stream Pass redo - timmar spåras när OBS är live",
           "Don't press until you're ready to go live. Timer won't pause.": "Tryck inte förrän du är redo att gå live. Timer kommer inte pausa.",
           "🚀 Start My Stream Pass": "Starta mitt strömpass",
-          "Free trial active · 6 hours from when you generated your OBS link": "Gratis prov aktiv · 6 timmar från när du genererade din OBS-länk",
-          "Your 6-hour trial is active": "Din 6-timmars försök är aktiv",
-          "Generate your OBS link to start your 6-hour free trial": "Skapa din OBS-länk för att starta din 6-timmars gratis provperiod",
+          "Free Plan active · 3 hours from when you generated your OBS link": "Gratis prov aktiv · 3 timmar från när du genererade din OBS-länk",
+          "Your Free Plan (3 hours) is active": "Din 3-timmars försök är aktiv",
+          "Generate your OBS link to start your Free Plan (3 hours)": "Skapa din OBS-länk för att starta din 3-timmars gratis provperiod",
           "⏰ EXPIRED": "EXPIRED",
           "Your free trial has ended · upgrade to keep streaming": "Din fria rättegång har avslutats · uppgradera för att hålla streaming",
           "Trial expired — upgrade to continue": "Trial utgår - uppgradering för att fortsätta",
@@ -4726,7 +4726,7 @@
           "Upgrade Now →": "Uppgradera nu",
           "FREE": "Gratis",
           "Your first stream is free · sign up to get your OBS link": "Din första ström är gratis · registrera dig för att få din OBS-länk",
-          "Enter your email to start your free 6-hour trial": "Ange din e-post för att starta din gratis 6-timmars rättegång",
+          "Enter your email to start your Free Plan (3 hours)": "Ange din e-post för att starta din gratis 3-timmars rättegång",
           "(supported: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)": "(stöds: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)",
           "→ click": "→ Klicka",
           "Upgrade →": "Uppgradera →",
@@ -4774,7 +4774,7 @@
           "Online": "På nett",
           "Live": "Live",
           "Dismiss": "Utsettelse",
-          "6 hours free": "6 timer gratis",
+          "6 hours free": "3 timer gratis",
           "no credit card needed": "Ingen kredittkort trengs",
           "· no credit card needed": "· Ingen kredittkort nødvendig",
           "NO CREDIT CARD NEEDED": "Ingen CREDIT CARD behov",
@@ -4867,7 +4867,7 @@
           "Regen": "Regen",
           "Overlay Preview & Style": "Forhåndsvisning og stil overlegg",
           "You are almost live": "Du er nesten live",
-          "Sign up to start streaming in 58 languages — free for 6 hours.": "Registrer deg for å strømme på 30+ språk — gratis i 6 timer.",
+          "Sign up to start streaming in 58 languages — free for 6 hours.": "Registrer deg for å strømme på 30+ språk — gratis i 3 timer.",
           "Continue with Google": "Fortsett med Google",
           "Continue with Twitch": "Fortsett med Twitch",
           "or email": "eller e-post",
@@ -4890,7 +4890,7 @@
           "Your preview time is up": "Forhåndsvisningstiden er brukt opp",
           "Sign up to keep translating.": "Registrer deg for å fortsette å oversette.",
           "Continue Free": "Fortsett gratis",
-          "No spam. Just 6 hours of real-time translations.": "Ingen spam. Bare 6 timer med sanntidsoversettelser.",
+          "Free Plan — 3 hours of real-time translations.": "Ingen spam. Bare 3 timer med sanntidsoversettelser.",
           "Verification code": "Verifiseringskode",
           "Start Free Trial": "Start gratis prøveperiode",
           "My Account": "Min konto",
@@ -4970,9 +4970,9 @@
           "Stream Pass ready — hours tracked when OBS is live": "Stream Pass klar — timer sporet når OBS er live",
           "Don't press until you're ready to go live. Timer won't pause.": "Ikke trykk før du er klar til å leve. Timer vil ikke ta pause.",
           "🚀 Start My Stream Pass": "🚀 Start mitt streampass",
-          "Free trial active · 6 hours from when you generated your OBS link": "Gratis prøveversjon aktiv · 6 timer fra når du genererte OBS-lenken",
-          "Your 6-hour trial is active": "6 timers prøve er aktiv",
-          "Generate your OBS link to start your 6-hour free trial": "Opprett din OBS-link for å starte din 6-timers gratis prøveperiode",
+          "Free Plan active · 3 hours from when you generated your OBS link": "Gratis prøveversjon aktiv · 3 timer fra når du genererte OBS-lenken",
+          "Your Free Plan (3 hours) is active": "3 timers prøve er aktiv",
+          "Generate your OBS link to start your Free Plan (3 hours)": "Opprett din OBS-link for å starte din 3-timers gratis prøveperiode",
           "⏰ EXPIRED": "⏰ Utviklet",
           "Your free trial has ended · upgrade to keep streaming": "Din gratis prøveperiode er avsluttet · oppgradering for å holde streaming",
           "Trial expired — upgrade to continue": "Forsøket gikk ut — oppgradering for å fortsette",
@@ -4982,7 +4982,7 @@
           "Upgrade Now →": "Oppgrader nå",
           "FREE": "GRATIS",
           "Your first stream is free · sign up to get your OBS link": "Din første strøm er gratis · Registrer deg for å få din OBS-lenke",
-          "Enter your email to start your free 6-hour trial": "Skriv inn din e-post for å starte din gratis 6-timers prøveperiode",
+          "Enter your email to start your Free Plan (3 hours)": "Skriv inn din e-post for å starte din gratis 3-timers prøveperiode",
           "(supported: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)": "(støttes: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)",
           "→ click": "→ klikk",
           "Upgrade →": "Oppgrader →",
@@ -5030,7 +5030,7 @@
           "Online": "Online",
           "Live": "Live",
           "Dismiss": "Frafald",
-          "6 hours free": "6 timer fri",
+          "6 hours free": "3 timer fri",
           "no credit card needed": "intet kreditkort nødvendig",
           "· no credit card needed": "· ingen kreditkort nødvendig",
           "NO CREDIT CARD NEEDED": "NO KREDITKODE BEHOVET",
@@ -5123,7 +5123,7 @@
           "Regen": "Regen",
           "Overlay Preview & Style": "Overlay Preview & stil",
           "You are almost live": "Du er næsten live",
-          "Sign up to start streaming in 58 languages — free for 6 hours.": "Tilmeld dig for at streame på 30+ sprog — gratis i 6 timer.",
+          "Sign up to start streaming in 58 languages — free for 6 hours.": "Tilmeld dig for at streame på 30+ sprog — gratis i 3 timer.",
           "Continue with Google": "Fortsæt med Google",
           "Continue with Twitch": "Fortsæt med Twitch",
           "or email": "eller email",
@@ -5146,7 +5146,7 @@
           "Your preview time is up": "Din previewtid er slut",
           "Sign up to keep translating.": "Tilmeld dig for at fortsætte med at oversætte.",
           "Continue Free": "Fortsæt gratis",
-          "No spam. Just 6 hours of real-time translations.": "Ingen spam. Kun 6 timer med realtidsoversættelser.",
+          "Free Plan — 3 hours of real-time translations.": "Ingen spam. Kun 3 timer med realtidsoversættelser.",
           "Verification code": "Verifikationskode",
           "Start Free Trial": "Start gratis prøveperiode",
           "My Account": "Min konto",
@@ -5226,9 +5226,9 @@
           "Stream Pass ready — hours tracked when OBS is live": "Stream Pass klar - timer sporet, når OBS er live",
           "Don't press until you're ready to go live. Timer won't pause.": "Tryk ikke, før du er klar til at gå live. Timer stopper ikke.",
           "🚀 Start My Stream Pass": "Start mit Stream Pass",
-          "Free trial active · 6 hours from when you generated your OBS link": "Gratis prøvetid aktiv · 6 timer fra da du genererede din OBS link",
-          "Your 6-hour trial is active": "Din 6-timers retssag er aktiv",
-          "Generate your OBS link to start your 6-hour free trial": "Generér dit OBS link til at starte din 6-timers gratis prøveperiode",
+          "Free Plan active · 3 hours from when you generated your OBS link": "Gratis prøvetid aktiv · 3 timer fra da du genererede din OBS link",
+          "Your Free Plan (3 hours) is active": "Din 3-timers retssag er aktiv",
+          "Generate your OBS link to start your Free Plan (3 hours)": "Generér dit OBS link til at starte din 3-timers gratis prøveperiode",
           "⏰ EXPIRED": "UDNYTTEDE",
           "Your free trial has ended · upgrade to keep streaming": "Din gratis prøveperiode er slut · opgradere for at holde streaming",
           "Trial expired — upgrade to continue": "Trial udløbet - opgradere til at fortsætte",
@@ -5238,7 +5238,7 @@
           "Upgrade Now →": "Opgrader nu →",
           "FREE": "GRATIS",
           "Your first stream is free · sign up to get your OBS link": "Din første stream er gratis · tilmeld dig for at få din OBS link",
-          "Enter your email to start your free 6-hour trial": "Indtast din e-mail for at starte din gratis 6-timers retssag",
+          "Enter your email to start your Free Plan (3 hours)": "Indtast din e-mail for at starte din gratis 3-timers retssag",
           "(supported: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)": "(understøttes: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)",
           "→ click": "→ klik",
           "Upgrade →": "Opgrader →",
@@ -5286,7 +5286,7 @@
           "Online": "Online",
           "Live": "Live",
           "Dismiss": "Poistu",
-          "6 hours free": "6 tuntia vapaa",
+          "6 hours free": "3 tuntia vapaa",
           "no credit card needed": "luottokorttia ei tarvita",
           "· no credit card needed": "· luottokorttia ei tarvita",
           "NO CREDIT CARD NEEDED": "EI LUOTTOKORTTIA",
@@ -5379,7 +5379,7 @@
           "Regen": "Regen",
           "Overlay Preview & Style": "Yliviivaa esikatselu ja tyyli",
           "You are almost live": "Olet melkein live",
-          "Sign up to start streaming in 58 languages — free for 6 hours.": "Rekisteröidy ja aloita striimaus yli 30 kielellä — 6 tuntia ilmaiseksi.",
+          "Sign up to start streaming in 58 languages — free for 6 hours.": "Rekisteröidy ja aloita striimaus yli 30 kielellä — 3 tuntia ilmaiseksi.",
           "Continue with Google": "Jatka Googlella",
           "Continue with Twitch": "Jatka Twitchillä",
           "or email": "tai sähköposti",
@@ -5402,7 +5402,7 @@
           "Your preview time is up": "Esikatseluaikasi on loppu",
           "Sign up to keep translating.": "Rekisteröidy jatkaaksesi kääntämistä.",
           "Continue Free": "Jatka ilmaiseksi",
-          "No spam. Just 6 hours of real-time translations.": "Ei roskapostia. Vain 6 tuntia reaaliaikaisia käännöksiä.",
+          "Free Plan — 3 hours of real-time translations.": "Ei roskapostia. Vain 3 tuntia reaaliaikaisia käännöksiä.",
           "Verification code": "Tarkastuskoodi",
           "Start Free Trial": "Aloita ilmainen kokeilu",
           "My Account": "Oma tili",
@@ -5482,9 +5482,9 @@
           "Stream Pass ready — hours tracked when OBS is live": "Stream Pass valmis .",
           "Don't press until you're ready to go live. Timer won't pause.": "Älä paina ennen kuin olet valmis. Ajastin ei pysähdy.",
           "🚀 Start My Stream Pass": "Käynnistä virtapassini",
-          "Free trial active · 6 hours from when you generated your OBS link": "Ilmainen kokeiluversio aktiivinen · 6 tuntia siitä, kun olet luonut OBS linkki",
-          "Your 6-hour trial is active": "Kuusi tuntia kestävä koe on käynnissä.",
-          "Generate your OBS link to start your 6-hour free trial": "Luo OBS-linkki aloittaa 6 tunnin ilmainen kokeiluversio",
+          "Free Plan active · 3 hours from when you generated your OBS link": "Ilmainen kokeiluversio aktiivinen · 3 tuntia siitä, kun olet luonut OBS linkki",
+          "Your Free Plan (3 hours) is active": "Kuusi tuntia kestävä koe on käynnissä.",
+          "Generate your OBS link to start your Free Plan (3 hours)": "Luo OBS-linkki aloittaa 3 tunnin ilmainen kokeiluversio",
           "⏰ EXPIRED": "Käyt.",
           "Your free trial has ended · upgrade to keep streaming": "Ilmainen kokeiluversiosi on päättynyt · päivitys pitääksesi streaming",
           "Trial expired — upgrade to continue": "Tutkimus päättyi ...",
@@ -5494,7 +5494,7 @@
           "Upgrade Now →": "Päivitä nyt →",
           "FREE": "VAPAA",
           "Your first stream is free · sign up to get your OBS link": "Ensimmäinen stream on ilmainen · ilmoittautua saada OBS linkki",
-          "Enter your email to start your free 6-hour trial": "Anna sähköposti aloittaa ilmaisen 6 tunnin kokeilu",
+          "Enter your email to start your Free Plan (3 hours)": "Anna sähköposti aloittaa ilmaisen 3 tunnin kokeilu",
           "(supported: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)": "(tuettu: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)",
           "→ click": "→ napsauta",
           "Upgrade →": "Päivitä →",
@@ -5542,7 +5542,7 @@
           "Online": "Online",
           "Live": "Live",
           "Dismiss": "Liber.",
-          "6 hours free": "6 ore libere",
+          "6 hours free": "3 ore libere",
           "no credit card needed": "nu este nevoie de card de credit",
           "· no credit card needed": "· Nu este nevoie de card de credit",
           "NO CREDIT CARD NEEDED": "NU ESTE NEVOIE DE CARD DE CREDIT",
@@ -5635,7 +5635,7 @@
           "Regen": "Regen",
           "Overlay Preview & Style": "Previzualizează & stilul",
           "You are almost live": "Ești aproape live",
-          "Sign up to start streaming in 58 languages — free for 6 hours.": "Înscrie-te pentru a transmite în peste 30 de limbi — gratuit timp de 6 ore.",
+          "Sign up to start streaming in 58 languages — free for 6 hours.": "Înscrie-te pentru a transmite în peste 30 de limbi — gratuit timp de 3 ore.",
           "Continue with Google": "Continuă cu Google",
           "Continue with Twitch": "Continuă cu Twitch",
           "or email": "sau email",
@@ -5658,7 +5658,7 @@
           "Your preview time is up": "Timpul de previzualizare s-a terminat",
           "Sign up to keep translating.": "Înscrie-te pentru a continua traducerea.",
           "Continue Free": "Continuă gratuit",
-          "No spam. Just 6 hours of real-time translations.": "Fără spam. Doar 6 ore de traduceri în timp real.",
+          "Free Plan — 3 hours of real-time translations.": "Fără spam. Doar 3 ore de traduceri în timp real.",
           "Verification code": "Codul de verificare",
           "Start Free Trial": "Începe proba gratuită",
           "My Account": "Contul meu",
@@ -5738,9 +5738,9 @@
           "Stream Pass ready — hours tracked when OBS is live": "Stream Pass gata",
           "Don't press until you're ready to go live. Timer won't pause.": "Nu apăsați până când sunteți gata să meargă în direct. Cronometrul nu se opreşte.",
           "🚀 Start My Stream Pass": "🚀 Start My Stream Pass",
-          "Free trial active · 6 hours from when you generated your OBS link": "Proces gratuit activ · 6 ore de când ați generat link-ul OBS",
-          "Your 6-hour trial is active": "Studiul tău de 6 ore e activ.",
-          "Generate your OBS link to start your 6-hour free trial": "Generați link-ul OBS pentru a începe procesul gratuit de 6 ore",
+          "Free Plan active · 3 hours from when you generated your OBS link": "Proces gratuit activ · 3 ore de când ați generat link-ul OBS",
+          "Your Free Plan (3 hours) is active": "Studiul tău de 3 ore e activ.",
+          "Generate your OBS link to start your Free Plan (3 hours)": "Generați link-ul OBS pentru a începe procesul gratuit de 3 ore",
           "⏰ EXPIRED": "EXPIRAT",
           "Your free trial has ended · upgrade to keep streaming": "Procesul dvs. gratuit s-a încheiat · upgrade pentru a continua fluxul",
           "Trial expired — upgrade to continue": "Procesul a expirat la actualizare pentru a continua",
@@ -5750,7 +5750,7 @@
           "Upgrade Now →": "Actualizează acum →",
           "FREE": "GRATIS",
           "Your first stream is free · sign up to get your OBS link": "Primul flux este gratuit · înscrie-te pentru a obține link-ul OBS",
-          "Enter your email to start your free 6-hour trial": "Introduceți e-mail pentru a începe procesul gratuit de 6 ore",
+          "Enter your email to start your Free Plan (3 hours)": "Introduceți e-mail pentru a începe procesul gratuit de 3 ore",
           "(supported: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)": "(compatibil: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)",
           "→ click": "→ clic",
           "Upgrade →": "Upgrade →",
@@ -5798,7 +5798,7 @@
           "Online": "Online",
           "Live": "Živě",
           "Dismiss": "Rozpustit",
-          "6 hours free": "6 hodin volna",
+          "6 hours free": "3 hodin volna",
           "no credit card needed": "není třeba kreditní karty",
           "· no credit card needed": "· není třeba kreditní karty",
           "NO CREDIT CARD NEEDED": "ŽÁDNÁ ÚVĚROVÁ KARTA",
@@ -5891,7 +5891,7 @@
           "Regen": "Regen",
           "Overlay Preview & Style": "Překrytí Náhled a styl",
           "You are almost live": "Už jste skoro živě",
-          "Sign up to start streaming in 58 languages — free for 6 hours.": "Zaregistrujte se a streamujte ve 30+ jazycích — 6 hodin zdarma.",
+          "Sign up to start streaming in 58 languages — free for 6 hours.": "Zaregistrujte se a streamujte ve 30+ jazycích — 3 hodin zdarma.",
           "Continue with Google": "Pokračovat s Google",
           "Continue with Twitch": "Pokračovat s Twitch",
           "or email": "nebo email",
@@ -5914,7 +5914,7 @@
           "Your preview time is up": "Čas náhledu vypršel",
           "Sign up to keep translating.": "Zaregistrujte se a pokračujte v překladu.",
           "Continue Free": "Pokračovat zdarma",
-          "No spam. Just 6 hours of real-time translations.": "Žádný spam. Jen 6 hodin překladů v reálném čase.",
+          "Free Plan — 3 hours of real-time translations.": "Žádný spam. Jen 3 hodin překladů v reálném čase.",
           "Verification code": "Kód ověření",
           "Start Free Trial": "Spustit zkušební verzi zdarma",
           "My Account": "Můj účet",
@@ -5994,9 +5994,9 @@
           "Stream Pass ready — hours tracked when OBS is live": "Stream Pass připraven - hodiny sledovat, když OBS je živě",
           "Don't press until you're ready to go live. Timer won't pause.": "Nemačkejte, dokud nebudete připraveni jít živě. Časovač se nezastaví.",
           "🚀 Start My Stream Pass": "Spustit můj průsmyk",
-          "Free trial active · 6 hours from when you generated your OBS link": "Volná zkušební činnost · 6 hodin od chvíle, kdy jste vytvořili odkaz na OBS",
-          "Your 6-hour trial is active": "Vaše 6hodinová zkouška je aktivní.",
-          "Generate your OBS link to start your 6-hour free trial": "Vygenerovat odkaz na OBS pro zahájení 6hodinové zkušební verze zdarma",
+          "Free Plan active · 3 hours from when you generated your OBS link": "Volná zkušební činnost · 3 hodin od chvíle, kdy jste vytvořili odkaz na OBS",
+          "Your Free Plan (3 hours) is active": "Vaše 3hodinová zkouška je aktivní.",
+          "Generate your OBS link to start your Free Plan (3 hours)": "Vygenerovat odkaz na OBS pro zahájení 3hodinové zkušební verze zdarma",
           "⏰ EXPIRED": "VYUŽITÍ",
           "Your free trial has ended · upgrade to keep streaming": "Váš bezplatný proces skončil · upgrade, aby se streaming",
           "Trial expired — upgrade to continue": "Studie vypršela - upgrade pokračovat",
@@ -6006,7 +6006,7 @@
           "Upgrade Now →": "Aktualizovat nyní →",
           "FREE": "ZDARMA",
           "Your first stream is free · sign up to get your OBS link": "Váš první proud je zdarma · Přihlaste se získat váš OBS odkaz",
-          "Enter your email to start your free 6-hour trial": "Zadejte svůj e-mail pro zahájení vaší bezplatné 6hodinové zkušební",
+          "Enter your email to start your Free Plan (3 hours)": "Zadejte svůj e-mail pro zahájení vaší bezplatné 3hodinové zkušební",
           "(supported: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)": "(podporováno: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)",
           "→ click": "→ klikněte",
           "Upgrade →": "Upgradovat →",
@@ -6054,7 +6054,7 @@
           "Online": "Online",
           "Live": "Élő",
           "Dismiss": "Lelépés",
-          "6 hours free": "6 óra ingyenes",
+          "6 hours free": "3 óra ingyenes",
           "no credit card needed": "nem szükséges hitelkártya",
           "· no credit card needed": "· nincs szükség hitelkártyára",
           "NO CREDIT CARD NEEDED": "HITELKOCKÁZATI FEDEZET",
@@ -6147,7 +6147,7 @@
           "Regen": "Regen",
           "Overlay Preview & Style": "Overlay Preview & Style",
           "You are almost live": "Már majdnem élőben vagy",
-          "Sign up to start streaming in 58 languages — free for 6 hours.": "Regisztrálj, hogy 30+ nyelven streamelhess — 6 óráig ingyen.",
+          "Sign up to start streaming in 58 languages — free for 6 hours.": "Regisztrálj, hogy 30+ nyelven streamelhess — 3 óráig ingyen.",
           "Continue with Google": "Folytatás Google-lal",
           "Continue with Twitch": "Folytatás Twitch-csel",
           "or email": "vagy email",
@@ -6170,7 +6170,7 @@
           "Your preview time is up": "Lejárt az előnézeti időd",
           "Sign up to keep translating.": "Regisztrálj a fordítás folytatásához.",
           "Continue Free": "Folytatás ingyen",
-          "No spam. Just 6 hours of real-time translations.": "Nincs spam. Csak 6 óra valós idejű fordítás.",
+          "Free Plan — 3 hours of real-time translations.": "Nincs spam. Csak 3 óra valós idejű fordítás.",
           "Verification code": "Ellenőrző kód",
           "Start Free Trial": "Ingyenes próba indítása",
           "My Account": "Saját fiók",
@@ -6250,9 +6250,9 @@
           "Stream Pass ready — hours tracked when OBS is live": "Stream Pass kész - Órák nyomon követése, amikor az OBS élő",
           "Don't press until you're ready to go live. Timer won't pause.": "Ne nyomjon, amíg nem áll készen az életre. Timer nem áll meg.",
           "🚀 Start My Stream Pass": "\"Start my stream pass\"",
-          "Free trial active · 6 hours from when you generated your OBS link": "Ingyenes próba aktív · 6 óra attól, amikor létrehozta az OBS linket",
-          "Your 6-hour trial is active": "A 6 órás kísérlete aktív.",
-          "Generate your OBS link to start your 6-hour free trial": "Az OBS kapcsolat létrehozása a 6 órás ingyenes tárgyalás megkezdéséhez",
+          "Free Plan active · 3 hours from when you generated your OBS link": "Ingyenes próba aktív · 3 óra attól, amikor létrehozta az OBS linket",
+          "Your Free Plan (3 hours) is active": "A 3 órás kísérlete aktív.",
+          "Generate your OBS link to start your Free Plan (3 hours)": "Az OBS kapcsolat létrehozása a 3 órás ingyenes tárgyalás megkezdéséhez",
           "⏰ EXPIRED": "HIVATKOZOTT",
           "Your free trial has ended · upgrade to keep streaming": "Az ingyenes tárgyalása véget ért, hogy folytassák a közvetítést.",
           "Trial expired — upgrade to continue": "A tárgyalás lejárt - frissíteni a folytatáshoz",
@@ -6262,7 +6262,7 @@
           "Upgrade Now →": "Frissítés most →",
           "FREE": "SZABAD",
           "Your first stream is free · sign up to get your OBS link": "Az első patak ingyenes · feliratkozik, hogy az OBS linket",
-          "Enter your email to start your free 6-hour trial": "Adja meg e-mailjét, hogy elkezdhesse az ingyenes 6- órás vizsgálatot",
+          "Enter your email to start your Free Plan (3 hours)": "Adja meg e-mailjét, hogy elkezdhesse az ingyenes 3- órás vizsgálatot",
           "(supported: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)": "(támogatott: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)",
           "→ click": "→ kattints",
           "Upgrade →": "Frissítés →",
@@ -6310,7 +6310,7 @@
           "Online": "Онлайн",
           "Live": "На живо",
           "Dismiss": "Свободно.",
-          "6 hours free": "6 часа безплатно",
+          "6 hours free": "3 часа безплатно",
           "no credit card needed": "не е необходима кредитна карта",
           "· no credit card needed": "· не е необходима кредитна карта",
           "NO CREDIT CARD NEEDED": "НЕ СЕ ИЗИСКВА КРЕДИТНА КАРТА",
@@ -6403,7 +6403,7 @@
           "Regen": "Реген",
           "Overlay Preview & Style": "Преглед на & стила",
           "You are almost live": "Почти сте на живо",
-          "Sign up to start streaming in 58 languages — free for 6 hours.": "Регистрирайте се, за да стриймвате на 30+ езика — 6 часа безплатно.",
+          "Sign up to start streaming in 58 languages — free for 6 hours.": "Регистрирайте се, за да стриймвате на 30+ езика — 3 часа безплатно.",
           "Continue with Google": "Продължи с Google",
           "Continue with Twitch": "Продължи с Twitch",
           "or email": "или имейл",
@@ -6426,7 +6426,7 @@
           "Your preview time is up": "Времето за преглед изтече",
           "Sign up to keep translating.": "Регистрирайте се, за да продължите да превеждате.",
           "Continue Free": "Продължи безплатно",
-          "No spam. Just 6 hours of real-time translations.": "Без спам. Само 6 часа преводи в реално време.",
+          "Free Plan — 3 hours of real-time translations.": "Без спам. Само 3 часа преводи в реално време.",
           "Verification code": "Код на проверката",
           "Start Free Trial": "Започни безплатен пробен период",
           "My Account": "Моят акаунт",
@@ -6506,9 +6506,9 @@
           "Stream Pass ready — hours tracked when OBS is live": "Stream Pass ready .. .. hours tracked when OBS is live",
           "Don't press until you're ready to go live. Timer won't pause.": "Не натискай, докато не си готов за живот. Таймерът няма да спре.",
           "🚀 Start My Stream Pass": "гонитба",
-          "Free trial active · 6 hours from when you generated your OBS link": "Безплатно изпитване активен · 6 часа от времето, когато сте генерирали връзката си OBS",
-          "Your 6-hour trial is active": "Шестчасовият ти процес е активен.",
-          "Generate your OBS link to start your 6-hour free trial": "Генериране на вашия OBS линк, за да започнете 6-часов безплатен пробен период",
+          "Free Plan active · 3 hours from when you generated your OBS link": "Безплатно изпитване активен · 3 часа от времето, когато сте генерирали връзката си OBS",
+          "Your Free Plan (3 hours) is active": "Шестчасовият ти процес е активен.",
+          "Generate your OBS link to start your Free Plan (3 hours)": "Генериране на вашия OBS линк, за да започнете 3-часов безплатен пробен период",
           "⏰ EXPIRED": "Превод и субтитри:",
           "Your free trial has ended · upgrade to keep streaming": "Вашият безплатен пробен период приключи · ъпгрейд, за да продължите стрийминг",
           "Trial expired — upgrade to continue": "Процесът е изтекъл, за да продължи.",
@@ -6518,7 +6518,7 @@
           "Upgrade Now →": "Upgrade Сега →",
           "FREE": "Безплатно",
           "Your first stream is free · sign up to get your OBS link": "Първият поток е безплатен · регистрирайте се, за да получите вашия OBS линк",
-          "Enter your email to start your free 6-hour trial": "Въведете вашия имейл, за да започнете безплатно 6-часово изпитание",
+          "Enter your email to start your Free Plan (3 hours)": "Въведете вашия имейл, за да започнете безплатно 3-часово изпитание",
           "(supported: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)": "(поддържа се: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)",
           "→ click": "→ щракване",
           "Upgrade →": "Надграждане →",
@@ -6566,7 +6566,7 @@
           "Online": "Online",
           "Live": "Naživo",
           "Dismiss": "Odchod",
-          "6 hours free": "6 hodín zadarmo",
+          "6 hours free": "3 hodín zadarmo",
           "no credit card needed": "nie je potrebná žiadna kreditná karta",
           "· no credit card needed": "· žiadna kreditná karta nie je potrebná",
           "NO CREDIT CARD NEEDED": "NEPOTREBUJE SA ÚVEROVÁ KARTA",
@@ -6659,7 +6659,7 @@
           "Regen": "Regen",
           "Overlay Preview & Style": "Ukážka a štýl prekrytia",
           "You are almost live": "Už ste takmer naživo",
-          "Sign up to start streaming in 58 languages — free for 6 hours.": "Zaregistrujte sa a streamujte v 30+ jazykoch — 6 hodín zadarmo.",
+          "Sign up to start streaming in 58 languages — free for 6 hours.": "Zaregistrujte sa a streamujte v 30+ jazykoch — 3 hodín zadarmo.",
           "Continue with Google": "Pokračovať s Google",
           "Continue with Twitch": "Pokračovať s Twitch",
           "or email": "alebo email",
@@ -6682,7 +6682,7 @@
           "Your preview time is up": "Čas ukážky vypršal",
           "Sign up to keep translating.": "Zaregistrujte sa a pokračujte v preklade.",
           "Continue Free": "Pokračovať zadarmo",
-          "No spam. Just 6 hours of real-time translations.": "Žiadny spam. Iba 6 hodín prekladov v reálnom čase.",
+          "Free Plan — 3 hours of real-time translations.": "Žiadny spam. Iba 3 hodín prekladov v reálnom čase.",
           "Verification code": "Kód overovania",
           "Start Free Trial": "Spustiť bezplatnú skúšku",
           "My Account": "Môj účet",
@@ -6762,9 +6762,9 @@
           "Stream Pass ready — hours tracked when OBS is live": "Stream Pass ready",
           "Don't press until you're ready to go live. Timer won't pause.": "Nestláčaj kým nebudeš pripravený naživo. Časovač sa nezastaví.",
           "🚀 Start My Stream Pass": "🚀 Start My Stream Pass",
-          "Free trial active · 6 hours from when you generated your OBS link": "Voľný pokus aktívny · 6 hodín od kedy ste generovali odkaz OBS",
-          "Your 6-hour trial is active": "Vaša 6-hodinová skúška je aktívna.",
-          "Generate your OBS link to start your 6-hour free trial": "Generovať svoje OBS odkaz začať svoju 6-hodinovú skúšku zadarmo",
+          "Free Plan active · 3 hours from when you generated your OBS link": "Voľný pokus aktívny · 3 hodín od kedy ste generovali odkaz OBS",
+          "Your Free Plan (3 hours) is active": "Vaša 3-hodinová skúška je aktívna.",
+          "Generate your OBS link to start your Free Plan (3 hours)": "Generovať svoje OBS odkaz začať svoju 3-hodinovú skúšku zadarmo",
           "⏰ EXPIRED": "EXPIRED",
           "Your free trial has ended · upgrade to keep streaming": "Vaša bezplatná skúšobná verzia skončila · upgrade pre pokračovanie v streamingu",
           "Trial expired — upgrade to continue": "Trial exspiroval",
@@ -6774,7 +6774,7 @@
           "Upgrade Now →": "Upgrade teraz →",
           "FREE": "ZADARMO",
           "Your first stream is free · sign up to get your OBS link": "Váš prvý stream je zadarmo · zaregistrovať sa, aby sa vaše OBS odkaz",
-          "Enter your email to start your free 6-hour trial": "Zadajte svoj e-mail pre spustenie bezplatnej 6-hodinovej skúšky",
+          "Enter your email to start your Free Plan (3 hours)": "Zadajte svoj e-mail pre spustenie bezplatnej 3-hodinovej skúšky",
           "(supported: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)": "(podporované: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)",
           "→ click": "→ kliknite na tlačidlo",
           "Upgrade →": "Upgradovať →",
@@ -6822,7 +6822,7 @@
           "Online": "Онлајн",
           "Live": "Уживо",
           "Dismiss": "Отпуст",
-          "6 hours free": "6 сати бесплатно",
+          "6 hours free": "3 сати бесплатно",
           "no credit card needed": "кредитна картица није потребна",
           "· no credit card needed": "· није потребна кредитна картица",
           "NO CREDIT CARD NEEDED": "Нема потребе за кредитном картицом.",
@@ -6915,7 +6915,7 @@
           "Regen": "Реген",
           "Overlay Preview & Style": "Преглед и стил преклапања",
           "You are almost live": "Скоро сте уживо",
-          "Sign up to start streaming in 58 languages — free for 6 hours.": "Региструјте се да стримујете на 30+ језика — 6 сати бесплатно.",
+          "Sign up to start streaming in 58 languages — free for 6 hours.": "Региструјте се да стримујете на 30+ језика — 3 сати бесплатно.",
           "Continue with Google": "Настави са Google",
           "Continue with Twitch": "Настави са Twitch",
           "or email": "или имејл",
@@ -6938,7 +6938,7 @@
           "Your preview time is up": "Време прегледа је истекло",
           "Sign up to keep translating.": "Региструјте се да наставите са превођењем.",
           "Continue Free": "Настави бесплатно",
-          "No spam. Just 6 hours of real-time translations.": "Без спама. Само 6 сати превода у реалном времену.",
+          "Free Plan — 3 hours of real-time translations.": "Без спама. Само 3 сати превода у реалном времену.",
           "Verification code": "Верификацијски код",
           "Start Free Trial": "Започни бесплатну пробу",
           "My Account": "Мој налог",
@@ -7018,9 +7018,9 @@
           "Stream Pass ready — hours tracked when OBS is live": "Пролаз тока спреман — сати праћени када је ОБС у живо",
           "Don't press until you're ready to go live. Timer won't pause.": "Не притишћите док не будете спремни за уживо.",
           "🚀 Start My Stream Pass": "Започните мој пролаз",
-          "Free trial active · 6 hours from when you generated your OBS link": "Активност у слободном суђењу · 6 сати од када сте генерирали свој ОБС линк",
-          "Your 6-hour trial is active": "Ваше 6-сатно суђење је активно.",
-          "Generate your OBS link to start your 6-hour free trial": "Генерирајте своју ОБС везу за почетак 6-сатног бесплатног суђења",
+          "Free Plan active · 3 hours from when you generated your OBS link": "Активност у слободном суђењу · 3 сати од када сте генерирали свој ОБС линк",
+          "Your Free Plan (3 hours) is active": "Ваше 3-сатно суђење је активно.",
+          "Generate your OBS link to start your Free Plan (3 hours)": "Генерирајте своју ОБС везу за почетак 3-сатног бесплатног суђења",
           "⏰ EXPIRED": "ИСКЉУЧЕНО",
           "Your free trial has ended · upgrade to keep streaming": "Ваше слободно суђење завршено је _БАР_ надоградња за наставак стреаминга",
           "Trial expired — upgrade to continue": "Истекло је суђење — надоградња да би се наставило",
@@ -7030,7 +7030,7 @@
           "Upgrade Now →": "Надоградња сада →",
           "FREE": "Слободни",
           "Your first stream is free · sign up to get your OBS link": "Ваш први ток је слободан · Пријавите се да бисте добили свој ОБС линк",
-          "Enter your email to start your free 6-hour trial": "Унесите свој е-маил за почетак вашег бесплатног 6-сатног суђења",
+          "Enter your email to start your Free Plan (3 hours)": "Унесите свој е-маил за почетак вашег бесплатног 3-сатног суђења",
           "(supported: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)": "(подржано: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)",
           "→ click": "→ клик",
           "Upgrade →": "Надогради →",
@@ -7078,7 +7078,7 @@
           "Online": "Συνδεδεμένο",
           "Live": "Ζωντανά",
           "Dismiss": "Ελεύθεροι.",
-          "6 hours free": "6 ώρες δωρεάν",
+          "6 hours free": "3 ώρες δωρεάν",
           "no credit card needed": "δεν απαιτείται πιστωτική κάρτα",
           "· no credit card needed": "· δεν χρειάζεται πιστωτική κάρτα",
           "NO CREDIT CARD NEEDED": "Δεν χρειάζεται πιστωτική κάρτα",
@@ -7171,7 +7171,7 @@
           "Regen": "Ρέγκεν",
           "Overlay Preview & Style": "Επικάλυψη & στυλ προεπισκόπησης",
           "You are almost live": "Είστε σχεδόν live",
-          "Sign up to start streaming in 58 languages — free for 6 hours.": "Εγγραφείτε για να κάνετε streaming σε 30+ γλώσσες — δωρεάν για 6 ώρες.",
+          "Sign up to start streaming in 58 languages — free for 6 hours.": "Εγγραφείτε για να κάνετε streaming σε 30+ γλώσσες — δωρεάν για 3 ώρες.",
           "Continue with Google": "Συνέχεια με Google",
           "Continue with Twitch": "Συνέχεια με Twitch",
           "or email": "ή email",
@@ -7194,7 +7194,7 @@
           "Your preview time is up": "Ο χρόνος προεπισκόπησης τελείωσε",
           "Sign up to keep translating.": "Εγγραφείτε για να συνεχίσετε τη μετάφραση.",
           "Continue Free": "Συνέχεια δωρεάν",
-          "No spam. Just 6 hours of real-time translations.": "Χωρίς spam. Μόνο 6 ώρες μεταφράσεων σε πραγματικό χρόνο.",
+          "Free Plan — 3 hours of real-time translations.": "Χωρίς spam. Μόνο 3 ώρες μεταφράσεων σε πραγματικό χρόνο.",
           "Verification code": "Κωδικός επαλήθευσης",
           "Start Free Trial": "Έναρξη δωρεάν δοκιμής",
           "My Account": "Ο λογαριασμός μου",
@@ -7274,9 +7274,9 @@
           "Stream Pass ready — hours tracked when OBS is live": "Stream Pass έτοιμη — ώρες παρακολούθησης όταν OBS είναι ζωντανή",
           "Don't press until you're ready to go live. Timer won't pause.": "Μην πατήσετε μέχρι να είστε έτοιμοι να πάτε ζωντανά. Το χρονόμετρο δεν σταματά.",
           "🚀 Start My Stream Pass": "🚀 Ξεκινήστε το Πέρασμα του Streamύματος μου",
-          "Free trial active · 6 hours from when you generated your OBS link": "Δωρεάν δοκιμή ενεργό · 6 ώρες από όταν δημιουργήσατε το σύνδεσμο OBS σας",
-          "Your 6-hour trial is active": "Η 6-ωρη δοκιμή σας είναι ενεργή.",
-          "Generate your OBS link to start your 6-hour free trial": "Δημιουργήστε το σύνδεσμο OBS σας για να ξεκινήσετε τη δωρεάν δοκιμή 6 ωρών",
+          "Free Plan active · 3 hours from when you generated your OBS link": "Δωρεάν δοκιμή ενεργό · 3 ώρες από όταν δημιουργήσατε το σύνδεσμο OBS σας",
+          "Your Free Plan (3 hours) is active": "Η 3-ωρη δοκιμή σας είναι ενεργή.",
+          "Generate your OBS link to start your Free Plan (3 hours)": "Δημιουργήστε το σύνδεσμο OBS σας για να ξεκινήσετε τη δωρεάν δοκιμή 3 ωρών",
           "⏰ EXPIRED": "⏰ ΕΚΛΕΓΜΕΝΟ",
           "Your free trial has ended · upgrade to keep streaming": "Η δωρεάν δοκιμή σας έχει λήξει · αναβάθμιση για να κρατήσει streaming",
           "Trial expired — upgrade to continue": "Η δοκιμή έληξε — αναβάθμιση για να συνεχιστεί",
@@ -7286,7 +7286,7 @@
           "Upgrade Now →": "Αναβάθμιση Τώρα →",
           "FREE": "ΔΩΡΕΑΝ",
           "Your first stream is free · sign up to get your OBS link": "Η πρώτη σας ροή είναι ελεύθερη · εγγραφείτε για να πάρετε το σύνδεσμο OBS σας",
-          "Enter your email to start your free 6-hour trial": "Εισάγετε το email σας για να ξεκινήσετε τη δωρεάν δοκιμή 6 ωρών",
+          "Enter your email to start your Free Plan (3 hours)": "Εισάγετε το email σας για να ξεκινήσετε τη δωρεάν δοκιμή 3 ωρών",
           "(supported: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)": "(υποστηρίζεται: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)",
           "→ click": "→ κλικ",
           "Upgrade →": "Αναβάθμιση →",
@@ -7334,7 +7334,7 @@
           "Online": "ออนไลน์",
           "Live": "ไลฟ์",
           "Dismiss": "ไม่สนใจ",
-          "6 hours free": "ว่าง 6 ชั่วโมง",
+          "6 hours free": "ว่าง 3 ชั่วโมง",
           "no credit card needed": "ไม่ต้องใช้บัตรเครดิต",
           "· no credit card needed": "ไม่ต้องใช้บัตรเครดิต",
           "NO CREDIT CARD NEEDED": "ไม่ จําเป็น ต้อง มี การ์ด สี แดง",
@@ -7427,7 +7427,7 @@
           "Regen": "Regen",
           "Overlay Preview & Style": "แสดงตัวอย่างแบบเหนือหน้า",
           "You are almost live": "คุณใกล้จะเริ่มไลฟ์แล้ว",
-          "Sign up to start streaming in 58 languages — free for 6 hours.": "สมัครเพื่อเริ่มสตรีมมากกว่า 30 ภาษา — ฟรี 6 ชั่วโมง",
+          "Sign up to start streaming in 58 languages — free for 6 hours.": "สมัครเพื่อเริ่มสตรีมมากกว่า 30 ภาษา — ฟรี 3 ชั่วโมง",
           "Continue with Google": "ดำเนินการต่อด้วย Google",
           "Continue with Twitch": "ดำเนินการต่อด้วย Twitch",
           "or email": "หรืออีเมล",
@@ -7450,7 +7450,7 @@
           "Your preview time is up": "หมดเวลาแสดงตัวอย่างแล้ว",
           "Sign up to keep translating.": "สมัครเพื่อแปลต่อ",
           "Continue Free": "ใช้งานฟรีต่อ",
-          "No spam. Just 6 hours of real-time translations.": "ไม่มีสแปม แค่แปลแบบเรียลไทม์ฟรี 6 ชั่วโมง",
+          "Free Plan — 3 hours of real-time translations.": "ไม่มีสแปม แค่แปลแบบเรียลไทม์ฟรี 3 ชั่วโมง",
           "Verification code": "การตรวจสอบสิทธิ์",
           "Start Free Trial": "เริ่มทดลองใช้ฟรี",
           "My Account": "บัญชีของฉัน",
@@ -7530,9 +7530,9 @@
           "Stream Pass ready — hours tracked when OBS is live": "การ ผ่าน กระแส น้ํา พร้อม — ชั่วโมง ที่ ติด ตาม เมื่อ มี การ ใช้ โอ บี เอส",
           "Don't press until you're ready to go live. Timer won't pause.": "อย่ากดจนกว่าคุณพร้อมที่จะมีชีวิตอยู่ ตัวจับเวลาจะไม่หยุด",
           "🚀 Start My Stream Pass": "○ เริ่ม ต้น ทาง ผ่าน สาย น้ํา",
-          "Free trial active · 6 hours from when you generated your OBS link": "การทดลองอิสระที่ทํางานอยู่ที่ 6 ชั่วโมง จากเมื่อคุณสร้างลิงก์ OBS ของคุณ",
-          "Your 6-hour trial is active": "การทดลอง 6 ชั่วโมงของคุณ เปิดใช้งาน",
-          "Generate your OBS link to start your 6-hour free trial": "สร้างการเชื่อมโยง OBS ของคุณ เพื่อเริ่มต้นการทดสอบแบบว่าง 6 ชั่วโมง",
+          "Free Plan active · 3 hours from when you generated your OBS link": "การทดลองอิสระที่ทํางานอยู่ที่ 3 ชั่วโมง จากเมื่อคุณสร้างลิงก์ OBS ของคุณ",
+          "Your Free Plan (3 hours) is active": "การทดลอง 3 ชั่วโมงของคุณ เปิดใช้งาน",
+          "Generate your OBS link to start your Free Plan (3 hours)": "สร้างการเชื่อมโยง OBS ของคุณ เพื่อเริ่มต้นการทดสอบแบบว่าง 3 ชั่วโมง",
           "⏰ EXPIRED": "○ มี เหตุ ผล",
           "Your free trial has ended · upgrade to keep streaming": "การทดลองอิสระของนายสิ้นสุดการอัพเกรดแล้ว",
           "Trial expired — upgrade to continue": "การ ทดสอบ สิ้น สุด ลง — การอัพเดต ต่อ ไป",
@@ -7542,7 +7542,7 @@
           "Upgrade Now →": "ปรับรุ่นเดี๋ยวนี้",
           "FREE": "อิสระ",
           "Your first stream is free · sign up to get your OBS link": "สายแรกของคุณ เข้าสู่ระบบโอบีเอสเพื่อเชื่อมต่อ",
-          "Enter your email to start your free 6-hour trial": "เติมอีเมลของคุณเพื่อเริ่มการทดสอบ 6 ชั่วโมงแบบว่าง",
+          "Enter your email to start your Free Plan (3 hours)": "เติมอีเมลของคุณเพื่อเริ่มการทดสอบ 3 ชั่วโมงแบบว่าง",
           "(supported: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)": "(รองรับ: OBS, Streamlabs, Twitch Studio, vMix, XSplit, Meld, Ecamm Live, ManyCam, PRISM, Streamlabs Mobile, IRL Pro)",
           "→ click": "→",
           "Upgrade →": "อัปเกรด →",
public/llms-full.txt changed +1 -1
diff --git a/public/llms-full.txt b/public/llms-full.txt
index d7c8517da..3d2300b09 100644
--- a/public/llms-full.txt
+++ b/public/llms-full.txt
@@ -53,7 +53,7 @@ StreamTranslate works with any streaming platform that supports OBS or browser-s
 
 ## Pricing
 
-All prices in USD. Free 6-hour trial available with no credit card required.
+All prices in USD. Free Plan available with no credit card required (3 hours).
 
 | Plan | Price | Hours | Languages | Features |
 |------|-------|-------|-----------|----------|
public/llms.txt changed +3 -3
diff --git a/public/llms.txt b/public/llms.txt
index 050697200..5629f2998 100644
--- a/public/llms.txt
+++ b/public/llms.txt
@@ -16,7 +16,7 @@ StreamTranslate is a live stream translation and captions tool for Twitch, YouTu
 - Same-language captions mode for accessibility (English in → English captions out for deaf/HoH viewers)
 - Translation mode for international audiences (English in → Spanish/Korean/Japanese/etc. out)
 - Dual-language display available on Pro and Elite plans
-- Free trial available with no credit card required (6 hours)
+- Free Plan available with no credit card required (3 hours)
 - WCAG 2.1 Level AA-aligned for live caption accessibility (criteria 1.2.4, 1.4.3, 1.4.4, 1.4.10)
 - Watch Party mode: translate audio from any browser tab (Netflix, YouTube, sports streams) — Elite plan
 
@@ -107,7 +107,7 @@ StreamTranslate is a live stream translation and captions tool for Twitch, YouTu
 
 ## How It Works
 
-1. Streamer signs up at streamtranslate.live (no credit card, 6 hours free trial).
+1. Streamer signs up at streamtranslate.live (no credit card, 3-hour Free Plan).
 2. Selects spoken (source) language and target caption/translation language. For pure same-language captions, set both to the same language.
 3. StreamTranslate generates a unique browser source URL.
 4. Streamer adds the URL to OBS Studio (or Streamlabs/XSplit/Twitch Studio) as a Browser Source at 1920x1080.
@@ -136,7 +136,7 @@ Q: Does Twitch have built-in stream translation?
 A: No. Twitch does not offer built-in stream translation or real-time subtitle translation. StreamTranslate fills this gap by adding translated subtitles via an OBS browser source overlay.
 
 Q: Is there a free trial?
-A: Yes — 6 hours of full-feature access, no credit card required.
+A: Yes — the Free Plan gives 3 hours of full-feature access, no credit card required.
 
 Q: Can StreamTranslate add captions for deaf or hearing-impaired viewers?
 A: Yes. Set source and target language to the same language for same-language captioning. WCAG 2.1 Level AA-aligned with sub-500ms latency, customizable font size (20-80px), high-contrast outline, and adjustable position.
server.js changed +214 -50
diff --git a/server.js b/server.js
index ec4c21f03..c9afa0e69 100644
--- a/server.js
+++ b/server.js
@@ -2000,7 +2000,7 @@ const SEO_BANNER_SKIP = new Set([
   '/channels', '/channels.html',
 ]);
 const SEO_PIXEL_TAG = '<script src="/js/st-pixels.js" async></script>';
-const SEO_BANNER_HTML = SEO_PIXEL_TAG + '<div id="st-promo-bar" style="position:sticky;top:60px;z-index:50;background:#000;color:#fff;padding:10px 16px;text-align:center;font-size:14px;font-weight:600;font-family:system-ui,-apple-system,sans-serif;border-bottom:1px solid rgba(255,255,255,0.1);display:flex;align-items:center;justify-content:center;gap:12px;flex-wrap:wrap;"><span>\u{1f3af} Try StreamTranslate free for your next stream \u2014 60-second setup, no card required</span><a href="/control/" style="background:#fff;color:#08080f;padding:6px 16px;border-radius:50px;text-decoration:none;font-weight:700;display:inline-block;">Start Free Trial \u2192</a><button onclick="this.parentElement.style.display=\'none\';try{localStorage.setItem(\'st_promo_dismissed\',\'1\')}catch(e){}" style="background:transparent;border:0;color:rgba(255,255,255,0.7);font-size:18px;cursor:pointer;line-height:1;padding:0 4px;" aria-label="Dismiss">\u00d7</button></div><script>try{if(localStorage.getItem(\'st_promo_dismissed\')===\'1\'){var b=document.getElementById(\'st-promo-bar\');if(b)b.style.display=\'none\';}}catch(e){}</script>';
+const SEO_BANNER_HTML = SEO_PIXEL_TAG + '<div id="st-promo-bar" style="position:sticky;top:60px;z-index:50;background:#000;color:#fff;padding:10px 16px;text-align:center;font-size:14px;font-weight:600;font-family:system-ui,-apple-system,sans-serif;border-bottom:1px solid rgba(255,255,255,0.1);display:flex;align-items:center;justify-content:center;gap:12px;flex-wrap:wrap;"><span>\u{1f3af} Try StreamTranslate free for your next stream \u2014 60-second setup, no card required</span><a href="/control/" style="background:#fff;color:#08080f;padding:6px 16px;border-radius:50px;text-decoration:none;font-weight:700;display:inline-block;">Start Free Plan \u2192</a><button onclick="this.parentElement.style.display=\'none\';try{localStorage.setItem(\'st_promo_dismissed\',\'1\')}catch(e){}" style="background:transparent;border:0;color:rgba(255,255,255,0.7);font-size:18px;cursor:pointer;line-height:1;padding:0 4px;" aria-label="Dismiss">\u00d7</button></div><script>try{if(localStorage.getItem(\'st_promo_dismissed\')===\'1\'){var b=document.getElementById(\'st-promo-bar\');if(b)b.style.display=\'none\';}}catch(e){}</script>';
 
 // Tiny LRU cache so we don't re-read every request (max 700 entries, 5min TTL)
 const _seoBannerCache = new Map();
@@ -2645,7 +2645,7 @@ app.get('/og-home', (req, res) => {
                 "name": "Is StreamTranslate free?",
                 "acceptedAnswer": {
                   "@type": "Answer",
-                  "text": "StreamTranslate offers a 6-hour free trial with no credit card required. After the trial, paid plans start at $14.99/month for the Starter plan (25 hrs). A $9.99 Stream Pass is also available for one full stream session (up to 12 hours)."
+                  "text": "StreamTranslate offers a free plan with 3 hours of streaming and no credit card required. After that, paid plans start at $14.99/month for the Starter plan (25 hrs). A $9.99 Stream Pass is also available for one full stream session (up to 12 hours)."
                 }
               },
               {
@@ -3115,7 +3115,7 @@ app.get('/contact', (req, res) => {
 
 // â"— TRIAL SYSTEM â"—
 const PREVIEW_MS = 6 * 60 * 60 * 1000;    // 6h free preview (page-load based, before email signup)
-const TRIAL_HOURS_CAP = 6;                // 6h free trial — tracked by active OBS usage (hours_used_this_period)
+const TRIAL_HOURS_CAP = 3;                // Free Plan: 3h — tracked by active OBS usage (hours_used_this_period). Cut from 6h 2026-07-23 per Zeus.
 
 // â"— DATABASE (Postgres) â"—
 const { Pool } = require('pg');
@@ -3619,6 +3619,18 @@ async function getHoursUsed(fingerprint) {
   return { hoursUsed: Number(rec.hours_used_this_period) || 0, hourCap };
 }
 
+// Pure/sync counterpart to getHoursUsed() for batch/cron contexts (e.g. the daily lifecycle
+// email job) where doing a live DB round-trip per row isn't practical. Mirrors the exact same
+// 30-day rolling-period reset rule so a Free Plan account that rolled into a fresh period
+// doesn't get a stale "your trial expired" email. Read-only — the live app still persists the
+// real reset via getHoursUsed() itself the next time the account is actually used.
+function periodAdjustedHoursUsed(rec, now = Date.now()) {
+  if (!rec) return 0;
+  const periodStart = rec.period_start ? Number(rec.period_start) : null;
+  if (!periodStart || (now - periodStart) > THIRTY_DAYS_MS) return 0;
+  return Number(rec.hours_used_this_period) || 0;
+}
+
 // 2026-06-04: Compliance wrapper — all email sends route through this so List-Unsubscribe
 // headers + unsub footer + suppression check are GUARANTEED. Don't call resend.emails.send
 // directly anywhere. (Twitch extension review flagged broken unsub flow.)
@@ -4508,7 +4520,7 @@ function createRoomId() {
   return `${rand}-${ts}`;
 }
 
-function calcTrialStatus(rec, paid) {
+async function calcTrialStatus(rec, paid) {
   // Pass plan — active hours only (pass_hours_used vs pass_hours_cap)
   if (paid && rec && rec.plan === 'pass') {
     const used = Number(rec.pass_hours_used) || 0;
@@ -4522,9 +4534,12 @@ function calcTrialStatus(rec, paid) {
   if (rec.paid) {
     return { status: 'expired', hoursUsed: 0, hoursCap: 0, msLeft: 0 };
   }
-  // Trial — active hours only (hours_used_this_period vs TRIAL_HOURS_CAP)
+  // Trial / Free Plan — active hours only (hours_used_this_period vs TRIAL_HOURS_CAP).
+  // 2026-07-24: routed through getHoursUsed() so Free Plan accounts get the SAME 30-day
+  // rolling reset paid plans already get, instead of reading the raw (never-reset) column.
+  // getHoursUsed() persists the reset to the DB itself when the period has rolled over.
   if (rec.trial_started_at) {
-    const hoursUsed = Number(rec.hours_used_this_period) || 0;
+    const { hoursUsed } = await getHoursUsed(rec.fingerprint);
     if (hoursUsed >= TRIAL_HOURS_CAP) return { status: 'expired', hoursUsed, hoursCap: TRIAL_HOURS_CAP, msLeft: 0 };
     return { status: 'trial', hoursUsed, hoursCap: TRIAL_HOURS_CAP, msLeft: 0 };
   }
@@ -9003,7 +9018,7 @@ app.get('/api/state', checkSessionLimiter, async (req, res) => {
         paid = await isPaidRoom(roomId, rec.fingerprint);
       }
     }
-    const trial = rec ? calcTrialStatus(rec, paid) : { status: 'preview', msLeft: PREVIEW_MS };
+    const trial = rec ? await calcTrialStatus(rec, paid) : { status: 'preview', msLeft: PREVIEW_MS };
     // Check hour cap for paid subscription plans
     let hourCapInfo = null;
     if (paid && rec && rec.fingerprint) {
@@ -9022,7 +9037,7 @@ app.get('/api/state', checkSessionLimiter, async (req, res) => {
       trialExpired: trial.status === 'expired',
       trialStatus:  trial.status,
       msLeft:       trial.msLeft || 0,
-      hoursUsed:    trial.hoursUsed || (rec ? Number(rec.hours_used_this_period) || 0 : 0),
+      hoursUsed:    trial.hoursUsed ?? (rec ? Number(rec.hours_used_this_period) || 0 : 0),
       hoursCap:     trial.hoursCap || (trial.status === 'trial' ? TRIAL_HOURS_CAP : null),
       needsEmail:   trial.status === 'needs-email',
       plan:         rec?.plan || _entPlan || 'trial',
@@ -9068,7 +9083,7 @@ app.post('/api/check-session', checkSessionLimiter, async (req, res) => {
 	      console.log(`[check-session] reassigned default room for fp:${rec.fingerprint} → ${resolvedRoomId}`);
 	    }
 
-    const trial = calcTrialStatus(rec, paid);
+    const trial = await calcTrialStatus(rec, paid);
     // If user has email but trial hasn't started, they're signed-up (not preview/needs-email)
 	    const status = (!rec.paid && rec.email && !rec.trial_started_at && !paid) ? 'signed-up' : trial.status;
     // Include hours data for paid users so client can show 80% warning banner
@@ -9293,7 +9308,7 @@ app.post('/api/fingerprint', fingerprintLimiter, async (req, res) => {
 	      hoursData = { hoursUsed, hourCap };
 	    }
 
-	    const trial = calcTrialStatus(rec, paid);
+	    const trial = await calcTrialStatus(rec, paid);
 
     // Preview expired without email - just show needs-email (no redirect/invalidation)
     if (trial.status === 'needs-email' && !rec.email && !rec.trial_started_at && !paid) {
@@ -9406,7 +9421,7 @@ app.post('/api/start-trial', trialLimiter, async (req, res) => {
   try {
     const ipCheck = await pool.query('SELECT COUNT(*) FROM trial_data WHERE signup_ip = $1 AND trial_started_at IS NOT NULL', [clientIp]);
     if (parseInt(ipCheck.rows[0].count) >= 3) {
-      return res.status(429).json({ error: 'Maximum free trials reached from this network. Please upgrade to continue.' });
+      return res.status(429).json({ error: 'Maximum free plans reached from this network. Please upgrade to continue.' });
     }
   } catch(e) { /* column might not exist yet, allow through */ }
 
@@ -9429,17 +9444,19 @@ app.post('/api/start-trial', trialLimiter, async (req, res) => {
       rec = { fingerprint, room_id: roomId, email: null, first_seen: Date.now(), trial_started_at: null, verify_token: null, verify_token_sent_at: null };
     }
 
-    // One trial per fingerprint - if this device already used all trial hours, block
+    // One trial per fingerprint - if this device already used all trial hours, block.
+    // 2026-07-24: getHoursUsed() applies the same 30-day rolling reset paid plans get,
+    // instead of reading the raw (never-reset) column — Free Plan now actually renews monthly.
     if (rec.trial_started_at) {
-      const hoursUsed = Number(rec.hours_used_this_period) || 0;
+      const { hoursUsed } = await getHoursUsed(rec.fingerprint);
       if (hoursUsed >= TRIAL_HOURS_CAP) {
-        return res.status(400).json({ error: "You've already used your free trial hours. Please upgrade to continue." });
+        return res.status(400).json({ error: "You've already used your Free Plan hours. Please upgrade to continue." });
       }
     }
 
     // Already verified and active
     if (rec.trial_started_at) {
-      const hoursUsed = Number(rec.hours_used_this_period) || 0;
+      const { hoursUsed } = await getHoursUsed(rec.fingerprint);
       const status = hoursUsed >= TRIAL_HOURS_CAP ? 'expired' : 'trial';
       return res.json({ status, hoursUsed, hoursCap: TRIAL_HOURS_CAP, msLeft: 0, email: rec.email || null });
     }
@@ -9448,7 +9465,7 @@ app.post('/api/start-trial', trialLimiter, async (req, res) => {
     const dupeCheck = await pool.query('SELECT fingerprint, trial_started_at, session_token, room_id, hours_used_this_period FROM trial_data WHERE email = $1 AND fingerprint != $2 AND trial_started_at IS NOT NULL', [email, fingerprint]);
     if (dupeCheck.rows.length > 0) {
       const existing = dupeCheck.rows[0];
-      const existingHours = Number(existing.hours_used_this_period) || 0;
+      const { hoursUsed: existingHours } = await getHoursUsed(existing.fingerprint);
       if (existingHours < TRIAL_HOURS_CAP) {
         // Trial still active - tell user to log in
         return res.json({ status: 'login-required', message: 'This email already has an active trial. Use "Already have an account?" to log in.' });
@@ -9625,7 +9642,7 @@ app.post('/api/start-trial-obs', startTrialObsLimiter, async (req, res) => {
     const paid = await isPaidRoom(roomId, rec.fingerprint);
     if (paid) {
       // Pass user — hours tracked by active OBS usage (pass_hours_used vs pass_hours_cap)
-      const trial = calcTrialStatus(rec, true);
+      const trial = await calcTrialStatus(rec, true);
       return res.json({ status: trial.status, hoursUsed: trial.hoursUsed || 0, hoursCap: trial.hoursCap || 0, msLeft: 0 });
     }
     // Mark trial as activated (so we know they're a trial user) but don't start a wall clock
@@ -9645,7 +9662,7 @@ app.post('/api/start-trial-obs', startTrialObsLimiter, async (req, res) => {
       console.log(`[trial] OBS link generated - trial activated for ${rec.email} room ${roomId} (hours tracked on OBS use)`);
     }
     logAudioEvent(roomId, rec.fingerprint, 'obs_url_generated', { plan: rec.plan || 'trial', email: rec.email }).catch(()=>{});
-    const trial = calcTrialStatus(rec, false);
+    const trial = await calcTrialStatus(rec, false);
     res.json({ status: trial.status, hoursUsed: trial.hoursUsed || 0, hoursCap: trial.hoursCap || TRIAL_HOURS_CAP });
   } catch(e) {
     console.error('[start-trial-obs]', e.message);
@@ -9719,8 +9736,17 @@ app.post('/api/send-login-code', authLimiter, async (req, res) => {
 
 // Verify login code
 app.post('/api/verify-login-code', authLimiter, async (req, res) => {
-  const { email, code, fingerprint } = req.body;
-  if (!email || !code) return res.status(400).json({ error: 'Email and code required' });
+  const { code, fingerprint } = req.body;
+  // 2026-07-24: /api/send-login-code normalizes the email (trim, lowercase, Gmail
+  // dot/plus stripping) via validateEmail() before storing/looking it up -- this endpoint
+  // was using the RAW req.body.email with no normalization, so any case/whitespace/alias
+  // difference between the two requests made the lookup silently miss and return the
+  // misleading "No account found" even when the account (and the code) definitely exist.
+  const rawEmail = req.body && req.body.email;
+  if (!rawEmail || !code) return res.status(400).json({ error: 'Email and code required' });
+  const validation = validateEmail(rawEmail);
+  if (!validation.ok) return res.status(400).json({ error: validation.reason });
+  const email = validation.email;
 
   // Brute-force lockout: max 10 failed attempts per email per 15 min
   if (!checkLoginBruteForce(email)) {
@@ -9754,7 +9780,7 @@ app.post('/api/verify-login-code', authLimiter, async (req, res) => {
     );
 
     const paid = await hasPaidAccess(rec);
-    const trial = calcTrialStatus(rec, paid);
+    const trial = await calcTrialStatus(rec, paid);
     // If no trial started yet and signed up, return signed-up status
     const responseStatus = (!rec.trial_started_at && !paid) ? 'signed-up' : trial.status;
 
@@ -12070,6 +12096,125 @@ function getDgLang(sourceLang) {
   return DG_LANG_MAP[sourceLang] || 'en-US';
 }
 
+function speechmaticsLang(sourceLang) {
+  if (!sourceLang) return 'en';
+  if (sourceLang.startsWith('yue')) return 'yue';
+  if (sourceLang.startsWith('zh')) return 'cmn';
+  return sourceLang.split('-')[0];
+}
+function createSpeechmaticsAdapter({ sourceLang, model, maxDelay }) {
+  const { WebSocket: SMWebSocket } = require('ws');
+  const { EventEmitter } = require('events');
+  const { LiveTranscriptionEvents: SMEvents } = require('@deepgram/sdk');
+  const em = new EventEmitter();
+  let seq = 0;
+  let closed = false;
+  // 2026-07-20 v2: Deepgram-style sentence confirmation. Speechmatics finalizes tiny
+  // fragments continuously (each was hitting the pipeline as its own final = one
+  // translation per word, "translation spam"). We buffer confirmed fragments, keep the
+  // gray draft line updated, and emit ONE final on EndOfUtterance / size cap / 6s hold.
+  let smBuf = '';
+  let smBufConfSum = 0;
+  let smBufConfN = 0;
+  let smBufStartAt = 0;
+  const smFlushFinal = () => {
+    const t = smBuf.trim();
+    smBuf = ''; smBufStartAt = 0;
+    const conf = smBufConfN ? (smBufConfSum / smBufConfN) : 0.9;
+    smBufConfSum = 0; smBufConfN = 0;
+    if (!t) return;
+    em.emit(SMEvents.Transcript, {
+      is_final: true,
+      speech_final: true,
+      channel: { alternatives: [{ transcript: t, confidence: conf }] },
+    });
+  };
+  const lang = speechmaticsLang(sourceLang);
+  const sock = new SMWebSocket('wss://global.rt.speechmatics.com/v2/', {
+    headers: { Authorization: `Bearer ${process.env.SPEECHMATICS_API_KEY}` },
+  });
+  sock.on('open', () => {
+    try {
+      sock.send(JSON.stringify({
+        message: 'StartRecognition',
+        audio_format: { type: 'raw', encoding: 'pcm_s16le', sample_rate: 16000 },
+        transcription_config: {
+          language: lang,
+          // their live schema rejects the documented `model` field (no melia on RT) —
+          // default = standard model; ?stt_model=enhanced maps to operating_point.
+          ...(model ? { operating_point: model } : {}),
+          enable_partials: true,
+          // 2026-07-20 v2: segments finalize FAST internally (0.7 floor) but are buffered
+          // below and only confirmed as ONE sentence when the speaker pauses — the speed
+          // dial now controls that pause length (EndOfUtterance trigger, capped at 2s).
+          max_delay: 0.7,
+          max_delay_mode: 'fixed',
+          conversation_config: { end_of_utterance_silence_trigger: Math.min(2, maxDelay || 0.8) },
+          transcript_filtering_config: { remove_disfluencies: true },
+        },
+      }));
+    } catch (e) { em.emit(SMEvents.Error, e); }
+  });
+  sock.on('message', (buf, isBinary) => {
+    if (isBinary) return;
+    let msg; try { msg = JSON.parse(buf.toString()); } catch (_) { return; }
+    if (msg.message === 'RecognitionStarted') { em.emit(SMEvents.Open); return; }
+    if (msg.message === 'AddPartialTranscript') {
+      const t = ((msg.metadata && msg.metadata.transcript) || '').trim();
+      const draft = (smBuf + ' ' + t).trim();
+      if (!draft) return;
+      // gray draft = everything confirmed-so-far in the buffer + the live partial
+      em.emit(SMEvents.Transcript, {
+        is_final: false,
+        speech_final: false,
+        channel: { alternatives: [{ transcript: draft, confidence: 0 }] },
+      });
+      return;
+    }
+    if (msg.message === 'AddTranscript') {
+      const t = ((msg.metadata && msg.metadata.transcript) || '').trim();
+      if (t) {
+        let conf = 0.9;
+        try {
+          const words = (msg.results || []).filter(r => r.type === 'word' && r.alternatives && r.alternatives[0]);
+          if (words.length) conf = words.reduce((s, w) => s + (w.alternatives[0].confidence || 0), 0) / words.length;
+        } catch (_) {}
+        smBuf = (smBuf + ' ' + t).trim();
+        smBufConfSum += conf; smBufConfN++;
+        if (!smBufStartAt) smBufStartAt = Date.now();
+        // keep the gray draft current while the sentence builds
+        em.emit(SMEvents.Transcript, {
+          is_final: false,
+          speech_final: false,
+          channel: { alternatives: [{ transcript: smBuf, confidence: 0 }] },
+        });
+        // safety flushes: monologue with no pauses (size cap) or 6s max hold
+        if (smBuf.length > 220 || Date.now() - smBufStartAt > 6000) smFlushFinal();
+      }
+      return;
+    }
+    if (msg.message === 'EndOfUtterance') { smFlushFinal(); return; }
+    if (msg.message === 'Error') {
+      const err = new Error(`speechmatics ${msg.type}: ${msg.reason}`);
+      // permanent config errors get status 400 so the existing permanent-error path
+      // closes cleanly instead of reconnect-looping
+      if (['invalid_language', 'invalid_model', 'invalid_config', 'not_authorised', 'not_allowed'].includes(msg.type)) err.status = 400;
+      em.emit(SMEvents.Error, err);
+    }
+  });
+  sock.on('error', (e) => { if (!closed) em.emit(SMEvents.Error, e); });
+  sock.on('close', () => { closed = true; em.emit(SMEvents.Close); });
+  em.send = (chunk) => { try { if (sock.readyState === 1) { seq++; sock.send(chunk); } } catch (_) {} };
+  em.keepAlive = () => {}; // no app-level keepalive needed (Speechmatics idle limit is 1h)
+  em.finish = () => {
+    try { smFlushFinal(); } catch (_) {}
+    try { if (sock.readyState === 1) sock.send(JSON.stringify({ message: 'EndOfStream', last_seq_no: seq })); } catch (_) {}
+    setTimeout(() => { try { sock.close(); } catch (_) {} }, 500);
+  };
+  return em;
+}
+
+
 // â"— AUDIO WEBSOCKET â"—
 const audioWss = new WebSocketServer({ noServer: true });
 
@@ -12095,6 +12240,8 @@ audioWss.on('connection', async (ws, req) => {
   ws.on('pong', () => { ws.isAlive = true; });
   const url = new URL(req.url, `http://localhost`);
   const roomId = url.searchParams.get('room');
+  // STT engine override for the Speechmatics A/B test (staging only)
+  const sttEngineParam = url.searchParams.get('stt') || null;
   // Reject audio connections with no room — prevents leaking audio into 'default' room
   if (!roomId || roomId === 'default') {
     console.warn('[audio] rejected connection with no/default room param');
@@ -12242,7 +12389,7 @@ audioWss.on('connection', async (ws, req) => {
   try {
     const paid = await isPaidRoom(roomId, wsFingerprint);
     if (!paid) {
-      const status = calcTrialStatus(authRec, false);
+      const status = await calcTrialStatus(authRec, false);
       if (status.status === 'expired') {
         console.log(`[trial] audio WS blocked — trial expired for fp:${wsFingerprint} room:${roomId}`);
         logAudioEvent(roomId, wsFingerprint, 'audio_ws_rejected', {
@@ -12392,7 +12539,7 @@ audioWss.on('connection', async (ws, req) => {
       }
       if (!paid) {
         const rec = await getRecord(fingerprint);
-        const status = calcTrialStatus(rec, false);
+        const status = await calcTrialStatus(rec, false);
         if (status.status === 'expired') {
           console.log(`[trial] mid-stream audio WS expired for fp:${fingerprint} room:${roomId} hoursUsed:${status.hoursUsed}`);
           clearInterval(trialCheckInterval);
@@ -12562,7 +12709,15 @@ audioWss.on('connection', async (ws, req) => {
         vad_events:       true,
         ...(useKeyterms ? { keywords: GAMING_KEYTERMS } : {}),
       };
-      conn = dg.listen.live(dgConfig);
+      const useSpeechmatics = sttEngineParam === 'speechmatics' && !!process.env.SPEECHMATICS_API_KEY;
+      conn = useSpeechmatics
+        ? createSpeechmaticsAdapter({
+            sourceLang: room.sourceLang,
+            model: url.searchParams.get('stt_model') || null,
+            maxDelay: (() => { const v = parseFloat(url.searchParams.get('stt_delay')); return (v >= 0.7 && v <= 4) ? v : null; })(),
+          })
+        : dg.listen.live(dgConfig);
+      if (useSpeechmatics) console.log(`[${roomId}] STT engine: SPEECHMATICS lang=${speechmaticsLang(room.sourceLang)} op=${url.searchParams.get('stt_model') || 'standard'} (A/B test)`);
       dgConnection = conn;
       console.log(`[${roomId}] Deepgram: gen=${connGen}, model=${dgModel}, lang=${dgLangParam}, dualLang=${isDualLang}, keyterms=${useKeyterms}`);
     } catch (err) {
@@ -14128,9 +14283,11 @@ io.on('connection', (socket) => {
             await pool.query('UPDATE trial_data SET trial_started_at=$1 WHERE fingerprint=$2', [Date.now(), rec.fingerprint]);
             console.log(`[trial] activated for ${maskEmail(rec.email)} on OBS connect - room ${roomId} (hours tracked by heartbeat)`);
           }
-          // Check trial hour cap before allowing OBS overlay to connect
+          // Check trial hour cap before allowing OBS overlay to connect.
+          // 2026-07-24: getHoursUsed() applies the 30-day rolling reset so a Free Plan
+          // account that rolled into a new period isn't wrongly blocked from connecting.
           if (!isPreviewOverlay && !paid && rec.trial_started_at) {
-            const hoursUsed = Number(rec.hours_used_this_period) || 0;
+            const { hoursUsed } = await getHoursUsed(rec.fingerprint);
             if (hoursUsed >= TRIAL_HOURS_CAP) {
               console.log(`[trial] OBS connect blocked for ${rec.email} — trial hours exhausted (${hoursUsed.toFixed(1)}/${TRIAL_HOURS_CAP}h)`);
               socket.emit('trial-expired', { hoursUsed, hoursCap: TRIAL_HOURS_CAP });
@@ -14204,14 +14361,16 @@ io.on('connection', (socket) => {
                 preConsumed: true,
               }).then(() => { socket._usageLastSaved = hbNow; })
                 .catch(e => console.warn('[heartbeat] hours/overage save failed:', e.message));
-              // Mid-stream trial check — emit trial-expired if cap crossed during this heartbeat
+              // Mid-stream trial check — emit trial-expired if cap crossed during this heartbeat.
+              // 2026-07-24: getHoursUsed() applies the 30-day rolling reset so a Free Plan
+              // account that rolled into a new period mid-stream isn't wrongly cut off.
               try {
-                const hbRec = await pool.query('SELECT hours_used_this_period, paid, plan, pass_hours_used, pass_hours_cap FROM trial_data WHERE fingerprint=$1', [socket._usageFingerprint]);
-                if (hbRec.rows.length > 0) {
-                  const r = hbRec.rows[0];
-                  if (!r.paid && (Number(r.hours_used_this_period) || 0) >= TRIAL_HOURS_CAP) {
-                    console.log(`[trial] mid-stream expiry for fingerprint ${socket._usageFingerprint} — ${Number(r.hours_used_this_period).toFixed(2)}/${TRIAL_HOURS_CAP}h used`);
-                    socket.emit('trial-expired', { hoursUsed: Number(r.hours_used_this_period), hoursCap: TRIAL_HOURS_CAP });
+                const hbRec = await pool.query('SELECT paid FROM trial_data WHERE fingerprint=$1', [socket._usageFingerprint]);
+                if (hbRec.rows.length > 0 && !hbRec.rows[0].paid) {
+                  const { hoursUsed } = await getHoursUsed(socket._usageFingerprint);
+                  if (hoursUsed >= TRIAL_HOURS_CAP) {
+                    console.log(`[trial] mid-stream expiry for fingerprint ${socket._usageFingerprint} — ${hoursUsed.toFixed(2)}/${TRIAL_HOURS_CAP}h used`);
+                    socket.emit('trial-expired', { hoursUsed, hoursCap: TRIAL_HOURS_CAP });
                     socket.disconnect(true);
                   }
                 }
@@ -14525,12 +14684,12 @@ io.on('connection', (socket) => {
                 .then(() => { socket._usageLastSaved = hbNow; })
                 .catch(e => console.warn('[heartbeat-owner] hours/overage save failed:', e.message));
               try {
-                const hbRec = await pool.query('SELECT hours_used_this_period, paid, plan, pass_hours_used, pass_hours_cap FROM trial_data WHERE fingerprint=$1', [socket._usageFingerprint]);
-                if (hbRec.rows.length > 0) {
-                  const r = hbRec.rows[0];
-                  if (!r.paid && (Number(r.hours_used_this_period) || 0) >= TRIAL_HOURS_CAP) {
-                    console.log(`[trial] mid-stream expiry for fingerprint ${socket._usageFingerprint} — ${Number(r.hours_used_this_period).toFixed(2)}/${TRIAL_HOURS_CAP}h used`);
-                    socket.emit('trial-expired', { hoursUsed: Number(r.hours_used_this_period), hoursCap: TRIAL_HOURS_CAP });
+                const hbRec = await pool.query('SELECT paid FROM trial_data WHERE fingerprint=$1', [socket._usageFingerprint]);
+                if (hbRec.rows.length > 0 && !hbRec.rows[0].paid) {
+                  const { hoursUsed } = await getHoursUsed(socket._usageFingerprint);
+                  if (hoursUsed >= TRIAL_HOURS_CAP) {
+                    console.log(`[trial] mid-stream expiry for fingerprint ${socket._usageFingerprint} — ${hoursUsed.toFixed(2)}/${TRIAL_HOURS_CAP}h used`);
+                    socket.emit('trial-expired', { hoursUsed, hoursCap: TRIAL_HOURS_CAP });
                   }
                 }
               } catch(e) {}
@@ -14963,7 +15122,7 @@ app.post('/api/checkout', checkoutLimiter, async (req, res) => {
       // Local-currency presentment sharply cuts those declines; Stripe handles FX conversion.
       // Falls back to USD wherever conversion isn't available, so it's zero-risk to enable.
       adaptive_pricing: { enabled: true },
-      success_url: `${BASE_URL}/success?room=${roomId}&plan=${encodeURIComponent(plan||'')}&value=${({trial:5,pass:9.99,starter:14.99,pro:34.99,unlimited:149,captions:4.99,starter_annual:149,pro_annual:349,unlimited_annual:1490})[plan]||''}&currency=usd&session_id={CHECKOUT_SESSION_ID}${rec?.auth_method === 'twitch_ext' ? '&from=twitch-ext' : ''}`,
+      success_url: `${BASE_URL}/success?room=${roomId}${rec?.auth_method === 'twitch_ext' ? '&from=twitch-ext' : ''}`,
       cancel_url:  `${BASE_URL}/control?room=${roomId}&checkout=cancelled${rec?.auth_method === 'twitch_ext' ? '&from=twitch-ext' : ''}`,
       metadata: { roomId, fingerprint: fingerprint || '', plan },
     };
@@ -15943,7 +16102,7 @@ app.post('/api/account', accountLimiter, async (req, res) => {
       getHoursUsed(rec.fingerprint),
       rec.plan ? Promise.resolve(null) : activeEntitlementPlan(rec),
     ]);
-    const trial = calcTrialStatus(rec, paid);
+    const trial = await calcTrialStatus(rec, paid);
     const usage = usageRes.rows[0];
     const { hoursUsed, hourCap } = hours;
 
@@ -16085,7 +16244,7 @@ const CHAT_SYSTEM_PROMPT = `You are a support bot for StreamTranslate (streamtra
 FACTS:
 - StreamTranslate adds real-time translated subtitles to live streams via OBS/Streamlabs/Kick Studio Browser Source
 - Setup: streamtranslate.live/control, pick language, GO LIVE, copy OBS URL, add as Browser Source 1920x1080 transparent background
-- Pricing: free 15-min preview, 6-hour free trial (active stream hours only) with email. Paid plans at streamtranslate.live/upgrade
+- Pricing: free 15-min preview, then a Free Plan (3 hours of active streaming, active stream hours only) with email signup. Paid plans at streamtranslate.live/upgrade
 - 29 supported languages: Spanish, Portuguese, French, German, Italian, Dutch, Turkish, Polish, Ukrainian, Swedish, Norwegian, Danish, Finnish, Romanian, Czech, Hungarian, Bulgarian, Slovak, Greek, Thai, Chinese, Japanese, Korean, Russian, Hindi, Arabic, Vietnamese, Indonesian, English
 - Works with any streaming software that has a Browser Source
 
@@ -16278,9 +16437,11 @@ async function runLifecycleEmails() {
 
       const toSend = [];
 
-      // Trial expiring: less than 1 hour of active stream hours remaining (NOT wall clock)
+      // Trial expiring: less than 1 hour of active stream hours remaining (NOT wall clock).
+      // 2026-07-24: period-adjusted so a Free Plan account that just rolled into a fresh
+      // 30-day period isn't wrongly flagged as "about to expire" off a stale prior total.
       if (user.trial_started_at && !user.paid) {
-        const hoursUsed = Number(user.hours_used_this_period) || 0;
+        const hoursUsed = periodAdjustedHoursUsed(user, now);
         const hoursLeft = Math.max(0, TRIAL_HOURS_CAP - hoursUsed);
         if (hoursUsed > 0 && hoursUsed < TRIAL_HOURS_CAP && hoursLeft < 1 && !emailsSent.trial_expiring) {
           // 2026-07-18: per-tier split — burned the trial within 3 days of signup = heavy
@@ -16293,9 +16454,11 @@ async function runLifecycleEmails() {
         }
       }
 
-      // Trial expired: user has actually streamed >= TRIAL_HOURS_CAP active hours (NOT wall clock)
+      // Trial expired: user has actually streamed >= TRIAL_HOURS_CAP active hours (NOT wall clock).
+      // 2026-07-24: period-adjusted — don't send "your trial expired, upgrade" to someone
+      // who actually rolled into a fresh monthly period and has hours available again.
       if (user.trial_started_at && !user.paid) {
-        const hoursUsed = Number(user.hours_used_this_period) || 0;
+        const hoursUsed = periodAdjustedHoursUsed(user, now);
         if (hoursUsed >= TRIAL_HOURS_CAP && !emailsSent.trial_expired) {
           toSend.push({ key: 'trial_expired', template: emailTemplates.trialExpired(user.email) });
         }
@@ -16331,9 +16494,10 @@ async function runLifecycleEmails() {
         toSend.push({ key: 'never_started', template: emailTemplates.neverStartedTrial(user.email) });
       }
 
-      // Post-expiry day 3 follow-up — use last_went_live as proxy for when trial burned out
+      // Post-expiry day 3 follow-up — use last_went_live as proxy for when trial burned out.
+      // 2026-07-24: period-adjusted, same reasoning as trial_expired above.
       if (user.trial_started_at && !user.paid && !emailsSent.trial_expired_day3) {
-        const hoursUsed = Number(user.hours_used_this_period) || 0;
+        const hoursUsed = periodAdjustedHoursUsed(user, now);
         const lastWentLive = Number(user.last_went_live) || Number(user.last_active) || 0;
         const daysSinceLastLive = lastWentLive ? (now - lastWentLive) / (24 * 60 * 60 * 1000) : 0;
         if (hoursUsed >= TRIAL_HOURS_CAP && daysSinceLastLive >= 3) {
@@ -16341,9 +16505,9 @@ async function runLifecycleEmails() {
         }
       }
 
-      // Post-expiry day 7 follow-up
+      // Post-expiry day 7 follow-up. 2026-07-24: period-adjusted, same reasoning as above.
       if (user.trial_started_at && !user.paid && !emailsSent.trial_expired_day7) {
-        const hoursUsed = Number(user.hours_used_this_period) || 0;
+        const hoursUsed = periodAdjustedHoursUsed(user, now);
         const lastWentLive = Number(user.last_went_live) || Number(user.last_active) || 0;
         const daysSinceLastLive = lastWentLive ? (now - lastWentLive) / (24 * 60 * 60 * 1000) : 0;
         if (hoursUsed >= TRIAL_HOURS_CAP && daysSinceLastLive >= 7) {
tests/personal-dictionary.test.js staging only +54 -0
diff --git a/tests/personal-dictionary.test.js b/tests/personal-dictionary.test.js
new file mode 100644
index 000000000..ae57376af
--- /dev/null
+++ b/tests/personal-dictionary.test.js
@@ -0,0 +1,54 @@
+'use strict';
+
+const test = require('node:test');
+const assert = require('node:assert/strict');
+const fs = require('node:fs');
+const path = require('node:path');
+const {
+  MAX_PERSONAL_DICTIONARY_TERMS,
+  MAX_PERSONAL_DICTIONARY_TERM_LENGTH,
+  normalizePersonalDictionary,
+} = require('../lib/personal-dictionary');
+
+const serverSource = fs.readFileSync(path.join(__dirname, '..', 'server.js'), 'utf8');
+const controlSource = fs.readFileSync(path.join(__dirname, '..', 'public', 'control.html'), 'utf8');
+
+test('normalizes, deduplicates, and bounds personal dictionary terms', () => {
+  const terms = normalizePersonalDictionary([
+    '  Bobo  ',
+    'bobo',
+    'Kai\nCenat',
+    '',
+    'x'.repeat(120),
+    ...Array.from({ length: 80 }, (_, index) => `term-${index}`),
+  ]);
+
+  assert.equal(terms[0], 'Bobo');
+  assert.equal(terms[1], 'Kai Cenat');
+  assert.equal(terms[2].length, MAX_PERSONAL_DICTIONARY_TERM_LENGTH);
+  assert.equal(terms.length, MAX_PERSONAL_DICTIONARY_TERMS);
+});
+
+test('requires an account session to read and save the dictionary', () => {
+  const start = serverSource.indexOf("app.post('/api/personal-dictionary'");
+  const end = serverSource.indexOf('// â"— LOADOUTS', start);
+  assert.notEqual(start, -1);
+  assert.notEqual(end, -1);
+  const routes = serverSource.slice(start, end);
+  assert.match(routes, /sessionToken required/);
+  assert.match(routes, /WHERE session_token=\$1/);
+  assert.match(routes, /WHERE session_token=\$2/);
+  assert.doesNotMatch(routes, /fingerprint/);
+});
+
+test('sends personal terms to Deepgram using the model-appropriate prompt', () => {
+  assert.match(serverSource, /dgModel === 'nova-3'[\s\S]*\{ keyterm: personalDictionary \}[\s\S]*\{ keywords: personalDictionary \}/);
+  assert.match(serverSource, /personal_terms=\$\{personalDictionary\.length\}/);
+});
+
+test('Control exposes a signed-in personal dictionary editor', () => {
+  assert.match(controlSource, /Personal Dictionary/);
+  assert.match(controlSource, /openPersonalDictionary\(\)/);
+  assert.match(controlSource, /\/api\/personal-dictionary\/save/);
+  assert.match(controlSource, /Changes apply next time you go live/);
+});
youtube-captions.js staging only +143 -0
diff --git a/youtube-captions.js b/youtube-captions.js
new file mode 100644
index 000000000..cb3145206
--- /dev/null
+++ b/youtube-captions.js
@@ -0,0 +1,143 @@
+/**
+ * YouTube Live Captions — Multi-language support
+ * POSTs translated captions to multiple YouTube ingestion URLs.
+ * Each track = one language + one ingestion URL from YouTube Studio.
+ * Viewer picks their language from YouTube's normal CC menu.
+ */
+
+const ytRooms = new Map(); // roomId -> { tracks: [{lang, ingestionUrl, seq}], enabled, enabledAt }
+
+function init(app, pool) {
+  console.log('[YTCaptions] YouTube Live Captions module loaded (multi-track)');
+
+  // Enable YouTube captions — accepts array of tracks
+  app.post('/api/youtube-captions/enable', async (req, res) => {
+    const { roomId, tracks, sessionToken } = req.body;
+    if (!roomId || !tracks || !Array.isArray(tracks) || tracks.length === 0 || !sessionToken) {
+      return res.status(400).json({ error: 'roomId, tracks array, and sessionToken required' });
+    }
+
+    // Validate session
+    try {
+      const lookup = await pool.query('SELECT fingerprint, room_id FROM trial_data WHERE session_token=$1 LIMIT 1', [sessionToken]);
+      if (lookup.rows.length === 0) return res.status(401).json({ error: 'invalid session' });
+      if (lookup.rows[0].room_id !== roomId) return res.status(403).json({ error: 'room mismatch' });
+    } catch(e) {
+      console.error('[YTCaptions] Auth error:', e.message);
+      return res.status(500).json({ error: 'auth check failed' });
+    }
+
+    // Validate each track
+    var validTracks = [];
+    for (var i = 0; i < tracks.length; i++) {
+      var t = tracks[i];
+      if (!t.lang || !t.ingestionUrl) continue;
+      try { new URL(t.ingestionUrl); } catch(e) { continue; }
+      validTracks.push({ lang: t.lang, ingestionUrl: t.ingestionUrl, seq: 0 });
+    }
+    if (validTracks.length === 0) return res.status(400).json({ error: 'no valid tracks provided' });
+
+    ytRooms.set(roomId, {
+      tracks: validTracks,
+      enabled: true,
+      enabledAt: Date.now()
+    });
+
+    console.log('[YTCaptions] Enabled for room ' + roomId + ' — ' + validTracks.length + ' tracks: ' + validTracks.map(function(t) { return t.lang; }).join(', '));
+    res.json({ ok: true, trackCount: validTracks.length });
+  });
+
+  // Disable YouTube captions for a room
+  app.post('/api/youtube-captions/disable', function(req, res) {
+    var roomId = req.body && req.body.roomId;
+    if (!roomId) return res.status(400).json({ error: 'roomId required' });
+    ytRooms.delete(roomId);
+    console.log('[YTCaptions] Disabled for room ' + roomId);
+    res.json({ ok: true });
+  });
+
+  // Status — returns per-track seq counts
+  app.get('/api/youtube-captions/status', function(req, res) {
+    var roomId = req.query.roomId;
+    if (!roomId) return res.status(400).json({ error: 'roomId required' });
+    var yt = ytRooms.get(roomId);
+    if (!yt || !yt.enabled) return res.json({ enabled: false });
+    res.json({
+      enabled: true,
+      tracks: yt.tracks.map(function(t) { return { lang: t.lang, seq: t.seq }; })
+    });
+  });
+
+  // Return hooks for the subtitle pipeline
+  return {
+    onSubtitle: function(roomId, data, interim, translateFn) {
+      // Only send finals to YouTube — interims cause flickering
+      if (interim) return;
+
+      var yt = ytRooms.get(roomId);
+      if (!yt || !yt.enabled) return;
+
+      var originalText = data.original || '';
+      if (!originalText.trim()) return;
+
+      var sourceLang = data.sourceLang || 'en';
+      var alreadyTranslatedLang = data.lang;
+      var alreadyTranslatedText = data.translated;
+
+      for (var i = 0; i < yt.tracks.length; i++) {
+        var track = yt.tracks[i];
+
+        if (track.lang === sourceLang) {
+          // Track wants original language — no translation needed
+          postCaption(track, originalText);
+        } else if (track.lang === alreadyTranslatedLang && alreadyTranslatedText) {
+          // Track matches the room's already-translated language — reuse it
+          postCaption(track, alreadyTranslatedText);
+        } else if (translateFn) {
+          // Need a fresh translation for this track's language
+          (function(t) {
+            translateFn(originalText, sourceLang, t.lang, roomId, 5000)
+              .then(function(translated) {
+                if (translated) postCaption(t, translated);
+              })
+              .catch(function() {});
+          })(track);
+        } else {
+          // No translate function — fall back to whatever we have
+          postCaption(track, alreadyTranslatedText || originalText);
+        }
+      }
+    },
+
+    onRoomDisconnect: function(roomId) {
+      if (ytRooms.has(roomId)) {
+        console.log('[YTCaptions] Room disconnected, cleaned up: ' + roomId);
+        ytRooms.delete(roomId);
+      }
+    }
+  };
+}
+
+function postCaption(track, text) {
+  if (!text || !text.trim()) return;
+  var seq = track.seq++;
+  var timestamp = new Date().toISOString().replace('Z', '').slice(0, 23);
+  var body = timestamp + '\n' + text + '\n';
+  var url = track.ingestionUrl + (track.ingestionUrl.includes('?') ? '&' : '?') + 'seq=' + seq;
+
+  fetch(url, {
+    method: 'POST',
+    headers: { 'Content-Type': 'text/plain; charset=utf-8' },
+    body: body
+  }).then(function(res) {
+    if (!res.ok) {
+      res.text().then(function(t) {
+        console.error('[YTCaptions] POST failed [' + track.lang + ']:', res.status, t.substring(0, 200));
+      });
+    }
+  }).catch(function(err) {
+    console.error('[YTCaptions] POST error [' + track.lang + ']:', err.message);
+  });
+}
+
+module.exports = { init };

HTML pages (237) — grouped, with line counts

Click a group to see files; numbers are lines added/removed on staging.

public/ (140 files)
public/accessible-streaming-tools.html+2-2changed
public/ada-compliant-live-streaming.html+2-2changed
public/add-captions-to-live-stream.html+3-3changed
public/add-subtitles-without-obs-plugin.html+10-10changed
public/akkadu-alternative.html+4-4changed
public/akkadu-not-working.html+11-11changed
public/alternatives.html+3-3changed
public/amberscript-not-working.html+5-5changed
public/auto-captions-twitch.html+4-8changed
public/best-live-stream-translation-2026.html+2-2changed
public/best-live-stream-translation-software.html+2-2changed
public/best-live-stream-translation-tool-2026.html+2-2changed
public/best-live-stream-translator.html+2-2changed
public/best-stream-translation-tool-2026.html+2-2changed
public/bibigpt-alternative.html+2-2changed
public/browser-source-captions-obs.html+3-3changed
public/caption-church-livestream.html+10-10changed
public/caption-for-twitch-alternative.html+2-2changed
public/caption-ninja-edge-not-working.html+4-4changed
public/caption-ninja-not-working.html+6-6changed
public/caption-ninja-vs-streamtranslate.html+3-3changed
public/caption-obs-stream-easy.html+10-10changed
public/captions-ai-not-working.html+11-11changed
public/captions-for-hard-of-hearing-viewers.html+3-3changed
public/captions-for-hearing-impaired-twitch.html+3-3changed
public/captions-for-streamers-2026.html+10-10changed
public/captions-on-twitch.html+5-5changed
public/captions-streamers-2026.html+3-4changed
public/castmagic-not-working.html+5-5changed
public/clevercast-alternative.html+2-2changed
public/clevercast-not-working.html+5-5changed
public/closed-captions-for-deaf-viewers.html+2-2changed
public/cloud-based-obs-captions-no-cpu.html+2-2changed
public/cloudvocal-alternative.html+1-1changed
public/cloudvocal-not-working.html+5-5changed
public/control-wp.html+18-18changed
public/control.html+31-30changed
public/dababel-not-working.html+5-5changed
public/deaf-accessible-twitch-streams.html+2-2changed
public/descript-not-working.html+5-5changed
public/disability-accessible-streamer-tools.html+2-2changed
public/easiest-obs-caption-setup.html+4-4changed
public/english-captions-twitch.html+4-4changed
public/english-speaker-japanese-viewers.html+10-10changed
public/english-speaker-korean-viewers.html+10-10changed
public/english-speaker-spanish-viewers.html+10-10changed
public/ezdubs-alternative.html+6-6changed
public/fireflies-not-working.html+5-5changed
public/free-live-captions-streamers.html+20-23changed
public/free-obs-captions-broken-2026.html+3-3changed
public/gaming-stream-real-time-subtitles.html+10-10changed
public/google-meet-captions-alternative.html+1-1changed
public/happy-scribe-not-working.html+5-5changed
public/how-to-monetize-international-viewers.html+10-10changed
public/how-to-stream-for-spanish-viewers.html+2-2changed
public/immersive-translate-alternative.html+2-2changed
public/inclusive-streaming-captions.html+2-2changed
public/kapwing-not-working.html+5-5changed
public/kick-live-captions.html+2-2changed
public/kick-live-translation.html+5-5changed
public/kick-streamer-multilingual.html+10-10changed
public/kudo-alternative.html+1-1changed
public/landing-v3.html+11-11changed
public/languages.html+1-1changed
public/lingo-echo-alternative.html+4-4changed
public/live-captions-for-deaf-streamers.html+2-2changed
public/live-stream-captions-accessibility.html+2-2changed
public/live-stream-captions-software.html+3-3changed
public/live-translate-while-gaming.html+10-10changed
public/livetl-alternative.html+2-2changed
public/livetl-not-working.html+5-5changed
public/localvocal-not-working.html+5-5changed
public/maestra-not-working.html+5-5changed
public/meld-studio-subtitles.html+4-4changed
public/multilingual-conference-livestream.html+10-10changed
public/obs-caption-tool-that-works-on-firefox.html+3-3changed
public/obs-caption-tool-that-works-on-safari.html+3-3changed
public/obs-captions-no-api-key.html+2-2changed
public/obs-live-captions-no-plugin.html+3-3changed
public/obs-live-translation.html+7-7changed
public/obs-subtitle-overlay.html+1-1changed
public/obs-translation-easy-setup.html+10-10changed
public/otter-ai-not-working.html+5-5changed
public/palabra-alternative.html+2-2changed
public/palabra-not-working.html+5-5changed
public/polyglot-not-working.html+5-5changed
public/polyglot-obs-alternative.html+7-7changed
public/pricing.html+54-8changed
public/reach-international-twitch-viewers.html+10-10changed
public/real-time-captions-accessibility.html+3-3changed
public/real-time-stream-subtitles.html+1-1changed
public/rev-not-working.html+5-5changed
public/riverside-not-working.html+5-5changed
public/setup-guide.html+0-240prod only
public/sonix-not-working.html+5-5changed
public/speechify-not-working.html+5-5changed
public/speechly-not-working.html+5-5changed
public/stream-cc-alternatives.html+2-2changed
public/stream-cc-not-working.html+5-5changed
public/stream-in-two-languages.html+10-10changed
public/stream-translation-esports-tournament.html+10-10changed
public/stream-translation-no-credit-card.html+10-10changed
public/stream-translator-alternative.html+3-3changed
public/streamelements-captions-alternative.html+1-1changed
public/streamyard-not-working.html+5-5changed
public/subtitles-for-korean-streamers.html+10-10changed
public/subtitles-for-spanish-streamers-english-audience.html+10-10changed
public/subtitles-that-follow-your-voice.html+10-10changed
public/supported-software.html+2-2changed
public/syncwords-not-working.html+5-5changed
public/talo-alternative.html+2-2changed
public/translate-stream-chat.html+10-10changed
public/translate-stream-for-deaf-viewers.html+10-10changed
public/translate.html+1773-220changed
public/trint-not-working.html+5-5changed
public/twitch-chat-translation-bot.html+2-2changed
public/twitch-international-growth-tool.html+10-10changed
public/twitch-live-captions-2026.html+3-3changed
public/twitch-setup.html+8-21changed
public/twitch-stream-translation.html+2-2changed
public/ultimatecc-not-working.html+5-5changed
public/upgrade.html+54-8changed
public/veed-alternative.html+2-2changed
public/veed-not-working.html+5-5changed
public/verbit-alternative.html+2-2changed
public/verbit-not-working.html+5-5changed
public/voxo-not-working.html+5-5changed
public/vtuber-collab-translation.html+10-10changed
public/vtuber-international-audience-stats.html+1-1changed
public/vtuber-overlay-subtitles.html+2-2changed
public/vtubers.html+1-1changed
public/web-captioner-shutdown.html+4-4changed
public/web-speech-api-deprecated-streaming.html+2-2changed
public/webcaptioner-alternatives.html+2-2changed
public/wordly-not-working.html+5-5changed
public/youtube-live-captions-tool.html+2-2changed
public/youtube-live-multilingual-captions-tool.html+10-10changed
public/youtube-live-multilingual-captions.html+5-5changed
public/youtube-live-translation.html+2-2changed
public/zoom-live-captions-alternative.html+1-1changed
public/ar/ (3 files)
public/ar/stream-cc-alternatives.html+1-1changed
public/ar/twitch-setup.html+7-12changed
public/ar/webcaptioner-alternatives.html+1-1changed
public/bg/ (3 files)
public/bg/stream-cc-alternatives.html+1-1changed
public/bg/twitch-setup.html+7-12changed
public/bg/webcaptioner-alternatives.html+1-1changed
public/blog/ (6 files)
public/blog/best-live-stream-translation-tools.html+2-2changed
public/blog/free-stream-translation.html+3-3changed
public/blog/how-to-translate-live-stream.html+2-2changed
public/blog/live-stream-translation-guide.html+3-3changed
public/blog/multilingual-stream-setup.html+1-1changed
public/blog/stream-translator-obs.html+3-3changed
public/cs/ (3 files)
public/cs/stream-cc-alternatives.html+1-1changed
public/cs/twitch-setup.html+7-12changed
public/cs/webcaptioner-alternatives.html+1-1changed
public/da/ (3 files)
public/da/stream-cc-alternatives.html+1-1changed
public/da/twitch-setup.html+7-12changed
public/da/webcaptioner-alternatives.html+1-1changed
public/de/ (3 files)
public/de/stream-cc-alternatives.html+1-1changed
public/de/twitch-setup.html+7-12changed
public/de/webcaptioner-alternatives.html+1-1changed
public/el/ (3 files)
public/el/stream-cc-alternatives.html+1-1changed
public/el/twitch-setup.html+7-12changed
public/el/webcaptioner-alternatives.html+1-1changed
public/es/ (3 files)
public/es/stream-cc-alternatives.html+1-1changed
public/es/twitch-setup.html+7-12changed
public/es/webcaptioner-alternatives.html+1-1changed
public/fi/ (3 files)
public/fi/stream-cc-alternatives.html+1-1changed
public/fi/twitch-setup.html+7-12changed
public/fi/webcaptioner-alternatives.html+1-1changed
public/fr/ (3 files)
public/fr/stream-cc-alternatives.html+1-1changed
public/fr/twitch-setup.html+7-12changed
public/fr/webcaptioner-alternatives.html+1-1changed
public/hi/ (3 files)
public/hi/stream-cc-alternatives.html+1-1changed
public/hi/twitch-setup.html+7-12changed
public/hi/webcaptioner-alternatives.html+1-1changed
public/hu/ (3 files)
public/hu/stream-cc-alternatives.html+1-1changed
public/hu/twitch-setup.html+7-12changed
public/hu/webcaptioner-alternatives.html+1-1changed
public/id/ (4 files)
public/id/real-time-stream-subtitles.html+1-1changed
public/id/stream-cc-alternatives.html+1-1changed
public/id/twitch-setup.html+7-12changed
public/id/webcaptioner-alternatives.html+1-1changed
public/it/ (3 files)
public/it/stream-cc-alternatives.html+1-1changed
public/it/twitch-setup.html+7-12changed
public/it/webcaptioner-alternatives.html+1-1changed
public/ja/ (3 files)
public/ja/stream-cc-alternatives.html+1-1changed
public/ja/twitch-setup.html+7-12changed
public/ja/webcaptioner-alternatives.html+1-1changed
public/ko/ (3 files)
public/ko/stream-cc-alternatives.html+1-1changed
public/ko/twitch-setup.html+7-12changed
public/ko/webcaptioner-alternatives.html+1-1changed
public/nl/ (3 files)
public/nl/stream-cc-alternatives.html+1-1changed
public/nl/twitch-setup.html+7-12changed
public/nl/webcaptioner-alternatives.html+1-1changed
public/no/ (3 files)
public/no/stream-cc-alternatives.html+1-1changed
public/no/twitch-setup.html+7-12changed
public/no/webcaptioner-alternatives.html+1-1changed
public/personas/ (1 files)
public/personas/streamtranslate-for-charity-streamers.html+1-1changed
public/pl/ (3 files)
public/pl/stream-cc-alternatives.html+1-1changed
public/pl/twitch-setup.html+7-12changed
public/pl/webcaptioner-alternatives.html+1-1changed
public/pt/ (3 files)
public/pt/stream-cc-alternatives.html+1-1changed
public/pt/twitch-setup.html+7-12changed
public/pt/webcaptioner-alternatives.html+1-1changed
public/ro/ (3 files)
public/ro/stream-cc-alternatives.html+1-1changed
public/ro/twitch-setup.html+7-12changed
public/ro/webcaptioner-alternatives.html+1-1changed
public/ru/ (3 files)
public/ru/stream-cc-alternatives.html+1-1changed
public/ru/twitch-setup.html+7-12changed
public/ru/webcaptioner-alternatives.html+1-1changed
public/sk/ (5 files)
public/sk/pricing.html+1-1changed
public/sk/stream-cc-alternatives.html+1-1changed
public/sk/twitch-setup.html+7-12changed
public/sk/upgrade.html+1-1changed
public/sk/webcaptioner-alternatives.html+1-1changed
public/sr/ (3 files)
public/sr/stream-cc-alternatives.html+1-1changed
public/sr/twitch-setup.html+7-12changed
public/sr/webcaptioner-alternatives.html+1-1changed
public/sv/ (3 files)
public/sv/stream-cc-alternatives.html+1-1changed
public/sv/twitch-setup.html+7-12changed
public/sv/webcaptioner-alternatives.html+1-1changed
public/th/ (3 files)
public/th/stream-cc-alternatives.html+1-1changed
public/th/twitch-setup.html+7-12changed
public/th/webcaptioner-alternatives.html+1-1changed
public/tr/ (3 files)
public/tr/stream-cc-alternatives.html+1-1changed
public/tr/twitch-setup.html+7-12changed
public/tr/webcaptioner-alternatives.html+1-1changed
public/uk/ (3 files)
public/uk/stream-cc-alternatives.html+1-1changed
public/uk/twitch-setup.html+7-12changed
public/uk/webcaptioner-alternatives.html+1-1changed
public/vi/ (3 files)
public/vi/stream-cc-alternatives.html+1-1changed
public/vi/twitch-setup.html+7-12changed
public/vi/webcaptioner-alternatives.html+1-1changed
public/zh/ (3 files)
public/zh/stream-cc-alternatives.html+1-1changed
public/zh/twitch-setup.html+7-12changed
public/zh/webcaptioner-alternatives.html+1-1changed

Images / assets (4)

public/hero-desk-v2.jpgprod only
public/hero-desk.pngprod only
public/questionmark.pngprod only
public/success.pngprod only