mirror of
https://github.com/Shik3i/KoalaSync.git
synced 2026-07-26 12:08:15 +00:00
Merge pull request #22 from Shik3i/landingpage-ui-overhaul
Landing page UI overhaul: new extension mockup, interactive demo, 3-step guide, hero fixes
This commit is contained in:
@@ -0,0 +1,153 @@
|
||||
> **TEMPORÄR:** Diese Datei dient nur der gemeinsamen Planung des Landingpage-UI-Overhauls
|
||||
> auf dem Branch `landingpage-ui-overhaul`. Sie ist **kein** Teil des finalen Features und
|
||||
> **muss vor dem Öffnen des PRs wieder gelöscht werden**.
|
||||
|
||||
# Landingpage UI Overhaul — Hero Mockup
|
||||
|
||||
## Ausgangslage
|
||||
Die Landingpage (`website/template.html`, `website/style.css`, `website/app.js`, kompiliert
|
||||
via `website/build.cjs` nach `website/www/`) ist bereits sehr gut, soll aber **statisch und
|
||||
backend-frei** bleiben. Einziger Fokus dieses Overhauls: das rechte Hero-Mockup
|
||||
(`.hero-mockup-wrapper` / `.extension-mockup`, `template.html:304-579`).
|
||||
|
||||
**Heutiger Zustand:** Ein 1:1-Nachbau des Extension-Popups mit 4 Tabs (Room / Sync /
|
||||
Settings / Status). Tab-Wechsel nur per Klick (`app.js:391-407`), keine Animationen, kein
|
||||
Auto-Play, kein Bezug zu den eigentlichen Video-Tabs, die synchronisiert werden.
|
||||
|
||||
## Ziel
|
||||
Ein dynamischeres, platzoptimiertes Hero-Visual, das das Kernversprechen von KoalaSync
|
||||
("zwei Browser-Tabs synchron abspielen") direkt zeigt — mit echten Animationen, einem
|
||||
automatischen Durchlauf beim ersten Sichtbarwerden und voller manueller Bedienbarkeit
|
||||
danach. Auf Mobile (Bildschirmgröße) bleibt exakt das heutige, statische Popup-Mockup
|
||||
erhalten — kein neues Mobile-Design nötig, kein zusätzlicher Wartungsaufwand dort.
|
||||
|
||||
## Getroffene Entscheidungen (aus Rückfrage-Runde)
|
||||
|
||||
1. **Layout:** Gestapelt/Layered — zwei Browser-Tab-Karten leicht versetzt im Hintergrund
|
||||
(Tiefeneffekt via `transform`/`box-shadow`), Extension-Popup öffnet sich als Overlay
|
||||
davor/darüber.
|
||||
2. **Tab-Inhalt:** Abstraktes Video-Mock — Gradient-Placeholder als "Video", Play-Button,
|
||||
Fortschrittsbalken, Timestamp. Kein echtes Videomaterial, keine Marken/Logos, im
|
||||
bestehenden minimalistischen `mock-*`-Stil.
|
||||
3. **Auto-Play-Verhalten:** Einmaliger Durchlauf beim Sichtbarwerden (IntersectionObserver),
|
||||
danach reiner manueller Modus. Kein Endlos-Loop im Hintergrund.
|
||||
4. **Popup-Umfang:** Alle 4 Tabs (Room/Sync/Settings/Status) bleiben inhaltlich unverändert
|
||||
— nur in die neue Animations-/Overlay-Logik eingebettet, kein Content-Kahlschlag.
|
||||
|
||||
## Vorgeschlagenes Storyboard (einmaliger Auto-Durchlauf)
|
||||
|
||||
1. **Ausgangszustand:** Zwei Tab-Karten ("Tab A" / "Tab B") sichtbar, Video-Mocks pausiert,
|
||||
Fortschrittsbalken bei 0. Popup geschlossen, nur ein kleiner Launcher-Button sichtbar.
|
||||
2. Popup öffnet sich (scale/slide-in) vor den Tab-Karten.
|
||||
3. Simulierter Klick auf "Play" im Sync-Tab → beide Tab-Karten starten gleichzeitig
|
||||
(Fortschrittsbalken laufen synchron), begleitet von einem kurzen "Sync-Pulse"
|
||||
(Glow/Connection-Line) zwischen den beiden Karten.
|
||||
4. Nach ein paar Sekunden: simulierter Klick auf "Pause" → beide Tabs pausieren synchron.
|
||||
5. Popup schließt sich, Endzustand bleibt stehen (beide Tabs pausiert, synchron,
|
||||
"Synced"-Indikator dezent sichtbar) — kein Reset auf Ausgangszustand.
|
||||
6. **Danach/parallel volle manuelle Steuerung:**
|
||||
- Klick auf eine Tab-Karte togglet deren eigenes Play/Pause *unabhängig* — spielt eine
|
||||
Karte allein, laufen die Fortschrittsbalken bewusst auseinander ("out of sync"), um den
|
||||
Schmerzpunkt zu illustrieren, den KoalaSync löst.
|
||||
- Klick auf Play/Pause im Popup synchronisiert immer beide Tabs.
|
||||
- Popup lässt sich jederzeit manuell öffnen/schließen, Tabs (Room/Sync/Settings/Status)
|
||||
bleiben wie heute klickbar.
|
||||
- Jede manuelle Interaktion während des Auto-Durchlaufs bricht diesen sofort ab und
|
||||
übergibt die volle Kontrolle.
|
||||
|
||||
## Technischer Ansatz (Vorschlag)
|
||||
|
||||
- **Keine neuen Dependencies** — reines Vanilla JS + CSS, passend zur "Zero-Dependency"-
|
||||
Philosophie des Projekts (siehe `website/README.md`).
|
||||
- **Eine "Director"-Funktion** in `app.js`, die exakt dieselben Click-Handler wie die
|
||||
manuelle Bedienung aufruft (kein doppelter Code-Pfad zwischen Auto- und Manual-Modus).
|
||||
- **IntersectionObserver** triggert den einmaligen Durchlauf beim ersten Sichtbarwerden.
|
||||
- **`prefers-reduced-motion`**: Auto-Durchlauf und Cursor-Ripple-Indikatoren werden
|
||||
übersprungen, Endzustand wird direkt gesetzt (Pattern existiert bereits in
|
||||
`style.css:2915-2939`).
|
||||
- **Kein DOM-Duplikat für Mobile:** Das Popup-Markup bleibt eine einzige Quelle. Der neue
|
||||
`.hero-mockup-dynamic`-Wrapper enthält die Tab-Karten + das Popup; unterhalb des
|
||||
bestehenden Breakpoints (768px, siehe `style.css:1913`) werden die Tab-Karten und
|
||||
Animationen per CSS ausgeblendet, das Popup fällt optisch auf das heutige, statische
|
||||
Erscheinungsbild zurück, JS initialisiert dort keine Animationen. Vermeidet doppelte
|
||||
i18n-Pflege der ~270 Zeilen Popup-Markup.
|
||||
- **i18n-Vorsicht:** 15 Locale-Dateien unter `website/locales/*.json`. Neue sichtbare Texte
|
||||
(Tab-Labels etc.) nach Möglichkeit vermeiden oder wie bestehende Mock-Inhalte
|
||||
(z. B. "CoolUsername", "Stranger Things - S4E1") als nicht-lokalisierte Platzhalter
|
||||
behandeln, um Übersetzungsaufwand in 15 Sprachen zu vermeiden. Neue `{{MOCK_XX}}`-Keys nur
|
||||
falls wirklich nötig, dann mit Übersetzung in allen 15 Dateien.
|
||||
- **Build:** Änderungen nur in den Source-Dateien (`template.html`, `style.css`, `app.js`),
|
||||
niemals in `website/www/**` (generiert via `website/build.cjs`).
|
||||
|
||||
## Detailentscheidungen (bei der Umsetzung getroffen)
|
||||
|
||||
- [x] Breakpoint Mobile-Fallback: bestehende 768px übernommen (`matchMedia('(min-width: 769px)')`
|
||||
im JS, `@media (max-width: 768px)` im CSS).
|
||||
- [x] Auto-Durchlauf-Timing: Start ~1,4s nach 45% Sichtbarkeit (IntersectionObserver), dann
|
||||
Cursor → Launcher → Sync-Tab → Play (läuft ~3s synchron) → Pause → Popup schließt.
|
||||
Gesamtdauer ca. 10s.
|
||||
- [x] Tab-Karten haben User-Badges passend zur Peer-Liste im Popup: "CoolUsername" (indigo)
|
||||
und "KoalaPC" (grün), gleicher Episodentitel "Stranger Things - S4E1".
|
||||
- [x] Echter animierter Ghost-Mauszeiger (SVG-Cursor mit Klick-Ripple), kein reiner
|
||||
Ripple-Indikator — verkauft den Durchlauf deutlich besser.
|
||||
- [x] Keine externe Referenz — eigener Stil, konsistent mit dem bestehenden `mock-*`-Design.
|
||||
- [x] ~~Drift-Konzept~~ **Verworfen nach Feedback** — es stellte die Extension falsch dar
|
||||
(als bräuchte sie das offene Popup). Ersetzt durch das **Broadcast-Modell**: Play/
|
||||
Pause/Seek auf *irgendeinem* Video wird automatisch zum Peer gespiegelt (Puls wandert
|
||||
über die Verbindungslinie, Peer folgt ~260ms später, Engine gleicht die Zeit an). Der
|
||||
Status-Chip bleibt grün "In sync" und blitzt bei jedem Broadcast kurz das Event auf
|
||||
("▶ CoolUsername", "❚❚ KoalaPC", "» …" für Seek). Das Popup ist nur die Fernbedienung
|
||||
obendrauf, nie Voraussetzung.
|
||||
- [x] Rework 2 nach Feedback: Kein reservierter Popup-Platz mehr; KoalaSync-Icon als
|
||||
Extension-Button in der Toolbar des vorderen Fensters; Fortschrittsbalken klickbar
|
||||
(Seek wird mitgesynct, Scrub-Thumb bei Hover).
|
||||
- [x] Rework 3 nach Feedback: Fenster-Kaskade statt starker Überlappung — das **rechte**
|
||||
Fenster (CoolUsername, mit dem Toolbar-Icon oben rechts) liegt im Vordergrund, das
|
||||
linke (KoalaPC) versetzt dahinter unten links. Das Popup öffnet **rechts außen**
|
||||
(right: 0, verankert unterm Icon), die beiden Tabs weichen dabei animiert nach links
|
||||
aus und bleiben sichtbar. Verbindungslinie komplett entfernt (Sync-Feedback = Puls-
|
||||
Ring auf beiden Karten + Event-Chip). Peer-Latenz von 260ms auf 90ms gesenkt — wirkt
|
||||
quasi instant.
|
||||
- [x] Rework 4 nach Feedback: **Story-Walkthrough in 5 Akten** beim ersten Sichtbarwerden —
|
||||
(1) Extension über das Toolbar-Icon öffnen, (2) "Raum erstellen" (eigener Pre-Room-
|
||||
Screen im Popup, `#demo-room-empty`), (3) Invite-Link fliegt animiert vom Popup zum
|
||||
zweiten Browserfenster (Toast "Raum beigetreten", KoalaPC erscheint in der Peer-Liste,
|
||||
"IN SYNC"-Chip blendet erst jetzt ein), (4) beide wählen den Video-Tab (Select-Flash im
|
||||
Popup + Toast am zweiten Fenster), (5) Play für alle → Popup schließt → Pause vom
|
||||
anderen Tab, Seek mit Nachziehen, Play. Danach voll manuell. Jede Interaktion während
|
||||
der Story bricht ab und springt via idempotentem `finishDemo()` sofort in den End-
|
||||
zustand (Raum verbunden, Chip an, Hint an; Popup schließt bei Klicks außerhalb);
|
||||
der Nutzer-Klick wirkt anschließend normal. 4 neue Locale-Keys (DEMO_NO_ROOM,
|
||||
DEMO_CREATE_ROOM, DEMO_JOINED, DEMO_TAB_SELECTED) in allen 15 Sprachen.
|
||||
- [x] Abspiel-Animation: abstrakter **Strichfigur-Kurzfilm** pro Video (SVG: Hügel-
|
||||
Silhouetten, laufende Figur mit schwingenden Armen/Beinen, hüpfender Ball) — läuft
|
||||
nur bei `playing`, Pause friert beide Filme im selben Frame ein
|
||||
(`animation-play-state`), was die Synchronität sofort sichtbar macht.
|
||||
|
||||
## Umsetzungsstatus
|
||||
|
||||
- [x] `website/template.html`: Hero-Mockup in `.hero-demo-scene` eingebettet (Chip, 2 Tab-
|
||||
Karten, Verbindungslinie, Launcher, Ghost-Cursor, Hint); Popup-Inhalt unverändert,
|
||||
nur IDs für Play/Pause/Force-Sync ergänzt.
|
||||
- [x] `website/style.css`: Demo-Styles mit Container-Queries (cqw + px-Fallbacks),
|
||||
Mobile-Fallback, `prefers-reduced-motion`-Support.
|
||||
- [x] `website/app.js`: `initHeroDemo()` — Playback-Uhr (rAF, 8x Zeitraffer), Broadcast-
|
||||
Logik (Play/Pause/Seek → Peer folgt), manuelle Steuerung, einmaliger Auto-Durchlauf
|
||||
(Play in Tab A → Seek in Tab B → Pause in Tab B → Popup öffnen/Play/schließen); jede
|
||||
Interaktion bricht den Durchlauf sofort ab. Auto- und Manuell-Modus nutzen dieselben
|
||||
Click-Handler. Launcher-Klicks sind vom Karten-Play/Pause entkoppelt (closest-Guard).
|
||||
- [x] `website/locales/*.json`: 3 neue Keys (`DEMO_SYNC`, `DEMO_DRIFT`, `DEMO_HINT`) in
|
||||
allen 15 Sprachen.
|
||||
- [x] `eslint.config.mjs`: `requestAnimationFrame`/`cancelAnimationFrame` zu den Globals.
|
||||
- [x] Verifiziert im Browser-Preview: Auto-Durchlauf, Drift-Szenario, Chip-Rettungsweg,
|
||||
Re-Sync, Mobile-Fallback (statisches Popup wie vorher), keine Konsolenfehler,
|
||||
Lint sauber, Build ohne offene Platzhalter.
|
||||
- [ ] `.claude/launch.json` zeigt auf einen Session-Scratchpad-Server — vor dem PR prüfen,
|
||||
ob die Datei ins Repo soll (ggf. löschen oder auf dauerhaften Pfad umstellen).
|
||||
|
||||
## Scope / Nicht-Ziele
|
||||
|
||||
- Kein Backend, keine echten Videos/Assets, keine neuen npm-Dependencies.
|
||||
- Kein Umbau des restlichen Landingpage-Contents (Features, Compat-Section, Footer etc.) —
|
||||
ausschließlich das Hero-Mockup.
|
||||
- Mobile-Ansicht bekommt **kein** neues Design, bleibt 1:1 der heutige Stand.
|
||||
+3
-1
@@ -1,6 +1,6 @@
|
||||
export default [
|
||||
{
|
||||
ignores: ["coverage/**", "dist/**", "node_modules/**", "scratch/**"]
|
||||
ignores: ["coverage/**", "dist/**", "node_modules/**", "scratch/**", "website/www/**"]
|
||||
},
|
||||
{
|
||||
languageOptions: {
|
||||
@@ -18,6 +18,8 @@ export default [
|
||||
setInterval: "readonly",
|
||||
clearTimeout: "readonly",
|
||||
clearInterval: "readonly",
|
||||
requestAnimationFrame: "readonly",
|
||||
cancelAnimationFrame: "readonly",
|
||||
fetch: "readonly",
|
||||
CustomEvent: "readonly",
|
||||
MutationObserver: "readonly",
|
||||
|
||||
+529
-2
@@ -1,6 +1,49 @@
|
||||
// KoalaSync Landing Page Logic
|
||||
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
// Mockup Video Title Randomization on Load
|
||||
const SERIES_NAMES = [
|
||||
'Stranger Things',
|
||||
'Wednesday',
|
||||
'The Boys',
|
||||
'Loki',
|
||||
'Arcane',
|
||||
'Dark',
|
||||
'One Piece',
|
||||
'Lupin'
|
||||
];
|
||||
|
||||
try {
|
||||
const chosenSeries = SERIES_NAMES[Math.floor(Math.random() * SERIES_NAMES.length)];
|
||||
const startEp = Math.floor(Math.random() * 7) + 1; // Random episode between 1 and 7
|
||||
const ep1 = `${chosenSeries} - S1E${startEp}`;
|
||||
const ep2 = `${chosenSeries} - S1E${startEp + 1}`;
|
||||
|
||||
document.querySelectorAll('.demo-title-text-ep1').forEach(el => {
|
||||
el.textContent = ep1;
|
||||
});
|
||||
document.querySelectorAll('.demo-title-text-ep2').forEach(el => {
|
||||
el.textContent = ep2;
|
||||
});
|
||||
} catch (err) {
|
||||
console.warn(err);
|
||||
}
|
||||
|
||||
// Scroll Progress Indicator
|
||||
try {
|
||||
const progressBar = document.querySelector('.scroll-progress-bar');
|
||||
if (progressBar) {
|
||||
window.addEventListener('scroll', () => {
|
||||
const winScroll = document.body.scrollTop || document.documentElement.scrollTop;
|
||||
const height = document.documentElement.scrollHeight - document.documentElement.clientHeight;
|
||||
const scrolled = height > 0 ? (winScroll / height) * 100 : 0;
|
||||
progressBar.style.width = scrolled + '%';
|
||||
}, { passive: true });
|
||||
}
|
||||
} catch (err) {
|
||||
console.warn(err);
|
||||
}
|
||||
|
||||
const safeGetLocalStorage = (key) => {
|
||||
try {
|
||||
return localStorage.getItem(key);
|
||||
@@ -29,8 +72,8 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
}
|
||||
});
|
||||
}, {
|
||||
rootMargin: '0px 0px -150px 0px',
|
||||
threshold: 0.1
|
||||
rootMargin: '0px 0px -30px 0px',
|
||||
threshold: 0.05
|
||||
});
|
||||
|
||||
revealElements.forEach(el => revealObserver.observe(el));
|
||||
@@ -406,6 +449,430 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
});
|
||||
});
|
||||
|
||||
// --- Hero Live Demo (two synced video tabs + extension popup) ---
|
||||
// Desktop only: on mobile the scene falls back to the classic static popup.
|
||||
const initHeroDemo = () => {
|
||||
const scene = document.getElementById('hero-demo');
|
||||
if (!scene || !window.matchMedia('(min-width: 769px)').matches) return;
|
||||
|
||||
const reduceMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
|
||||
|
||||
const launcher = scene.querySelector('#demo-launcher');
|
||||
const chip = scene.querySelector('#demo-sync-chip');
|
||||
const cursor = scene.querySelector('#demo-cursor');
|
||||
const hint = document.getElementById('demo-hint');
|
||||
const playBtn = scene.querySelector('#demo-play-btn');
|
||||
const pauseBtn = scene.querySelector('#demo-pause-btn');
|
||||
const forceSyncBtn = scene.querySelector('#demo-force-sync');
|
||||
const syncTabBtn = scene.querySelector('.mock-tab[data-target="mock-sync"]');
|
||||
const roomEmpty = scene.querySelector('#demo-room-empty');
|
||||
const roomJoined = scene.querySelector('#demo-room-joined');
|
||||
const createRoomBtn = scene.querySelector('#demo-create-room');
|
||||
const inviteCopyBtn = scene.querySelector('#demo-invite-copy');
|
||||
const videoSelect = scene.querySelector('#demo-video-select');
|
||||
const peerBs = scene.querySelectorAll('.demo-peer-b');
|
||||
const inviteFly = scene.querySelector('#demo-invite-fly');
|
||||
const toastB = scene.querySelector('#demo-toast-b');
|
||||
if (!launcher || !chip || !cursor || !playBtn || !pauseBtn) return;
|
||||
|
||||
const EP_LEN = 2537; // fake 42:17 episode
|
||||
const RATE = 1; // realtime: 1 wall-clock second = 1 video second
|
||||
const START_T = 754; // 12:34
|
||||
|
||||
const tabs = {};
|
||||
['a', 'b'].forEach(k => {
|
||||
const root = scene.querySelector('#demo-tab-' + k);
|
||||
tabs[k] = {
|
||||
root,
|
||||
fill: root.querySelector('.demo-progress-fill'),
|
||||
time: root.querySelector('.demo-time'),
|
||||
t: START_T,
|
||||
playing: false
|
||||
};
|
||||
});
|
||||
|
||||
const fmt = (s) => {
|
||||
s = Math.floor(s);
|
||||
return Math.floor(s / 60) + ':' + String(s % 60).padStart(2, '0');
|
||||
};
|
||||
|
||||
const renderTab = (tab) => {
|
||||
tab.fill.style.width = ((tab.t / EP_LEN) * 100).toFixed(2) + '%';
|
||||
tab.time.textContent = fmt(tab.t);
|
||||
|
||||
// Frame-locked parallax offsets
|
||||
const t = tab.t;
|
||||
const backOffset = (t * -8) % 160;
|
||||
const midOffset = (t * -24) % 160;
|
||||
const foreOffset = (t * -48) % 160;
|
||||
|
||||
// Bouncing ball logic (bounce Y is computed as parabolic arc)
|
||||
const bouncePeriod = 0.8;
|
||||
const bounceProgress = (t % bouncePeriod) / bouncePeriod;
|
||||
const bounceHeight = 16;
|
||||
const bounceY = 4 * bounceProgress * (1 - bounceProgress) * -bounceHeight;
|
||||
|
||||
tab.root.style.setProperty('--scroll-back', backOffset.toFixed(2) + 'px');
|
||||
tab.root.style.setProperty('--scroll-mid', midOffset.toFixed(2) + 'px');
|
||||
tab.root.style.setProperty('--scroll-fore', foreOffset.toFixed(2) + 'px');
|
||||
tab.root.style.setProperty('--bounce-y', bounceY.toFixed(2) + 'px');
|
||||
};
|
||||
|
||||
const updateSyncUI = () => {
|
||||
scene.classList.toggle('streaming', tabs.a.playing && tabs.b.playing);
|
||||
};
|
||||
|
||||
// Playback clock (runs only while at least one tab is playing)
|
||||
let rafId = null;
|
||||
let lastTs = null;
|
||||
|
||||
const tick = (ts) => {
|
||||
rafId = null;
|
||||
const dt = lastTs === null ? 0 : Math.min((ts - lastTs) / 1000, 0.5);
|
||||
lastTs = ts;
|
||||
let anyPlaying = false;
|
||||
['a', 'b'].forEach(k => {
|
||||
const tab = tabs[k];
|
||||
if (!tab.playing) return;
|
||||
anyPlaying = true;
|
||||
tab.t = (tab.t + dt * RATE) % EP_LEN;
|
||||
renderTab(tab);
|
||||
});
|
||||
updateSyncUI();
|
||||
if (anyPlaying) rafId = requestAnimationFrame(tick);
|
||||
else lastTs = null;
|
||||
};
|
||||
|
||||
const ensureLoop = () => {
|
||||
if (rafId === null && (tabs.a.playing || tabs.b.playing)) {
|
||||
lastTs = null;
|
||||
rafId = requestAnimationFrame(tick);
|
||||
}
|
||||
};
|
||||
|
||||
const setPlaying = (k, playing) => {
|
||||
const tab = tabs[k];
|
||||
tab.playing = playing;
|
||||
tab.root.classList.toggle('playing', playing);
|
||||
tab.root.setAttribute('aria-pressed', playing ? 'true' : 'false');
|
||||
ensureLoop();
|
||||
updateSyncUI();
|
||||
};
|
||||
|
||||
const pulse = (key) => {
|
||||
const el = tabs[key].root;
|
||||
el.classList.remove('sync-pulse');
|
||||
void el.offsetWidth; // restart the CSS animation
|
||||
el.classList.add('sync-pulse');
|
||||
};
|
||||
|
||||
const NAMES = { a: '🐱 ChillCat', b: '🐶 HappyDog' };
|
||||
const chipEvent = chip.querySelector('.demo-chip-event');
|
||||
|
||||
let eventTimer = null;
|
||||
const showEvent = (text) => {
|
||||
if (!chipEvent) return;
|
||||
chipEvent.textContent = text;
|
||||
chip.classList.add('event');
|
||||
clearTimeout(eventTimer);
|
||||
eventTimer = setTimeout(() => chip.classList.remove('event'), 1600);
|
||||
};
|
||||
|
||||
// Core of the demo: play/pause on EITHER side is broadcast to the peer
|
||||
// tab — exactly what the extension does. The popup is just a remote
|
||||
// control on top, never a requirement.
|
||||
let broadcasting = false;
|
||||
const broadcast = (sourceKey, playing) => {
|
||||
if (broadcasting) return;
|
||||
broadcasting = true;
|
||||
const peerKey = sourceKey === 'a' ? 'b' : 'a';
|
||||
setPlaying(sourceKey, playing);
|
||||
showEvent((playing ? '▶ ' : '❚❚ ') + NAMES[sourceKey]);
|
||||
// the peer follows near-instantly — that is the whole point
|
||||
setTimeout(() => {
|
||||
tabs[peerKey].t = tabs[sourceKey].t;
|
||||
setPlaying(peerKey, playing);
|
||||
renderTab(tabs[peerKey]);
|
||||
pulse(peerKey);
|
||||
broadcasting = false;
|
||||
}, 90);
|
||||
};
|
||||
|
||||
// Seeking works the same way: scrub one tab, the peer jumps along
|
||||
const seekTo = (sourceKey, fraction) => {
|
||||
if (broadcasting) return;
|
||||
broadcasting = true;
|
||||
const peerKey = sourceKey === 'a' ? 'b' : 'a';
|
||||
tabs[sourceKey].t = fraction * EP_LEN;
|
||||
renderTab(tabs[sourceKey]);
|
||||
showEvent('» ' + NAMES[sourceKey]);
|
||||
// visible "cut" so the jump reads as a real seek, not a silent update
|
||||
flashSeek(tabs[sourceKey].root);
|
||||
setTimeout(() => {
|
||||
tabs[peerKey].t = tabs[sourceKey].t;
|
||||
renderTab(tabs[peerKey]);
|
||||
flashSeek(tabs[peerKey].root);
|
||||
pulse(peerKey);
|
||||
broadcasting = false;
|
||||
}, 90);
|
||||
};
|
||||
|
||||
// Restart the film animations mid-stride + trigger the sweep overlay
|
||||
let seekFlashTimers = [];
|
||||
const flashSeek = (root) => {
|
||||
if (!root) return;
|
||||
root.classList.remove('demo-seeking');
|
||||
// Restart every animated layer from frame zero so the jump is visible
|
||||
const film = root.querySelector('.demo-film');
|
||||
if (film) {
|
||||
film.classList.add('demo-reset');
|
||||
void film.offsetWidth; // force reflow so the browser commits the reset
|
||||
film.classList.remove('demo-reset');
|
||||
}
|
||||
void root.offsetWidth;
|
||||
root.classList.add('demo-seeking');
|
||||
const t = setTimeout(() => root.classList.remove('demo-seeking'), 360);
|
||||
seekFlashTimers.push(t);
|
||||
};
|
||||
|
||||
const setPopupOpen = (open) => {
|
||||
scene.classList.toggle('popup-open', open);
|
||||
launcher.setAttribute('aria-expanded', open ? 'true' : 'false');
|
||||
};
|
||||
|
||||
// Manual controls (the automated walkthrough drives these same handlers)
|
||||
launcher.addEventListener('click', () => setPopupOpen(!scene.classList.contains('popup-open')));
|
||||
|
||||
// The popup remote control acts as 🐱 ChillCat (tab A's user)
|
||||
playBtn.addEventListener('click', () => {
|
||||
if (tabs.a.playing && tabs.b.playing) { pulse('b'); return; }
|
||||
broadcast('a', true);
|
||||
});
|
||||
pauseBtn.addEventListener('click', () => {
|
||||
if (!tabs.a.playing && !tabs.b.playing) { pulse('b'); return; }
|
||||
broadcast('a', false);
|
||||
});
|
||||
if (forceSyncBtn) forceSyncBtn.addEventListener('click', () => {
|
||||
tabs.b.t = tabs.a.t = Math.max(tabs.a.t, tabs.b.t);
|
||||
renderTab(tabs.a);
|
||||
renderTab(tabs.b);
|
||||
pulse('a');
|
||||
pulse('b');
|
||||
});
|
||||
|
||||
['a', 'b'].forEach(k => {
|
||||
const root = tabs[k].root;
|
||||
const toggle = () => broadcast(k, !tabs[k].playing);
|
||||
// the toolbar extension icon lives inside card A — its clicks
|
||||
// toggle the popup, not playback
|
||||
root.addEventListener('click', (e) => {
|
||||
if (e.target.closest('.demo-ext-launcher')) return;
|
||||
toggle();
|
||||
});
|
||||
root.addEventListener('keydown', (e) => {
|
||||
if (e.target.closest('.demo-ext-launcher')) return;
|
||||
if (e.key === 'Enter' || e.key === ' ') {
|
||||
e.preventDefault();
|
||||
toggle();
|
||||
}
|
||||
});
|
||||
|
||||
const progress = root.querySelector('.demo-progress');
|
||||
if (progress) {
|
||||
progress.addEventListener('click', (e) => {
|
||||
e.stopPropagation(); // a scrub must not toggle play/pause
|
||||
const r = progress.getBoundingClientRect();
|
||||
seekTo(k, Math.min(Math.max((e.clientX - r.left) / r.width, 0), 1));
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
chip.addEventListener('click', pulse);
|
||||
|
||||
// --- Story state (room creation -> invite -> connected) ---
|
||||
const setRoomJoined = (joined) => {
|
||||
if (roomEmpty) roomEmpty.style.display = joined ? 'none' : 'flex';
|
||||
if (roomJoined) roomJoined.style.display = joined ? '' : 'none';
|
||||
};
|
||||
|
||||
const setConnected = (connected) => {
|
||||
scene.classList.toggle('connected', connected);
|
||||
peerBs.forEach(el => { el.style.display = connected ? '' : 'none'; });
|
||||
};
|
||||
|
||||
let toastTimer = null;
|
||||
const showToastB = (text) => {
|
||||
if (!toastB || !text) return;
|
||||
toastB.textContent = '✓ ' + text;
|
||||
toastB.classList.add('show');
|
||||
clearTimeout(toastTimer);
|
||||
toastTimer = setTimeout(() => toastB.classList.remove('show'), 1700);
|
||||
};
|
||||
|
||||
// The invite link visibly travels from the popup to the friend's window
|
||||
const flyInvite = () => new Promise((resolve) => {
|
||||
if (!inviteFly || !inviteCopyBtn) { resolve(); return; }
|
||||
const sr = scene.getBoundingClientRect();
|
||||
const from = inviteCopyBtn.getBoundingClientRect();
|
||||
const to = tabs.b.root.querySelector('.demo-tab-titlebar').getBoundingClientRect();
|
||||
inviteFly.style.transition = 'none';
|
||||
inviteFly.style.left = (from.left - sr.left) + 'px';
|
||||
inviteFly.style.top = (from.top - sr.top) + 'px';
|
||||
inviteFly.style.opacity = '1';
|
||||
void inviteFly.offsetWidth;
|
||||
inviteFly.style.transition = '';
|
||||
inviteFly.style.left = (to.left - sr.left + to.width / 2 - 40) + 'px';
|
||||
inviteFly.style.top = (to.top - sr.top + 2) + 'px';
|
||||
setTimeout(() => {
|
||||
inviteFly.style.opacity = '0';
|
||||
resolve();
|
||||
}, 800);
|
||||
});
|
||||
|
||||
const flashSelect = () => {
|
||||
if (!videoSelect) return;
|
||||
// Actually pick the Stranger Things tab so the placeholder reads as chosen
|
||||
if (videoSelect.options.length > 1) {
|
||||
videoSelect.selectedIndex = 1;
|
||||
}
|
||||
videoSelect.classList.remove('demo-attn');
|
||||
void videoSelect.offsetWidth;
|
||||
videoSelect.classList.add('demo-attn');
|
||||
};
|
||||
|
||||
if (createRoomBtn) createRoomBtn.addEventListener('click', () => setRoomJoined(true));
|
||||
|
||||
renderTab(tabs.a);
|
||||
renderTab(tabs.b);
|
||||
updateSyncUI();
|
||||
|
||||
// JS is active: start with the popup tucked away and, if the scripted
|
||||
// story is going to run, rewind to the "before" state (no transitions
|
||||
// on load).
|
||||
scene.classList.add('demo-no-anim');
|
||||
if (!reduceMotion) {
|
||||
setPopupOpen(false);
|
||||
setConnected(false);
|
||||
setRoomJoined(false);
|
||||
}
|
||||
void scene.offsetWidth;
|
||||
scene.classList.remove('demo-no-anim');
|
||||
|
||||
const showHint = () => {
|
||||
if (hint) hint.classList.add('show');
|
||||
};
|
||||
|
||||
// Automated one-time walkthrough; any interaction aborts it and jumps
|
||||
// straight to the finished end state, then the user's click applies.
|
||||
let userTookOver = false;
|
||||
let demoStarted = false;
|
||||
let demoFinished = false;
|
||||
const finishDemo = () => {
|
||||
if (demoFinished) return;
|
||||
demoFinished = true;
|
||||
setRoomJoined(true);
|
||||
setConnected(true);
|
||||
cursor.classList.remove('visible');
|
||||
scene.classList.add('demo-complete');
|
||||
showHint();
|
||||
};
|
||||
|
||||
const takeOver = (e) => {
|
||||
userTookOver = true;
|
||||
finishDemo();
|
||||
// Clicks outside the popup (and not on its launcher icon) always collapse the popup
|
||||
if (e && e.target &&
|
||||
!e.target.closest('.extension-mockup') &&
|
||||
!e.target.closest('.demo-ext-launcher')) {
|
||||
setPopupOpen(false);
|
||||
}
|
||||
};
|
||||
scene.addEventListener('pointerdown', takeOver, true);
|
||||
scene.addEventListener('keydown', takeOver, true);
|
||||
|
||||
const runDemo = async () => {
|
||||
if (demoStarted || userTookOver || reduceMotion) return;
|
||||
demoStarted = true;
|
||||
|
||||
const wait = (ms) => new Promise(r => setTimeout(r, ms));
|
||||
const moveTo = async (el, fx) => {
|
||||
const sr = scene.getBoundingClientRect();
|
||||
const er = el.getBoundingClientRect();
|
||||
cursor.style.left = (er.left - sr.left + er.width * (fx || 0.5)) + 'px';
|
||||
cursor.style.top = (er.top - sr.top + er.height / 2) + 'px';
|
||||
await wait(700);
|
||||
};
|
||||
const step = async (el, pause, action, fx) => {
|
||||
if (userTookOver || !el) return false;
|
||||
await moveTo(el, fx);
|
||||
if (userTookOver) return false;
|
||||
cursor.classList.remove('clicking');
|
||||
void cursor.offsetWidth;
|
||||
cursor.classList.add('clicking');
|
||||
await wait(180);
|
||||
if (userTookOver) return false;
|
||||
if (action) action(); else el.click();
|
||||
await wait(320 + (pause || 0));
|
||||
return !userTookOver;
|
||||
};
|
||||
|
||||
await wait(500);
|
||||
if (userTookOver) return;
|
||||
cursor.classList.add('visible');
|
||||
await wait(400);
|
||||
|
||||
const progressA = tabs.a.root.querySelector('.demo-progress');
|
||||
|
||||
// Act 1: open the extension and create a room
|
||||
if (!await step(launcher, 300)) return;
|
||||
if (!await step(createRoomBtn, 500)) return;
|
||||
|
||||
// Act 2: the invite link travels to the friend's browser
|
||||
if (!await step(inviteCopyBtn, 0)) return;
|
||||
await flyInvite();
|
||||
if (userTookOver) return;
|
||||
setConnected(true);
|
||||
showToastB(toastB ? toastB.dataset.joined : '');
|
||||
pulse('b');
|
||||
await wait(900);
|
||||
if (userTookOver) return;
|
||||
|
||||
// Act 3: both sides pick the video tab to sync
|
||||
if (!await step(syncTabBtn, 250)) return;
|
||||
if (!await step(videoSelect, 150, flashSelect)) return;
|
||||
showToastB(toastB ? toastB.dataset.selected : '');
|
||||
await wait(700);
|
||||
if (userTookOver) return;
|
||||
|
||||
// Act 4: play for everyone, then tuck the popup away
|
||||
if (!await step(playBtn, 1800)) return;
|
||||
if (!await step(launcher, 500)) return;
|
||||
|
||||
// Act 5: any side can control — pause there, seek here, play again
|
||||
if (!await step(tabs.b.root, 1000)) return;
|
||||
if (!await step(progressA, 1300, () => seekTo('a', 0.62), 0.62)) return;
|
||||
if (!await step(tabs.a.root, 700)) return;
|
||||
|
||||
finishDemo();
|
||||
};
|
||||
|
||||
if ('IntersectionObserver' in window && !reduceMotion) {
|
||||
const demoObserver = new IntersectionObserver((entries) => {
|
||||
entries.forEach(entry => {
|
||||
if (entry.isIntersecting) {
|
||||
demoObserver.disconnect();
|
||||
setTimeout(runDemo, 900);
|
||||
}
|
||||
});
|
||||
}, { threshold: 0.45 });
|
||||
demoObserver.observe(scene);
|
||||
} else {
|
||||
finishDemo();
|
||||
}
|
||||
};
|
||||
|
||||
initHeroDemo();
|
||||
|
||||
// Terminal Tab Switcher
|
||||
const termTabBtns = document.querySelectorAll('.terminal-tab-btn');
|
||||
const termPanes = document.querySelectorAll('.terminal-pane');
|
||||
@@ -775,4 +1242,64 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
updateDynamicVersion();
|
||||
localizeHomeLinks();
|
||||
initLanguageSelectorValue();
|
||||
// FAQ Accordion Transition (Web Animations API for smooth vertical spring height collapse/expand)
|
||||
try {
|
||||
document.querySelectorAll('.faq-item').forEach(details => {
|
||||
const summary = details.querySelector('summary');
|
||||
let isAnimating = false;
|
||||
|
||||
summary.addEventListener('click', (e) => {
|
||||
e.preventDefault();
|
||||
if (isAnimating) return;
|
||||
|
||||
const startHeight = details.offsetHeight;
|
||||
|
||||
if (details.hasAttribute('open')) {
|
||||
isAnimating = true;
|
||||
const computed = window.getComputedStyle(details);
|
||||
const padY = parseInt(computed.paddingTop) + parseInt(computed.paddingBottom);
|
||||
const borderY = parseInt(computed.borderTopWidth) + parseInt(computed.borderBottomWidth);
|
||||
const closedHeight = summary.offsetHeight + padY + (isNaN(borderY) ? 0 : borderY);
|
||||
|
||||
const animation = details.animate([
|
||||
{ height: startHeight + 'px' },
|
||||
{ height: closedHeight + 'px' }
|
||||
], {
|
||||
duration: 250,
|
||||
easing: 'cubic-bezier(0.16, 1, 0.3, 1)'
|
||||
});
|
||||
|
||||
animation.onfinish = () => {
|
||||
details.removeAttribute('open');
|
||||
details.style.height = '';
|
||||
isAnimating = false;
|
||||
};
|
||||
} else {
|
||||
isAnimating = true;
|
||||
details.setAttribute('open', '');
|
||||
const openHeight = details.offsetHeight;
|
||||
|
||||
const computed = window.getComputedStyle(details);
|
||||
const padY = parseInt(computed.paddingTop) + parseInt(computed.paddingBottom);
|
||||
const borderY = parseInt(computed.borderTopWidth) + parseInt(computed.borderBottomWidth);
|
||||
const closedHeight = summary.offsetHeight + padY + (isNaN(borderY) ? 0 : borderY);
|
||||
|
||||
const animation = details.animate([
|
||||
{ height: closedHeight + 'px' },
|
||||
{ height: openHeight + 'px' }
|
||||
], {
|
||||
duration: 250,
|
||||
easing: 'cubic-bezier(0.16, 1, 0.3, 1)'
|
||||
});
|
||||
|
||||
animation.onfinish = () => {
|
||||
details.style.height = '';
|
||||
isAnimating = false;
|
||||
};
|
||||
}
|
||||
});
|
||||
});
|
||||
} catch (err) {
|
||||
console.warn(err);
|
||||
}
|
||||
});
|
||||
|
||||
+1
-1
@@ -315,7 +315,7 @@ async function compile() {
|
||||
}
|
||||
|
||||
// ── 5. Copy generic static files and verification files ──
|
||||
const genericFiles = ['robots.txt', 'sitemap.xml', 'site.webmanifest', 'version.json'];
|
||||
const genericFiles = ['robots.txt', 'sitemap.xml', 'site.webmanifest', 'version.json', 'llms.txt'];
|
||||
for (const file of genericFiles) {
|
||||
const src = path.join(websiteDir, file);
|
||||
const dest = path.join(wwwDir, file);
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
# KoalaSync
|
||||
|
||||
> Watch Netflix, YouTube, Twitch & any HTML5 video in perfect sync with friends. Free, open-source browser extension for Chrome and Firefox. No sign-up needed.
|
||||
|
||||
KoalaSync is a privacy-first peer-to-peer video synchronization tool. It uses WebRTC for direct connections between peers — no video data ever passes through a server. The relay server is only used for signaling and optional room-based coordination. Self-hostable, MIT licensed.
|
||||
|
||||
## Features
|
||||
|
||||
- [Sync any HTML5 video](https://sync.koalastuff.net/): Works with Netflix, Emby, Jellyfin, YouTube, Twitch, Amazon Prime Video, Disney+, Crunchyroll, HBO Max and more
|
||||
- [Host & co-host controls](https://sync.koalastuff.net/#features): Synchronized play, pause, seek, host control mode, co-host roles
|
||||
- [Privacy-first](https://sync.koalastuff.net/#features): No accounts, no tracking, no data collection, peer-to-peer by design
|
||||
- [Available in 15 languages](https://sync.koalastuff.net/): English, Deutsch, Français, Español, Português, Italiano, Nederlands, Polski, Türkçe, Русский, 日本語, 한국어, 中文, Українська
|
||||
|
||||
## Download
|
||||
|
||||
- [Chrome Web Store](https://chromewebstore.google.com/detail/koalasync/obbnmkmlaaddodakcbdljknjpagklifc): Install KoalaSync for Chrome, Edge, and other Chromium-based browsers
|
||||
- [Firefox Add-ons](https://addons.mozilla.org/de/firefox/addon/koalasync/): Install KoalaSync for Firefox
|
||||
- [GitHub Releases](https://github.com/Shik3i/KoalaSync/releases): Manual download and release notes
|
||||
|
||||
## Technical
|
||||
|
||||
- [Source code](https://github.com/Shik3i/KoalaSync): Full MIT-licensed source on GitHub (extension, server, website)
|
||||
- [Changelog](https://github.com/Shik3i/KoalaSync/blob/main/docs/CHANGELOG.md): Version history and release notes
|
||||
- [Self-hosting guide](https://sync.koalastuff.net/#self-hosting): Run your own relay server
|
||||
- [Server](https://sync.koalastuff.net/): Node.js WebSocket relay, port 54000
|
||||
|
||||
## Optional
|
||||
|
||||
- [Alternatives hub](https://sync.koalastuff.net/alternatives/): Comparison with Teleparty, Scener, other sync tools
|
||||
- [Privacy policy](https://sync.koalastuff.net/privacy.html): Data handling and privacy information
|
||||
- [Imprint](https://sync.koalastuff.net/imprint.html): Legal notice
|
||||
- [Sitemap](https://sync.koalastuff.net/sitemap.xml): Full site index
|
||||
- [Join a room](https://sync.koalastuff.net/join.html): Direct room join page
|
||||
+26
-15
@@ -17,6 +17,13 @@
|
||||
"HERO_TITLE": "Gemeinsam schauen.<span class='hero-line2'>Perfekt synchron.</span>",
|
||||
"HERO_SUBTITLE": "Dein Kino-Abend auf Distanz. Keine Lags, keine Anmeldung. Einfach Link teilen und zusammen schauen.",
|
||||
"HERO_MASCOT_ALT": "Ein niedlicher Koala steht da und schaut nach unten auf die Download-Buttons",
|
||||
"DEMO_SYNC": "Synchron",
|
||||
"DEMO_HINT": "Live-Demo — drück Play in einem der Tabs: KoalaSync hält beide synchron.",
|
||||
"DEMO_NO_ROOM": "Noch nicht verbunden",
|
||||
"DEMO_CREATE_ROOM": "Raum erstellen",
|
||||
"DEMO_JOINED": "Raum beigetreten",
|
||||
"DEMO_TAB_SELECTED": "Tab ausgewählt",
|
||||
"DEMO_SELECT_PLACEHOLDER": "Video-Tab wählen…",
|
||||
"ADD_TO_CHROME": "Zu Chrome hinzufügen",
|
||||
"ADD_TO_FIREFOX": "Zu Firefox hinzufügen",
|
||||
"COMPAT_HEADING": "Funktioniert auf deinen Lieblingsplattformen",
|
||||
@@ -35,8 +42,8 @@
|
||||
"USE_CASE_3_DESC": "Überbrückt die Distanz und genießt gemeinsame Date-Nächte. Erlebt jeden Plot-Twist, lacht über dieselben Witze und teilt emotionale Momente zur selben Millisekunde.",
|
||||
"WHY_TITLE": "Warum KoalaSync?",
|
||||
"WHY_SUBTITLE": "Entwickelt für zuverlässigen Sync, Datenschutz und einfache Einrichtung.",
|
||||
"FEATURE_1_TITLE": "Volle Kontrolle, in Echtzeit",
|
||||
"FEATURE_1_DESC": "Einer pausiert, alle pausieren. Einer spult, alle folgen. Unser Zwei-Phasen-Synchronisationsprotokoll koordiniert die Wiedergabe aller Teilnehmer in Echtzeit.",
|
||||
"FEATURE_1_TITLE": "Raum-Kontrolle & Sync",
|
||||
"FEATURE_1_DESC": "Du bestimmst, wer die Wiedergabe steuert. Aktiviere die Host-Steuerung, damit nur du pausieren und spulen darfst, oder ernenne Co-Hosts in der Teilnehmerliste.",
|
||||
"FEATURE_2_TITLE": "Grenzenloses Bingen",
|
||||
"FEATURE_2_DESC": "Nächste Episode startet für jeden zeitgleich. KoalaSync erkennt den Episodenwechsel und pausiert, bis jeder Teilnehmer das neue Video fertig geladen hat.",
|
||||
"FEATURE_3_TITLE": "Keine Accounts / Datenschutz",
|
||||
@@ -87,23 +94,23 @@
|
||||
"COMP_FOOTNOTE_3": "Datenschutzerklärung und Tracker-Erfassung von Teleparty:",
|
||||
"COMP_FOOTNOTE_4": "Funktioniert auf allen Seiten, die Skript-Injektionen in Standard-HTML5-Videoplayer erlauben. Seiten mit extrem strengen Content Security Policies (CSP), DRM-Kopierschutz oder stark verschachtelten Player-Wrappern (z. B. komplexe Shadow-DOMs) können die automatische Steuerung blockieren.",
|
||||
"STEPS_TITLE": "Erste Schritte",
|
||||
"STEP_1_TITLE": "Erweiterung installieren",
|
||||
"STEP_1_DESC": "Füge KoalaSync aus dem Chrome Web Store, den Firefox Add-ons oder über die Entwickler-ZIP von GitHub zu deinem Browser hinzu.",
|
||||
"STEP_1_ILLUS_DESC": "Privatsphäre-fokussierte Video-Synchronisation",
|
||||
"STEP_1_ILLUS_DL_CHROME": "Download für Chrome",
|
||||
"STEP_1_ILLUS_DL_FIREFOX": "Download für Firefox",
|
||||
"STEP_1_ILLUS_ACTIVE": "Erweiterung aktiv",
|
||||
"STEP_1_ILLUS_READY": "Bereit zum Mitschauen!",
|
||||
"STEP_2_TITLE": "Raum erstellen",
|
||||
"STEP_2_DESC": "Öffne die Erweiterung und klicke auf „+ Neuer Raum“. KoalaSync generiert automatisch eine sichere Raum-ID samt Passwort, tritt dem Raum bei und kopiert den Einladungslink in deine Zwischenablage.",
|
||||
"STEP_1_TITLE": "Raum erstellen & teilen",
|
||||
"STEP_1_DESC": "Öffne das Popup der Erweiterung, erstelle einen Raum mit einem Klick und teile den generierten Link mit deinen Freunden. Sie treten über die Einladungsbrücke sofort bei.",
|
||||
"STEP_1_ILLUS_DESC": "Wähle einen Video-Tab",
|
||||
"STEP_1_ILLUS_DL_CHROME": "YouTube-Tab verbinden",
|
||||
"STEP_1_ILLUS_DL_FIREFOX": "Netflix-Tab verbinden",
|
||||
"STEP_1_ILLUS_ACTIVE": "Tab verbunden",
|
||||
"STEP_1_ILLUS_READY": "Bereit für synchrones Schauen!",
|
||||
"STEP_2_TITLE": "Video-Tab auswählen",
|
||||
"STEP_2_DESC": "Klicke auf den Tab deines Videos und wähle im Popup den Tab aus, den du synchronisieren möchtest. KoalaSync übernimmt ab jetzt die automatische Verbindung.",
|
||||
"STEP_2_ILLUS_ROOM": "Raum",
|
||||
"STEP_2_ILLUS_SYNC": "Sync",
|
||||
"STEP_2_ILLUS_SETTINGS": "Optionen",
|
||||
"STEP_2_ILLUS_CREATE": "+ Neuer Raum",
|
||||
"STEP_2_ILLUS_MANUAL": "Manuell verbinden / Erweitert",
|
||||
"STEP_2_ILLUS_COPIED": "Einladungslink kopiert!",
|
||||
"STEP_3_TITLE": "Teilen & Synchronisieren",
|
||||
"STEP_3_DESC": "Sende den Einladungslink an deine Freunde. Sobald sie beitreten, wähle deinen Video-Tab aus und genieße die synchronisierte Wiedergabe.",
|
||||
"STEP_3_TITLE": "Synchron genießen",
|
||||
"STEP_3_DESC": "Drücke auf Wiedergabe. Egal wer pausiert, spult oder startet: Alles läuft bei allen Beteiligten absolut zeitgleich und verzögerungsfrei ab.",
|
||||
"STEP_3_ILLUS_IN_SYNC": "SYNCHRON",
|
||||
"SELF_TITLE": "Für Self-Hoster",
|
||||
"SELF_SUBTITLE": "Du traust dem Server nicht? Behalte die volle Datenhoheit. Richte deinen eigenen privaten Relay-Server in wenigen Minuten ein.",
|
||||
@@ -158,7 +165,7 @@
|
||||
"MOCK_13": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"14\" height=\"14\" aria-hidden=\"true\"><polygon points=\"13 2 3 14 12 14 11 22 21 10 12 10 13 2\"/></svg> SYNC",
|
||||
"MOCK_14": "Zu anderen springen",
|
||||
"MOCK_15": "Letzte Aktivität",
|
||||
"MOCK_16": "Warten auf 1 Partner (KoalaPC)...",
|
||||
"MOCK_16": "Warten auf 1 Partner (🐶 HappyDog)...",
|
||||
"MOCK_17": "Überspringen & abspielen",
|
||||
"MOCK_18": "Dein Benutzername",
|
||||
"MOCK_19": "Noise-Filterung",
|
||||
@@ -205,5 +212,9 @@
|
||||
"ALT_SCREEN_LIMITS_BODY": "KoalaSync ersetzt keinen Voice-Call. Wenn ihr beim Schauen reden wollt, nutzt ihr weiterhin Discord, Teamspeak, Signal, WhatsApp oder was auch immer ihr normalerweise verwendet.<br><br>Außerdem braucht jede Person selbst Zugriff auf das Video oder die jeweilige Seite. KoalaSync umgeht keine Abos, Logins, DRM, regionale Einschränkungen oder Plattformregeln.<br><br>KoalaSync ist aktuell Desktop-Browser-only, hat keinen eingebauten Chat oder Voice-Chat und die Funktion hängt immer vom jeweiligen Browser und Videoplayer ab.",
|
||||
"ALT_SCREEN_SUMMARY_TITLE": "Kurz gesagt",
|
||||
"ALT_SCREEN_SUMMARY_BODY": "Bildschirmübertragung ist die einfachste Lösung, wenn es schnell gehen soll und Qualität, Privatsphäre oder individuelle Kontrolle nicht so wichtig sind. KoalaSync passt besser, wenn jeder lokal im eigenen Browser schauen soll und sich der Filmabend mehr wie wirklich gemeinsames Schauen anfühlen soll.",
|
||||
"ALT_TRY_KOALASYNC": "KoalaSync ausprobieren"
|
||||
"ALT_TRY_KOALASYNC": "KoalaSync ausprobieren",
|
||||
"MOCK_HOST_CONTROL_LABEL": "Host-Steuerung",
|
||||
"MOCK_HOST_CONTROL_TOGGLE": "Nur ich darf die Wiedergabe steuern",
|
||||
"LABEL_SELECT_VIDEO": "Video auswählen",
|
||||
"OPTION_SELECT_TAB": "-- Wähle einen Tab --"
|
||||
}
|
||||
|
||||
+27
-16
@@ -17,6 +17,13 @@
|
||||
"HERO_TITLE": "Watch Together.<span class='hero-line2'>Sync Perfectly.</span>",
|
||||
"HERO_SUBTITLE": "Your remote movie night without lags. No registration, no data collection. Just share a link and watch together.",
|
||||
"HERO_MASCOT_ALT": "A cute koala standing and looking down at the download buttons",
|
||||
"DEMO_SYNC": "In sync",
|
||||
"DEMO_HINT": "Live demo — press play in either tab: KoalaSync keeps both in sync.",
|
||||
"DEMO_NO_ROOM": "Not connected yet",
|
||||
"DEMO_CREATE_ROOM": "Create Room",
|
||||
"DEMO_JOINED": "Room joined",
|
||||
"DEMO_TAB_SELECTED": "Tab selected",
|
||||
"DEMO_SELECT_PLACEHOLDER": "Choose a video tab…",
|
||||
"ADD_TO_CHROME": "Add to Chrome",
|
||||
"ADD_TO_FIREFOX": "Add to Firefox",
|
||||
"COMPAT_HEADING": "Works on your favorite platforms",
|
||||
@@ -35,8 +42,8 @@
|
||||
"USE_CASE_3_DESC": "Bridge the distance and enjoy date nights. Experience every plot twist, laugh at the same jokes, and share emotional moments at the exact same millisecond.",
|
||||
"WHY_TITLE": "Why KoalaSync?",
|
||||
"WHY_SUBTITLE": "Built for reliable sync, privacy-first design, and easy setup.",
|
||||
"FEATURE_1_TITLE": "Full Control / Instant Sync",
|
||||
"FEATURE_1_DESC": "One pauses, everyone pauses. One seeks, everyone follows. Our two-phase sync protocol coordinates playback in real time across all participants.",
|
||||
"FEATURE_1_TITLE": "Host Control & Sync",
|
||||
"FEATURE_1_DESC": "You decide who controls playback. Turn on Host Control to lock playback actions to yourself, or promote individual peers to co-hosts in the participant list.",
|
||||
"FEATURE_2_TITLE": "Endless Binge-Watching",
|
||||
"FEATURE_2_DESC": "Autoplay in sync. KoalaSync automatically detects episode transitions and holds playback until all peers have successfully loaded the next video.",
|
||||
"FEATURE_3_TITLE": "Zero Accounts / Pure Privacy",
|
||||
@@ -87,23 +94,23 @@
|
||||
"COMP_FOOTNOTE_3": "Teleparty privacy policies and tracking data collection:",
|
||||
"COMP_FOOTNOTE_4": "Works on websites that allow script injections into standard HTML5 video tags. Websites with highly strict Content Security Policies (CSP), DRM copy protection, or heavily obfuscated player wrappers (like complex shadow DOMs) might restrict automated control or injection.",
|
||||
"STEPS_TITLE": "Getting Started",
|
||||
"STEP_1_TITLE": "Install Extension",
|
||||
"STEP_1_DESC": "Add KoalaSync to your browser from the Chrome Web Store, Firefox Add-ons, or download the latest developer ZIP from GitHub.",
|
||||
"STEP_1_ILLUS_DESC": "Privacy-first video synchronizer",
|
||||
"STEP_1_ILLUS_DL_CHROME": "Download for Chrome",
|
||||
"STEP_1_ILLUS_DL_FIREFOX": "Download for Firefox",
|
||||
"STEP_1_ILLUS_ACTIVE": "Extension Active",
|
||||
"STEP_1_ILLUS_READY": "Ready to watch together!",
|
||||
"STEP_2_TITLE": "Create a Room",
|
||||
"STEP_2_DESC": "Open the extension popup and click '+ Create New Room'. KoalaSync automatically generates a secure Room ID and Password, joins it, and copies the invite link to your clipboard.",
|
||||
"STEP_1_TITLE": "Create & Share Room",
|
||||
"STEP_1_DESC": "Open the extension popup, create a room with one click, and share the link with your friends. They join instantly via the invitation bridge.",
|
||||
"STEP_1_ILLUS_DESC": "Select a tab to link",
|
||||
"STEP_1_ILLUS_DL_CHROME": "Link YouTube Tab",
|
||||
"STEP_1_ILLUS_DL_FIREFOX": "Link Netflix Tab",
|
||||
"STEP_1_ILLUS_ACTIVE": "Tab Linked",
|
||||
"STEP_1_ILLUS_READY": "Ready to sync playback!",
|
||||
"STEP_2_TITLE": "Select Video Tab",
|
||||
"STEP_2_DESC": "Go to your video tab and select the tab you want to synchronize in the popup. KoalaSync automatically links your playheads from here.",
|
||||
"STEP_2_ILLUS_ROOM": "Room",
|
||||
"STEP_2_ILLUS_SYNC": "Sync",
|
||||
"STEP_2_ILLUS_SETTINGS": "Settings",
|
||||
"STEP_2_ILLUS_CREATE": "+ Create New Room",
|
||||
"STEP_2_ILLUS_MANUAL": "Manual Connect / Advanced",
|
||||
"STEP_2_ILLUS_COPIED": "Invite link copied!",
|
||||
"STEP_3_TITLE": "Share & Sync",
|
||||
"STEP_3_DESC": "Send the invite link to your friends. Once they join, select your video tab and enjoy synchronized playback.",
|
||||
"STEP_3_TITLE": "Enjoy Perfect Sync",
|
||||
"STEP_3_DESC": "Press play. Whether someone pauses, seeks, or plays, everyone's playback stays perfectly in sync without any lag.",
|
||||
"STEP_3_ILLUS_IN_SYNC": "IN SYNC",
|
||||
"SELF_TITLE": "For Self-Hosters",
|
||||
"SELF_SUBTITLE": "Don't trust our server? Maintain full data sovereignty. Deploy your own private relay server in minutes.",
|
||||
@@ -158,7 +165,7 @@
|
||||
"MOCK_13": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"14\" height=\"14\" aria-hidden=\"true\"><polygon points=\"13 2 3 14 12 14 11 22 21 10 12 10 13 2\"/></svg> SYNC",
|
||||
"MOCK_14": "Jump to Others",
|
||||
"MOCK_15": "Last Activity Status",
|
||||
"MOCK_16": "Waiting for 1 peer (KoalaPC)...",
|
||||
"MOCK_16": "Waiting for 1 peer (🐶 HappyDog)...",
|
||||
"MOCK_17": "Skip & Play anyway",
|
||||
"MOCK_18": "Your Username",
|
||||
"MOCK_19": "Hide Clutter Tabs",
|
||||
@@ -194,7 +201,7 @@
|
||||
"ALT_TELEPARTY_SUMMARY_BODY": "If you want built-in chat or mobile support, Teleparty may be the better fit. If you want free, open-source desktop browser sync that works with almost any normal video player, including self-hosted media servers like Emby, Jellyfin and Plex, KoalaSync is probably the better match.",
|
||||
"ALT_SCREEN_TITLE": "KoalaSync vs screen sharing: when is video sync better?",
|
||||
"ALT_SCREEN_META_DESC": "A practical comparison of KoalaSync and screen sharing for remote movie nights, playback control, video quality, privacy, subtitles and browser-based watching.",
|
||||
"ALT_SCREEN_INTRO": "Screen sharing works, and sometimes it is honestly enough. One person shares their screen, everyone else watches, and you are done.<br><br>But for longer movie nights or watching episodes together, it can get annoying. The video quality depends on the sharer\u2019s upload, CPU, browser, and whatever compression Discord, Teamspeak, Zoom or another call app applies. Also, only one person really controls the playback.",
|
||||
"ALT_SCREEN_INTRO": "Screen sharing works, and sometimes it is honestly enough. One person shares their screen, everyone else watches, and you are done.<br><br>But for longer movie nights or watching episodes together, it can get annoying. The video quality depends on the sharer’s upload, CPU, browser, and whatever compression Discord, Teamspeak, Zoom or another call app applies. Also, only one person really controls the playback.",
|
||||
"ALT_SCREEN_WHEN_ENOUGH_TITLE": "When screen sharing is enough",
|
||||
"ALT_SCREEN_WHEN_ENOUGH_BODY": "Screen sharing is fine when you want the fastest possible setup. If only one person has access to the video, or everyone is okay with one person controlling play, pause and seeking, it may be the simplest option.<br><br>It also makes sense when quality is not a big deal, when nobody needs their own subtitles or audio settings, and when the person sharing is comfortable showing that browser window or screen.",
|
||||
"ALT_SCREEN_WHEN_ANNOYING_TITLE": "Where screen sharing gets annoying",
|
||||
@@ -205,5 +212,9 @@
|
||||
"ALT_SCREEN_LIMITS_BODY": "KoalaSync is not a replacement for a voice call. If you want to talk while watching, you still use Discord, Teamspeak, Signal, WhatsApp or whatever you normally use.<br><br>Everyone also needs access to the video or page on their own device. KoalaSync does not bypass subscriptions, logins, DRM, regional restrictions or platform rules.<br><br>It is currently desktop-browser only, has no built-in chat or voice feature, and compatibility always depends on the browser and the video player.",
|
||||
"ALT_SCREEN_SUMMARY_TITLE": "Summary",
|
||||
"ALT_SCREEN_SUMMARY_BODY": "Screen sharing is the simplest option when you just want something quick and do not care much about quality, privacy or individual control. KoalaSync is a better fit when everyone should watch locally in their own browser and the session should feel more like actually watching together.",
|
||||
"ALT_TRY_KOALASYNC": "Try KoalaSync"
|
||||
"ALT_TRY_KOALASYNC": "Try KoalaSync",
|
||||
"MOCK_HOST_CONTROL_LABEL": "Host Control",
|
||||
"MOCK_HOST_CONTROL_TOGGLE": "Only I can control playback",
|
||||
"LABEL_SELECT_VIDEO": "Select Video",
|
||||
"OPTION_SELECT_TAB": "-- Select a Tab --"
|
||||
}
|
||||
|
||||
+26
-15
@@ -17,6 +17,13 @@
|
||||
"HERO_TITLE": "Miren juntos.<span class='hero-line2'>Sincronización perfecta.</span>",
|
||||
"HERO_SUBTITLE": "Tu noche de películas a distancia sin retrasos. Sin registros ni recopilación de datos. Solo comparte un enlace y miren juntos.",
|
||||
"HERO_MASCOT_ALT": "Un lindo koala de pie mirando hacia abajo a los botones de descarga",
|
||||
"DEMO_SYNC": "Sincronizado",
|
||||
"DEMO_HINT": "Demo en vivo — pulsa play en cualquiera de las pestañas: KoalaSync mantiene ambas sincronizadas.",
|
||||
"DEMO_NO_ROOM": "Aún sin conexión",
|
||||
"DEMO_CREATE_ROOM": "Crear sala",
|
||||
"DEMO_JOINED": "Conectado a la sala",
|
||||
"DEMO_TAB_SELECTED": "Pestaña seleccionada",
|
||||
"DEMO_SELECT_PLACEHOLDER": "Elige una pestaña de video…",
|
||||
"ADD_TO_CHROME": "Añadir a Chrome",
|
||||
"ADD_TO_FIREFOX": "Añadir a Firefox",
|
||||
"COMPAT_HEADING": "Funciona en tus plataformas favoritas",
|
||||
@@ -35,8 +42,8 @@
|
||||
"USE_CASE_3_DESC": "Reduce la distancia y disfruta de noches de citas. Vive cada giro de la trama, ríete de los mismos chistes y comparte momentos emotivos en el mismo milisegundo exacto.",
|
||||
"WHY_TITLE": "¿Por qué KoalaSync?",
|
||||
"WHY_SUBTITLE": "Diseñado para una sincronización confiable, con la privacidad como prioridad y una configuración sencilla.",
|
||||
"FEATURE_1_TITLE": "Control total / Sincronización instantánea",
|
||||
"FEATURE_1_DESC": "Si uno pausa, todos pausan. Si uno avanza, todos le siguen. Nuestro protocolo de sincronización en dos fases coordina la reproducción en tiempo real para todos los participantes.",
|
||||
"FEATURE_1_TITLE": "Control del host y sincronización",
|
||||
"FEATURE_1_DESC": "Tú decides quién controla la reproducción. Activa el control del anfitrión para que solo tú puedas pausar y avanzar, o asigna coanfitriones.",
|
||||
"FEATURE_2_TITLE": "Maratones sin fin",
|
||||
"FEATURE_2_DESC": "Reproducción automática sincronizada. KoalaSync detecta automáticamente los cambios de episodio y detiene la reproducción hasta que todos los participantes hayan cargado el siguiente video.",
|
||||
"FEATURE_3_TITLE": "Sin cuentas / Privacidad absoluta",
|
||||
@@ -87,23 +94,23 @@
|
||||
"COMP_FOOTNOTE_3": "Políticas de privacidad y recopilación de datos de Teleparty:",
|
||||
"COMP_FOOTNOTE_4": "Funciona en sitios web que permiten inyecciones de scripts en etiquetas de video HTML5 estándar. Los sitios con políticas de seguridad (CSP) muy estrictas, protección DRM o reproductores ofuscados (como DOMs de sombra complejos) pueden restringir el control automático.",
|
||||
"STEPS_TITLE": "Cómo empezar",
|
||||
"STEP_1_TITLE": "Instalar la extensión",
|
||||
"STEP_1_DESC": "Añade KoalaSync a tu navegador desde la Chrome Web Store, complementos de Firefox o descarga el archivo ZIP para desarrolladores desde GitHub.",
|
||||
"STEP_1_ILLUS_DESC": "Sincronizador de video privado",
|
||||
"STEP_1_ILLUS_DL_CHROME": "Descargar para Chrome",
|
||||
"STEP_1_ILLUS_DL_FIREFOX": "Descargar para Firefox",
|
||||
"STEP_1_ILLUS_ACTIVE": "Extensión activa",
|
||||
"STEP_1_ILLUS_READY": "¡Listo para ver juntos!",
|
||||
"STEP_2_TITLE": "Crear una sala",
|
||||
"STEP_2_DESC": "Abre el menú de la extensión y haz clic en '+ Crear nueva sala'. KoalaSync generará automáticamente un ID de sala y una contraseña seguros, se conectará y copiará el enlace al portapapeles.",
|
||||
"STEP_1_TITLE": "Crear y compartir sala",
|
||||
"STEP_1_DESC": "Abre la extensión, crea una sala con un clic y comparte el enlace con tus amigos. Se unirán al instante a través del enlace de invitación.",
|
||||
"STEP_1_ILLUS_DESC": "Elige una pestaña para vincular",
|
||||
"STEP_1_ILLUS_DL_CHROME": "Vincular pestaña de YouTube",
|
||||
"STEP_1_ILLUS_DL_FIREFOX": "Vincular pestaña de Netflix",
|
||||
"STEP_1_ILLUS_ACTIVE": "Pestaña vinculada",
|
||||
"STEP_1_ILLUS_READY": "Listo para ver en sincronía!",
|
||||
"STEP_2_TITLE": "Seleccionar pestaña de vídeo",
|
||||
"STEP_2_DESC": "Ve a la pestaña de tu vídeo y selecciónala en el menú de la extensión. KoalaSync vinculará vuestros reproductores automáticamente.",
|
||||
"STEP_2_ILLUS_ROOM": "Sala",
|
||||
"STEP_2_ILLUS_SYNC": "Sincro",
|
||||
"STEP_2_ILLUS_SETTINGS": "Ajustes",
|
||||
"STEP_2_ILLUS_CREATE": "+ Crear nueva sala",
|
||||
"STEP_2_ILLUS_MANUAL": "Conexión manual / Avanzado",
|
||||
"STEP_2_ILLUS_COPIED": "¡Enlace de invitación copiado!",
|
||||
"STEP_3_TITLE": "Compartir y Sincronizar",
|
||||
"STEP_3_DESC": "Envía el enlace de invitación a tus amigos. Una vez que se unan, selecciona tu pestaña de video y disfrutad de la reproducción sincronizada.",
|
||||
"STEP_3_TITLE": "Disfrutar de la sincronización",
|
||||
"STEP_3_DESC": "Pulsa reproducir. Cuando alguien pause, avance o reproduzca, el vídeo de todos se mantendrá en sincronía en tiempo real y sin retrasos.",
|
||||
"STEP_3_ILLUS_IN_SYNC": "SINCRONIZADO",
|
||||
"SELF_TITLE": "Para auto-alojadores",
|
||||
"SELF_SUBTITLE": "¿No te fías de nuestro servidor? Mantén la soberanía total de tus datos. Despliega tu propio servidor de retransmisión en minutos.",
|
||||
@@ -158,7 +165,7 @@
|
||||
"MOCK_13": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"14\" height=\"14\" aria-hidden=\"true\"><polygon points=\"13 2 3 14 12 14 11 22 21 10 12 10 13 2\"/></svg> SINCRO",
|
||||
"MOCK_14": "Ir a la posición de otros",
|
||||
"MOCK_15": "Estado de la última actividad",
|
||||
"MOCK_16": "Esperando a 1 participante (KoalaPC)...",
|
||||
"MOCK_16": "Esperando a 1 participante (🐶 HappyDog)...",
|
||||
"MOCK_17": "Omitir y reproducir ya",
|
||||
"MOCK_18": "Tu nombre de usuario",
|
||||
"MOCK_19": "Ocultar pestañas sin video",
|
||||
@@ -205,5 +212,9 @@
|
||||
"ALT_SCREEN_LIMITS_BODY": "KoalaSync no sustituye a una llamada de voz. Si quieres hablar mientras ves el contenido, puedes seguir usando Discord, Teamspeak, Signal, WhatsApp o cualquier otra herramienta que utilices habitualmente.<br><br>Además, cada participante necesita acceder al vídeo o a la página web desde su propio dispositivo. KoalaSync no elude suscripciones, inicios de sesión, DRM, restricciones regionales ni las normas de las plataformas.<br><br>Actualmente solo funciona en navegadores de escritorio, no incluye funciones de chat o voz, y la compatibilidad depende siempre del navegador y del reproductor de vídeo.",
|
||||
"ALT_SCREEN_SUMMARY_TITLE": "Resumen",
|
||||
"ALT_SCREEN_SUMMARY_BODY": "Compartir pantalla es la opción más sencilla cuando buscas algo rápido y no te preocupa demasiado la calidad, la privacidad o el control individual. KoalaSync es una mejor alternativa cuando cada persona debe ver el contenido localmente en su propio navegador y se busca una experiencia que realmente se asemeje a verlo juntos.",
|
||||
"ALT_TRY_KOALASYNC": "Prueba KoalaSync"
|
||||
"ALT_TRY_KOALASYNC": "Prueba KoalaSync",
|
||||
"MOCK_HOST_CONTROL_LABEL": "Control del anfitrión",
|
||||
"MOCK_HOST_CONTROL_TOGGLE": "Solo yo puedo controlar la reproducción",
|
||||
"LABEL_SELECT_VIDEO": "Seleccionar video",
|
||||
"OPTION_SELECT_TAB": "-- Selecciona una pestaña --"
|
||||
}
|
||||
|
||||
+26
-15
@@ -17,6 +17,13 @@
|
||||
"HERO_TITLE": "Regardez ensemble.<span class='hero-line2'>Synchronisation parfaite.</span>",
|
||||
"HERO_SUBTITLE": "Votre soirée cinéma à distance sans décalage. Pas d'inscription, pas de collecte de données. Partagez simplement un lien et regardez ensemble.",
|
||||
"HERO_MASCOT_ALT": "Un koala mignon debout et regardant vers le bas les boutons de téléchargement",
|
||||
"DEMO_SYNC": "Synchronisé",
|
||||
"DEMO_HINT": "Démo interactive — lancez la lecture dans un onglet : KoalaSync garde les deux synchronisés.",
|
||||
"DEMO_NO_ROOM": "Pas encore connecté",
|
||||
"DEMO_CREATE_ROOM": "Créer un salon",
|
||||
"DEMO_JOINED": "Salon rejoint",
|
||||
"DEMO_TAB_SELECTED": "Onglet sélectionné",
|
||||
"DEMO_SELECT_PLACEHOLDER": "Choisir un onglet vidéo…",
|
||||
"ADD_TO_CHROME": "Ajouter à Chrome",
|
||||
"ADD_TO_FIREFOX": "Ajouter à Firefox",
|
||||
"COMPAT_HEADING": "Fonctionne sur vos plateformes préférées",
|
||||
@@ -35,8 +42,8 @@
|
||||
"USE_CASE_3_DESC": "Comblez la distance et profitez de soirées en tête-à-tête. Vivez chaque rebondissement, riez des mêmes blagues et partagez des moments émotionnels à la milliseconde près.",
|
||||
"WHY_TITLE": "Pourquoi KoalaSync ?",
|
||||
"WHY_SUBTITLE": "Conçu pour une synchronisation fiable, le respect de la vie privée et une configuration facile.",
|
||||
"FEATURE_1_TITLE": "Contrôle total / Synchro instantanée",
|
||||
"FEATURE_1_DESC": "Un joueur met en pause, tout le monde met en pause. Un joueur avance, tout le monde suit. Notre protocole de synchronisation en deux phases coordonne la lecture en temps réel pour tous les participants.",
|
||||
"FEATURE_1_TITLE": "Contrôle de l'hôte et synchronisation",
|
||||
"FEATURE_1_DESC": "Vous décidez qui contrôle la lecture. Activez le contrôle de l'hôte pour être le seul à pouvoir mettre en pause et avancer, ou nommez des co-hôtes.",
|
||||
"FEATURE_2_TITLE": "Binge-watching sans fin",
|
||||
"FEATURE_2_DESC": "Lecture automatique synchronisée. KoalaSync détecte automatiquement les transitions d'épisodes et suspend la lecture jusqu'à ce que tous les participants aient chargé la vidéo suivante.",
|
||||
"FEATURE_3_TITLE": "Aucun compte / Vie privée garantie",
|
||||
@@ -87,23 +94,23 @@
|
||||
"COMP_FOOTNOTE_3": "Politiques de confidentialité et collecte de données de suivi de Teleparty :",
|
||||
"COMP_FOOTNOTE_4": "Fonctionne sur les sites web qui autorisent les injections de scripts dans les balises vidéo HTML5 standard. Les sites avec des politiques de sécurité du contenu (CSP) très strictes, une protection contre la copie DRM ou des conteneurs de lecteurs fortement obscurcis (comme des DOM fantômes complexes) peuvent restreindre le contrôle automatisé ou l'injection.",
|
||||
"STEPS_TITLE": "Pour commencer",
|
||||
"STEP_1_TITLE": "Installer l'extension",
|
||||
"STEP_1_DESC": "Ajoutez KoalaSync à votre navigateur depuis le Chrome Web Store, les modules complémentaires de Firefox, ou téléchargez le dernier fichier ZIP développeur depuis GitHub.",
|
||||
"STEP_1_ILLUS_DESC": "Synchronisateur vidéo respectueux de la vie privée",
|
||||
"STEP_1_ILLUS_DL_CHROME": "Télécharger pour Chrome",
|
||||
"STEP_1_ILLUS_DL_FIREFOX": "Télécharger pour Firefox",
|
||||
"STEP_1_ILLUS_ACTIVE": "Extension active",
|
||||
"STEP_1_ILLUS_READY": "Prêt à regarder ensemble !",
|
||||
"STEP_2_TITLE": "Créer un salon",
|
||||
"STEP_2_DESC": "Ouvrez la fenêtre de l'extension et cliquez sur '+ Créer un nouveau salon'. KoalaSync génère automatiquement un identifiant de salon et un mot de passe sécurisés, s'y connecte et copie le lien d'invitation dans votre presse-papiers.",
|
||||
"STEP_1_TITLE": "Créer et partager un salon",
|
||||
"STEP_1_DESC": "Ouvrez l'extension, créez un salon en un clic et partagez le lien avec vos amis. Ils rejoindront instantanément via le lien d'invitation.",
|
||||
"STEP_1_ILLUS_DESC": "Choisir un onglet à lier",
|
||||
"STEP_1_ILLUS_DL_CHROME": "Lier l'onglet YouTube",
|
||||
"STEP_1_ILLUS_DL_FIREFOX": "Lier l'onglet Netflix",
|
||||
"STEP_1_ILLUS_ACTIVE": "Onglet lié",
|
||||
"STEP_1_ILLUS_READY": "Prêt à regarder en synchronisation !",
|
||||
"STEP_2_TITLE": "Sélectionner l'onglet vidéo",
|
||||
"STEP_2_DESC": "Allez sur l'onglet de votre vidéo et sélectionnez-le dans le menu de l'extension. KoalaSync liera vos lecteurs automatiquement.",
|
||||
"STEP_2_ILLUS_ROOM": "Salon",
|
||||
"STEP_2_ILLUS_SYNC": "Synchro",
|
||||
"STEP_2_ILLUS_SETTINGS": "Options",
|
||||
"STEP_2_ILLUS_CREATE": "+ Créer un nouveau salon",
|
||||
"STEP_2_ILLUS_MANUAL": "Connexion manuelle / Avancé",
|
||||
"STEP_2_ILLUS_COPIED": "Lien d'invitation copié !",
|
||||
"STEP_3_TITLE": "Partager & Synchroniser",
|
||||
"STEP_3_DESC": "Envoyez le lien d'invitation à vos amis. Dès qu'ils rejoignent, sélectionnez votre onglet vidéo et profitez de la lecture synchronisée.",
|
||||
"STEP_3_TITLE": "Profiter de la synchronisation",
|
||||
"STEP_3_DESC": "Lancez la lecture. Si quelqu'un met en pause, avance ou joue, la vidéo de tout le monde reste synchronisée en temps réel sans décalage.",
|
||||
"STEP_3_ILLUS_IN_SYNC": "SYNCHRONISÉ",
|
||||
"SELF_TITLE": "Pour l'auto-hébergement",
|
||||
"SELF_SUBTITLE": "Vous ne faites pas confiance à notre serveur ? Conservez votre souveraineté totale sur les données. Déployez votre propre serveur relais en quelques minutes.",
|
||||
@@ -157,7 +164,7 @@
|
||||
"MOCK_12": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" width=\"14\" height=\"14\" aria-hidden=\"true\"><rect x=\"6\" y=\"4\" width=\"4\" height=\"16\"/><rect x=\"14\" y=\"4\" width=\"4\" height=\"16\"/></svg> Pause",
|
||||
"MOCK_13": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"14\" height=\"14\" aria-hidden=\"true\"><polygon points=\"13 2 3 14 12 14 11 22 21 10 12 10 13 2\"/></svg> SYNC",
|
||||
"MOCK_14": "Dernière activité",
|
||||
"MOCK_15": "En attente de 1 participant (KoalaPC)...",
|
||||
"MOCK_15": "En attente de 1 participant (🐶 HappyDog)...",
|
||||
"MOCK_16": "Passer & lire",
|
||||
"MOCK_17": "Votre pseudo",
|
||||
"MOCK_18": "Masquer les onglets inutiles",
|
||||
@@ -205,5 +212,9 @@
|
||||
"ALT_SCREEN_LIMITS_BODY": "KoalaSync ne remplace pas un appel vocal. Si vous souhaitez discuter tout en regardant, vous continuez à utiliser Discord, Teamspeak, Signal, WhatsApp ou tout autre outil habituel.<br><br>Chacun doit également pouvoir accéder à la vidéo ou à la page depuis son propre appareil. KoalaSync ne contourne ni les abonnements, ni les identifiants, ni les DRM, ni les restrictions géographiques ou les règles des plateformes.<br><br>L'outil fonctionne actuellement uniquement sur les navigateurs de bureau, ne dispose pas de fonction de chat ou de voix intégrée, et la compatibilité dépend toujours du navigateur et du lecteur vidéo utilisé.",
|
||||
"ALT_SCREEN_SUMMARY_TITLE": "Résumé",
|
||||
"ALT_SCREEN_SUMMARY_BODY": "Le partage d'écran est la solution la plus simple si vous cherchez une méthode rapide sans accorder une grande importance à la qualité, à la confidentialité ou au contrôle individuel. KoalaSync est plus adapté lorsque chaque participant doit visionner le contenu localement dans son propre navigateur, pour une expérience se rapprochant davantage d'un véritable visionnage en commun.",
|
||||
"ALT_TRY_KOALASYNC": "Essayer KoalaSync"
|
||||
"ALT_TRY_KOALASYNC": "Essayer KoalaSync",
|
||||
"MOCK_HOST_CONTROL_LABEL": "Contrôle de l'hôte",
|
||||
"MOCK_HOST_CONTROL_TOGGLE": "Seul moi peut contrôler la lecture",
|
||||
"LABEL_SELECT_VIDEO": "Choisir une vidéo",
|
||||
"OPTION_SELECT_TAB": "-- Choisir un onglet --"
|
||||
}
|
||||
|
||||
+26
-15
@@ -17,6 +17,13 @@
|
||||
"HERO_TITLE": "Guardate Insieme.<span class='hero-line2'>Sincronia Perfetta.</span>",
|
||||
"HERO_SUBTITLE": "La tua serata cinema a distanza senza ritardi. Nessun account, nessun dato raccolto. Condividi un link e guardate insieme.",
|
||||
"HERO_MASCOT_ALT": "Un simpatico koala che guarda i pulsanti di download",
|
||||
"DEMO_SYNC": "Sincronizzato",
|
||||
"DEMO_HINT": "Demo dal vivo — premi play in una delle schede: KoalaSync le mantiene sincronizzate.",
|
||||
"DEMO_NO_ROOM": "Non ancora connesso",
|
||||
"DEMO_CREATE_ROOM": "Crea stanza",
|
||||
"DEMO_JOINED": "Entrato nella stanza",
|
||||
"DEMO_TAB_SELECTED": "Scheda selezionata",
|
||||
"DEMO_SELECT_PLACEHOLDER": "Scegli una scheda video…",
|
||||
"ADD_TO_CHROME": "Aggiungi a Chrome",
|
||||
"ADD_TO_FIREFOX": "Aggiungi a Firefox",
|
||||
"COMPAT_HEADING": "Compatibile con le tue piattaforme preferite",
|
||||
@@ -35,8 +42,8 @@
|
||||
"USE_CASE_3_DESC": "Accorcia le distanze e goditi serate romantiche. Vivi ogni emozione e ridi alle stesse battute nello stesso identico istante.",
|
||||
"WHY_TITLE": "Perché KoalaSync?",
|
||||
"WHY_SUBTITLE": "Sincronizzazione affidabile, massima privacy e configurazione immediata.",
|
||||
"FEATURE_1_TITLE": "Controllo Totale / Sincro Istantanea",
|
||||
"FEATURE_1_DESC": "Se uno mette in pausa, tutti si fermano. Se uno salta in avanti, gli altri lo seguono. Tutto in tempo reale.",
|
||||
"FEATURE_1_TITLE": "Controllo dell'host e sincronizzazione",
|
||||
"FEATURE_1_DESC": "Decidi tu chi controlla la riproduzione. Attiva il controllo host per consentire solo a te di mettere in pausa e avanzare, o nomina co-host.",
|
||||
"FEATURE_2_TITLE": "Maratone senza interruzioni",
|
||||
"FEATURE_2_DESC": "Riproduzione automatica sincronizzata. KoalaSync attende che tutti abbiano caricato l'episodio successivo prima di farlo partire.",
|
||||
"FEATURE_3_TITLE": "Senza Account / Privacy Totale",
|
||||
@@ -87,23 +94,23 @@
|
||||
"COMP_FOOTNOTE_3": "Politiche sulla privacy di Teleparty:",
|
||||
"COMP_FOOTNOTE_4": "Funziona su siti che permettono l'uso di script nei tag video HTML5. Alcuni siti con protezioni DRM molto rigide potrebbero limitare il controllo automatico.",
|
||||
"STEPS_TITLE": "Inizia ora",
|
||||
"STEP_1_TITLE": "Installa l'Estensione",
|
||||
"STEP_1_DESC": "Aggiungi KoalaSync al tuo browser dal Chrome Web Store o dai componenti aggiuntivi di Firefox.",
|
||||
"STEP_1_ILLUS_DESC": "Sincronizzatore video privato",
|
||||
"STEP_1_ILLUS_DL_CHROME": "Scarica per Chrome",
|
||||
"STEP_1_ILLUS_DL_FIREFOX": "Scarica per Firefox",
|
||||
"STEP_1_ILLUS_ACTIVE": "Estensione Attiva",
|
||||
"STEP_1_ILLUS_READY": "Pronti a guardare!",
|
||||
"STEP_2_TITLE": "Crea una Stanza",
|
||||
"STEP_2_DESC": "Apri l'estensione e clicca su '+ Crea Nuova Stanza'. Verrà generato un link di invito automaticamente.",
|
||||
"STEP_1_TITLE": "Creare e condividere la stanza",
|
||||
"STEP_1_DESC": "Apri l'estensione, crea una stanza con un clic e condividi il link con i tuoi amici. Si uniranno all'istante tramite il link di invito.",
|
||||
"STEP_1_ILLUS_DESC": "Scegli una scheda da collegare",
|
||||
"STEP_1_ILLUS_DL_CHROME": "Collega scheda YouTube",
|
||||
"STEP_1_ILLUS_DL_FIREFOX": "Collega scheda Netflix",
|
||||
"STEP_1_ILLUS_ACTIVE": "Scheda collegata",
|
||||
"STEP_1_ILLUS_READY": "Pronto per guardare in sincro !",
|
||||
"STEP_2_TITLE": "Selezionare la scheda del video",
|
||||
"STEP_2_DESC": "Vai alla scheda del tuo video e selezionala nel menu dell'estensione. KoalaSync collegherà i vostri lettori in modo automatico.",
|
||||
"STEP_2_ILLUS_ROOM": "Stanza",
|
||||
"STEP_2_ILLUS_SYNC": "Sincro",
|
||||
"STEP_2_ILLUS_SETTINGS": "Ajustes",
|
||||
"STEP_2_ILLUS_CREATE": "+ Crea Nuova Stanza",
|
||||
"STEP_2_ILLUS_MANUAL": "Manuale / Avanzato",
|
||||
"STEP_2_ILLUS_COPIED": "Link copiato!",
|
||||
"STEP_3_TITLE": "Condividi e Guarda",
|
||||
"STEP_3_DESC": "Invia il link ai tuoi amici. Una volta connessi, scegli il video e goditi la riproduzione sincronizzata.",
|
||||
"STEP_3_TITLE": "Godersi la sincronizzazione",
|
||||
"STEP_3_DESC": "Avvia la riproduzione. Quando qualcuno mette in pausa, avanza o riproduce, il video di tutti rimarrà sincronizzato in tempo reale senza ritardi.",
|
||||
"STEP_3_ILLUS_IN_SYNC": "SINCRONIZZATI",
|
||||
"SELF_TITLE": "Per utenti esperti",
|
||||
"SELF_SUBTITLE": "Preferisci gestire i tuoi dati? Avvia il tuo server privato in pochi minuti.",
|
||||
@@ -158,7 +165,7 @@
|
||||
"MOCK_13": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"14\" height=\"14\" aria-hidden=\"true\"><polygon points=\"13 2 3 14 12 14 11 22 21 10 12 10 13 2\"/></svg> SYNC",
|
||||
"MOCK_14": "Vai dagli altri",
|
||||
"MOCK_15": "Ultima attività",
|
||||
"MOCK_16": "In attesa di un amico (KoalaPC)...",
|
||||
"MOCK_16": "In attesa di un amico (🐶 HappyDog)...",
|
||||
"MOCK_17": "Salta l'attesa",
|
||||
"MOCK_18": "Tuo Nome",
|
||||
"MOCK_19": "Nascondi schede",
|
||||
@@ -205,5 +212,9 @@
|
||||
"ALT_SCREEN_LIMITS_BODY": "KoalaSync non sostituisce una chiamata vocale. Se volete parlare mentre guardate il contenuto, potete continuare a usare Discord, Teamspeak, Signal, WhatsApp o qualsiasi altro strumento abituale.<br><br>Ciascun partecipante deve inoltre poter accedere al video o alla pagina dal proprio dispositivo. KoalaSync non aggira abbonamenti, accessi, DRM, restrizioni geografiche o regole delle piattaforme.<br><br>Al momento è utilizzabile solo tramite browser desktop, non dispone di funzioni di chat o voce integrate e la compatibilità dipende sempre dal browser e dal lettore video.",
|
||||
"ALT_SCREEN_SUMMARY_TITLE": "Riepilogo",
|
||||
"ALT_SCREEN_SUMMARY_BODY": "La condivisione dello schermo è l'opzione più semplice quando si cerca una soluzione rapida e non si dà molta importanza alla qualità, alla privacy o al controllo individuale. KoalaSync è la scelta ideale quando tutti devono guardare il contenuto localmente sul proprio browser, offrendo un'esperienza che ricorda più da vicino la visione condivisa reale.",
|
||||
"ALT_TRY_KOALASYNC": "Prova KoalaSync"
|
||||
"ALT_TRY_KOALASYNC": "Prova KoalaSync",
|
||||
"MOCK_HOST_CONTROL_LABEL": "Controllo host",
|
||||
"MOCK_HOST_CONTROL_TOGGLE": "Solo io posso controllare la riproduzione",
|
||||
"LABEL_SELECT_VIDEO": "Seleziona Video",
|
||||
"OPTION_SELECT_TAB": "-- Seleziona una Scheda --"
|
||||
}
|
||||
|
||||
+27
-16
@@ -17,6 +17,13 @@
|
||||
"HERO_TITLE": "一緒に観よう。<span class='hero-line2'>完璧に同期。</span>",
|
||||
"HERO_SUBTITLE": "遅延のないリモート映画鑑賞。登録不要、データ収集なし。リンクを共有するだけで、一緒に視聴できます。",
|
||||
"HERO_MASCOT_ALT": "ダウンロードボタンを見下ろしているかわいいコアラ",
|
||||
"DEMO_SYNC": "同期中",
|
||||
"DEMO_HINT": "ライブデモ — どちらかのタブで再生すると、KoalaSyncが両方を同期させます。",
|
||||
"DEMO_NO_ROOM": "未接続",
|
||||
"DEMO_CREATE_ROOM": "ルームを作成",
|
||||
"DEMO_JOINED": "ルームに参加",
|
||||
"DEMO_TAB_SELECTED": "タブを選択済み",
|
||||
"DEMO_SELECT_PLACEHOLDER": "動画タブを選ぶ…",
|
||||
"ADD_TO_CHROME": "Chromeに追加",
|
||||
"ADD_TO_FIREFOX": "Firefoxに追加",
|
||||
"COMPAT_HEADING": "お気に入りのプラットフォームで動作",
|
||||
@@ -35,8 +42,8 @@
|
||||
"USE_CASE_3_DESC": "距離を縮めてデートナイトを楽しみましょう。すべてのストーリー展開を体験し、同じジョックで笑い、感情的な瞬間をまったく同じミリ秒で共有します。",
|
||||
"WHY_TITLE": "KoalaSyncを選ぶ理由",
|
||||
"WHY_SUBTITLE": "信頼性の高い同期、プライバシー優先の設計、簡単なセットアップのために構築。",
|
||||
"FEATURE_1_TITLE": "完全なコントロール / 即時同期",
|
||||
"FEATURE_1_DESC": "一人が一時停止すれば、全員が一時停止。一人がシークすれば、全員が追従。2フェーズ同期プロトコルが、リアルタイムで全員の再生状況を連動させます。",
|
||||
"FEATURE_1_TITLE": "ホスト制御と同期",
|
||||
"FEATURE_1_DESC": "再生をコントロールする人を決定できます。ホスト操作を有効にして自分だけが一時停止やスキップを行えるようにするか、共同ホストを任命します。",
|
||||
"FEATURE_2_TITLE": "終わらない連続視聴",
|
||||
"FEATURE_2_DESC": "同期した自動再生。KoalaSyncはエピソードの切り替えを自動検知し、全員が次の動画を読み込むまで再生を待機します。",
|
||||
"FEATURE_3_TITLE": "アカウント不要 / 純粋なプライバシー",
|
||||
@@ -87,23 +94,23 @@
|
||||
"COMP_FOOTNOTE_3": "Telepartyのプライバシーポリシーと追跡データの収集について:",
|
||||
"COMP_FOOTNOTE_4": "標準的なHTML5ビデオタグへのスクリプトインジェクションを許可するウェブサイトで動作します。非常に厳格なコンテンツセキュリティポリシー(CSP)、DRMコピー保護、または高度に難読化されたプレーヤーラッパー(複雑なシャドウDOMなど)を持つウェブサイトでは、自動制御やインジェクションが制限される場合があります。",
|
||||
"STEPS_TITLE": "はじめに",
|
||||
"STEP_1_TITLE": "拡張機能をインストール",
|
||||
"STEP_1_DESC": "Chrome ウェブストアや Firefox Add-ons から KoalaSync をブラウザに追加するか、GitHub から最新の開発者向け ZIP をダウンロードしてください。",
|
||||
"STEP_1_ILLUS_DESC": "プライバシー優先のビデオ同期ツール",
|
||||
"STEP_1_ILLUS_DL_CHROME": "Chrome版をダウンロード",
|
||||
"STEP_1_ILLUS_DL_FIREFOX": "Firefox版をダウンロード",
|
||||
"STEP_1_ILLUS_ACTIVE": "拡張機能はアクティブです",
|
||||
"STEP_1_ILLUS_READY": "一緒に観る準備は完了!",
|
||||
"STEP_2_TITLE": "ルームを作成",
|
||||
"STEP_2_DESC": "拡張機能のポップアップを開き、「+ 新規ルーム作成」をクリックします。KoalaSyncは自動的に安全なルームIDとパスワードを生成し、接続し、招待リンクをクリップボードにコピーします。",
|
||||
"STEP_1_TITLE": "ルーム作成と共有",
|
||||
"STEP_1_DESC": "拡張機能を開き、ワンクリックでルームを作成してリンクを共有します。友達は招待リンクからすぐに参加できます。",
|
||||
"STEP_1_ILLUS_DESC": "連携するタブを選択",
|
||||
"STEP_1_ILLUS_DL_CHROME": "YouTubeタブを連携",
|
||||
"STEP_1_ILLUS_DL_FIREFOX": "Netflixタブを連携",
|
||||
"STEP_1_ILLUS_ACTIVE": "タブ連携完了",
|
||||
"STEP_1_ILLUS_READY": "同期再生の準備完了 !",
|
||||
"STEP_2_TITLE": "動画タブの選択",
|
||||
"STEP_2_DESC": "動画のあるタブを開き、拡張機能のメニューでそのタブを選択します。KoalaSyncが自動的にお互いのプレイヤーを連携させます。",
|
||||
"STEP_2_ILLUS_ROOM": "ルーム",
|
||||
"STEP_2_ILLUS_SYNC": "同期",
|
||||
"STEP_2_ILLUS_SETTINGS": "設定",
|
||||
"STEP_2_ILLUS_CREATE": "+ 新規ルーム作成",
|
||||
"STEP_2_ILLUS_MANUAL": "手動接続 / 詳細設定",
|
||||
"STEP_2_ILLUS_COPIED": "招待リンクをコピーしました!",
|
||||
"STEP_3_TITLE": "共有と同期",
|
||||
"STEP_3_DESC": "招待リンクを友達に送信します。友達が参加したら、ビデオのタブを選択して、同期された再生を楽しんでください。",
|
||||
"STEP_3_TITLE": "同期を楽しむ",
|
||||
"STEP_3_DESC": "再生ボタンを押します。誰かが一時停止、早送り、または再生をしても、全員の動画がタイムラグなしで完璧に同期します。",
|
||||
"STEP_3_ILLUS_IN_SYNC": "同期中",
|
||||
"SELF_TITLE": "セルフホストする方向け",
|
||||
"SELF_SUBTITLE": "公式サーバーを信頼しませんか?データの完全な所有権を維持しましょう。数分で独自のプライベートリレーサーバーを構築できます。",
|
||||
@@ -158,7 +165,7 @@
|
||||
"MOCK_13": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"14\" height=\"14\" aria-hidden=\"true\"><polygon points=\"13 2 3 14 12 14 11 22 21 10 12 10 13 2\"/></svg> SYNC",
|
||||
"MOCK_14": "他の人に合わせる",
|
||||
"MOCK_15": "最新のアクティビティ状況",
|
||||
"MOCK_16": "1人のメンバー (KoalaPC) を待機中...",
|
||||
"MOCK_16": "1人のメンバー (🐶 HappyDog) を待機中...",
|
||||
"MOCK_17": "スキップして再生",
|
||||
"MOCK_18": "ユーザー名",
|
||||
"MOCK_19": "不要なタブを非表示",
|
||||
@@ -179,7 +186,7 @@
|
||||
"FOOTER_PRIVACY_LINK": "privacy",
|
||||
"FOOTER_DISCLAIMER": "KoalaSyncは、Netflix、Disney+、Amazon、YouTube、Twitch、またはその他のストリーミングプラットフォームと提携、承認、または関連付けられているものではありません。すべての商標はそれぞれの所有者に帰属します。",
|
||||
"FOOTER_SUPPORT": "Support KoalaSync",
|
||||
"ALT_TELEPARTY_TITLE": "KoalaSync vs Teleparty:どちらのウォッチパーティツールを使うべき?",
|
||||
"ALT_TELEPARTY_TITLE": "KoalaSync vs Teleparty:どちらのウォッチパーティツールを使うべき?",
|
||||
"ALT_TELEPARTY_META_DESC": "ウォッチパーティ向けツール、KoalaSyncとTelepartyの実践的比較。チャット機能、モバイル対応、ブラウザでの動画同期、セルフホスト型メディアサーバー、オープンソース利用といった観点から解説します。",
|
||||
"ALT_TELEPARTY_INTRO": "KoalaSyncとTelepartyは、どちらも「3、2、1、再生!」と声を掛け合う手間をかけずに、一緒に動画を楽しむという共通の課題を解決してくれます。ただ、そのアプローチは異なります。<br><br>チャット機能が組み込まれていることや、モバイル端末で視聴できることを重視するなら、Telepartyが最適です。一方、KoalaSyncは、DiscordやTeamSpeakなどで既に通話しながら、ブラウザ上で動画の再生タイミングだけを同期させたいという、デスクトップブラウザでの利用に適しています。<br><br>私がKoalaSyncを開発した主な理由は「柔軟性」です。特定のプラットフォームだけでなく、一般的なブラウザ用動画プレーヤーを使用するほぼすべてのウェブサイトで動作するように設計されています。これには、Emby、Jellyfin、Plexといったセルフホスト環境や、ローカル/プライベートドメイン、そしてブラウザ上の一般的な動画ページなどが含まれます。",
|
||||
"ALT_TELEPARTY_WHEN_TELE_TITLE": "Telepartyが適しているケース",
|
||||
@@ -205,5 +212,9 @@
|
||||
"ALT_SCREEN_LIMITS_BODY": "KoalaSyncは音声通話の代わりになるものではありません。視聴しながら会話をする場合は、Discord、TeamSpeak、Signal、WhatsAppなど、普段お使いのツールをそのまま利用します。<br><br>また、参加者全員がそれぞれのデバイスでその動画やページにアクセスできる必要があります。KoalaSyncは、サブスクリプション、ログイン、DRM(デジタル著作権管理)、地域制限、プラットフォームの利用規約などを回避するものではありません。<br><br>現在はデスクトップ版ブラウザのみに対応しており、チャットや音声通話機能は内蔵されていません。また、動作の可否は使用するブラウザや動画プレーヤーに依存します。",
|
||||
"ALT_SCREEN_SUMMARY_TITLE": "概要",
|
||||
"ALT_SCREEN_SUMMARY_BODY": "画質やプライバシー、個別の操作性をあまり気にせず、手軽に済ませたい場合は「画面共有」が最も簡単な選択肢です。一方、参加者それぞれが自身のブラウザで動画を再生し、実際に同じ空間で一緒に視聴しているような感覚を重視するなら、KoalaSyncの方が適しています。",
|
||||
"ALT_TRY_KOALASYNC": "KoalaSyncを試す"
|
||||
"ALT_TRY_KOALASYNC": "KoalaSyncを試す",
|
||||
"MOCK_HOST_CONTROL_LABEL": "ホスト操作",
|
||||
"MOCK_HOST_CONTROL_TOGGLE": "自分だけが再生を操作できる",
|
||||
"LABEL_SELECT_VIDEO": "ビデオを選択",
|
||||
"OPTION_SELECT_TAB": "-- タブを選択してください --"
|
||||
}
|
||||
|
||||
+27
-16
@@ -17,6 +17,13 @@
|
||||
"HERO_TITLE": "함께 시청하세요.<span class='hero-line2'>완벽하게 동기화됩니다.</span>",
|
||||
"HERO_SUBTITLE": "지연 없는 원격 영화의 밤. 회원가입도, 데이터 수집도 없습니다. 링크를 공유하고 함께 시청하세요.",
|
||||
"HERO_MASCOT_ALT": "다운로드 버튼을 내려다보고 서 있는 귀여운 코알라",
|
||||
"DEMO_SYNC": "동기화됨",
|
||||
"DEMO_HINT": "라이브 데모 — 아무 탭에서나 재생을 누르면 KoalaSync가 두 탭을 동기화합니다.",
|
||||
"DEMO_NO_ROOM": "아직 연결되지 않음",
|
||||
"DEMO_CREATE_ROOM": "방 만들기",
|
||||
"DEMO_JOINED": "방 참여됨",
|
||||
"DEMO_TAB_SELECTED": "탭 선택됨",
|
||||
"DEMO_SELECT_PLACEHOLDER": "동영상 탭 선택…",
|
||||
"ADD_TO_CHROME": "Chrome에 추가",
|
||||
"ADD_TO_FIREFOX": "Firefox에 추가",
|
||||
"COMPAT_HEADING": "가장 좋아하는 플랫폼에서 작동합니다",
|
||||
@@ -35,8 +42,8 @@
|
||||
"USE_CASE_3_DESC": "거리의 한계를 넘어 데이트를 즐겨보세요. 모든 줄거리의 반전을 경험하고, 같은 농담에 웃으며, 감동적인 순간을 정확히 같은 밀리초에 공유하세요.",
|
||||
"WHY_TITLE": "왜 KoalaSync인가요?",
|
||||
"WHY_SUBTITLE": "신뢰할 수 있는 동기화, 개인정보 보호 중심 설계, 쉬운 설정을 위해 구축되었습니다.",
|
||||
"FEATURE_1_TITLE": "완벽한 제어 / 즉시 동기화",
|
||||
"FEATURE_1_DESC": "한 명이 일시정지하면 모두가 일시정지됩니다. 한 명이 탐색하면 모두가 따라갑니다. 당사의 2단계 동기화 프로토콜은 실시간으로 모든 참여자의 비디오 재생을 조율합니다.",
|
||||
"FEATURE_1_TITLE": "방장 제어 및 동기화",
|
||||
"FEATURE_1_DESC": "누가 재생을 제어할지 직접 결정하세요. 호스트 제어를 활성화하여 자신만 일시중지 및 탐색을 수행하거나 공동 호스트를 지정합니다.",
|
||||
"FEATURE_2_TITLE": "끊임없는 몰아보기",
|
||||
"FEATURE_2_DESC": "동기화된 자동 재생. KoalaSync는 에피소드 전환을 자동으로 감지하고 모든 참여자가 다음 비디오를 로드할 때까지 재생을 대기시킵니다.",
|
||||
"FEATURE_3_TITLE": "계정 없음 / 완전한 개인정보 보호",
|
||||
@@ -87,23 +94,23 @@
|
||||
"COMP_FOOTNOTE_3": "Teleparty 개인정보 처리방침 및 추적 데이터 수집 정보:",
|
||||
"COMP_FOOTNOTE_4": "표준 HTML5 비디오 태그에 스크립트 삽입을 허용하는 웹사이트에서 작동합니다. 콘텐츠 보안 정책(CSP)이 매우 엄격하거나, DRM 복사 방지가 적용되었거나, 플레이어 래퍼가 복잡하게 난독화된 웹사이트(예: 복잡한 섀도 DOM)에서는 자동 제어 또는 스크립트 삽입이 제한될 수 있습니다.",
|
||||
"STEPS_TITLE": "시작하기",
|
||||
"STEP_1_TITLE": "확장 프로그램 설치",
|
||||
"STEP_1_DESC": "Chrome 웹 스토어, Firefox 부가 기능에서 KoalaSync를 브라우저에 추가하거나, GitHub에서 최신 개발자용 ZIP 파일을 다운로드하세요.",
|
||||
"STEP_1_ILLUS_DESC": "개인정보 보호 중심의 비디오 동기화 프로그램",
|
||||
"STEP_1_ILLUS_DL_CHROME": "Chrome용 다운로드",
|
||||
"STEP_1_ILLUS_DL_FIREFOX": "Firefox용 다운로드",
|
||||
"STEP_1_ILLUS_ACTIVE": "확장 프로그램 활성화됨",
|
||||
"STEP_1_ILLUS_READY": "함께 시청할 준비가 되었습니다!",
|
||||
"STEP_2_TITLE": "방 만들기",
|
||||
"STEP_2_DESC": "확장 프로그램 팝업을 열고 '+ 새 방 만들기'를 클릭하세요. KoalaSync가 안전한 방 ID와 비밀번호를 자동으로 생성하고, 참여한 후 초대 링크를 클립보드에 복사합니다.",
|
||||
"STEP_1_TITLE": "방 만들기 및 공유",
|
||||
"STEP_1_DESC": "확장 프로그램을 열고 클릭 한 번으로 방을 만든 후 링크를 공유하세요. 친구들이 초대 링크를 통해 바로 참여합니다.",
|
||||
"STEP_1_ILLUS_DESC": "연결할 탭 선택",
|
||||
"STEP_1_ILLUS_DL_CHROME": "YouTube 탭 연결",
|
||||
"STEP_1_ILLUS_DL_FIREFOX": "Netflix 탭 연결",
|
||||
"STEP_1_ILLUS_ACTIVE": "탭 연결됨",
|
||||
"STEP_1_ILLUS_READY": "동기화 시청 준비 완료 !",
|
||||
"STEP_2_TITLE": "동영상 탭 선택",
|
||||
"STEP_2_DESC": "동영상이 열려 있는 탭으로 이동하여 확장 프로그램 메뉴에서 해당 탭을 선택하세요. KoalaSync가 플레이어를 자동으로 연결합니다.",
|
||||
"STEP_2_ILLUS_ROOM": "방",
|
||||
"STEP_2_ILLUS_SYNC": "동기화",
|
||||
"STEP_2_ILLUS_SETTINGS": "설정",
|
||||
"STEP_2_ILLUS_CREATE": "+ 새 방 만들기",
|
||||
"STEP_2_ILLUS_MANUAL": "수동 연결 / 고급",
|
||||
"STEP_2_ILLUS_COPIED": "초대 링크가 복사되었습니다!",
|
||||
"STEP_3_TITLE": "공유 및 동기화",
|
||||
"STEP_3_DESC": "친구들에게 초대 링크를 보내세요. 친구들이 참여하면 비디오 탭을 선택하고 동기화된 재생을 즐기세요.",
|
||||
"STEP_3_TITLE": "동기화 즐기기",
|
||||
"STEP_3_DESC": "재생을 누르세요. 누군가 일시중지, 탐색 또는 재생을 하더라도 모든 사람의 영상이 지연 없이 실시간으로 동기화됩니다.",
|
||||
"STEP_3_ILLUS_IN_SYNC": "동기화됨",
|
||||
"SELF_TITLE": "자체 호스팅 사용자를 위한 안내",
|
||||
"SELF_SUBTITLE": "공식 서버를 신뢰하기 어려우신가요? 완벽한 데이터 주권을 유지하세요. 몇 분 만에 나만의 개인 릴레이 서버를 구축할 수 있습니다.",
|
||||
@@ -158,7 +165,7 @@
|
||||
"MOCK_13": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"14\" height=\"14\" aria-hidden=\"true\"><polygon points=\"13 2 3 14 12 14 11 22 21 10 12 10 13 2\"/></svg> SYNC",
|
||||
"MOCK_14": "다른 사람에게 이동",
|
||||
"MOCK_15": "최근 활동 상태",
|
||||
"MOCK_16": "참여자 1명 (KoalaPC) 대기 중...",
|
||||
"MOCK_16": "참여자 1명 (🐶 HappyDog) 대기 중...",
|
||||
"MOCK_17": "건너뛰고 재생",
|
||||
"MOCK_18": "사용자 이름",
|
||||
"MOCK_19": "복잡한 탭 숨기기",
|
||||
@@ -179,7 +186,7 @@
|
||||
"FOOTER_PRIVACY_LINK": "privacy",
|
||||
"FOOTER_DISCLAIMER": "KoalaSync는 Netflix, Disney+, Amazon, YouTube, Twitch 또는 기타 스트리밍 플랫폼과 제휴, 보증 또는 연관되어 있지 않습니다. 모든 상표는 해당 소유자의 재산입니다.",
|
||||
"FOOTER_SUPPORT": "Support KoalaSync",
|
||||
"ALT_TELEPARTY_TITLE": "KoalaSync 대 Teleparty: 어떤 '워치 파티(watch party)' 도구를 선택해야 할까요?",
|
||||
"ALT_TELEPARTY_TITLE": "KoalaSync 대 Teleparty: 어떤 '워치 파티(watch party)' 도구를 선택해야 할까요?",
|
||||
"ALT_TELEPARTY_META_DESC": "워치 파티를 위한 KoalaSync와 Teleparty의 실용적 비교: 내장 채팅, 모바일 지원, 브라우저 영상 동기화, 자체 호스팅 미디어 서버 및 오픈 소스 활용 여부 등을 다룹니다.",
|
||||
"ALT_TELEPARTY_INTRO": "KoalaSync와 Teleparty는 모두 '3, 2, 1, 재생' 같은 번거로운 절차 없이 함께 영상을 시청할 수 있게 해준다는 점에서 같은 문제를 해결해 줍니다. 다만 접근 방식에는 차이가 있습니다.<br><br>내장 채팅 기능이 필요하거나 모바일에서 시청하고 싶다면 Teleparty가 가장 합리적인 선택입니다. 반면 KoalaSync는 Discord, Teamspeak 또는 기타 음성 통화 서비스를 통해 이미 대화를 나누고 있으면서, 단순히 영상 재생만 동기화하고 싶은 데스크톱 브라우저 기반의 워치 파티에 더 적합합니다.<br><br>제가 KoalaSync를 개발한 주된 이유는 유연성 때문입니다. 특정 플랫폼 목록에만 국한되지 않고, 일반적인 브라우저 비디오 플레이어를 사용하는 거의 모든 웹사이트에서 작동하도록 설계되었습니다. 여기에는 Emby, Jellyfin, Plex와 같은 자체 호스팅 환경, 로컬/비공개 도메인, 그리고 브라우저상의 수많은 일반 동영상 페이지가 포함됩니다.",
|
||||
"ALT_TELEPARTY_WHEN_TELE_TITLE": "Teleparty가 여전히 좋은 선택이 될 수 있는 경우",
|
||||
@@ -205,5 +212,9 @@
|
||||
"ALT_SCREEN_LIMITS_BODY": "KoalaSync는 음성 통화를 대체하는 서비스가 아닙니다. 영상을 보면서 대화하고 싶다면 평소처럼 Discord, Teamspeak, Signal, WhatsApp 등을 그대로 사용하면 됩니다.<br><br>또한 모든 참가자가 각자의 기기에서 해당 영상이나 페이지에 접속할 수 있어야 합니다. KoalaSync는 구독, 로그인, DRM, 지역 제한 또는 플랫폼 규정을 우회하지 않습니다.<br><br>현재 데스크톱 브라우저에서만 지원되며, 자체 채팅이나 음성 기능은 없습니다. 호환성은 항상 브라우저 및 동영상 플레이어의 영향을 받습니다.",
|
||||
"ALT_SCREEN_SUMMARY_TITLE": "요약",
|
||||
"ALT_SCREEN_SUMMARY_BODY": "화질, 개인정보 보호, 개별 제어 기능 등을 크게 신경 쓰지 않고 간편하게 진행하고 싶을 때는 화면 공유가 가장 간단한 방법입니다. 반면, 모든 참가자가 각자의 브라우저에서 직접 영상을 시청하며 실제로 함께 보는 듯한 느낌을 원한다면 KoalaSync가 더 적합합니다.",
|
||||
"ALT_TRY_KOALASYNC": "KoalaSync 사용해 보기"
|
||||
"ALT_TRY_KOALASYNC": "KoalaSync 사용해 보기",
|
||||
"MOCK_HOST_CONTROL_LABEL": "호스트 제어",
|
||||
"MOCK_HOST_CONTROL_TOGGLE": "나만 재생을 제어할 수 있음",
|
||||
"LABEL_SELECT_VIDEO": "비디오 선택",
|
||||
"OPTION_SELECT_TAB": "-- 탭 선택 --"
|
||||
}
|
||||
|
||||
+26
-15
@@ -17,6 +17,13 @@
|
||||
"HERO_TITLE": "Samen Kijken.<span class='hero-line2'>Perfect Synchroniseren.</span>",
|
||||
"HERO_SUBTITLE": "Uw filmavond op afstand zonder vertraging. Geen registratie, geen gegevensverzameling. Deel gewoon een link en kijk samen.",
|
||||
"HERO_MASCOT_ALT": "Een schattige koala die staat en naar beneden kijkt naar de downloadknoppen",
|
||||
"DEMO_SYNC": "Synchroon",
|
||||
"DEMO_HINT": "Live demo — druk op play in een van de tabbladen: KoalaSync houdt beide synchroon.",
|
||||
"DEMO_NO_ROOM": "Nog niet verbonden",
|
||||
"DEMO_CREATE_ROOM": "Kamer aanmaken",
|
||||
"DEMO_JOINED": "In de kamer",
|
||||
"DEMO_TAB_SELECTED": "Tabblad geselecteerd",
|
||||
"DEMO_SELECT_PLACEHOLDER": "Kies een videotabblad…",
|
||||
"ADD_TO_CHROME": "Toevoegen aan Chrome",
|
||||
"ADD_TO_FIREFOX": "Toevoegen aan Firefox",
|
||||
"COMPAT_HEADING": "Werkt op uw favoriete platforms",
|
||||
@@ -35,8 +42,8 @@
|
||||
"USE_CASE_3_DESC": "Overbrug de afstand en geniet van date nights. Ervaar elke plotwending, lach om dezelfde grappen en deel emotionele momenten op exact dezelfde milliseconde.",
|
||||
"WHY_TITLE": "Waarom KoalaSync?",
|
||||
"WHY_SUBTITLE": "Gebouwd voor betrouwbare synchronisatie, privacy-first ontwerp en eenvoudige installatie.",
|
||||
"FEATURE_1_TITLE": "Volledige controle / Directe synchronisatie",
|
||||
"FEATURE_1_DESC": "Eén pauzeert, iedereen pauzeert. Eén spoelt, iedereen volgt. Ons tweefasige synchronisatieprotocol coördineert het afspelen in realtime voor alle deelnemers.",
|
||||
"FEATURE_1_TITLE": "Host-controle & synchronisatie",
|
||||
"FEATURE_1_DESC": "Jij bepaalt wie het afspelen bedient. Schakel hostbeheer in zodat alleen jij kunt pauzeren en spoelen, of wijs co-hosts aan.",
|
||||
"FEATURE_2_TITLE": "Eindeloos binge-watchen",
|
||||
"FEATURE_2_DESC": "Automatisch afspelen in sync. KoalaSync detecteert automatisch afleveringsovergangen en houdt het afspelen vast totdat alle deelnemers de volgende video succesvol hebben geladen.",
|
||||
"FEATURE_3_TITLE": "Geen accounts / Pure privacy",
|
||||
@@ -87,23 +94,23 @@
|
||||
"COMP_FOOTNOTE_3": "Teleparty privacybeleid en trackinggegevensverzameling:",
|
||||
"COMP_FOOTNOTE_4": "Werkt op websites die scriptinjecties in standaard HTML5-videotags toestaan. Websites met een zeer strikt Content Security Policy (CSP), DRM-kopieerbeveiliging of sterk versluierde spelers (zoals complexe shadow-DOM's) kunnen automatische controle of injectie beperken.",
|
||||
"STEPS_TITLE": "Aan de slag",
|
||||
"STEP_1_TITLE": "Extensie installeren",
|
||||
"STEP_1_DESC": "Voeg KoalaSync toe aan uw browser vanuit de Chrome Web Store, Firefox-add-ons, of download de nieuwste ontwikkelaars-ZIP van GitHub.",
|
||||
"STEP_1_ILLUS_DESC": "Privacy-first videosynchronisator",
|
||||
"STEP_1_ILLUS_DL_CHROME": "Downloaden voor Chrome",
|
||||
"STEP_1_ILLUS_DL_FIREFOX": "Downloaden voor Firefox",
|
||||
"STEP_1_ILLUS_ACTIVE": "Extensie actief",
|
||||
"STEP_1_ILLUS_READY": "Klaar om samen te kijken!",
|
||||
"STEP_2_TITLE": "Kamer maken",
|
||||
"STEP_2_DESC": "Open de extensie-popup en klik op '+ Nieuwe kamer maken'. KoalaSync genereert automatisch een beveiligde Kamer-ID en Wachtwoord, neemt deel en kopieert de uitnodigingslink naar uw klembord.",
|
||||
"STEP_1_TITLE": "Kamer maken en delen",
|
||||
"STEP_1_DESC": "Open de extensie, maak een kamer met één klik en deel de link met je vrienden. Ze nemen direct deel via de uitnodigingslink.",
|
||||
"STEP_1_ILLUS_DESC": "Kies een tabblad om te koppelen",
|
||||
"STEP_1_ILLUS_DL_CHROME": "YouTube-tabblad koppelen",
|
||||
"STEP_1_ILLUS_DL_FIREFOX": "Netflix-tabblad koppelen",
|
||||
"STEP_1_ILLUS_ACTIVE": "Tabblad gekoppeld",
|
||||
"STEP_1_ILLUS_READY": "Klaar voor synchroon kijken !",
|
||||
"STEP_2_TITLE": "Videotabblad selecteren",
|
||||
"STEP_2_DESC": "Ga naar je videotabblad en selecteer dit in het menu van de extensie. KoalaSync koppelt vanaf nu automatisch jullie spelers.",
|
||||
"STEP_2_ILLUS_ROOM": "Kamer",
|
||||
"STEP_2_ILLUS_SYNC": "Sync",
|
||||
"STEP_2_ILLUS_SETTINGS": "Instellingen",
|
||||
"STEP_2_ILLUS_CREATE": "+ Nieuwe kamer maken",
|
||||
"STEP_2_ILLUS_MANUAL": "Handmatig verbinden / Geavanceerd",
|
||||
"STEP_2_ILLUS_COPIED": "Uitnodigingslink gekopieerd!",
|
||||
"STEP_3_TITLE": "Delen & Synchroniseren",
|
||||
"STEP_3_DESC": "Stuur de uitnodigingslink naar uw vrienden. Zodra ze deelnemen, selecteert u uw videotabblad en geniet u van gesynchroniseerd afspelen.",
|
||||
"STEP_3_TITLE": "Genieten van de synchronisatie",
|
||||
"STEP_3_DESC": "Druk op afspelen. Of iemand nu pauzeert, spoelt of afspeelt, de video van iedereen blijft perfect en zonder vertraging synchroon.",
|
||||
"STEP_3_ILLUS_IN_SYNC": "IN SYNC",
|
||||
"SELF_TITLE": "Voor zelf-hosters",
|
||||
"SELF_SUBTITLE": "Vertrouwt u onze server niet? Behoud de volledige soevereiniteit over uw gegevens. Implementeer uw eigen privé-relayserver in enkele minuten.",
|
||||
@@ -158,7 +165,7 @@
|
||||
"MOCK_13": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"14\" height=\"14\" aria-hidden=\"true\"><polygon points=\"13 2 3 14 12 14 11 22 21 10 12 10 13 2\"/></svg> SYNC",
|
||||
"MOCK_14": "Spring naar anderen",
|
||||
"MOCK_15": "Laatste activiteitsstatus",
|
||||
"MOCK_16": "Wachten op 1 deelnemer (KoalaPC)...",
|
||||
"MOCK_16": "Wachten op 1 deelnemer (🐶 HappyDog)...",
|
||||
"MOCK_17": "Overslaan & toch afspelen",
|
||||
"MOCK_18": "Uw gebruikersnaam",
|
||||
"MOCK_19": "Overbodige tabbladen verbergen",
|
||||
@@ -205,5 +212,9 @@
|
||||
"ALT_SCREEN_LIMITS_BODY": "KoalaSync is geen vervanging voor een spraakgesprek. Als je tijdens het kijken wilt praten, gebruik je gewoon Discord, Teamspeak, Signal, WhatsApp of wat je normaal ook gebruikt.<br><br>Iedereen heeft ook toegang tot de video of pagina op het eigen apparaat nodig. KoalaSync omzeilt geen abonnementen, inloggegevens, DRM, regionale beperkingen of platformregels.<br><br>Het werkt momenteel alleen in desktopbrowsers, heeft geen ingebouwde chat- of spraakfunctie en de compatibiliteit hangt altijd af van de browser en de videospeler.",
|
||||
"ALT_SCREEN_SUMMARY_TITLE": "Samenvatting",
|
||||
"ALT_SCREEN_SUMMARY_BODY": "Scherm delen is de eenvoudigste optie als je snel iets wilt doen en niet veel waarde hecht aan kwaliteit, privacy of individuele controle. KoalaSync is een betere keuze wanneer iedereen lokaal in de eigen browser moet kijken en de sessie meer moet aanvoelen als echt samen kijken.",
|
||||
"ALT_TRY_KOALASYNC": "Probeer KoalaSync"
|
||||
"ALT_TRY_KOALASYNC": "Probeer KoalaSync",
|
||||
"MOCK_HOST_CONTROL_LABEL": "Hostbeheer",
|
||||
"MOCK_HOST_CONTROL_TOGGLE": "Alleen ik mag de weergave bedienen",
|
||||
"LABEL_SELECT_VIDEO": "Selecteer video",
|
||||
"OPTION_SELECT_TAB": "-- Selecteer een tabblad --"
|
||||
}
|
||||
|
||||
+26
-15
@@ -17,6 +17,13 @@
|
||||
"HERO_TITLE": "Oglądajcie Razem.<span class='hero-line2'>Synchronizujcie Idealnie.</span>",
|
||||
"HERO_SUBTITLE": "Twój zdalny wieczór filmowy bez opóźnień. Bez rejestracji, bez zbierania danych. Po prostu udostępnij link i oglądajcie razem.",
|
||||
"HERO_MASCOT_ALT": "Uroczy koala stojący i patrzący w dół na przyciski pobierania",
|
||||
"DEMO_SYNC": "Zsynchronizowane",
|
||||
"DEMO_HINT": "Demo na żywo — naciśnij play w dowolnej karcie: KoalaSync utrzyma obie w synchronizacji.",
|
||||
"DEMO_NO_ROOM": "Jeszcze nie połączono",
|
||||
"DEMO_CREATE_ROOM": "Utwórz pokój",
|
||||
"DEMO_JOINED": "Dołączono do pokoju",
|
||||
"DEMO_TAB_SELECTED": "Karta wybrana",
|
||||
"DEMO_SELECT_PLACEHOLDER": "Wybierz kartę wideo…",
|
||||
"ADD_TO_CHROME": "Dodaj do Chrome",
|
||||
"ADD_TO_FIREFOX": "Dodaj do Firefox",
|
||||
"COMPAT_HEADING": "Działa na Twoich ulubionych platformach",
|
||||
@@ -35,8 +42,8 @@
|
||||
"USE_CASE_3_DESC": "Pokonaj odległość i ciesz się randkami. Przeżywajcie każdy zwrot akcji, śmiejcie się z tych samych żartów i dzielcie emocje w tej samej milisekundzie.",
|
||||
"WHY_TITLE": "Dlaczego KoalaSync?",
|
||||
"WHY_SUBTITLE": "Stworzony z myślą o niezawodnej synchronizacji, prywatności i łatwej konfiguracji.",
|
||||
"FEATURE_1_TITLE": "Pełna kontrola / Natychmiastowa synchronizacja",
|
||||
"FEATURE_1_DESC": "Jeden zatrzymuje, wszyscy zatrzymują. Jeden przewija, wszyscy podążają. Nasz dwufazowy protokół synchronizacji koordynuje odtwarzanie w czasie rzeczywistym u wszystkich uczestników.",
|
||||
"FEATURE_1_TITLE": "Kontrola hosta i synchronizacja",
|
||||
"FEATURE_1_DESC": "Decydujesz, kto steruje odtwarzaniem. Włącz kontrolę hosta, aby tylko Ty mógł wstrzymywać i przewijać, lub mianuj współhostów.",
|
||||
"FEATURE_2_TITLE": "Niekończące się oglądanie",
|
||||
"FEATURE_2_DESC": "Autoodtwarzanie w synchronizacji. KoalaSync automatycznie wykrywa zmiany odcinków i wstrzymuje odtwarzanie, dopóki wszyscy uczestnicy nie załadują następnego filmu.",
|
||||
"FEATURE_3_TITLE": "Zero kont / Czysta prywatność",
|
||||
@@ -87,23 +94,23 @@
|
||||
"COMP_FOOTNOTE_3": "Polityka prywatności Teleparty i zbieranie danych śledzenia:",
|
||||
"COMP_FOOTNOTE_4": "Działa na stronach zezwalających na wstrzykiwanie skryptów do standardowych tagów wideo HTML5. Strony z bardzo rygorystycznymi zasadami bezpieczeństwa (CSP), zabezpieczeniami DRM (kopiowanie) lub mocno zaciemnionymi odtwarzaczami (jak złożone systemy shadow DOM) mogą ograniczać zdalne sterowanie.",
|
||||
"STEPS_TITLE": "Jak zacząć",
|
||||
"STEP_1_TITLE": "Zainstaluj rozszerzenie",
|
||||
"STEP_1_DESC": "Dodaj KoalaSync do swojej przeglądarki z Chrome Web Store, Firefox Add-ons lub pobierz najnowsze archiwum ZIP dla deweloperów z GitHub.",
|
||||
"STEP_1_ILLUS_DESC": "Synchronizator wideo dbający o prywatność",
|
||||
"STEP_1_ILLUS_DL_CHROME": "Pobierz dla Chrome",
|
||||
"STEP_1_ILLUS_DL_FIREFOX": "Pobierz dla Firefox",
|
||||
"STEP_1_ILLUS_ACTIVE": "Rozszerzenie aktywne",
|
||||
"STEP_1_ILLUS_READY": "Gotowe do wspólnego oglądania!",
|
||||
"STEP_2_TITLE": "Utwórz pokój",
|
||||
"STEP_2_DESC": "Otwórz okienko rozszerzenia i kliknij '+ Utwórz nowy pokój'. KoalaSync automatycznie wygeneruje bezpieczny ID pokoju oraz hasło, dołączy do niego i skopiuje link zaproszenia do schowka.",
|
||||
"STEP_1_TITLE": "Utwórz i udostępnij pokój",
|
||||
"STEP_1_DESC": "Otwórz rozszerzenie, utwórz pokój jednym kliknięciem i udostępnij link znajomym. Dołączą natychmiast przez link z zaproszeniem.",
|
||||
"STEP_1_ILLUS_DESC": "Wybierz kartę do połączenia",
|
||||
"STEP_1_ILLUS_DL_CHROME": "Połącz kartę YouTube",
|
||||
"STEP_1_ILLUS_DL_FIREFOX": "Połącz kartę Netflix",
|
||||
"STEP_1_ILLUS_ACTIVE": "Karta połączona",
|
||||
"STEP_1_ILLUS_READY": "Gotowe do synchronizacji !",
|
||||
"STEP_2_TITLE": "Wybierz kartę z wideo",
|
||||
"STEP_2_DESC": "Przejdź do karty ze swoim wideo i wybierz ją w menu rozszerzenia. KoalaSync automatycznie połączy Wasze odtwarzacze.",
|
||||
"STEP_2_ILLUS_ROOM": "Pokój",
|
||||
"STEP_2_ILLUS_SYNC": "Sync",
|
||||
"STEP_2_ILLUS_SETTINGS": "Ustawienia",
|
||||
"STEP_2_ILLUS_CREATE": "+ Utwórz nowy pokój",
|
||||
"STEP_2_ILLUS_MANUAL": "Połączenie ręczne / Zaawansowane",
|
||||
"STEP_2_ILLUS_COPIED": "Link zaproszenia skopiowany!",
|
||||
"STEP_3_TITLE": "Udostępnij i synchronizuj",
|
||||
"STEP_3_DESC": "Wyślij link zaproszenia znajomym. Gdy dołączą, wybierz kartę z filmem i ciesz się zsynchronizowanym odtwarzaniem.",
|
||||
"STEP_3_TITLE": "Ciesz się synchronizacją",
|
||||
"STEP_3_DESC": "Naciśnij odtwarzaj. Gdy ktoś wstrzyma, przewinie lub odtworzy wideo, odtwarzanie u wszystkich pozostanie idealnie zsynchronizowane.",
|
||||
"STEP_3_ILLUS_IN_SYNC": "ZSYNCHRONIZOWANO",
|
||||
"SELF_TITLE": "Dla hostujących samodzielnie",
|
||||
"SELF_SUBTITLE": "Nie ufasz naszemu serwerowi? Zachowaj pełną suwerenność danych. Wdróż własny prywatny serwer w kilka minut.",
|
||||
@@ -158,7 +165,7 @@
|
||||
"MOCK_13": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"14\" height=\"14\" aria-hidden=\"true\"><polygon points=\"13 2 3 14 12 14 11 22 21 10 12 10 13 2\"/></svg> SYNC",
|
||||
"MOCK_14": "Skocz do innych",
|
||||
"MOCK_15": "Status ostatniej aktywności",
|
||||
"MOCK_16": "Oczekiwanie na 1 uczestnika (KoalaPC)...",
|
||||
"MOCK_16": "Oczekiwanie na 1 uczestnika (🐶 HappyDog)...",
|
||||
"MOCK_17": "Pomiń i odtwórz mimo to",
|
||||
"MOCK_18": "Twoja nazwa użytkownika",
|
||||
"MOCK_19": "Ukryj zbędne karty",
|
||||
@@ -205,5 +212,9 @@
|
||||
"ALT_SCREEN_LIMITS_BODY": "KoalaSync nie zastępuje rozmowy głosowej. Jeśli chcesz rozmawiać podczas oglądania, nadal możesz korzystać z Discorda, TeamSpeaka, Signala, WhatsAppa lub innych narzędzi, których używasz na co dzień.<br><br>Każda osoba musi również mieć dostęp do filmu lub strony na własnym urządzeniu. KoalaSync nie omija subskrypcji, konieczności logowania, zabezpieczeń DRM, ograniczeń regionalnych ani regulaminów platform.<br><br>Obecnie rozwiązanie to działa tylko w przeglądarkach na komputerach stacjonarnych i nie posiada wbudowanego czatu ani funkcji komunikacji głosowej, a kompatybilność zależy od używanej przeglądarki oraz odtwarzacza wideo.",
|
||||
"ALT_SCREEN_SUMMARY_TITLE": "Podsumowanie",
|
||||
"ALT_SCREEN_SUMMARY_BODY": "Udostępnianie ekranu to najprostsze rozwiązanie, gdy zależy Ci na szybkości, a kwestie jakości, prywatności czy indywidualnej kontroli nad odtwarzaniem nie są priorytetem. KoalaSync sprawdza się lepiej, gdy uczestnicy oglądają materiał lokalnie we własnych przeglądarkach, a sesja ma bardziej przypominać wspólny seans.",
|
||||
"ALT_TRY_KOALASYNC": "Wypróbuj KoalaSync"
|
||||
"ALT_TRY_KOALASYNC": "Wypróbuj KoalaSync",
|
||||
"MOCK_HOST_CONTROL_LABEL": "Kontrola hosta",
|
||||
"MOCK_HOST_CONTROL_TOGGLE": "Tylko ja mogę sterować odtwarzaniem",
|
||||
"LABEL_SELECT_VIDEO": "Wybierz wideo",
|
||||
"OPTION_SELECT_TAB": "-- Wybierz kartę --"
|
||||
}
|
||||
|
||||
+26
-15
@@ -17,6 +17,13 @@
|
||||
"HERO_TITLE": "Assistam Juntos.<span class='hero-line2'>Sincronia Perfeita.</span>",
|
||||
"HERO_SUBTITLE": "Sua noite de cinema à distância sem atrasos. Sem contas, sem coleta de dados. Apenas compartilhe o link e assistam juntos.",
|
||||
"HERO_MASCOT_ALT": "Um coala fofo olhando para os botões de download",
|
||||
"DEMO_SYNC": "Sincronizado",
|
||||
"DEMO_HINT": "Demo ao vivo — dê play em qualquer aba: o KoalaSync mantém as duas em sincronia.",
|
||||
"DEMO_NO_ROOM": "Ainda não conectado",
|
||||
"DEMO_CREATE_ROOM": "Criar sala",
|
||||
"DEMO_JOINED": "Entrou na sala",
|
||||
"DEMO_TAB_SELECTED": "Aba selecionada",
|
||||
"DEMO_SELECT_PLACEHOLDER": "Escolha uma aba de vídeo…",
|
||||
"ADD_TO_CHROME": "Adicionar ao Chrome",
|
||||
"ADD_TO_FIREFOX": "Adicionar ao Firefox",
|
||||
"COMPAT_HEADING": "Funciona nas suas plataformas favoritas",
|
||||
@@ -35,8 +42,8 @@
|
||||
"USE_CASE_3_DESC": "Aproveite as noites a dois. Ria das mesmas piadas e sinta as mesmas emoções exatamente no mesmo segundo.",
|
||||
"WHY_TITLE": "Por que o KoalaSync?",
|
||||
"WHY_SUBTITLE": "Sincronização confiável, máxima privacidade e uso simples.",
|
||||
"FEATURE_1_TITLE": "Controle Total / Sincronia Instantânea",
|
||||
"FEATURE_1_DESC": "Se um pausa, todos pausam. Se um avança, todos seguem. Sincronização em tempo real para todos os participantes.",
|
||||
"FEATURE_1_TITLE": "Controle do host e sincronização",
|
||||
"FEATURE_1_DESC": "Você decide quem controla a reprodução. Ative o controle do anfitrião para que apenas você possa pausar e avançar, ou nomeie coanfitriões.",
|
||||
"FEATURE_2_TITLE": "Maratonas Sem Interrupções",
|
||||
"FEATURE_2_DESC": "O KoalaSync detecta a mudança de episódios e pausa automaticamente até que todos tenham carregado o vídeo seguinte.",
|
||||
"FEATURE_3_TITLE": "Sem Contas / Privacidade Absoluta",
|
||||
@@ -87,23 +94,23 @@
|
||||
"COMP_FOOTNOTE_3": "Políticas de privacidade do Teleparty:",
|
||||
"COMP_FOOTNOTE_4": "Funciona em sites que permitem injeção de scripts. Plataformas com DRM estrito podem ter limitações.",
|
||||
"STEPS_TITLE": "Como Começar",
|
||||
"STEP_1_TITLE": "Instalar a Extensão",
|
||||
"STEP_1_DESC": "Adicione o KoalaSync ao seu navegador (Chrome ou Firefox).",
|
||||
"STEP_1_ILLUS_DESC": "Extensão segura para ver vídeos",
|
||||
"STEP_1_ILLUS_DL_CHROME": "Baixar para Chrome",
|
||||
"STEP_1_ILLUS_DL_FIREFOX": "Baixar para Firefox",
|
||||
"STEP_1_ILLUS_ACTIVE": "Extensão Ativa",
|
||||
"STEP_1_ILLUS_READY": "Pronto!",
|
||||
"STEP_2_TITLE": "Criar uma Sala",
|
||||
"STEP_2_DESC": "Abra a extensão e clique em '+ Criar nova sala'. O link de convite é copiado automaticamente.",
|
||||
"STEP_1_TITLE": "Criar e compartilhar a sala",
|
||||
"STEP_1_DESC": "Abra a extensão, crie uma sala com um clique e compartilhe o link com seus amigos. Eles entram instantaneamente pelo link de convite.",
|
||||
"STEP_1_ILLUS_DESC": "Escolha uma guia para vincular",
|
||||
"STEP_1_ILLUS_DL_CHROME": "Vincular guia do YouTube",
|
||||
"STEP_1_ILLUS_DL_FIREFOX": "Vincular guia do Netflix",
|
||||
"STEP_1_ILLUS_ACTIVE": "Guia vinculada",
|
||||
"STEP_1_ILLUS_READY": "Pronto para ver em sincronia !",
|
||||
"STEP_2_TITLE": "Selecionar a guia do vídeo",
|
||||
"STEP_2_DESC": "Acesse a guia do seu vídeo e selecione-a no menu da extensão. O KoalaSync vincula seus reprodutores automaticamente.",
|
||||
"STEP_2_ILLUS_ROOM": "Sala",
|
||||
"STEP_2_ILLUS_SYNC": "Sincronia",
|
||||
"STEP_2_ILLUS_SETTINGS": "Configurações",
|
||||
"STEP_2_ILLUS_CREATE": "+ Criar nova sala",
|
||||
"STEP_2_ILLUS_MANUAL": "Manual / Avançado",
|
||||
"STEP_2_ILLUS_COPIED": "Link copiado!",
|
||||
"STEP_3_TITLE": "Compartilhar e Assistir",
|
||||
"STEP_3_DESC": "Envie o link aos amigos. Escolha um vídeo e aproveitem juntos.",
|
||||
"STEP_3_TITLE": "Aproveitar a sincronização",
|
||||
"STEP_3_DESC": "Inicie a reprodução. Se alguém pausar, avançar ou reproduzir, o vídeo de todos se mantém sincronizado em tempo real e sem atrasos.",
|
||||
"STEP_3_ILLUS_IN_SYNC": "SINCRONIZADOS",
|
||||
"SELF_TITLE": "Para usuários avançados",
|
||||
"SELF_SUBTITLE": "Prefere gerenciar seus próprios dados? Inicie seu próprio servidor em minutos com Docker.",
|
||||
@@ -158,7 +165,7 @@
|
||||
"MOCK_13": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"14\" height=\"14\" aria-hidden=\"true\"><polygon points=\"13 2 3 14 12 14 11 22 21 10 12 10 13 2\"/></svg> SINCRO",
|
||||
"MOCK_14": "Ir para a posição dos outros",
|
||||
"MOCK_15": "Última Atividade",
|
||||
"MOCK_16": "Aguardando 1 amigo (KoalaPC)...",
|
||||
"MOCK_16": "Aguardando 1 amigo (🐶 HappyDog)...",
|
||||
"MOCK_17": "Pular e reproduzir agora",
|
||||
"MOCK_18": "Seu Nome",
|
||||
"MOCK_19": "Ocultar abas sem vídeo",
|
||||
@@ -205,5 +212,9 @@
|
||||
"ALT_SCREEN_LIMITS_BODY": "O KoalaSync não substitui uma chamada de voz. Se você quiser conversar enquanto assiste, continue usando Discord, Teamspeak, Signal, WhatsApp ou qualquer ferramenta que utilize normalmente.<br><br>Todos também precisam ter acesso ao vídeo ou à página em seus próprios dispositivos. O KoalaSync não contorna assinaturas, logins, DRM, restrições regionais ou regras da plataforma.<br><br>Atualmente, funciona apenas em navegadores para desktop, não possui recursos integrados de chat ou voz, e a compatibilidade depende sempre do navegador e do reprodutor de vídeo.",
|
||||
"ALT_SCREEN_SUMMARY_TITLE": "Resumo",
|
||||
"ALT_SCREEN_SUMMARY_BODY": "O compartilhamento de tela é a opção mais simples quando você quer algo rápido e não se preocupa muito com qualidade, privacidade ou controle individual. O KoalaSync é mais adequado quando todos devem assistir localmente em seus próprios navegadores e a sessão deve proporcionar uma experiência mais próxima de realmente assistir juntos.",
|
||||
"ALT_TRY_KOALASYNC": "Experimente o KoalaSync"
|
||||
"ALT_TRY_KOALASYNC": "Experimente o KoalaSync",
|
||||
"MOCK_HOST_CONTROL_LABEL": "Controle do anfitrião",
|
||||
"MOCK_HOST_CONTROL_TOGGLE": "Apenas eu posso controlar a reprodução",
|
||||
"LABEL_SELECT_VIDEO": "Selecionar vídeo",
|
||||
"OPTION_SELECT_TAB": "-- Selecione uma aba --"
|
||||
}
|
||||
|
||||
+26
-15
@@ -17,6 +17,13 @@
|
||||
"HERO_TITLE": "Vejam Juntos.<span class='hero-line2'>Sincronia Perfeita.</span>",
|
||||
"HERO_SUBTITLE": "A sua noite de cinema à distância e sem atrasos. Sem contas, sem recolha de dados. Partilhe um link e vejam juntos.",
|
||||
"HERO_MASCOT_ALT": "Um coala fofo a olhar para os botões de download",
|
||||
"DEMO_SYNC": "Sincronizado",
|
||||
"DEMO_HINT": "Demo ao vivo — dê play em qualquer aba: o KoalaSync mantém as duas em sincronia.",
|
||||
"DEMO_NO_ROOM": "Ainda não conectado",
|
||||
"DEMO_CREATE_ROOM": "Criar sala",
|
||||
"DEMO_JOINED": "Entrou na sala",
|
||||
"DEMO_TAB_SELECTED": "Separador selecionado",
|
||||
"DEMO_SELECT_PLACEHOLDER": "Escolha um separador de vídeo…",
|
||||
"ADD_TO_CHROME": "Adicionar ao Chrome",
|
||||
"ADD_TO_FIREFOX": "Adicionar ao Firefox",
|
||||
"COMPAT_HEADING": "Funciona nas suas plataformas favoritas",
|
||||
@@ -35,8 +42,8 @@
|
||||
"USE_CASE_3_DESC": "Aproveite as noites a dois. Ria das mesmas piadas e sinta as mesmas emoções exatamente no mesmo milissegundo.",
|
||||
"WHY_TITLE": "Porquê o KoalaSync?",
|
||||
"WHY_SUBTITLE": "Sincronização fiável, máxima privacidade e uso simples.",
|
||||
"FEATURE_1_TITLE": "Controlo Total / Sincronia Instantânea",
|
||||
"FEATURE_1_DESC": "Se um pausa, todos pausam. Se um avança, todos seguem. Sincronização em tempo real para todos os participantes.",
|
||||
"FEATURE_1_TITLE": "Controlo do host e sincronização",
|
||||
"FEATURE_1_DESC": "Tu decides quem controla a reprodução. Ativa o controlo do anfitrião para que apenas tu possas pausar e avançar, ou nomeia co-anfitriões.",
|
||||
"FEATURE_2_TITLE": "Maratonas sem interrupções",
|
||||
"FEATURE_2_DESC": "O KoalaSync deteta a mudança de episódios e pausa automaticamente até que todos tenham carregado o vídeo seguinte.",
|
||||
"FEATURE_3_TITLE": "Sem Contas / Privacidade Absoluta",
|
||||
@@ -87,23 +94,23 @@
|
||||
"COMP_FOOTNOTE_3": "Políticas de privacidade do Teleparty:",
|
||||
"COMP_FOOTNOTE_4": "Funciona em websites que permitem a injeção de scripts. Plataformas com DRM estrito podem ter limitações.",
|
||||
"STEPS_TITLE": "Como Começar",
|
||||
"STEP_1_TITLE": "Instalar a Extensão",
|
||||
"STEP_1_DESC": "Adicione o KoalaSync ao seu navegador (Chrome ou Firefox).",
|
||||
"STEP_1_ILLUS_DESC": "Extensão segura para ver vídeos",
|
||||
"STEP_1_ILLUS_DL_CHROME": "Descarregar para Chrome",
|
||||
"STEP_1_ILLUS_DL_FIREFOX": "Descarregar para Firefox",
|
||||
"STEP_1_ILLUS_ACTIVE": "Extensão Ativa",
|
||||
"STEP_1_ILLUS_READY": "Pronto!",
|
||||
"STEP_2_TITLE": "Criar uma Sala",
|
||||
"STEP_2_DESC": "Abra a extensão e clique em '+ Criar Nova Sala'. O link de convite é copiado automaticamente.",
|
||||
"STEP_1_TITLE": "Criar e partilhar a sala",
|
||||
"STEP_1_DESC": "Abra a extensão, crie uma sala com um clique e partilhe o link com os seus amigos. Eles entram instantaneamente pelo link de convite.",
|
||||
"STEP_1_ILLUS_DESC": "Escolha um separador para ligar",
|
||||
"STEP_1_ILLUS_DL_CHROME": "Ligar separador do YouTube",
|
||||
"STEP_1_ILLUS_DL_FIREFOX": "Ligar separador do Netflix",
|
||||
"STEP_1_ILLUS_ACTIVE": "Separador ligado",
|
||||
"STEP_1_ILLUS_READY": "Pronto para ver em sincronia !",
|
||||
"STEP_2_TITLE": "Selecionar o separador do vídeo",
|
||||
"STEP_2_DESC": "Aceda ao separador do seu vídeo e selecione-o no menu da extensão. O KoalaSync liga os vossos leitores automaticamente.",
|
||||
"STEP_2_ILLUS_ROOM": "Sala",
|
||||
"STEP_2_ILLUS_SYNC": "Sincronia",
|
||||
"STEP_2_ILLUS_SETTINGS": "Definições",
|
||||
"STEP_2_ILLUS_CREATE": "+ Criar Nova Sala",
|
||||
"STEP_2_ILLUS_MANUAL": "Manual / Avançado",
|
||||
"STEP_2_ILLUS_COPIED": "Link copiado!",
|
||||
"STEP_3_TITLE": "Partilhar e Sincronizar",
|
||||
"STEP_3_DESC": "Envie o link aos amigos. Escolha um vídeo e desfrutem da reprodução juntos.",
|
||||
"STEP_3_TITLE": "Desfrutar da sincronização",
|
||||
"STEP_3_DESC": "Inicie a reprodução. Se alguém pausar, avançar ou reproduzir, o vídeo de todos mantém-se sincronizado em tempo real e sem atrasos.",
|
||||
"STEP_3_ILLUS_IN_SYNC": "SINCRONIZADOS",
|
||||
"SELF_TITLE": "Para utilizadores avançados",
|
||||
"SELF_SUBTITLE": "Prefere gerir os seus dados? Inicie o seu próprio servidor em minutos com Docker.",
|
||||
@@ -158,7 +165,7 @@
|
||||
"MOCK_13": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"14\" height=\"14\" aria-hidden=\"true\"><polygon points=\"13 2 3 14 12 14 11 22 21 10 12 10 13 2\"/></svg> SINCRO",
|
||||
"MOCK_14": "Ir para a posição dos outros",
|
||||
"MOCK_15": "Última Atividade",
|
||||
"MOCK_16": "À espera de 1 amigo (KoalaPC)...",
|
||||
"MOCK_16": "À espera de 1 amigo (🐶 HappyDog)...",
|
||||
"MOCK_17": "Ignorar e reproduzir agora",
|
||||
"MOCK_18": "O seu Nome",
|
||||
"MOCK_19": "Ocultar separadores sem vídeo",
|
||||
@@ -205,5 +212,9 @@
|
||||
"ALT_SCREEN_LIMITS_BODY": "O KoalaSync não substitui uma chamada de voz. Se quiser conversar enquanto assiste, utilize ainda o Discord, Teamspeak, Signal, WhatsApp ou qualquer outra aplicação que utilize normalmente.<br><br>Todos também precisam de ter acesso ao vídeo ou à página nos seus próprios dispositivos. O KoalaSync não ignora as subscrições, logins, DRM, restrições regionais ou regras de plataforma.<br><br>Atualmente, funciona apenas em navegadores de desktop, não tem chat ou recurso de voz integrados e a compatibilidade depende sempre do navegador e do leitor de vídeo.",
|
||||
"ALT_SCREEN_SUMMARY_TITLE": "Resumo",
|
||||
"ALT_SCREEN_SUMMARY_BODY": "Partilhar o ecrã é a opção mais simples quando se quer algo rápido e não se liga muito à qualidade, privacidade ou controlo individual. O KoalaSync é mais adequado quando todos devem assistir localmente nos seus próprios browsers e a sessão deve parecer mais como assistir em conjunto.",
|
||||
"ALT_TRY_KOALASYNC": "Experimente o KoalaSync"
|
||||
"ALT_TRY_KOALASYNC": "Experimente o KoalaSync",
|
||||
"MOCK_HOST_CONTROL_LABEL": "Controlo do anfitrião",
|
||||
"MOCK_HOST_CONTROL_TOGGLE": "Apenas eu posso controlar a reprodução",
|
||||
"LABEL_SELECT_VIDEO": "Selecionar Vídeo",
|
||||
"OPTION_SELECT_TAB": "-- Selecionar um Separador --"
|
||||
}
|
||||
|
||||
+26
-15
@@ -17,6 +17,13 @@
|
||||
"HERO_TITLE": "Смотрите вместе.<span class='hero-line2'>Синхронно на 100%.</span>",
|
||||
"HERO_SUBTITLE": "Ваш киновечер на расстоянии без задержек. Без регистрации и сбора данных. Просто поделитесь ссылкой и смотрите вместе.",
|
||||
"HERO_MASCOT_ALT": "Милый коала стоит и смотрит вниз на кнопки загрузки",
|
||||
"DEMO_SYNC": "Синхронно",
|
||||
"DEMO_HINT": "Живое демо — нажмите play в любой вкладке: KoalaSync синхронизирует обе.",
|
||||
"DEMO_NO_ROOM": "Ещё не подключено",
|
||||
"DEMO_CREATE_ROOM": "Создать комнату",
|
||||
"DEMO_JOINED": "В комнате",
|
||||
"DEMO_TAB_SELECTED": "Вкладка выбрана",
|
||||
"DEMO_SELECT_PLACEHOLDER": "Выберите вкладку с видео…",
|
||||
"ADD_TO_CHROME": "Установить в Chrome",
|
||||
"ADD_TO_FIREFOX": "Установить в Firefox",
|
||||
"COMPAT_HEADING": "Работает на ваших любимых платформах",
|
||||
@@ -35,8 +42,8 @@
|
||||
"USE_CASE_3_DESC": "Сократите расстояние и наслаждайтесь свиданиями. Переживайте каждый поворот сюжета, смейтесь над шутками и делитесь эмоциями в одну и ту же миллисекунду.",
|
||||
"WHY_TITLE": "Почему KoalaSync?",
|
||||
"WHY_SUBTITLE": "Создан для надежной синхронизации, конфиденциальности и простой настройки.",
|
||||
"FEATURE_1_TITLE": "Полный контроль и мгновенный синхро",
|
||||
"FEATURE_1_DESC": "Один ставит на паузу — пауза у всех. Один перематывает — все перематывают. Наш двухфазный протокол координирует воспроизведение в реальном времени у всех участников.",
|
||||
"FEATURE_1_TITLE": "Управление хоста и синхронизация",
|
||||
"FEATURE_1_DESC": "Вы решаете, кто управляет воспроизведением. Включите управление ведущего, чтобы только вы могли ставить на паузу и перемотку, или назначайте со-ведущих.",
|
||||
"FEATURE_2_TITLE": "Бесконечные марафоны",
|
||||
"FEATURE_2_DESC": "Синхронное автовоспроизведение. KoalaSync автоматически определяет переход на следующую серию и ждет, пока она загрузится у всех участников.",
|
||||
"FEATURE_3_TITLE": "Без аккаунтов и хранения данных",
|
||||
@@ -87,23 +94,23 @@
|
||||
"COMP_FOOTNOTE_3": "Политика конфиденциальности Teleparty и сбор трекеров:",
|
||||
"COMP_FOOTNOTE_4": "Работает на сайтах, разрешающих инъекцию скриптов в стандартные видеотеги HTML5. Сайты с очень строгой политикой безопасности контента (CSP), защитой от копирования DRM или сильно обфусцированными оболочками плееров (например, сложные теневые DOM) могут блокировать автоматическое управление.",
|
||||
"STEPS_TITLE": "С чего начать",
|
||||
"STEP_1_TITLE": "Установить расширение",
|
||||
"STEP_1_DESC": "Добавьте KoalaSync в браузер из Chrome Web Store, Firefox Add-ons or скачайте последний ZIP-архив разработчика с GitHub.",
|
||||
"STEP_1_ILLUS_DESC": "Ориентированный на конфиденциальность синхронизатор видео",
|
||||
"STEP_1_ILLUS_DL_CHROME": "Скачать для Chrome",
|
||||
"STEP_1_ILLUS_DL_FIREFOX": "Скачать для Firefox",
|
||||
"STEP_1_ILLUS_ACTIVE": "Расширение активно",
|
||||
"STEP_1_ILLUS_READY": "Готовы смотреть вместе!",
|
||||
"STEP_2_TITLE": "Создать комнату",
|
||||
"STEP_2_DESC": "Откройте меню расширения и нажмите «+ Создать новую комнату». KoalaSync автоматически сгенерирует ID и пароль, войдет в нее и скопирует ссылку-приглашение.",
|
||||
"STEP_1_TITLE": "Создать комнату и поделиться",
|
||||
"STEP_1_DESC": "Откройте расширение, создайте комнату одним кликом и отправьте ссылку друзьям. Они мгновенно подключатся по приглашению.",
|
||||
"STEP_1_ILLUS_DESC": "Выберите вкладку для подключения",
|
||||
"STEP_1_ILLUS_DL_CHROME": "Подключить вкладку YouTube",
|
||||
"STEP_1_ILLUS_DL_FIREFOX": "Подключить вкладку Netflix",
|
||||
"STEP_1_ILLUS_ACTIVE": "Вкладка подключена",
|
||||
"STEP_1_ILLUS_READY": "Готово к синхронному просмотру !",
|
||||
"STEP_2_TITLE": "Выбрать вкладку с видео",
|
||||
"STEP_2_DESC": "Перейдите на вкладку с видео и выберите её в меню расширения. KoalaSync автоматически свяжет ваши плееры.",
|
||||
"STEP_2_ILLUS_ROOM": "Комната",
|
||||
"STEP_2_ILLUS_SYNC": "Синхро",
|
||||
"STEP_2_ILLUS_SETTINGS": "Опции",
|
||||
"STEP_2_ILLUS_CREATE": "+ Создать комнату",
|
||||
"STEP_2_ILLUS_MANUAL": "Ручное подключение / Дополнительно",
|
||||
"STEP_2_ILLUS_COPIED": "Ссылка скопирована!",
|
||||
"STEP_3_TITLE": "Поделиться и смотреть",
|
||||
"STEP_3_DESC": "Отправьте ссылку друзьям. Как только они присоединятся, выберите вкладку с видео и наслаждайтесь синхронным просмотром.",
|
||||
"STEP_3_TITLE": "Наслаждаться синхронизацией",
|
||||
"STEP_3_DESC": "Нажмите кнопку воспроизведения. Когда кто-то ставит на паузу, перематывает или запускает видео, просмотр синхронизируется у всех без задержек.",
|
||||
"STEP_3_ILLUS_IN_SYNC": "В СИНХРОНЕ",
|
||||
"SELF_TITLE": "Для селф-хостеров",
|
||||
"SELF_SUBTITLE": "Не доверяете нашему серверу? Сохраняйте полный контроль над данными. Разверните собственный приватный сервер за пару минут.",
|
||||
@@ -157,7 +164,7 @@
|
||||
"MOCK_12": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" width=\"14\" height=\"14\" aria-hidden=\"true\"><rect x=\"6\" y=\"4\" width=\"4\" height=\"16\"/><rect x=\"14\" y=\"4\" width=\"4\" height=\"16\"/></svg> Пауза",
|
||||
"MOCK_13": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"14\" height=\"14\" aria-hidden=\"true\"><polygon points=\"13 2 3 14 12 14 11 22 21 10 12 10 13 2\"/></svg> SYNC",
|
||||
"MOCK_14": "Последняя активность",
|
||||
"MOCK_15": "Ожидание 1 участника (KoalaPC)...",
|
||||
"MOCK_15": "Ожидание 1 участника (🐶 HappyDog)...",
|
||||
"MOCK_16": "Пропустить и играть",
|
||||
"MOCK_17": "Ваше имя",
|
||||
"MOCK_18": "Скрыть лишние вкладки",
|
||||
@@ -205,5 +212,9 @@
|
||||
"ALT_SCREEN_LIMITS_BODY": "KoalaSync не заменяет голосовую связь. Если во время просмотра вы хотите общаться, используйте Discord, TeamSpeak, Signal, WhatsApp или любой другой привычный вам сервис.<br><br>Каждому участнику также необходим доступ к видео или веб-странице на собственном устройстве. KoalaSync не обходит требования к подписке, авторизации, DRM-защите, региональные ограничения или правила платформ.<br><br>На данный момент сервис работает только в браузерах на ПК, не имеет встроенного чата или функции голосовой связи, а совместимость зависит от конкретного браузера и видеоплеера.",
|
||||
"ALT_SCREEN_SUMMARY_TITLE": "Краткий обзор",
|
||||
"ALT_SCREEN_SUMMARY_BODY": "Демонстрация экрана — самый простой вариант, если нужно быстро всё организовать и вас не особо волнуют качество, конфиденциальность или возможность индивидуального управления. KoalaSync лучше подходит для ситуаций, когда каждый участник смотрит видео локально в своем браузере, а сам сеанс больше напоминает реальный совместный просмотр.",
|
||||
"ALT_TRY_KOALASYNC": "Попробовать KoalaSync"
|
||||
"ALT_TRY_KOALASYNC": "Попробовать KoalaSync",
|
||||
"MOCK_HOST_CONTROL_LABEL": "Управление ведущим",
|
||||
"MOCK_HOST_CONTROL_TOGGLE": "Только я могу управлять воспроизведением",
|
||||
"LABEL_SELECT_VIDEO": "Выбрать видео",
|
||||
"OPTION_SELECT_TAB": "-- Выберите вкладку --"
|
||||
}
|
||||
|
||||
+26
-15
@@ -17,6 +17,13 @@
|
||||
"HERO_TITLE": "Birlikte İzleyin.<span class='hero-line2'>Mükemmel Eşitleyin.</span>",
|
||||
"HERO_SUBTITLE": "Gecikmesiz uzaktan film geceniz. Kayıt yok, veri toplama yok. Sadece bir bağlantı paylaşın ve birlikte izleyin.",
|
||||
"HERO_MASCOT_ALT": "İndirme düğmelerine bakan sevimli bir koala",
|
||||
"DEMO_SYNC": "Senkronize",
|
||||
"DEMO_HINT": "Canlı demo — sekmelerden birinde oynat'a basın: KoalaSync ikisini de senkronize tutar.",
|
||||
"DEMO_NO_ROOM": "Henüz bağlı değil",
|
||||
"DEMO_CREATE_ROOM": "Oda oluştur",
|
||||
"DEMO_JOINED": "Odaya katıldı",
|
||||
"DEMO_TAB_SELECTED": "Sekme seçildi",
|
||||
"DEMO_SELECT_PLACEHOLDER": "Bir video sekmesi seçin…",
|
||||
"ADD_TO_CHROME": "Chrome'a Ekle",
|
||||
"ADD_TO_FIREFOX": "Firefox'a Ekle",
|
||||
"COMPAT_HEADING": "En sevdiğiniz platformlarda çalışır",
|
||||
@@ -35,8 +42,8 @@
|
||||
"USE_CASE_3_DESC": "Mesafeleri köprüleyin ve buluşma gecelerinin tadını çıkarın. Her olay örgüsünü deneyimleyin, aynı şakalara gülün ve duygusal anları tam olarak aynı milisaniyede paylaşın.",
|
||||
"WHY_TITLE": "Neden KoalaSync?",
|
||||
"WHY_SUBTITLE": "Güvenilir eşitleme, önce gizlilik ilkesi ve kolay kurulum için tasarlandı.",
|
||||
"FEATURE_1_TITLE": "Tam Kontrol / Anında Eşitleme",
|
||||
"FEATURE_1_DESC": "Biri duraklatır, herkes duraklatır. Biri arar, herkes takip eder. İki aşamalı eşitleme protokolümüz, oynatmayı tüm katılımcılar arasında gerçek zamanlı olarak koordine eder.",
|
||||
"FEATURE_1_TITLE": "Oturum Sahibi Kontrolü ve Senkronizasyon",
|
||||
"FEATURE_1_DESC": "Oynatmayı kimin kontrol edeceğine siz karar verin. Yalnızca sizin durdurup sarabilmeniz için sunucu kontrolünü etkinleştirin veya ortak sunucular atayın.",
|
||||
"FEATURE_2_TITLE": "Kesintisiz İzleme Keyfi",
|
||||
"FEATURE_2_DESC": "Senkronize otomatik oynatma. KoalaSync, bölüm geçişlerini otomatik olarak algılar ve tüm bağlantılar bir sonraki videoyu başarıyla yükleyene kadar oynatmayı bekletir.",
|
||||
"FEATURE_3_TITLE": "Sıfır Hesap / Saf Gizlilik",
|
||||
@@ -87,23 +94,23 @@
|
||||
"COMP_FOOTNOTE_3": "Teleparty gizlilik politikaları ve takip verisi toplama:",
|
||||
"COMP_FOOTNOTE_4": "Standart HTML5 video etiketlerine komut dosyası eklenmesine izin veren web sitelerinde çalışır. Çok katı İçerik Güvenliği Politikalarına (CSP) sahip, DRM kopya korumalı veya yoğun şekilde gizlenmiş oynatıcı sarmalayıcıları (karmaşık gölge DOM'lar gibi) olan web siteleri otomatik kontrolü veya enjeksiyonu kısıtlayabilir.",
|
||||
"STEPS_TITLE": "Başlarken",
|
||||
"STEP_1_TITLE": "Eklentiyi Kur",
|
||||
"STEP_1_DESC": "KoalaSync'i Chrome Web Mağazası, Firefox Eklentileri aracılığıyla tarayıcınıza ekleyin veya en son geliştirici ZIP dosyasını GitHub'dan indirin.",
|
||||
"STEP_1_ILLUS_DESC": "Gizlilik öncelikli video senkronize edici",
|
||||
"STEP_1_ILLUS_DL_CHROME": "Chrome için İndir",
|
||||
"STEP_1_ILLUS_DL_FIREFOX": "Firefox için İndir",
|
||||
"STEP_1_ILLUS_ACTIVE": "Eklenti Etkin",
|
||||
"STEP_1_ILLUS_READY": "Birlikte izlemeye hazır!",
|
||||
"STEP_2_TITLE": "Oda Oluştur",
|
||||
"STEP_2_DESC": "Eklenti açılır penceresini açın ve '+ Yeni Oda Oluştur' düğmesine tıklayın. KoalaSync otomatik olarak güvenli bir Oda Kimliği ve Şifresi oluşturur, odaya katılır ve davet bağlantısını panonuza kopyalar.",
|
||||
"STEP_1_TITLE": "Oda Oluştur ve Paylaş",
|
||||
"STEP_1_DESC": "Uanzıyı açın, tek tıkla oda oluşturun ve bağlantıyı arkadaşlarınızla paylaşın. Davet köprüsü ile anında katılırlar.",
|
||||
"STEP_1_ILLUS_DESC": "Bağlanacak bir sekme seçin",
|
||||
"STEP_1_ILLUS_DL_CHROME": "YouTube Sekmesini Bağla",
|
||||
"STEP_1_ILLUS_DL_FIREFOX": "Netflix Sekmesini Bağla",
|
||||
"STEP_1_ILLUS_ACTIVE": "Sekme Bağlandı",
|
||||
"STEP_1_ILLUS_READY": "Senkronize izleme için hazır !",
|
||||
"STEP_2_TITLE": "Video Sekmesini Seç",
|
||||
"STEP_2_DESC": "Videonuzun bulunduğu sekmeye gidin ve uzantı menüsünden bu sekmeyi seçin. KoalaSync oynatıcılarınızı otomatik olarak bağlar.",
|
||||
"STEP_2_ILLUS_ROOM": "Oda",
|
||||
"STEP_2_ILLUS_SYNC": "Senkronizasyon",
|
||||
"STEP_2_ILLUS_SETTINGS": "Ayarlar",
|
||||
"STEP_2_ILLUS_CREATE": "+ Yeni Oda Oluştur",
|
||||
"STEP_2_ILLUS_MANUAL": "Manuel Bağlantı / Gelişmiş",
|
||||
"STEP_2_ILLUS_COPIED": "Davet bağlantısı kopyalandı!",
|
||||
"STEP_3_TITLE": "Paylaş ve Eşitle",
|
||||
"STEP_3_DESC": "Davet bağlantısını arkadaşlarınıza gönderin. Katıldıklarında video sekmenizi seçin ve senkronize oynatmanın keyfini çıkarın.",
|
||||
"STEP_3_TITLE": "Senkronizasyonun Tadını Çıkar",
|
||||
"STEP_3_DESC": "Oynat tuşuna basın. Birisi durdurduğunda, sardığında veya oynattığında herkesin videosu gecikmesiz olarak senkronize kalır.",
|
||||
"STEP_3_ILLUS_IN_SYNC": "EŞİTLENDİ",
|
||||
"SELF_TITLE": "Kendi Kendine Barındıranlar İçin",
|
||||
"SELF_SUBTITLE": "Sunucumuza güvenmiyor musunuz? Veri egemenliğinizi koruyun. Kendi özel aktarım sunucunuzu dakikalar içinde devreye alın.",
|
||||
@@ -158,7 +165,7 @@
|
||||
"MOCK_13": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"14\" height=\"14\" aria-hidden=\"true\"><polygon points=\"13 2 3 14 12 14 11 22 21 10 12 10 13 2\"/></svg> SYNC",
|
||||
"MOCK_14": "Diğerlerine Atla",
|
||||
"MOCK_15": "Son Etkinlik Durumu",
|
||||
"MOCK_16": "1 bağlantı bekleniyor (KoalaPC)...",
|
||||
"MOCK_16": "1 bağlantı bekleniyor (🐶 HappyDog)...",
|
||||
"MOCK_17": "Atla ve Yine de Oynat",
|
||||
"MOCK_18": "Kullanıcı Adınız",
|
||||
"MOCK_19": "Gereksiz Sekmeleri Gizle",
|
||||
@@ -205,5 +212,9 @@
|
||||
"ALT_SCREEN_LIMITS_BODY": "KoalaSync, sesli görüşmenin yerini tutmaz. İzleme sırasında konuşmak isterseniz, yine Discord, Teamspeak, Signal, WhatsApp veya normalde kullandığınız herhangi bir aracı kullanmaya devam edebilirsiniz.<br><br>Ayrıca herkesin ilgili videoya veya sayfaya kendi cihazından erişebilmesi gerekir. KoalaSync; abonelikleri, oturum açma işlemlerini, DRM korumalarını, bölgesel kısıtlamaları veya platform kurallarını devre dışı bırakmaz.<br><br>Şu anda yalnızca masaüstü tarayıcılarında çalışır; yerleşik bir sohbet veya sesli görüşme özelliği yoktur ve uyumluluk her zaman kullanılan tarayıcıya ve video oynatıcıya bağlıdır.",
|
||||
"ALT_SCREEN_SUMMARY_TITLE": "Özet",
|
||||
"ALT_SCREEN_SUMMARY_BODY": "Hızlı bir çözüm aradığınızda ve kalite, gizlilik ya da bireysel kontrol konularına çok önem vermediğinizde, ekran paylaşımı en basit seçenektir. Herkesin içeriği kendi tarayıcısında yerel olarak izlemesi gereken ve oturumun gerçekten birlikte izliyormuş hissi verdiği durumlarda ise KoalaSync daha uygun bir tercihtir.",
|
||||
"ALT_TRY_KOALASYNC": "KoalaSync'i Deneyin"
|
||||
"ALT_TRY_KOALASYNC": "KoalaSync'i Deneyin",
|
||||
"MOCK_HOST_CONTROL_LABEL": "Sunucu Kontrolü",
|
||||
"MOCK_HOST_CONTROL_TOGGLE": "Oynatmayı yalnızca ben kontrol edebilirim",
|
||||
"LABEL_SELECT_VIDEO": "Video Seç",
|
||||
"OPTION_SELECT_TAB": "-- Bir Sekme Seçin --"
|
||||
}
|
||||
|
||||
+26
-15
@@ -17,6 +17,13 @@
|
||||
"HERO_TITLE": "Дивіться разом.<span class='hero-line2'>Ідеальна синхронізація.</span>",
|
||||
"HERO_SUBTITLE": "Ваш віддалений кіновечір без лагів. Ні реєстрації, ні збору даних. Просто поділіться посиланням і дивіться разом.",
|
||||
"HERO_MASCOT_ALT": "Мила коала стоїть і дивиться вниз на кнопки завантаження",
|
||||
"DEMO_SYNC": "Синхронно",
|
||||
"DEMO_HINT": "Жива демонстрація — натисніть play у будь-якій вкладці: KoalaSync синхронізує обидві.",
|
||||
"DEMO_NO_ROOM": "Ще не підключено",
|
||||
"DEMO_CREATE_ROOM": "Створити кімнату",
|
||||
"DEMO_JOINED": "У кімнаті",
|
||||
"DEMO_TAB_SELECTED": "Вкладку вибрано",
|
||||
"DEMO_SELECT_PLACEHOLDER": "Оберіть вкладку з відео…",
|
||||
"ADD_TO_CHROME": "Додати до Chrome",
|
||||
"ADD_TO_FIREFOX": "Додати до Firefox",
|
||||
"COMPAT_HEADING": "Працює на ваших улюблених платформах",
|
||||
@@ -35,8 +42,8 @@
|
||||
"USE_CASE_3_DESC": "Подолайте відстань і насолоджуйтесь побаченнями. Переживайте кожен поворот сюжету, смійтеся над тими самими жартами та діліться емоційними моментами в ту саму мілісекунду.",
|
||||
"WHY_TITLE": "Чому KoalaSync?",
|
||||
"WHY_SUBTITLE": "Створено для надійної синхронізації, конфіденційності та простого налаштування.",
|
||||
"FEATURE_1_TITLE": "Повний контроль/миттєва синхронізація",
|
||||
"FEATURE_1_DESC": "Один робить паузу, всі зупиняються. Один шукає, всі йдуть. Наш двофазний протокол синхронізації координує відтворення в режимі реального часу для всіх учасників.",
|
||||
"FEATURE_1_TITLE": "Керування хоста та синхронізація",
|
||||
"FEATURE_1_DESC": "Ви вирішуєте, хто керує відтворенням. Увімкніть керування ведучого, щоб тільки ви могли призупиняти та перемотувати відео, або призначайте співведучих.",
|
||||
"FEATURE_2_TITLE": "Нескінченне споглядання",
|
||||
"FEATURE_2_DESC": "Автоматичне відтворення синхронізовано. KoalaSync автоматично визначає переходи епізодів і утримує відтворення, доки всі однорангові пристрої успішно не завантажать наступне відео.",
|
||||
"FEATURE_3_TITLE": "Нуль облікових записів / чиста конфіденційність",
|
||||
@@ -87,23 +94,23 @@
|
||||
"COMP_FOOTNOTE_3": "Політика конфіденційності Teleparty і збір даних відстеження:",
|
||||
"COMP_FOOTNOTE_4": "Працює на веб-сайтах, які дозволяють ін’єкції сценаріїв у стандартні відеотеги HTML5. Веб-сайти з дуже суворими політиками безпеки вмісту (CSP), захистом від копіювання DRM або сильно затуманеними оболонками програвачів (як-от складні тіньові DOM) можуть обмежувати автоматизований контроль або впровадження.",
|
||||
"STEPS_TITLE": "Початок роботи",
|
||||
"STEP_1_TITLE": "Встановити розширення",
|
||||
"STEP_1_DESC": "Додайте KoalaSync до свого браузера з веб-магазину Chrome, доповнень Firefox або завантажте найновіший розробник ZIP із GitHub.",
|
||||
"STEP_1_ILLUS_DESC": "Синхронізатор відео насамперед із конфіденційністю",
|
||||
"STEP_1_ILLUS_DL_CHROME": "Завантажити для Chrome",
|
||||
"STEP_1_ILLUS_DL_FIREFOX": "Завантажити для Firefox",
|
||||
"STEP_1_ILLUS_ACTIVE": "Розширення активне",
|
||||
"STEP_1_ILLUS_READY": "Готові дивитися разом!",
|
||||
"STEP_2_TITLE": "Створіть кімнату",
|
||||
"STEP_2_DESC": "Відкрийте спливаюче вікно розширення та натисніть «+ Створити нову кімнату». KoalaSync автоматично генерує безпечний Room ID і пароль, приєднується до нього та копіює посилання для запрошення в буфер обміну.",
|
||||
"STEP_1_TITLE": "Створити кімнату та поділитися",
|
||||
"STEP_1_DESC": "Відкрийте розширення, створити кімнату одним кліком та надішліть посилання друзям. Вони миттєво приєднаються за запрошенням.",
|
||||
"STEP_1_ILLUS_DESC": "Виберіть вкладку для підключення",
|
||||
"STEP_1_ILLUS_DL_CHROME": "Підключити вкладку YouTube",
|
||||
"STEP_1_ILLUS_DL_FIREFOX": "Підключити вкладку Netflix",
|
||||
"STEP_1_ILLUS_ACTIVE": "Вкладку підключено",
|
||||
"STEP_1_ILLUS_READY": "Готово до синхронного перегляду !",
|
||||
"STEP_2_TITLE": "Вибрати вкладку з відео",
|
||||
"STEP_2_DESC": "Перейдіть на вкладку з відео та виберіть її в меню розширення. KoalaSync автоматично зв'яже ваші плеєри.",
|
||||
"STEP_2_ILLUS_ROOM": "Кімната",
|
||||
"STEP_2_ILLUS_SYNC": "Синхронізувати",
|
||||
"STEP_2_ILLUS_SETTINGS": "Налаштування",
|
||||
"STEP_2_ILLUS_CREATE": "+ Створити нову кімнату",
|
||||
"STEP_2_ILLUS_MANUAL": "Ручне підключення / Додатково",
|
||||
"STEP_2_ILLUS_COPIED": "Посилання на запрошення скопійовано!",
|
||||
"STEP_3_TITLE": "Поділитися та синхронізувати",
|
||||
"STEP_3_DESC": "Надішліть запрошення своїм друзям. Коли вони приєднаються, виберіть вкладку відео та насолоджуйтеся синхронізованим відтворенням.",
|
||||
"STEP_3_TITLE": "Насолоджуватися синхронізацією",
|
||||
"STEP_3_DESC": "Натисніть відтворення. Коли хтось зупиняє, перемотує або запускає відео, відтворення у всіх синхронізується без затримок.",
|
||||
"STEP_3_ILLUS_IN_SYNC": "СИНХРОНІЗОВАНО",
|
||||
"SELF_TITLE": "Для самостійних господарів",
|
||||
"SELF_SUBTITLE": "Не довіряєте нашому серверу? Підтримуйте повний суверенітет даних. Розгорніть власний приватний сервер ретрансляції за лічені хвилини.",
|
||||
@@ -158,7 +165,7 @@
|
||||
"MOCK_13": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"14\" height=\"14\" aria-hidden=\"true\"><polygon points=\"13 2 3 14 12 14 11 22 21 10 12 10 13 2\"/></svg> СИНХ",
|
||||
"MOCK_14": "Перейти до інших",
|
||||
"MOCK_15": "Статус останньої дії",
|
||||
"MOCK_16": "Очікування 1 партнера (KoalaPC)...",
|
||||
"MOCK_16": "Очікування 1 партнера (🐶 HappyDog)...",
|
||||
"MOCK_17": "Все одно пропустіть і грайте",
|
||||
"MOCK_18": "Ваше ім'я користувача",
|
||||
"MOCK_19": "Приховати безладні вкладки",
|
||||
@@ -205,5 +212,9 @@
|
||||
"ALT_SCREEN_LIMITS_BODY": "KoalaSync не замінює голосовий дзвінок. Якщо ви хочете розмовляти під час перегляду, ви все одно використовуєте Discord, Teamspeak, Signal, WhatsApp або будь-який інший додаток, який ви зазвичай використовуєте.<br><br>Кожному також потрібен доступ до відео або сторінки на власному пристрої. KoalaSync не обходить підписки, вхід, DRM, регіональні обмеження чи правила платформи.<br><br>Наразі він доступний лише для браузера на комп'ютері, не має вбудованої функції чату чи голосового зв'язку, а сумісність завжди залежить від браузера та відеоплеєра.",
|
||||
"ALT_SCREEN_SUMMARY_TITLE": "Підсумок",
|
||||
"ALT_SCREEN_SUMMARY_BODY": "Спільний доступ до екрана – це найпростіший варіант, коли ви просто хочете чогось швидкого і не дуже переймаєтеся якістю, конфіденційністю чи індивідуальним контролем. KoalaSync краще підходить, коли кожен має дивитися локально у своєму власному браузері, і сеанс має більше нагадувати спільний перегляд.",
|
||||
"ALT_TRY_KOALASYNC": "Спробуйте KoalaSync"
|
||||
"ALT_TRY_KOALASYNC": "Спробуйте KoalaSync",
|
||||
"MOCK_HOST_CONTROL_LABEL": "Керування ведучим",
|
||||
"MOCK_HOST_CONTROL_TOGGLE": "Тільки я можу керувати відтворенням",
|
||||
"LABEL_SELECT_VIDEO": "Виберіть Відео",
|
||||
"OPTION_SELECT_TAB": "-- Виберіть вкладку --"
|
||||
}
|
||||
|
||||
+32
-21
@@ -17,6 +17,13 @@
|
||||
"HERO_TITLE": "一起观看.<span class='hero-line2'> 完美同步.</span>",
|
||||
"HERO_SUBTITLE": "您的远程电影之夜没有延迟。无需注册,无需收集数据。只需分享链接即可一起观看。",
|
||||
"HERO_MASCOT_ALT": "一只可爱的考拉站着,低头看着下载按钮",
|
||||
"DEMO_SYNC": "同步中",
|
||||
"DEMO_HINT": "在线演示 — 在任一标签页点击播放:KoalaSync 会让两边保持同步。",
|
||||
"DEMO_NO_ROOM": "尚未连接",
|
||||
"DEMO_CREATE_ROOM": "创建房间",
|
||||
"DEMO_JOINED": "已加入房间",
|
||||
"DEMO_TAB_SELECTED": "已选择标签页",
|
||||
"DEMO_SELECT_PLACEHOLDER": "选择视频标签页…",
|
||||
"ADD_TO_CHROME": "添加到Chrome",
|
||||
"ADD_TO_FIREFOX": "添加到Firefox",
|
||||
"COMPAT_HEADING": "适用于您最喜欢的平台",
|
||||
@@ -35,8 +42,8 @@
|
||||
"USE_CASE_3_DESC": "拉近距离,享受约会之夜。体验每一个情节转折,嘲笑同样的笑话,并在同一毫秒内分享情感时刻。",
|
||||
"WHY_TITLE": "为什么是KoalaSync?",
|
||||
"WHY_SUBTITLE": "专为可靠的同步、隐私优先的设计和轻松的设置而打造。",
|
||||
"FEATURE_1_TITLE": "完全控制/即时同步",
|
||||
"FEATURE_1_DESC": "一个人停顿,所有人都停顿。一追寻,众人追随。我们的两阶段同步协议协调所有参与者的实时播放。",
|
||||
"FEATURE_1_TITLE": "房主控制与同步",
|
||||
"FEATURE_1_DESC": "您可以自主决定谁来控制播放。启用主持人控制以仅允许您进行暂停和快进,或在成员列表中指定共同主持人。",
|
||||
"FEATURE_2_TITLE": "无尽的狂欢",
|
||||
"FEATURE_2_DESC": "自动同步播放。 KoalaSync 自动检测剧集转换并保持播放,直到所有对等方都成功加载下一个视频。",
|
||||
"FEATURE_3_TITLE": "零账户/纯粹隐私",
|
||||
@@ -87,23 +94,23 @@
|
||||
"COMP_FOOTNOTE_3": "Teleparty 隐私政策和跟踪数据收集:",
|
||||
"COMP_FOOTNOTE_4": "适用于允许将脚本注入标准 HTML5 视频标签的网站。具有高度严格的内容安全策略 (CSP)、DRM 复制保护或严重混淆的播放器包装器(如复杂的影子 DOM)的网站可能会限制自动控制或注入。",
|
||||
"STEPS_TITLE": "入门",
|
||||
"STEP_1_TITLE": "安装扩展",
|
||||
"STEP_1_DESC": "从 Chrome Web Store、Firefox 附加组件将 KoalaSync 添加到您的浏览器,或从 GitHub 下载最新的开发人员 ZIP。",
|
||||
"STEP_1_ILLUS_DESC": "隐私第一的视频同步器",
|
||||
"STEP_1_ILLUS_DL_CHROME": "下载 Chrome",
|
||||
"STEP_1_ILLUS_DL_FIREFOX": "下载 Firefox",
|
||||
"STEP_1_ILLUS_ACTIVE": "分机激活",
|
||||
"STEP_1_ILLUS_READY": "准备好一起观看吧!",
|
||||
"STEP_2_TITLE": "创建房间",
|
||||
"STEP_2_DESC": "打开扩展弹出窗口并单击“+ 创建新房间”。 KoalaSync 自动生成安全的 Room ID 和密码,加入它,并将邀请链接复制到剪贴板。",
|
||||
"STEP_1_TITLE": "创建并分享房间",
|
||||
"STEP_1_DESC": "打开插件,一键创建房间并将链接分享给好友。他们可以通过邀请链接立即加入。",
|
||||
"STEP_1_ILLUS_DESC": "选择一个标签页进行绑定",
|
||||
"STEP_1_ILLUS_DL_CHROME": "绑定 YouTube 标签页",
|
||||
"STEP_1_ILLUS_DL_FIREFOX": "绑定 Netflix 标签页",
|
||||
"STEP_1_ILLUS_ACTIVE": "标签页已绑定",
|
||||
"STEP_1_ILLUS_READY": "准备好同步观看 !",
|
||||
"STEP_2_TITLE": "选择视频标签页",
|
||||
"STEP_2_DESC": "转到您的视频标签页,并在插件菜单中选择该页面。KoalaSync 会自动连接你们的播放器。",
|
||||
"STEP_2_ILLUS_ROOM": "房间",
|
||||
"STEP_2_ILLUS_SYNC": "同步",
|
||||
"STEP_2_ILLUS_SETTINGS": "设置",
|
||||
"STEP_2_ILLUS_CREATE": "+ 创建新房间",
|
||||
"STEP_2_ILLUS_MANUAL": "手动连接/高级",
|
||||
"STEP_2_ILLUS_COPIED": "邀请链接已复制!",
|
||||
"STEP_3_TITLE": "分享与同步",
|
||||
"STEP_3_DESC": "将邀请链接发送给您的朋友。他们加入后,选择您的视频选项卡并享受同步播放。",
|
||||
"STEP_3_TITLE": "享受同步播放",
|
||||
"STEP_3_DESC": "点击播放。无论是谁暂停、快进还是播放,所有人的视频都会保持完美实时同步,毫无延迟。",
|
||||
"STEP_3_ILLUS_IN_SYNC": "同步",
|
||||
"SELF_TITLE": "对于自托管者",
|
||||
"SELF_SUBTITLE": "不信任我们的服务器?维护完整的数据主权。只需几分钟即可部署您自己的私有中继服务器。",
|
||||
@@ -158,7 +165,7 @@
|
||||
"MOCK_13": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"14\" height=\"14\" aria-hidden=\"true\"><polygon points=\"13 2 3 14 12 14 11 22 21 10 12 10 13 2\"/></svg> 同步",
|
||||
"MOCK_14": "跳转到其他",
|
||||
"MOCK_15": "上次活动状态",
|
||||
"MOCK_16": "正在等待 1 个同伴 (KoalaPC)...",
|
||||
"MOCK_16": "正在等待 1 个同伴 (🐶 HappyDog)...",
|
||||
"MOCK_17": "仍然跳过并播放",
|
||||
"MOCK_18": "您的用户名",
|
||||
"MOCK_19": "隐藏杂乱标签",
|
||||
@@ -179,15 +186,15 @@
|
||||
"FOOTER_PRIVACY_LINK": "privacy",
|
||||
"FOOTER_DISCLAIMER": "KoalaSync 不隶属于 Netflix、Disney+、Amazon、YouTube、Twitch 或任何其他流媒体平台,也不受其认可或关联。所有商标均为其各自所有者的财产。",
|
||||
"FOOTER_SUPPORT": "Support KoalaSync",
|
||||
"ALT_TELEPARTY_TITLE": "KoalaSync 与 Teleparty:你应该选择哪款在线同步观影工具?",
|
||||
"ALT_TELEPARTY_TITLE": "KoalaSync 与 Teleparty:你应该选择哪款在线同步观影工具?",
|
||||
"ALT_TELEPARTY_META_DESC": "针对 KoalaSync 和 Teleparty 的实用对比,涵盖内置聊天功能、移动端支持、浏览器视频同步、自建媒体服务器以及开源特性等方面。",
|
||||
"ALT_TELEPARTY_INTRO": "KoalaSync 和 Teleparty 都能解决同一个令人头疼的问题:如何一起观看视频,而无需经历\u201c3、2、1,开始播放\u201d这种繁琐的同步步骤。只不过,它们采取了不同的实现方式。<br><br>如果你需要内置聊天功能或希望在移动设备上观看,Teleparty 是更合理的选择。KoalaSync 则更适合桌面浏览器观影场景——即你已经通过 Discord、TeamSpeak 或其他语音通话软件进行交流,只需确保视频播放保持同步即可。<br><br>我开发 KoalaSync 的主要初衷是为了灵活性。它旨在支持几乎所有使用标准浏览器视频播放器的网站,而不仅仅局限于特定的平台列表。这包括 Emby、Jellyfin 和 Plex 等自建媒体服务,本地/私有域名,以及浏览器中的各类常规视频页面。",
|
||||
"ALT_TELEPARTY_INTRO": "KoalaSync 和 Teleparty 都能解决同一个令人头疼的问题:如何一起观看视频,而无需经历“3、2、1,开始播放”这种繁琐的同步步骤。只不过,它们采取了不同的实现方式。<br><br>如果你需要内置聊天功能或希望在移动设备上观看,Teleparty 是更合理的选择。KoalaSync 则更适合桌面浏览器观影场景——即你已经通过 Discord、TeamSpeak 或其他语音通话软件进行交流,只需确保视频播放保持同步即可。<br><br>我开发 KoalaSync 的主要初衷是为了灵活性。它旨在支持几乎所有使用标准浏览器视频播放器的网站,而不仅仅局限于特定的平台列表。这包括 Emby、Jellyfin 和 Plex 等自建媒体服务,本地/私有域名,以及浏览器中的各类常规视频页面。",
|
||||
"ALT_TELEPARTY_WHEN_TELE_TITLE": "Teleparty 依然适用的场景",
|
||||
"ALT_TELEPARTY_WHEN_TELE_BODY": "如果你希望聊天功能集成在观影工具本身之中,Teleparty 仍然是更好的选择。KoalaSync 目前没有内置聊天功能;它默认你已经在其他平台(如 Discord、TeamSpeak、WhatsApp、Signal 或常规通话)上进行交流。<br><br>移动端支持是另一个关键因素。Teleparty 拥有专属应用程序,而 KoalaSync 目前仅支持桌面浏览器。如果你想在手机或平板电脑上同步观看 Netflix,KoalaSync 暂时并不适用。<br><br>因此,如果你最看重聊天功能和移动端支持,Teleparty 可能会更适合你的使用需求。",
|
||||
"ALT_TELEPARTY_WHEN_KOALA_TITLE": "KoalaSync 适用场景",
|
||||
"ALT_TELEPARTY_WHEN_KOALA_BODY": "如果您想要一款灵活的桌面浏览器同步工具,而不是受限于特定平台列表的软件,那么 KoalaSync 是更合适的选择。<br><br>它适用于几乎所有使用标准浏览器视频播放器的网站。对于 Emby、Jellyfin、Plex、私有媒体服务器、本地域或传统\u201c在线观影派对\u201d工具通常忽略的小型视频网站来说,这一点尤为实用。<br><br>此外,它完全免费且开源,无需注册账号;如果您希望运行自己的中继服务器,还可以选择自托管。我开发它的初衷是寻找一款既注重隐私又能与我自己的 Emby 系统兼容的工具,而不是那种仅针对少数几家大型流媒体平台的封闭式平台。",
|
||||
"ALT_TELEPARTY_WHEN_KOALA_BODY": "如果您想要一款灵活的桌面浏览器同步工具,而不是受限于特定平台列表的软件,那么 KoalaSync 是更合适的选择。<br><br>它适用于几乎所有使用标准浏览器视频播放器的网站。对于 Emby、Jellyfin、Plex、私有媒体服务器、本地域或传统“在线观影派对”工具通常忽略的小型视频网站来说,这一点尤为实用。<br><br>此外,它完全免费且开源,无需注册账号;如果您希望运行自己的中继服务器,还可以选择自托管。我开发它的初衷是寻找一款既注重隐私又能与我自己的 Emby 系统兼容的工具,而不是那种仅针对少数几家大型流媒体平台的封闭式平台。",
|
||||
"ALT_TELEPARTY_MAIN_DIFF_TITLE": "主要区别",
|
||||
"ALT_TELEPARTY_MAIN_DIFF_BODY": "Teleparty 更侧重于提供包含聊天和移动端支持的\u201c观影派对\u201d体验;而 KoalaSync 则更像是一个针对浏览器视频的灵活同步层。<br><br>这听起来似乎差别不大,但实际上极大地改变了使用场景。如果您需要一个内置聊天功能的完整观影派对应用,Teleparty 是合理的选择;如果您已有语音聊天渠道,仅需保持各浏览器间的视频播放控制同步,那么 KoalaSync 则是更简洁适用的方案。",
|
||||
"ALT_TELEPARTY_MAIN_DIFF_BODY": "Teleparty 更侧重于提供包含聊天和移动端支持的“观影派对”体验;而 KoalaSync 则更像是一个针对浏览器视频的灵活同步层。<br><br>这听起来似乎差别不大,但实际上极大地改变了使用场景。如果您需要一个内置聊天功能的完整观影派对应用,Teleparty 是合理的选择;如果您已有语音聊天渠道,仅需保持各浏览器间的视频播放控制同步,那么 KoalaSync 则是更简洁适用的方案。",
|
||||
"ALT_TELEPARTY_LIMITS_TITLE": "局限性说明",
|
||||
"ALT_TELEPARTY_LIMITS_BODY": "KoalaSync 并非万能,我们也坦诚其局限性。目前它仅支持桌面端浏览器,没有内置聊天功能,也没有移动端应用。<br><br>兼容性也取决于浏览器和视频播放器。虽然 KoalaSync 理论上支持几乎所有标准浏览器视频播放器,但网站随时可能更改其播放器、DRM(数字版权管理)机制或浏览器限制策略。<br><br>KoalaSync 与 Netflix、Disney+、Prime Video、YouTube、Teleparty、Emby、Jellyfin、Plex 或本文提及的任何其他品牌均无关联。提及这些名称仅为说明典型的使用场景。",
|
||||
"ALT_TELEPARTY_SUMMARY_TITLE": "总结",
|
||||
@@ -196,7 +203,7 @@
|
||||
"ALT_SCREEN_META_DESC": "针对远程观影之夜,从播放控制、视频质量、隐私保护、字幕支持及浏览器观看体验等方面,对 KoalaSync 与屏幕共享进行实用对比。",
|
||||
"ALT_SCREEN_INTRO": "屏幕共享确实可行,而且老实说,有时这就足够了。一人共享屏幕,其他人观看,搞定。<br><br>但在长时间观影或一起追剧时,它可能会让人感到烦恼。视频质量取决于共享者的上传带宽、CPU、浏览器,以及 Discord、Teamspeak、Zoom 或其他通话应用所采用的压缩算法。此外,实际上只有一个人能控制播放。",
|
||||
"ALT_SCREEN_WHEN_ENOUGH_TITLE": "何时使用屏幕共享就足够了",
|
||||
"ALT_SCREEN_WHEN_ENOUGH_BODY": "如果您追求最快的设置速度,屏幕共享是个不错的选择。如果只有一个人能访问该视频……\u201c或者,如果大家都能接受由一个人来控制播放、暂停和进度跳转,那这可能是最简单的方案。<br><br>此外,如果画质要求不高,大家不需要各自独立的字幕或音频设置,且分享者也不介意展示自己的浏览器窗口或屏幕,那么这种方式也很合理。",
|
||||
"ALT_SCREEN_WHEN_ENOUGH_BODY": "如果您追求最快的设置速度,屏幕共享是个不错的选择。如果只有一个人能访问该视频……“或者,如果大家都能接受由一个人来控制播放、暂停和进度跳转,那这可能是最简单的方案。<br><br>此外,如果画质要求不高,大家不需要各自独立的字幕或音频设置,且分享者也不介意展示自己的浏览器窗口或屏幕,那么这种方式也很合理。",
|
||||
"ALT_SCREEN_WHEN_ANNOYING_TITLE": "屏幕共享可能带来的不便",
|
||||
"ALT_SCREEN_WHEN_ANNOYING_BODY": "最大的弊端在于,并非每个人都在自己的播放器中观看。由一人流式传输屏幕画面,其他人只能观看该画面。<br><br>这意味着视频画质可能较差、音频经过压缩、播放存在延迟,且其他人缺乏控制权。字幕和音轨也完全取决于分享者的选择。<br><br>此外还涉及隐私问题。如果你切换窗口或标签页,其他人可能会短暂看到你的浏览器标签页、电子邮件、Reddit 页面、聊天记录或其他私密内容。虽然可以通过使用独立窗口来规避这一问题,但这仍是需要考虑的因素。",
|
||||
"ALT_SCREEN_WHY_CLEANER_TITLE": "为何 KoalaSync 体验更清爽",
|
||||
@@ -204,6 +211,10 @@
|
||||
"ALT_SCREEN_LIMITS_TITLE": "客观存在的局限性",
|
||||
"ALT_SCREEN_LIMITS_BODY": "KoalaSync 无法替代语音通话。如果您想在观看的同时进行交流,仍可使用 Discord、Teamspeak、Signal、WhatsApp 或您常用的任何通讯工具。<br><br>此外,每位参与者都需要在各自的设备上访问相应的视频或网页。KoalaSync 无法绕过订阅、登录验证、DRM(数字版权管理)、地域限制或平台规则。<br><br>该工具目前仅支持桌面端浏览器,不包含内置聊天或语音功能;其兼容性取决于具体的浏览器和视频播放器。",
|
||||
"ALT_SCREEN_SUMMARY_TITLE": "摘要",
|
||||
"ALT_SCREEN_SUMMARY_BODY": "如果您追求快速便捷,且不太在意画质、隐私或个性化控制,那么屏幕共享是最简单的选择。而当您希望每位参与者都在各自的浏览器中观看,并营造出一种真正\u201c共同观看\u201d的氛围时,KoalaSync 则是更理想的方案。",
|
||||
"ALT_TRY_KOALASYNC": "试用 KoalaSync"
|
||||
"ALT_SCREEN_SUMMARY_BODY": "如果您追求快速便捷,且不太在意画质、隐私或个性化控制,那么屏幕共享是最简单的选择。而当您希望每位参与者都在各自的浏览器中观看,并营造出一种真正“共同观看”的氛围时,KoalaSync 则是更理想的方案。",
|
||||
"ALT_TRY_KOALASYNC": "试用 KoalaSync",
|
||||
"MOCK_HOST_CONTROL_LABEL": "主持人控制",
|
||||
"MOCK_HOST_CONTROL_TOGGLE": "只有我可以控制播放",
|
||||
"LABEL_SELECT_VIDEO": "选择视频",
|
||||
"OPTION_SELECT_TAB": "-- 选择一个选项卡 --"
|
||||
}
|
||||
|
||||
+1300
-70
File diff suppressed because it is too large
Load Diff
+282
-107
@@ -201,6 +201,7 @@
|
||||
</noscript>
|
||||
</head>
|
||||
<body>
|
||||
<div class="scroll-progress-bar"></div>
|
||||
|
||||
<a class="skip-link" href="#main-content">Skip to main content</a>
|
||||
|
||||
@@ -213,7 +214,7 @@
|
||||
<nav>
|
||||
<div class="container nav-content">
|
||||
<div class="logo-area">
|
||||
<img src="{{ASSET_PATH}}assets/NewLogoIcon_128.webp" srcset="{{ASSET_PATH}}assets/NewLogoIcon_64.webp 64w, {{ASSET_PATH}}assets/NewLogoIcon_128.webp 128w, {{ASSET_PATH}}assets/NewLogoIcon.webp 256w" sizes="64px" alt="KoalaSync Logo" width="64" height="64">
|
||||
<img class="nav-logo-img" src="{{ASSET_PATH}}assets/NewLogoIcon_128.webp" srcset="{{ASSET_PATH}}assets/NewLogoIcon_64.webp 64w, {{ASSET_PATH}}assets/NewLogoIcon_128.webp 128w, {{ASSET_PATH}}assets/NewLogoIcon.webp 256w" sizes="64px" alt="KoalaSync Logo" width="64" height="64">
|
||||
<span>KoalaSync</span>
|
||||
<div id="nav-extension-status" class="nav-ext-status" style="display: none;">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" width="12" height="12"><polyline points="20 6 9 17 4 12"></polyline></svg>
|
||||
@@ -276,16 +277,12 @@
|
||||
<header class="hero" id="main-content">
|
||||
<div class="container hero-grid">
|
||||
<div class="hero-text">
|
||||
<a href="https://github.com/Shik3i/KoalaSync/blob/main/docs/CHANGELOG.md" target="_blank" rel="noopener" class="version-badge" data-reveal style="text-decoration: none; display: inline-block; transition: transform 0.2s, box-shadow 0.2s;" title="View Changelog">
|
||||
<span class="version-text-en" lang="en">v2.2.1 OUT NOW</span>
|
||||
<span class="version-text-de" lang="de">v2.2.1 JETZT VERFÜGBAR</span>
|
||||
</a>
|
||||
<h1 data-reveal>{{HERO_TITLE}}</h1>
|
||||
<p class="hero-subtitle" data-reveal>{{HERO_SUBTITLE}}</p>
|
||||
<div class="hero-mascot-container" data-reveal>
|
||||
<h1>{{HERO_TITLE}}</h1>
|
||||
<p class="hero-subtitle">{{HERO_SUBTITLE}}</p>
|
||||
<div class="hero-mascot-container">
|
||||
<img src="{{ASSET_PATH}}assets/LookDownKoala-1x.webp" srcset="{{ASSET_PATH}}assets/LookDownKoala-1x.webp 90w, {{ASSET_PATH}}assets/LookDownKoala.webp 205w" sizes="90px" alt="{{HERO_MASCOT_ALT}}" class="hero-lookdown-mascot" width="90" height="132" loading="eager" fetchpriority="high" decoding="async">
|
||||
</div>
|
||||
<div class="cta-group" data-reveal>
|
||||
<div class="cta-group">
|
||||
<a href="https://chromewebstore.google.com/detail/koalasync/obbnmkmlaaddodakcbdljknjpagklifc" class="btn btn-primary">
|
||||
<img src="{{ASSET_PATH}}assets/chrome.svg" alt="Chrome" width="20" height="20">
|
||||
<span>{{ADD_TO_CHROME}}</span>
|
||||
@@ -299,10 +296,133 @@
|
||||
GitHub Releases
|
||||
</a>
|
||||
</div>
|
||||
<a href="https://github.com/Shik3i/KoalaSync/blob/main/docs/CHANGELOG.md" target="_blank" rel="noopener" class="version-badge version-badge-below" style="text-decoration: none; display: inline-block; transition: transform 0.2s, box-shadow 0.2s;" title="View Changelog">
|
||||
<span class="version-text-en" lang="en">v2.2.1 OUT NOW</span>
|
||||
<span class="version-text-de" lang="de">v2.2.1 JETZT VERFÜGBAR</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<!-- Interactive CSS Extension Mockup -->
|
||||
<!-- Interactive Live Demo: two synced video tabs + the extension popup -->
|
||||
<div class="hero-mockup-wrapper" data-reveal>
|
||||
<div class="hero-demo-scene popup-open connected" id="hero-demo">
|
||||
<button class="demo-sync-chip" id="demo-sync-chip" type="button" title="Live sync status of the two demo tabs">
|
||||
<span class="demo-chip-dot" aria-hidden="true"></span>
|
||||
<span class="demo-chip-label-sync">{{DEMO_SYNC}}</span>
|
||||
<span class="demo-chip-event"></span>
|
||||
</button>
|
||||
|
||||
<div class="demo-tab-card demo-tab-a" id="demo-tab-a" role="button" tabindex="0" aria-pressed="false" aria-label="Press play or pause as 🐱 ChillCat — KoalaSync mirrors it to the other tab" title="Press play/pause here — KoalaSync mirrors it to the other tab">
|
||||
<div class="demo-tab-titlebar">
|
||||
<span class="demo-tab-dots" aria-hidden="true"><i></i><i></i><i></i></span>
|
||||
<span class="demo-tab-title"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="11" height="11" aria-hidden="true"><rect x="2" y="3" width="20" height="14" rx="2"/><path d="M8 21h8M12 17v4"/></svg> <span class="demo-title-text-ep1">Stranger Things - S4E1</span></span>
|
||||
<span class="demo-tab-user demo-user-a">🐱 ChillCat</span>
|
||||
<button class="demo-ext-launcher" id="demo-launcher" type="button" aria-expanded="true" title="Open or close the KoalaSync popup">
|
||||
<img src="{{ASSET_PATH}}assets/NewLogoIcon.webp" alt="" width="16" height="16" loading="eager" decoding="async">
|
||||
</button>
|
||||
</div>
|
||||
<div class="demo-video">
|
||||
<div class="demo-video-art" aria-hidden="true"></div>
|
||||
<div class="demo-seek-sweep" aria-hidden="true"></div>
|
||||
<svg class="demo-film" viewBox="0 0 160 90" preserveAspectRatio="xMidYMid slice" aria-hidden="true" xmlns="http://www.w3.org/2000/svg">
|
||||
<g class="film-stars" fill="#e2e8f0">
|
||||
<circle class="film-star" cx="18" cy="14" r="0.8"/>
|
||||
<circle class="film-star" cx="42" cy="24" r="0.6"/>
|
||||
<circle class="film-star" cx="64" cy="10" r="0.9"/>
|
||||
<circle class="film-star" cx="90" cy="28" r="0.6"/>
|
||||
<circle class="film-star" cx="108" cy="16" r="0.5"/>
|
||||
<circle class="film-star" cx="134" cy="22" r="0.8"/>
|
||||
<circle class="film-star" cx="150" cy="12" r="0.5"/>
|
||||
</g>
|
||||
<circle class="film-moon" cx="122" cy="26" r="7.5" fill="#f1f5f9" opacity="0.92"/>
|
||||
<path class="film-mtn-scroll" d="M0,60 L30,45 L70,55 L110,40 L160,60 L190,45 L230,55 L270,40 L320,60 L320,92 L0,92 Z" fill="rgba(30,27,75,0.7)"/>
|
||||
<g class="film-mid-scroll">
|
||||
<polygon points="20,76 26,60 32,76" fill="rgba(49,46,129,0.55)"/>
|
||||
<polygon points="55,78 63,52 71,78" fill="rgba(49,46,129,0.55)"/>
|
||||
<polygon points="95,76 101,62 107,76" fill="rgba(49,46,129,0.55)"/>
|
||||
<polygon points="135,77 144,55 153,77" fill="rgba(49,46,129,0.55)"/>
|
||||
<polygon points="180,76 186,60 192,76" fill="rgba(49,46,129,0.55)"/>
|
||||
<polygon points="215,78 223,52 231,78" fill="rgba(49,46,129,0.55)"/>
|
||||
<polygon points="255,76 261,62 267,76" fill="rgba(49,46,129,0.55)"/>
|
||||
<polygon points="295,77 304,55 313,77" fill="rgba(49,46,129,0.55)"/>
|
||||
<path d="M0,76 Q40,73 80,76 T160,76 Q200,73 240,76 T320,76 L320,92 L0,92 Z" fill="rgba(49,46,129,0.55)"/>
|
||||
</g>
|
||||
<g class="film-fore-scroll">
|
||||
<polygon points="40,84 52,48 64,84" fill="#090d16"/>
|
||||
<polygon points="115,84 128,42 141,84" fill="#090d16"/>
|
||||
<polygon points="200,84 212,48 224,84" fill="#090d16"/>
|
||||
<polygon points="275,84 288,42 301,84" fill="#090d16"/>
|
||||
<path d="M0,84 Q80,82 160,84 T320,84 L320,92 L0,92 Z" fill="#090d16"/>
|
||||
</g>
|
||||
<circle class="film-bounce-ball" cx="80" cy="46" r="3.5" fill="#fde047"/>
|
||||
</svg>
|
||||
<div class="demo-play-overlay" aria-hidden="true">
|
||||
<span class="demo-icon-wrap">
|
||||
<svg class="icon-play" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" width="18" height="18"><path d="M8 5v14l11-7z"/></svg>
|
||||
<svg class="icon-pause" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" width="18" height="18"><path d="M6 5h4v14H6zM14 5h4v14h-4z"/></svg>
|
||||
</span>
|
||||
</div>
|
||||
<div class="demo-video-controls">
|
||||
<span class="demo-time">12:34</span>
|
||||
<div class="demo-progress" title="Seek — KoalaSync jumps the other tab to the same spot"><div class="demo-progress-fill"></div></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="demo-tab-card demo-tab-b" id="demo-tab-b" role="button" tabindex="0" aria-pressed="false" aria-label="Press play or pause as 🐶 HappyDog — KoalaSync mirrors it to the other tab" title="Press play/pause here — KoalaSync mirrors it to the other tab">
|
||||
<div class="demo-tab-titlebar">
|
||||
<span class="demo-tab-dots" aria-hidden="true"><i></i><i></i><i></i></span>
|
||||
<span class="demo-tab-title"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="11" height="11" aria-hidden="true"><rect x="2" y="3" width="20" height="14" rx="2"/><path d="M8 21h8M12 17v4"/></svg> <span class="demo-title-text-ep1">Stranger Things - S4E1</span></span>
|
||||
<span class="demo-tab-user demo-user-b">🐶 HappyDog</span>
|
||||
</div>
|
||||
<div class="demo-video">
|
||||
<div class="demo-video-art" aria-hidden="true"></div>
|
||||
<div class="demo-seek-sweep" aria-hidden="true"></div>
|
||||
<svg class="demo-film" viewBox="0 0 160 90" preserveAspectRatio="xMidYMid slice" aria-hidden="true" xmlns="http://www.w3.org/2000/svg">
|
||||
<g class="film-stars" fill="#e2e8f0">
|
||||
<circle class="film-star" cx="18" cy="14" r="0.8"/>
|
||||
<circle class="film-star" cx="42" cy="24" r="0.6"/>
|
||||
<circle class="film-star" cx="64" cy="10" r="0.9"/>
|
||||
<circle class="film-star" cx="90" cy="28" r="0.6"/>
|
||||
<circle class="film-star" cx="108" cy="16" r="0.5"/>
|
||||
<circle class="film-star" cx="134" cy="22" r="0.8"/>
|
||||
<circle class="film-star" cx="150" cy="12" r="0.5"/>
|
||||
</g>
|
||||
<circle class="film-moon" cx="122" cy="26" r="7.5" fill="#f1f5f9" opacity="0.92"/>
|
||||
<path class="film-mtn-scroll" d="M0,60 L30,45 L70,55 L110,40 L160,60 L190,45 L230,55 L270,40 L320,60 L320,92 L0,92 Z" fill="rgba(30,27,75,0.7)"/>
|
||||
<g class="film-mid-scroll">
|
||||
<polygon points="20,76 26,60 32,76" fill="rgba(49,46,129,0.55)"/>
|
||||
<polygon points="55,78 63,52 71,78" fill="rgba(49,46,129,0.55)"/>
|
||||
<polygon points="95,76 101,62 107,76" fill="rgba(49,46,129,0.55)"/>
|
||||
<polygon points="135,77 144,55 153,77" fill="rgba(49,46,129,0.55)"/>
|
||||
<polygon points="180,76 186,60 192,76" fill="rgba(49,46,129,0.55)"/>
|
||||
<polygon points="215,78 223,52 231,78" fill="rgba(49,46,129,0.55)"/>
|
||||
<polygon points="255,76 261,62 267,76" fill="rgba(49,46,129,0.55)"/>
|
||||
<polygon points="295,77 304,55 313,77" fill="rgba(49,46,129,0.55)"/>
|
||||
<path d="M0,76 Q40,73 80,76 T160,76 Q200,73 240,76 T320,76 L320,92 L0,92 Z" fill="rgba(49,46,129,0.55)"/>
|
||||
</g>
|
||||
<g class="film-fore-scroll">
|
||||
<polygon points="40,84 52,48 64,84" fill="#090d16"/>
|
||||
<polygon points="115,84 128,42 141,84" fill="#090d16"/>
|
||||
<polygon points="200,84 212,48 224,84" fill="#090d16"/>
|
||||
<polygon points="275,84 288,42 301,84" fill="#090d16"/>
|
||||
<path d="M0,84 Q80,82 160,84 T320,84 L320,92 L0,92 Z" fill="#090d16"/>
|
||||
</g>
|
||||
<circle class="film-bounce-ball" cx="80" cy="46" r="3.5" fill="#fde047"/>
|
||||
</svg>
|
||||
<div class="demo-play-overlay" aria-hidden="true">
|
||||
<span class="demo-icon-wrap">
|
||||
<svg class="icon-play" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" width="18" height="18"><path d="M8 5v14l11-7z"/></svg>
|
||||
<svg class="icon-pause" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" width="18" height="18"><path d="M6 5h4v14H6zM14 5h4v14h-4z"/></svg>
|
||||
</span>
|
||||
</div>
|
||||
<div class="demo-video-controls">
|
||||
<span class="demo-time">12:34</span>
|
||||
<div class="demo-progress" title="Seek — KoalaSync jumps the other tab to the same spot"><div class="demo-progress-fill"></div></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="demo-tab-toast" id="demo-toast-b" data-joined="{{DEMO_JOINED}}" data-selected="{{DEMO_TAB_SELECTED}}" aria-hidden="true"></div>
|
||||
</div>
|
||||
|
||||
<div class="extension-mockup">
|
||||
<div class="mock-header-row">
|
||||
<div class="mock-header-title"><img src="{{ASSET_PATH}}assets/NewLogoIcon.webp" alt="KoalaSync Logo">KoalaSync</div>
|
||||
@@ -320,6 +440,13 @@
|
||||
<div class="mock-body">
|
||||
<!-- ROOM TAB -->
|
||||
<div id="mock-room" class="mock-screen active">
|
||||
<!-- Pre-room state, shown only during the scripted walkthrough -->
|
||||
<div id="demo-room-empty" class="demo-room-empty">
|
||||
<img src="{{ASSET_PATH}}assets/NewLogoIcon.webp" alt="" width="42" height="42" loading="eager" decoding="async">
|
||||
<div class="demo-room-empty-text">{{DEMO_NO_ROOM}}</div>
|
||||
<button id="demo-create-room" class="demo-create-room-btn" type="button">{{DEMO_CREATE_ROOM}}</button>
|
||||
</div>
|
||||
<div id="demo-room-joined">
|
||||
<div class="mock-joined-room" style="display: flex; justify-content: space-between; align-items: center; border-left: 4px solid var(--accent); padding: 8px 10px; background: var(--card); border-radius: 8px; margin-bottom: 12px;" title="The room you are currently connected to">
|
||||
<div style="display: flex; flex-direction: column;">
|
||||
<span style="font-size: 0.6rem; text-transform: uppercase; color: var(--text-muted); font-weight: 700; line-height: 1;">{{MOCK_01}}</span>
|
||||
@@ -331,7 +458,7 @@
|
||||
<div class="mock-label" title="Share this link with friends so they can join">{{MOCK_03}}</div>
|
||||
<div class="mock-invite-box">
|
||||
<input type="text" class="mock-input" value="https://sync.koalastuff.net/join#join:brave-eagle-80:pass" readonly style="flex: 1;" aria-label="Invite link">
|
||||
<button class="mock-btn" style="width: 40px; padding: 0.45rem 0; flex-shrink: 0; background: #334155;" title="Copy Invite Link"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="14" height="14" aria-hidden="true"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg></button>
|
||||
<button class="mock-btn" id="demo-invite-copy" style="width: 40px; padding: 0.45rem 0; flex-shrink: 0; background: #334155;" title="Copy Invite Link"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="14" height="14" aria-hidden="true"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg></button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mock-card" style="margin-bottom: 12px;">
|
||||
@@ -339,33 +466,35 @@
|
||||
<div class="mock-peer-list">
|
||||
<div class="mock-peer-item">
|
||||
<div class="mock-peer-header">
|
||||
<span class="mock-peer-name">CoolUsername</span>
|
||||
<span class="mock-peer-name">🐱 ChillCat</span>
|
||||
<span class="mock-peer-meta">{{MOCK_05}}</span>
|
||||
</div>
|
||||
<div class="mock-peer-tab"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="12" height="12" aria-hidden="true"><rect x="2" y="2" width="20" height="20" rx="2.18" ry="2.18"/><line x1="7" y1="2" x2="7" y2="22"/><line x1="17" y1="2" x2="17" y2="22"/><line x1="2" y1="12" x2="22" y2="12"/><line x1="2" y1="7" x2="7" y2="7"/><line x1="2" y1="17" x2="7" y2="17"/><line x1="17" y1="17" x2="22" y2="17"/><line x1="17" y1="7" x2="22" y2="7"/></svg> Stranger Things - S4E1</div>
|
||||
<div class="mock-peer-tab"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="12" height="12" aria-hidden="true"><rect x="2" y="2" width="20" height="20" rx="2.18" ry="2.18"/><line x1="7" y1="2" x2="7" y2="22"/><line x1="17" y1="2" x2="17" y2="22"/><line x1="2" y1="12" x2="22" y2="12"/><line x1="2" y1="7" x2="7" y2="7"/><line x1="2" y1="17" x2="7" y2="17"/><line x1="17" y1="17" x2="22" y2="17"/><line x1="17" y1="7" x2="22" y2="7"/></svg> <span class="demo-title-text-ep1">Stranger Things - S4E1</span></div>
|
||||
<div class="mock-peer-status"><span style="color:#22c55e;">●</span> 0:55 • {{MOCK_06}}</div>
|
||||
</div>
|
||||
<div class="mock-peer-item">
|
||||
<div class="mock-peer-item demo-peer-b">
|
||||
<div class="mock-peer-header">
|
||||
<span class="mock-peer-name">KoalaPC</span>
|
||||
<span class="mock-peer-name">🐶 HappyDog</span>
|
||||
<span class="mock-peer-meta">{{MOCK_07}}</span>
|
||||
</div>
|
||||
<div class="mock-peer-tab"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="12" height="12" aria-hidden="true"><rect x="2" y="2" width="20" height="20" rx="2.18" ry="2.18"/><line x1="7" y1="2" x2="7" y2="22"/><line x1="17" y1="2" x2="17" y2="22"/><line x1="2" y1="12" x2="22" y2="12"/><line x1="2" y1="7" x2="7" y2="7"/><line x1="2" y1="17" x2="7" y2="17"/><line x1="17" y1="17" x2="22" y2="17"/><line x1="17" y1="7" x2="22" y2="7"/></svg> Stranger Things - S4E1</div>
|
||||
<div class="mock-peer-tab"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="12" height="12" aria-hidden="true"><rect x="2" y="2" width="20" height="20" rx="2.18" ry="2.18"/><line x1="7" y1="2" x2="7" y2="22"/><line x1="17" y1="2" x2="17" y2="22"/><line x1="2" y1="12" x2="22" y2="12"/><line x1="2" y1="7" x2="7" y2="7"/><line x1="2" y1="17" x2="7" y2="17"/><line x1="17" y1="17" x2="22" y2="17"/><line x1="17" y1="7" x2="22" y2="7"/></svg> <span class="demo-title-text-ep1">Stranger Things - S4E1</span></div>
|
||||
<div class="mock-peer-status"><span style="color:#22c55e;">●</span> 0:55 • {{MOCK_06}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<button class="mock-btn" style="background:#ef4444; width:100%; border: none; padding: 10px; border-radius: 8px; color: white; font-weight: 700; cursor: pointer; border: 1px solid #ef4444;">{{MOCK_08}}</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- SYNC TAB -->
|
||||
<div id="mock-sync" class="mock-screen">
|
||||
<div class="mock-form-group" style="margin-bottom: 12px;">
|
||||
<label class="mock-section-label" title="Choose the browser tab containing the video to sync">
|
||||
<label class="mock-section-label" for="demo-video-select" title="Choose the browser tab containing the video to sync">
|
||||
{{MOCK_09}}
|
||||
</label>
|
||||
<select class="mock-input" style="width: 100%; box-sizing: border-box; background: var(--card); border: 1px solid #334155; color: white; padding: 8px; border-radius: 8px; font-family: inherit; font-size: 0.75rem; outline: none; cursor: default;">
|
||||
<option><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="12" height="12" aria-hidden="true"><rect x="2" y="2" width="20" height="20" rx="2.18" ry="2.18"/><line x1="7" y1="2" x2="7" y2="22"/><line x1="17" y1="2" x2="17" y2="22"/><line x1="2" y1="12" x2="22" y2="12"/><line x1="2" y1="7" x2="7" y2="7"/><line x1="2" y1="17" x2="7" y2="17"/><line x1="17" y1="17" x2="22" y2="17"/><line x1="17" y1="7" x2="22" y2="7"/></svg> Stranger Things - S4E1</option>
|
||||
<select class="mock-input" id="demo-video-select" style="width: 100%; box-sizing: border-box; background: var(--card); border: 1px solid #334155; color: white; padding: 8px; border-radius: 8px; font-family: inherit; font-size: 0.75rem; outline: none; cursor: default;">
|
||||
<option value="" class="demo-select-placeholder" selected hidden>{{DEMO_SELECT_PLACEHOLDER}}</option>
|
||||
<option><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="12" height="12" aria-hidden="true"><rect x="2" y="2" width="20" height="20" rx="2.18" ry="2.18"/><line x1="7" y1="2" x2="7" y2="22"/><line x1="17" y1="2" x2="17" y2="22"/><line x1="2" y1="12" x2="22" y2="12"/><line x1="2" y1="7" x2="7" y2="7"/><line x1="2" y1="17" x2="7" y2="17"/><line x1="17" y1="17" x2="22" y2="17"/><line x1="17" y1="7" x2="22" y2="7"/></svg> <span class="demo-title-text-ep1">Stranger Things - S4E1</span></option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
@@ -379,12 +508,12 @@
|
||||
</button>
|
||||
</div>
|
||||
<div style="display: flex; gap: 8px; margin-bottom: 12px;">
|
||||
<button class="mock-btn mock-btn-play" style="flex: 1; background: #22c55e; color: white; padding: 8px; border-radius: 8px; font-weight: 700; border: none; cursor: pointer;" title="Send a Play command to everyone">{{MOCK_11}}</button>
|
||||
<button class="mock-btn mock-btn-pause" style="flex: 1; background: #ef4444; color: white; padding: 8px; border-radius: 8px; font-weight: 700; border: none; cursor: pointer;" title="Send a Pause command to everyone">{{MOCK_12}}</button>
|
||||
<button class="mock-btn mock-btn-play" id="demo-play-btn" style="flex: 1; background: #22c55e; color: white; padding: 8px; border-radius: 8px; font-weight: 700; border: none; cursor: pointer;" title="Send a Play command to everyone">{{MOCK_11}}</button>
|
||||
<button class="mock-btn mock-btn-pause" id="demo-pause-btn" style="flex: 1; background: #ef4444; color: white; padding: 8px; border-radius: 8px; font-weight: 700; border: none; cursor: pointer;" title="Send a Pause command to everyone">{{MOCK_12}}</button>
|
||||
</div>
|
||||
|
||||
<div style="display: flex; gap: 8px; margin-bottom: 15px; align-items: stretch;">
|
||||
<button class="mock-btn" style="background: linear-gradient(135deg, #6366f1, #a855f7); flex: 1; color: white; border: none; font-weight: 700; border-radius: 8px; padding: 8px; cursor: pointer;" title="Force all users to sync up">
|
||||
<button class="mock-btn" id="demo-force-sync" style="background: linear-gradient(135deg, #6366f1, #a855f7); flex: 1; color: white; border: none; font-weight: 700; border-radius: 8px; padding: 8px; cursor: pointer;" title="Force all users to sync up">
|
||||
{{MOCK_13}}
|
||||
</button>
|
||||
<div class="mock-input" style="flex: 1; background: var(--card); border: 1px solid #334155; color: white; padding: 6px; border-radius: 8px; font-size: 0.75rem; display: flex; align-items: center; justify-content: space-between;" title="Choose sync target">
|
||||
@@ -401,12 +530,12 @@
|
||||
<div class="mock-card" style="margin-bottom: 15px; display: flex; flex-direction: column; gap: 6px;">
|
||||
<div style="display: flex; justify-content: space-between; align-items: baseline;">
|
||||
<span style="font-weight: 700; color: #ef4444; font-size: 11px;">PAUSE</span>
|
||||
<span style="font-size: 9px; color: var(--text-muted);">CoolUsername @ 12:44:32</span>
|
||||
<span style="font-size: 9px; color: var(--text-muted);">🐱 ChillCat @ 12:44:32</span>
|
||||
</div>
|
||||
<div style="display: grid; grid-template-columns: repeat(auto-fill, minmax(36px, 1fr)); gap: 5px; margin-top: 4px;">
|
||||
<div style="display: flex; flex-direction: column; align-items: center;">
|
||||
<div style="width: 18px; height: 18px; border-radius: 50%; background: var(--success); color: white; display: flex; align-items: center; justify-content: center; font-size: 9px; font-weight: bold; margin-bottom: 1px;"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" width="10" height="10" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></div>
|
||||
<span style="font-size: 7px; color: var(--text-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 36px;">🐨 KoalaPC</span>
|
||||
<span style="font-size: 7px; color: var(--text-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 36px;">🐶 HappyDog</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -418,7 +547,7 @@
|
||||
<span style="font-weight: 700; color: #fbbf24; font-size: 0.65rem; text-transform: uppercase; letter-spacing: 0.05em;">Episode Lobby</span>
|
||||
</div>
|
||||
<div style="font-size: 0.7rem; color: white; margin-bottom: 4px; font-weight: 600;">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="12" height="12" aria-hidden="true"><rect x="2" y="2" width="20" height="20" rx="2.18" ry="2.18"/><line x1="7" y1="2" x2="7" y2="22"/><line x1="17" y1="2" x2="17" y2="22"/><line x1="2" y1="12" x2="22" y2="12"/><line x1="2" y1="7" x2="7" y2="7"/><line x1="2" y1="17" x2="7" y2="17"/><line x1="17" y1="17" x2="22" y2="17"/><line x1="17" y1="7" x2="22" y2="7"/></svg> Stranger Things - S4E2
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="12" height="12" aria-hidden="true"><rect x="2" y="2" width="20" height="20" rx="2.18" ry="2.18"/><line x1="7" y1="2" x2="7" y2="22"/><line x1="17" y1="2" x2="17" y2="22"/><line x1="2" y1="12" x2="22" y2="12"/><line x1="2" y1="7" x2="7" y2="7"/><line x1="2" y1="17" x2="7" y2="17"/><line x1="17" y1="17" x2="22" y2="17"/><line x1="17" y1="7" x2="22" y2="7"/></svg> <span class="demo-title-text-ep2">Stranger Things - S4E2</span>
|
||||
</div>
|
||||
<div style="font-size: 0.65rem; color: var(--text-muted); margin-bottom: 6px;">
|
||||
{{MOCK_16}}
|
||||
@@ -435,18 +564,18 @@
|
||||
<div class="mock-peer-list">
|
||||
<div class="mock-peer-item">
|
||||
<div class="mock-peer-header">
|
||||
<span class="mock-peer-name">CoolUsername</span>
|
||||
<span class="mock-peer-name">🐱 ChillCat</span>
|
||||
<span class="mock-peer-meta">{{MOCK_05}}</span>
|
||||
</div>
|
||||
<div class="mock-peer-tab"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="12" height="12" aria-hidden="true"><rect x="2" y="2" width="20" height="20" rx="2.18" ry="2.18"/><line x1="7" y1="2" x2="7" y2="22"/><line x1="17" y1="2" x2="17" y2="22"/><line x1="2" y1="12" x2="22" y2="12"/><line x1="2" y1="7" x2="7" y2="7"/><line x1="2" y1="17" x2="7" y2="17"/><line x1="17" y1="17" x2="22" y2="17"/><line x1="17" y1="7" x2="22" y2="7"/></svg> Stranger Things - S4E1</div>
|
||||
<div class="mock-peer-tab"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="12" height="12" aria-hidden="true"><rect x="2" y="2" width="20" height="20" rx="2.18" ry="2.18"/><line x1="7" y1="2" x2="7" y2="22"/><line x1="17" y1="2" x2="17" y2="22"/><line x1="2" y1="12" x2="22" y2="12"/><line x1="2" y1="7" x2="7" y2="7"/><line x1="2" y1="17" x2="7" y2="17"/><line x1="17" y1="17" x2="22" y2="17"/><line x1="17" y1="7" x2="22" y2="7"/></svg> <span class="demo-title-text-ep1">Stranger Things - S4E1</span></div>
|
||||
<div class="mock-peer-status"><span style="color:#22c55e;">●</span> 0:55 • {{MOCK_06}}</div>
|
||||
</div>
|
||||
<div class="mock-peer-item">
|
||||
<div class="mock-peer-item demo-peer-b">
|
||||
<div class="mock-peer-header">
|
||||
<span class="mock-peer-name">KoalaPC</span>
|
||||
<span class="mock-peer-name">🐶 HappyDog</span>
|
||||
<span class="mock-peer-meta">{{MOCK_07}}</span>
|
||||
</div>
|
||||
<div class="mock-peer-tab"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="12" height="12" aria-hidden="true"><rect x="2" y="2" width="20" height="20" rx="2.18" ry="2.18"/><line x1="7" y1="2" x2="7" y2="22"/><line x1="17" y1="2" x2="17" y2="22"/><line x1="2" y1="12" x2="22" y2="12"/><line x1="2" y1="7" x2="7" y2="7"/><line x1="2" y1="17" x2="7" y2="17"/><line x1="17" y1="17" x2="22" y2="17"/><line x1="17" y1="7" x2="22" y2="7"/></svg> Stranger Things - S4E1</div>
|
||||
<div class="mock-peer-tab"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="12" height="12" aria-hidden="true"><rect x="2" y="2" width="20" height="20" rx="2.18" ry="2.18"/><line x1="7" y1="2" x2="7" y2="22"/><line x1="17" y1="2" x2="17" y2="22"/><line x1="2" y1="12" x2="22" y2="12"/><line x1="2" y1="7" x2="7" y2="7"/><line x1="2" y1="17" x2="7" y2="17"/><line x1="17" y1="17" x2="22" y2="17"/><line x1="17" y1="7" x2="22" y2="7"/></svg> <span class="demo-title-text-ep1">Stranger Things - S4E1</span></div>
|
||||
<div class="mock-peer-status"><span style="color:#22c55e;">●</span> 0:55 • {{MOCK_06}}</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -459,7 +588,7 @@
|
||||
<label style="margin: 0; font-size: 11px; text-transform: uppercase; color: var(--text-muted); font-weight: 700;" title="Username helps others identify you.">
|
||||
{{MOCK_18}}
|
||||
</label>
|
||||
<input type="text" class="mock-input" value="CoolUsername" readonly style="width: 110px; padding: 4px; text-align: right; background: transparent; border: none; color: var(--accent); font-weight: 700;">
|
||||
<input type="text" class="mock-input" value="🐱 ChillCat" readonly style="width: 110px; padding: 4px; text-align: right; background: transparent; border: none; color: var(--accent); font-weight: 700;">
|
||||
</div>
|
||||
|
||||
<div style="display: flex; align-items: center; justify-content: space-between; background: var(--card); padding: 8px 10px; border-radius: 8px; margin-bottom: 8px; border: 1px solid #334155;">
|
||||
@@ -545,11 +674,11 @@
|
||||
</label>
|
||||
<div class="mock-card" style="font-size: 0.65rem; color: var(--text-muted); line-height: 1.4; margin-bottom: 12px; max-height: 100px; overflow-y: auto; display: flex; flex-direction: column; gap: 4px;">
|
||||
<div style="display: flex; justify-content: space-between; border-bottom: 1px solid #334155; padding-bottom: 4px;">
|
||||
<span>CoolUsername: PAUSE</span>
|
||||
<span>🐱 ChillCat: PAUSE</span>
|
||||
<span style="opacity: 0.5;">0:55</span>
|
||||
</div>
|
||||
<div style="display: flex; justify-content: space-between; padding-top: 2px;">
|
||||
<span>KoalaPC: PLAY</span>
|
||||
<span>🐶 HappyDog: PLAY</span>
|
||||
<span style="opacity: 0.5;">0:00</span>
|
||||
</div>
|
||||
</div>
|
||||
@@ -576,6 +705,16 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="demo-invite-fly" id="demo-invite-fly" aria-hidden="true">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" width="11" height="11" aria-hidden="true"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg>
|
||||
sync.koalastuff.net/join…
|
||||
</div>
|
||||
<div class="demo-cursor" id="demo-cursor" aria-hidden="true">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M5 2l13 11.5-6 .7 3.4 6.3-2.6 1.4-3.4-6.4L5 19.5z" fill="#f8fafc" stroke="#0f172a" stroke-width="1.4" stroke-linejoin="round"/></svg>
|
||||
</div>
|
||||
</div>
|
||||
<p class="demo-hint" id="demo-hint">{{DEMO_HINT}}</p>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
@@ -675,7 +814,19 @@
|
||||
</span>
|
||||
<span>{{FEATURE_1_TITLE}}</span>
|
||||
</h3>
|
||||
<p>{{FEATURE_1_DESC}}</p>
|
||||
<div class="bento-content-wrap">
|
||||
<p>{{FEATURE_1_DESC}}</p>
|
||||
<div class="bento-host-control-mockup">
|
||||
<div class="bento-mockup-header">{{MOCK_HOST_CONTROL_LABEL}}</div>
|
||||
<div class="bento-mockup-row">
|
||||
<span>{{MOCK_HOST_CONTROL_TOGGLE}}</span>
|
||||
<label class="bento-switch-wrap">
|
||||
<input type="checkbox" checked disabled>
|
||||
<span class="bento-switch-slider"></span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Card 2: Endless Binge-Watching (Bento Standard) -->
|
||||
@@ -897,73 +1048,6 @@
|
||||
<p>{{STEP_1_DESC}}</p>
|
||||
</div>
|
||||
<!-- Custom Step 1 Illustration -->
|
||||
<div class="step-illustration-1" data-reveal>
|
||||
<div class="illus-browser-container">
|
||||
<div class="illus-browser-header">
|
||||
<div class="illus-browser-dots">
|
||||
<span class="illus-browser-dot"></span>
|
||||
<span class="illus-browser-dot"></span>
|
||||
<span class="illus-browser-dot"></span>
|
||||
</div>
|
||||
<div class="illus-browser-address-bar">
|
||||
<span class="url-protocol">https://</span>sync.koalastuff.net
|
||||
</div>
|
||||
<div class="illus-browser-toolbar">
|
||||
<div class="illus-extension-btn active">
|
||||
<img src="{{ASSET_PATH}}assets/NewLogoIcon.webp" alt="KoalaSync Extension" width="14" height="14">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="illus-browser-content">
|
||||
<div class="illus-store-card">
|
||||
<div class="illus-store-card-header">
|
||||
<img src="{{ASSET_PATH}}assets/NewLogoIcon.webp" alt="KoalaSync Logo" class="illus-large-logo" width="30" height="30">
|
||||
<div class="illus-store-info">
|
||||
<div class="illus-store-title">KoalaSync</div>
|
||||
<div class="illus-store-desc">
|
||||
<span>{{STEP_1_ILLUS_DESC}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="illus-store-buttons">
|
||||
<div class="illus-store-btn chrome">
|
||||
<img src="{{ASSET_PATH}}assets/chrome.svg" alt="Chrome Logo" width="12" height="12">
|
||||
<span>{{STEP_1_ILLUS_DL_CHROME}}</span>
|
||||
</div>
|
||||
<div class="illus-store-btn firefox">
|
||||
<img src="{{ASSET_PATH}}assets/firefox.svg" alt="Firefox Logo" width="12" height="12">
|
||||
<span>{{STEP_1_ILLUS_DL_FIREFOX}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Floating Extension Success Popup -->
|
||||
<div class="illus-extension-popup">
|
||||
<div class="popup-title">
|
||||
<img src="{{ASSET_PATH}}assets/NewLogoIcon.webp" alt="KoalaSync Logo" width="12" height="12">
|
||||
<span>KoalaSync</span>
|
||||
</div>
|
||||
<div class="popup-status">
|
||||
<div class="status-badge-success">
|
||||
<span class="status-check"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" width="12" height="12" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span>
|
||||
<span>{{STEP_1_ILLUS_ACTIVE}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="popup-quick-start">
|
||||
<span>{{STEP_1_ILLUS_READY}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="step">
|
||||
<div class="step-text" data-reveal>
|
||||
<div class="step-num" aria-hidden="true">02</div>
|
||||
<h3><span>{{STEP_2_TITLE}}</span></h3>
|
||||
<p>{{STEP_2_DESC}}</p>
|
||||
</div>
|
||||
<!-- Custom Step 2 Illustration -->
|
||||
<div class="step-illustration-2" data-reveal>
|
||||
<div class="illus-popup-card">
|
||||
<div class="illus-popup-header">
|
||||
@@ -1003,6 +1087,51 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="step">
|
||||
<div class="step-text" data-reveal>
|
||||
<div class="step-num" aria-hidden="true">02</div>
|
||||
<h3><span>{{STEP_2_TITLE}}</span></h3>
|
||||
<p>{{STEP_2_DESC}}</p>
|
||||
</div>
|
||||
<!-- Custom Step 2 Illustration -->
|
||||
<div class="step-illustration-1" data-reveal>
|
||||
<div class="illus-popup-card">
|
||||
<div class="illus-popup-header">
|
||||
<div class="illus-popup-brand">
|
||||
<img src="{{ASSET_PATH}}assets/NewLogoIcon.webp" alt="KoalaSync Logo" width="14" height="14">
|
||||
<span>KoalaSync</span>
|
||||
</div>
|
||||
<div class="illus-popup-version mockup-version">{{VERSION}}</div>
|
||||
</div>
|
||||
<div class="illus-popup-tabs">
|
||||
<div class="illus-popup-tab">
|
||||
<span>{{STEP_2_ILLUS_ROOM}}</span>
|
||||
</div>
|
||||
<div class="illus-popup-tab active">
|
||||
<span>{{STEP_2_ILLUS_SYNC}}</span>
|
||||
</div>
|
||||
<div class="illus-popup-tab">
|
||||
<span>{{STEP_2_ILLUS_SETTINGS}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="illus-popup-body">
|
||||
<div class="popup-form-group">
|
||||
<label class="popup-form-label" for="popup-select-mock-el">{{LABEL_SELECT_VIDEO}}</label>
|
||||
<div class="popup-select-wrapper">
|
||||
<select class="popup-select-mock" id="popup-select-mock-el" disabled>
|
||||
<option class="demo-title-text-ep1">Stranger Things - S4E1</option>
|
||||
</select>
|
||||
<div class="popup-cursor-pointer">👆</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="popup-mock-controls">
|
||||
<div class="popup-mock-btn play">▶ Play</div>
|
||||
<div class="popup-mock-btn pause">⏸ Pause</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="step">
|
||||
<div class="step-text" data-reveal>
|
||||
<div class="step-num" aria-hidden="true">03</div>
|
||||
@@ -1012,15 +1141,38 @@
|
||||
<!-- Custom Step 3 Illustration -->
|
||||
<div class="step-illustration-3" data-reveal>
|
||||
<div class="illus-sync-theater">
|
||||
<!-- Player A (KoalaPC) -->
|
||||
<!-- Player A (🐱 ChillCat) -->
|
||||
<div class="illus-player-card player-a">
|
||||
<div class="player-header">
|
||||
<span class="player-user">🐨 KoalaPC</span>
|
||||
<span class="player-user">🐱 ChillCat</span>
|
||||
<span class="player-badge active">PLAYING</span>
|
||||
</div>
|
||||
<div class="player-video-canvas">
|
||||
<div class="player-play-pulse">▶</div>
|
||||
<div class="player-video-overlay"></div>
|
||||
<svg class="demo-film" viewBox="0 0 160 90" preserveAspectRatio="xMidYMid slice" aria-hidden="true" xmlns="http://www.w3.org/2000/svg">
|
||||
<g class="film-stars" fill="#e2e8f0">
|
||||
<circle class="film-star" cx="18" cy="14" r="0.8"/>
|
||||
<circle class="film-star" cx="42" cy="24" r="0.6"/>
|
||||
<circle class="film-star" cx="64" cy="10" r="0.9"/>
|
||||
<circle class="film-star" cx="90" cy="28" r="0.6"/>
|
||||
<circle class="film-star" cx="134" cy="22" r="0.8"/>
|
||||
</g>
|
||||
<circle class="film-moon" cx="122" cy="26" r="7.5" fill="#f1f5f9" opacity="0.92"/>
|
||||
<path class="film-mtn-scroll" d="M0,60 L30,45 L70,55 L110,40 L160,60 L190,45 L230,55 L270,40 L320,60 L320,92 L0,92 Z" fill="rgba(30,27,75,0.7)"/>
|
||||
<g class="film-mid-scroll">
|
||||
<polygon points="20,76 26,60 32,76" fill="rgba(49,46,129,0.55)"/>
|
||||
<polygon points="55,78 63,52 71,78" fill="rgba(49,46,129,0.55)"/>
|
||||
<polygon points="95,76 101,62 107,76" fill="rgba(49,46,129,0.55)"/>
|
||||
<polygon points="135,77 144,55 153,77" fill="rgba(49,46,129,0.55)"/>
|
||||
<path d="M0,76 Q40,73 80,76 T160,76 Q200,73 240,76 T320,76 L320,92 L0,92 Z" fill="rgba(49,46,129,0.55)"/>
|
||||
</g>
|
||||
<g class="film-fore-scroll">
|
||||
<polygon points="40,84 52,48 64,84" fill="#090d16"/>
|
||||
<polygon points="115,84 128,42 141,84" fill="#090d16"/>
|
||||
<path d="M0,84 Q40,82 80,84 T160,84 L160,92 L0,92 Z" fill="#090d16"/>
|
||||
</g>
|
||||
<circle class="film-bounce-ball" cx="80" cy="80" r="4.5" fill="#fde047"/>
|
||||
</svg>
|
||||
</div>
|
||||
<div class="player-controls">
|
||||
<span class="control-btn">⏸</span>
|
||||
@@ -1042,15 +1194,38 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Player B (LaptopKoala) -->
|
||||
<!-- Player B (🐶 HappyDog) -->
|
||||
<div class="illus-player-card player-b">
|
||||
<div class="player-header">
|
||||
<span class="player-user">💻 LaptopKoala</span>
|
||||
<span class="player-user">🐶 HappyDog</span>
|
||||
<span class="player-badge active">PLAYING</span>
|
||||
</div>
|
||||
<div class="player-video-canvas">
|
||||
<div class="player-play-pulse">▶</div>
|
||||
<div class="player-video-overlay"></div>
|
||||
<svg class="demo-film" viewBox="0 0 160 90" preserveAspectRatio="xMidYMid slice" aria-hidden="true" xmlns="http://www.w3.org/2000/svg">
|
||||
<g class="film-stars" fill="#e2e8f0">
|
||||
<circle class="film-star" cx="18" cy="14" r="0.8"/>
|
||||
<circle class="film-star" cx="42" cy="24" r="0.6"/>
|
||||
<circle class="film-star" cx="64" cy="10" r="0.9"/>
|
||||
<circle class="film-star" cx="90" cy="28" r="0.6"/>
|
||||
<circle class="film-star" cx="134" cy="22" r="0.8"/>
|
||||
</g>
|
||||
<circle class="film-moon" cx="122" cy="26" r="7.5" fill="#f1f5f9" opacity="0.92"/>
|
||||
<path class="film-mtn-scroll" d="M0,60 L30,45 L70,55 L110,40 L160,60 L190,45 L230,55 L270,40 L320,60 L320,92 L0,92 Z" fill="rgba(30,27,75,0.7)"/>
|
||||
<g class="film-mid-scroll">
|
||||
<polygon points="20,76 26,60 32,76" fill="rgba(49,46,129,0.55)"/>
|
||||
<polygon points="55,78 63,52 71,78" fill="rgba(49,46,129,0.55)"/>
|
||||
<polygon points="95,76 101,62 107,76" fill="rgba(49,46,129,0.55)"/>
|
||||
<polygon points="135,77 144,55 153,77" fill="rgba(49,46,129,0.55)"/>
|
||||
<path d="M0,76 Q40,73 80,76 T160,76 Q200,73 240,76 T320,76 L320,92 L0,92 Z" fill="rgba(49,46,129,0.55)"/>
|
||||
</g>
|
||||
<g class="film-fore-scroll">
|
||||
<polygon points="40,84 52,48 64,84" fill="#090d16"/>
|
||||
<polygon points="115,84 128,42 141,84" fill="#090d16"/>
|
||||
<path d="M0,84 Q40,82 80,84 T160,84 L160,92 L0,92 Z" fill="#090d16"/>
|
||||
</g>
|
||||
<circle class="film-bounce-ball" cx="80" cy="80" r="4.5" fill="#fde047"/>
|
||||
</svg>
|
||||
</div>
|
||||
<div class="player-controls">
|
||||
<span class="control-btn">⏸</span>
|
||||
|
||||
Reference in New Issue
Block a user