AvanzaCast/docs/streamyard_interface (1).html

979 lines
28 KiB
HTML
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Transmisión - StreamYard Clone</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
background: #f5f5f5;
overflow: hidden;
height: 100vh;
}
/* Header */
.header {
background: white;
height: 60px;
border-bottom: 1px solid #e0e0e0;
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 20px;
position: relative;
z-index: 100;
}
.logo {
display: flex;
align-items: center;
gap: 12px;
font-size: 15px;
color: #333;
}
.logo-icon {
width: 36px;
height: 36px;
background: linear-gradient(135deg, #1e88e5 0%, #0d47a1 100%);
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
color: white;
font-weight: bold;
}
.header-actions {
display: flex;
gap: 12px;
align-items: center;
}
.add-destination-btn {
padding: 8px 16px;
background: #e3f2fd;
color: #1976d2;
border: 1px solid #90caf9;
border-radius: 6px;
cursor: pointer;
font-size: 14px;
display: flex;
align-items: center;
gap: 8px;
transition: all 0.2s;
}
.add-destination-btn:hover {
background: #bbdefb;
}
.record-btn {
padding: 10px 24px;
background: #1976d2;
color: white;
border: none;
border-radius: 6px;
cursor: pointer;
font-size: 14px;
font-weight: 600;
transition: all 0.2s;
}
.record-btn:hover {
background: #1565c0;
transform: translateY(-1px);
}
/* Main Layout */
.main-container {
display: flex;
height: calc(100vh - 60px);
position: relative;
}
/* Left Sidebar */
.left-sidebar {
width: 200px;
background: white;
border-right: 1px solid #e0e0e0;
display: flex;
flex-direction: column;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
position: relative;
z-index: 50;
flex-shrink: 0;
}
.left-sidebar.collapsed {
width: 0;
margin-left: 0;
border-right: none;
overflow: hidden;
}
.sidebar-header {
padding: 16px;
border-bottom: 1px solid #e0e0e0;
display: flex;
align-items: center;
justify-content: space-between;
}
.sidebar-title {
font-size: 14px;
font-weight: 600;
display: flex;
align-items: center;
gap: 8px;
}
.beta-badge {
background: #7b61ff;
color: white;
font-size: 10px;
padding: 2px 6px;
border-radius: 4px;
font-weight: 600;
}
.scene-list {
flex: 1;
overflow-y: auto;
padding: 8px;
}
.scene-item {
padding: 12px;
margin-bottom: 4px;
border-radius: 6px;
cursor: pointer;
transition: all 0.2s;
position: relative;
background: #f5f5f5;
}
.scene-item:hover {
background: #e8e8e8;
}
.scene-item.active {
background: #1976d2;
color: white;
}
.scene-preview {
width: 100%;
height: 80px;
background: #424242;
border-radius: 4px;
margin-bottom: 8px;
display: flex;
align-items: center;
justify-content: center;
}
.scene-name {
font-size: 13px;
font-weight: 500;
}
.add-scene-btn {
padding: 12px;
background: transparent;
border: 2px dashed #bdbdbd;
border-radius: 6px;
cursor: pointer;
display: flex;
align-items: center;
gap: 8px;
font-size: 13px;
color: #666;
transition: all 0.2s;
}
.add-scene-btn:hover {
border-color: #1976d2;
color: #1976d2;
}
/* Center Stage */
.center-stage {
flex: 1;
display: flex;
flex-direction: column;
background: #e0e0e0;
position: relative;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.stage-header {
background: white;
padding: 12px 16px;
border-bottom: 1px solid #e0e0e0;
}
.video-container {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
padding: 20px;
position: relative;
}
.video-stage {
width: 100%;
max-width: 1280px;
aspect-ratio: 16/9;
background: #000;
border-radius: 8px;
position: relative;
overflow: hidden;
box-shadow: 0 8px 32px rgba(0,0,0,0.3);
}
.quality-badge {
position: absolute;
top: 16px;
left: 16px;
background: rgba(0,0,0,0.7);
color: white;
padding: 6px 12px;
border-radius: 4px;
font-size: 12px;
font-weight: 600;
}
.streamyard-badge {
position: absolute;
top: 16px;
right: 16px;
color: rgba(255,255,255,0.7);
font-size: 11px;
display: flex;
flex-direction: column;
align-items: flex-end;
gap: 2px;
}
.hide-panel-btn {
position: absolute;
bottom: 50%;
right: -12px;
transform: translateY(50%);
background: white;
border: 1px solid #e0e0e0;
border-radius: 4px;
padding: 8px 4px;
cursor: pointer;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
transition: all 0.2s;
z-index: 10;
}
.hide-panel-btn:hover {
background: #f5f5f5;
}
/* Controls Bar */
.controls-bar {
background: white;
padding: 16px;
border-top: 1px solid #e0e0e0;
}
.layout-controls {
display: flex;
gap: 8px;
margin-bottom: 16px;
justify-content: center;
}
.layout-btn {
width: 48px;
height: 48px;
background: #e0e0e0;
border: 2px solid transparent;
border-radius: 6px;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.2s;
position: relative;
}
.layout-btn:hover {
background: #d0d0d0;
}
.layout-btn.active {
background: #1976d2;
border-color: #1976d2;
}
.layout-btn.dropdown {
background: #1976d2;
}
.participants-section {
display: flex;
gap: 12px;
justify-content: center;
}
.participant-card {
background: #f5f5f5;
border-radius: 8px;
padding: 16px;
min-width: 200px;
position: relative;
}
.participant-avatar {
width: 100%;
height: 120px;
background: #9e9e9e;
border-radius: 6px;
display: flex;
align-items: center;
justify-content: center;
color: white;
font-size: 32px;
margin-bottom: 12px;
}
.participant-name {
font-size: 14px;
color: #333;
display: flex;
align-items: center;
gap: 8px;
}
.invite-card {
background: white;
border: 2px dashed #bdbdbd;
border-radius: 8px;
padding: 16px;
min-width: 200px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 12px;
cursor: pointer;
transition: all 0.2s;
}
.invite-card:hover {
border-color: #1976d2;
background: #f5f9ff;
}
/* Bottom Toolbar */
.bottom-toolbar {
background: white;
border-top: 1px solid #e0e0e0;
padding: 12px 16px;
display: flex;
justify-content: center;
gap: 8px;
}
.toolbar-btn {
width: 48px;
height: 48px;
background: #f5f5f5;
border: none;
border-radius: 8px;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.2s;
position: relative;
}
.toolbar-btn:hover {
background: #e0e0e0;
}
.toolbar-btn.active {
background: #1976d2;
color: white;
}
.toolbar-btn.leave {
background: #ef5350;
color: white;
}
.toolbar-btn.leave:hover {
background: #e53935;
}
/* Right Sidebar */
.right-sidebar {
width: 360px;
background: white;
border-left: 1px solid #e0e0e0;
display: flex;
flex-direction: column;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
position: relative;
z-index: 50;
flex-shrink: 0;
}
.right-sidebar.collapsed {
width: 0;
margin-right: 0;
border-left: none;
overflow: hidden;
}
.right-sidebar-tabs {
display: flex;
flex-direction: column;
gap: 12px;
padding: 12px 8px;
background: #fafafa;
border-left: 1px solid #e0e0e0;
position: absolute;
right: 100%;
top: 0;
height: 100%;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.right-sidebar.collapsed .right-sidebar-tabs {
right: 0;
border-left: none;
border-right: 1px solid #e0e0e0;
}
.tab-btn {
width: 56px;
height: 56px;
background: white;
border: 1px solid #e0e0e0;
border-radius: 8px;
cursor: pointer;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 4px;
transition: all 0.2s;
font-size: 10px;
color: #666;
}
.tab-btn:hover {
background: #f5f5f5;
border-color: #1976d2;
}
.tab-btn.active {
background: #e3f2fd;
border-color: #1976d2;
color: #1976d2;
}
.right-sidebar-content {
flex: 1;
overflow-y: auto;
padding: 20px;
}
.brand-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 20px;
}
.brand-title {
display: flex;
align-items: center;
gap: 8px;
font-size: 16px;
font-weight: 600;
}
.new-badge {
background: #7b61ff;
color: white;
font-size: 10px;
padding: 2px 6px;
border-radius: 4px;
font-weight: 600;
}
.add-btn {
padding: 6px 16px;
background: white;
border: 1px solid #1976d2;
color: #1976d2;
border-radius: 6px;
cursor: pointer;
font-size: 13px;
transition: all 0.2s;
}
.add-btn:hover {
background: #e3f2fd;
}
.package-info {
background: #f5f5f5;
padding: 12px;
border-radius: 8px;
margin-bottom: 20px;
}
.section-title {
font-size: 14px;
font-weight: 600;
margin-bottom: 16px;
display: flex;
align-items: center;
gap: 8px;
}
.preset-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 12px;
margin-bottom: 20px;
}
.preset-item {
aspect-ratio: 1;
background: #f5f5f5;
border: 2px solid transparent;
border-radius: 8px;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.2s;
position: relative;
}
.preset-item:hover {
border-color: #1976d2;
}
.preset-item.active {
border-color: #1976d2;
background: #e3f2fd;
}
.color-picker-section {
margin-bottom: 20px;
}
.color-input-group {
display: flex;
gap: 12px;
align-items: center;
}
.color-preview {
width: 48px;
height: 48px;
background: #7b61ff;
border-radius: 8px;
cursor: pointer;
}
.color-code {
flex: 1;
padding: 12px;
border: 1px solid #e0e0e0;
border-radius: 6px;
font-family: monospace;
}
.theme-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 12px;
}
.theme-item {
height: 48px;
border-radius: 8px;
cursor: pointer;
border: 2px solid transparent;
transition: all 0.2s;
}
.theme-item:hover {
border-color: #1976d2;
}
/* Toggle Buttons */
.toggle-left {
position: absolute;
left: 200px;
top: 50%;
transform: translateY(-50%);
width: 24px;
height: 80px;
background: white;
border: 1px solid #e0e0e0;
border-left: none;
border-radius: 0 8px 8px 0;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
z-index: 60;
}
.toggle-left:hover {
background: #f5f5f5;
width: 28px;
}
.toggle-left.hidden {
left: 0;
}
.left-sidebar.collapsed ~ .center-stage .toggle-left {
left: 0;
}
/* Animations */
@keyframes slideIn {
from {
opacity: 0;
transform: translateY(10px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.animate-in {
animation: slideIn 0.3s ease-out;
}
/* Scrollbar */
::-webkit-scrollbar {
width: 8px;
height: 8px;
}
::-webkit-scrollbar-track {
background: #f5f5f5;
}
::-webkit-scrollbar-thumb {
background: #bdbdbd;
border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
background: #9e9e9e;
}
/* Icons (usando caracteres Unicode y estilos) */
.icon {
font-size: 20px;
}
.help-btn {
position: fixed;
bottom: 20px;
right: 20px;
width: 56px;
height: 56px;
background: #1976d2;
color: white;
border: none;
border-radius: 50%;
cursor: pointer;
box-shadow: 0 4px 12px rgba(0,0,0,0.2);
display: flex;
align-items: center;
justify-content: center;
font-size: 20px;
transition: all 0.2s;
z-index: 1000;
}
.help-btn:hover {
transform: scale(1.1);
box-shadow: 0 6px 16px rgba(0,0,0,0.3);
}
</style>
</head>
<body>
<!-- Header -->
<div class="header">
<div class="logo">
<div class="logo-icon">🎥</div>
<span>Transmisión</span>
</div>
<div class="header-actions">
<button class="add-destination-btn">
Agregar destino 📺🔴
</button>
<button class="record-btn">Grabar</button>
</div>
</div>
<!-- Main Container -->
<div class="main-container">
<!-- Left Sidebar -->
<div class="left-sidebar" id="leftSidebar">
<div class="sidebar-header">
<div class="sidebar-title">
← Mis Escenas
</div>
<button style="background: none; border: none; cursor: pointer; font-size: 20px;"></button>
</div>
<div class="scene-list">
<div class="scene-item">
<div class="scene-preview">👤 👥</div>
<div class="scene-name">Demo scene 1</div>
</div>
<div class="scene-item active">
<div class="scene-preview"></div>
<div class="scene-name">Demo scene 2</div>
</div>
<div class="scene-item">
<div class="scene-preview">👤 👥</div>
<div class="scene-name">Demo scene 3</div>
</div>
</div>
<div style="padding: 8px;">
<button class="add-scene-btn">
<span style="font-size: 18px;">+</span>
Nueva escena
</button>
</div>
</div>
<!-- Center Stage -->
<div class="center-stage">
<!-- Toggle Left -->
<div class="toggle-left" id="toggleLeft" onclick="toggleLeftSidebar()">
<span id="toggleLeftIcon"></span>
</div>
<div class="video-container">
<div class="video-stage">
<div class="quality-badge">720p</div>
<div class="streamyard-badge">
<span style="font-size: 9px;">Producido con</span>
<strong>StreamYard</strong>
</div>
</div>
<div class="hide-panel-btn" onclick="toggleRightSidebar()">
<span id="hideIcon"></span>
</div>
</div>
<!-- Controls Bar -->
<div class="controls-bar">
<div class="layout-controls">
<button class="layout-btn">👤</button>
<button class="layout-btn">👥</button>
<button class="layout-btn">👤👥</button>
<button class="layout-btn">👥👥</button>
<button class="layout-btn dropdown active"></button>
<button class="layout-btn">✏️</button>
<button class="layout-btn"></button>
<button class="layout-btn">⚙️</button>
</div>
<div class="participants-section">
<div class="participant-card">
<div class="participant-avatar">👤</div>
<div class="participant-name">
🎤 Cesar Mendivil
</div>
</div>
<div class="invite-card">
<span style="font-size: 24px;">👤➕</span>
<span style="font-size: 14px; color: #666;">Presentar o invitar</span>
</div>
</div>
</div>
<!-- Bottom Toolbar -->
<div class="bottom-toolbar">
<button class="toolbar-btn">🎤</button>
<button class="toolbar-btn">📹</button>
<button class="toolbar-btn">🖥️</button>
<button class="toolbar-btn">👥</button>
<button class="toolbar-btn">⚙️</button>
<button class="toolbar-btn leave">🚪</button>
<button class="help-btn" style="position: static; width: 48px; height: 48px; margin-left: auto;"></button>
</div>
</div>
<!-- Right Sidebar -->
<div class="right-sidebar" id="rightSidebar">
<div class="right-sidebar-tabs">
<button class="tab-btn" onclick="switchTab('comments')">
💬
<span>Comentarios</span>
</button>
<button class="tab-btn" onclick="switchTab('banners')">
🖼️
<span>Banners</span>
</button>
<button class="tab-btn" onclick="switchTab('multimedia')">
🎬
<span>Activos multimedia</span>
</button>
<button class="tab-btn active" onclick="switchTab('style')">
🎨
<span>Estilo</span>
</button>
<button class="tab-btn" onclick="switchTab('notes')">
📝
<span>Notas</span>
</button>
<button class="tab-btn" onclick="switchTab('people')">
👥
<span>Personas</span>
</button>
</div>
<div class="right-sidebar-content animate-in">
<div class="brand-header">
<div class="brand-title">
🎨 Marca 1 ▼
</div>
<button style="background: none; border: none; cursor: pointer; font-size: 20px;"></button>
</div>
<div class="package-info">
<div style="display: flex; justify-content: space-between; align-items: center;">
<span style="font-size: 13px;">Paquete de Acción de Gracias 🎁</span>
<span class="new-badge">NUEV<br>O</span>
</div>
<div style="font-size: 11px; color: #666; margin-top: 4px;">
4 overlays, 6 fondos
</div>
<button class="add-btn" style="margin-top: 8px;">Añadir</button>
</div>
<div class="section-title">
Ajustes preestablecidos
</div>
<div class="preset-grid">
<div class="preset-item">
<span style="background: #1976d2; color: white; padding: 4px 8px; border-radius: 4px; font-size: 11px;">You</span>
</div>
<div class="preset-item active">
<span style="background: #7b61ff; color: white; padding: 4px 8px; border-radius: 4px; font-size: 11px;">Hola</span>
</div>
<div class="preset-item">
<span style="background: #ff9800; color: white; padding: 4px 8px; border-radius: 4px; font-size: 11px;">You</span>
</div>
</div>
<div class="color-picker-section">
<div class="section-title">Color de la marca </div>
<div class="color-input-group">
<div class="color-preview"></div>
<input type="text" class="color-code" value="#7b61ff">
</div>
</div>
<div>
<div class="section-title">Tema </div>
<div class="theme-grid">
<div class="theme-item" style="background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);"></div>
<div class="theme-item" style="background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);"></div>
<div class="theme-item" style="background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%);"></div>
<div class="theme-item" style="background: linear-gradient(135deg, #43e97b 0%, #38f9d7 100%);"></div>
</div>
</div>
</div>
</div>
</div>
<script>
function toggleLeftSidebar() {
const sidebar = document.getElementById('leftSidebar');
const icon = document.getElementById('toggleLeftIcon');
sidebar.classList.toggle('collapsed');
icon.textContent = sidebar.classList.contains('collapsed') ? '▶' : '◀';
}
function toggleRightSidebar() {
const sidebar = document.getElementById('rightSidebar');
const icon = document.getElementById('hideIcon');
sidebar.classList.toggle('collapsed');
icon.textContent = sidebar.classList.contains('collapsed') ? '◀' : '▶';
// Remover estado activo de todas las tabs cuando se colapsa
if (sidebar.classList.contains('collapsed')) {
document.querySelectorAll('.tab-btn').forEach(t => t.classList.remove('active'));
}
}
function switchTab(tab) {
const tabs = document.querySelectorAll('.tab-btn');
tabs.forEach(t => t.classList.remove('active'));
event.target.closest('.tab-btn').classList.add('active');
const sidebar = document.getElementById('rightSidebar');
if (sidebar.classList.contains('collapsed')) {
sidebar.classList.remove('collapsed');
document.getElementById('hideIcon').textContent = '▶';
}
// Añadir animación al contenido
const content = document.querySelector('.right-sidebar-content');
content.classList.remove('animate-in');
setTimeout(() => content.classList.add('animate-in'), 10);
}
// Animación de hover para botones
document.querySelectorAll('.toolbar-btn, .layout-btn, .tab-btn').forEach(btn => {
btn.addEventListener('mouseenter', function() {
this.style.transform = 'scale(1.05)';
});
btn.addEventListener('mouseleave', function() {
this.style.transform = 'scale(1)';
});
});
// Cerrar sidebar derecho cuando no hay tab activa
let lastActiveTab = null;
document.querySelectorAll('.tab-btn').forEach(btn => {
btn.addEventListener('click', function() {
if (lastActiveTab === this && !document.getElementById('rightSidebar').classList.contains('collapsed')) {
document.getElementById('rightSidebar').classList.add('collapsed');
this.classList.remove('active');
lastActiveTab = null;
} else {
lastActiveTab = this;
}
});
});
</script>
</body>
</html>