Caderno de Japonês - Estudo com Playlist :root { --bg: #0f172a; --surface: #1e293b; --surface-border: #334155; --primary: #ef4444; --primary-hover: #dc2626; --text: #f8fafc; --text-muted: #94a3b8; --accent: #38bdf8; } * { box-sizing: border-box; margin: 0; padding: 0; } body { font-family: 'Inter', 'Noto Sans JP', sans-serif; background-color: var(--bg); color: var(--text); min-height: 100vh; display: flex; flex-direction: column; } header { background-color: var(--surface); border-bottom: 1px solid var(--surface-border); padding: 0.75rem 1.5rem; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 0.5rem; } .brand { font-weight: 700; font-size: 1.15rem; display: flex; align-items: center; gap: 0.5rem; } .badge { font-size: 0.75rem; background: rgba(239, 68, 68, 0.2); color: #fca5a5; padding: 0.2rem 0.5rem; border-radius: 999px; border: 1px solid rgba(239, 68, 68, 0.4); } .main-container { display: grid; grid-template-columns: 1.1fr 0.9fr; flex: 1; height: calc(100vh - 61px); } @media (max-width: 960px) { .main-container { grid-template-columns: 1fr; height: auto; } } /* Coluna do Vídeo */ .video-panel { padding: 1.25rem; display: flex; flex-direction: column; gap: 1rem; border-right: 1px solid var(--surface-border); overflow-y: auto; } .video-wrapper { position: relative; width: 100%; background: #000; border-radius: 12px; overflow: hidden; box-shadow: 0 10px 25px rgba(0, 0, 0, 0.4); margin: 0 auto; transition: max-width 0.3s ease; } /* Modos de proporção */ .ratio-16-9 { padding-top: 56.25%; /* 16:9 */ max-width: 100%; } .ratio-shorts { padding-top: 150%; /* Próximo ao vertical 9:16 */ max-width: 360px; } .video-wrapper iframe { position: absolute; top: 0; left: 0; width: 100%; height: 100%; border: 0; } .video-controls { display: flex; flex-wrap: wrap; gap: 0.5rem; align-items: center; justify-content: space-between; background: var(--surface); padding: 0.75rem; border-radius: 8px; border: 1px solid var(--surface-border); } .btn-group { display: flex; gap: 0.5rem; } button { cursor: pointer; font-family: inherit; border-radius: 6px; border: 1px solid var(--surface-border); background: #334155; color: var(--text); padding: 0.45rem 0.8rem; font-size: 0.85rem; font-weight: 500; display: inline-flex; align-items: center; gap: 0.4rem; transition: background 0.2s, border-color 0.2s; } button:hover { background: #475569; border-color: #64748b; } .btn-primary { background: var(--primary); border-color: var(--primary); color: #fff; } .btn-primary:hover { background: var(--primary-hover); border-color: var(--primary-hover); } /* Coluna de Notas */ .notes-panel { display: flex; flex-direction: column; padding: 1.25rem; gap: 0.75rem; background: #111827; } .quick-chars { display: flex; flex-wrap: wrap; gap: 0.35rem; background: var(--surface); padding: 0.5rem; border-radius: 8px; border: 1px solid var(--surface-border); align-items: center; } .quick-chars span { font-size: 0.75rem; color: var(--text-muted); margin-right: 0.3rem; } .char-btn { padding: 0.2rem 0.5rem; font-size: 0.85rem; background: #0f172a; } .editor-wrapper { flex: 1; display: flex; flex-direction: column; position: relative; } textarea#notes { flex: 1; width: 100%; min-height: 280px; background-color: var(--surface); border: 1px solid var(--surface-border); border-radius: 8px; color: var(--text); font-size: 0.95rem; line-height: 1.6; padding: 1rem; resize: none; font-family: inherit; } textarea#notes:focus { outline: none; border-color: var(--accent); } .notes-footer { display: flex; justify-content: space-between; align-items: center; font-size: 0.75rem; color: var(--text-muted); margin-top: 0.3rem; }
Japão Prático Playlist Mode
Lição 1 Gojūon Challenge & Série
💡 Dica de Estudo: Conforme o vídeo avança, clique em Marcar Minuto para vincular suas anotações aos segundos das explicações. Se os vídeos forem gravados no formato vertical (Shorts), ative o botão Modo Shorts.
Inserir:
let player; const playlistId = 'PLCjkd87G9IwJwI9RaMI1wQN9HjUXDRVa3'; const firstVideoId = 'oRPnwMR-ql0'; function onYouTubeIframeAPIReady() { player = new YT.Player('player', { playerVars: { listType: 'playlist', list: playlistId, autoplay: 0, rel: 0, modestbranding: 1 }, events: { 'onReady': onPlayerReady } }); } function onPlayerReady(event) { // Se necessário, pode forçar a seleção do vídeo inicial // event.target.cuePlaylist({ list: playlistId, index: 0 }); } function prevVideo() { if (player && player.previousVideo) { player.previousVideo(); } } function nextVideo() { if (player && player.nextVideo) { player.nextVideo(); } } // Alternar proporção 16:9 vs Vertical (Shorts) let isShorts = false; function toggleAspect() { const container = document.getElementById('videoContainer'); const btn = document.getElementById('aspectBtn'); isShorts = !isShorts; if (isShorts) { container.classList.remove('ratio-16-9'); container.classList.add('ratio-shorts'); btn.textContent = '🖥 Modo Horizontal (16:9)'; } else { container.classList.remove('ratio-shorts'); container.classList.add('ratio-16-9'); btn.textContent = '📱 Modo Shorts / Vertical'; } } // Inserir carimbo de data/hora atual da aula function insertCurrentTimestamp() { if (!player || typeof player.getCurrentTime !== 'function') return; const totalSeconds = Math.floor(player.getCurrentTime()); const mins = String(Math.floor(totalSeconds / 60)).padStart(2, '0'); const secs = String(totalSeconds % 60).padStart(2, '0'); insertText(`\n⏱ [${mins}:${secs}] `); } // Inserção no cursor do textarea const textarea = document.getElementById('notes'); function insertText(text) { const start = textarea.selectionStart; const end = textarea.selectionEnd; const val = textarea.value; textarea.value = val.substring(0, start) + text + val.substring(end); textarea.focus(); textarea.selectionStart = textarea.selectionEnd = start + text.length; saveNotes(); } // Persistência local no navegador const storageKey = 'japanese_playlist_study_notes'; const statusEl = document.getElementById('saveStatus'); function loadNotes() { const saved = localStorage.getItem(storageKey); if (saved) { textarea.value = saved; statusEl.textContent = 'Anotações carregadas.'; } else { textarea.value = `# Anotações de Japonês - Playlist\n- Aula: Lição 1 Gojūon Challenge\n\n`; statusEl.textContent = 'Pronto para escrever.'; } } function saveNotes() { localStorage.setItem(storageKey, textarea.value); statusEl.textContent = 'Salvo automaticamente.'; } textarea.addEventListener('input', () => { statusEl.textContent = 'Digitando...'; clearTimeout(window.saveTimer); window.saveTimer = setTimeout(saveNotes, 600); }); function clearNotes() { if (confirm('Deseja realmente limpar todas as anotações?')) { textarea.value = ''; saveNotes(); } } // Download das notas function downloadNotes(format) { const content = textarea.value; const blob = new Blob([content], { type: 'text/plain;charset=utf-8' }); const link = document.createElement('a'); link.href = URL.createObjectURL(blob); link.download = `estudo_japones_${new Date().toISOString().slice(0, 10)}.${format}`; link.click(); URL.revokeObjectURL(link.href); } window.addEventListener('DOMContentLoaded', loadNotes);