AvanzaCast/docs/streamyard_interface (2).html

1000 lines
28 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

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 - 4 Rows Structure */
.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);
}
/* ROW 1: Video Display */
.video-row {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
padding: 20px;
position: relative;
min-height: 0;
}
.video-stage {
width: 100%;
max-width: 100%;
height: 100%;
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;
}
/* ROW 2: Layout Controls */
.layout-row {
background: white;
padding: 16px 20px;
border-top: 1px solid #e0e0e0;
display: flex;
align-items: center;
justify-content: center;
gap: 8px;
flex-shrink: 0;
}
.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;
font-size: 20px;
}
.layout-btn:hover {
background: #d0d0d0;
transform: translateY(-2px);
}
.layout-btn.active {
background: #1976d2;
border-color: #1976d2;
}
/* ROW 3: Participants/Guests Management */
.participants-row {
background: white;
padding: 16px 20px;
border-top: 1px solid #e0e0e0;
display: flex;
gap: 16px;
align-items: center;
justify-content: center;
flex-shrink: 0;
overflow-x: auto;
}
.participant-card {
background: #f5f5f5;
border-radius: 8px;
padding: 16px;
min-width: 180px;
position: relative;
transition: all 0.2s;
}
.participant-card:hover {
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(0,0,0,0.1);
}
.participant-avatar {
width: 100%;
height: 100px;
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: 13px;
color: #333;
display: flex;
align-items: center;
gap: 6px;
}
.participant-controls {
position: absolute;
top: 12px;
right: 12px;
display: flex;
gap: 4px;
}
.mini-control-btn {
width: 32px;
height: 32px;
background: rgba(255,255,255,0.9);
border: none;
border-radius: 4px;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.2s;
}
.mini-control-btn:hover {
background: white;
transform: scale(1.1);
}
.invite-card {
background: white;
border: 2px dashed #bdbdbd;
border-radius: 8px;
padding: 16px;
min-width: 180px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 8px;
cursor: pointer;
transition: all 0.2s;
height: 160px;
}
.invite-card:hover {
border-color: #1976d2;
background: #f5f9ff;
transform: translateY(-2px);
}
/* ROW 4: Video Conference Controls Footer */
.controls-footer {
background: white;
border-top: 1px solid #e0e0e0;
padding: 12px 20px;
display: flex;
align-items: center;
justify-content: space-between;
flex-shrink: 0;
gap: 16px;
}
.controls-left,
.controls-center,
.controls-right {
display: flex;
gap: 8px;
align-items: center;
}
.controls-center {
flex: 1;
justify-content: center;
}
.control-btn {
width: 48px;
height: 48px;
background: #f5f5f5;
border: none;
border-radius: 50%;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.2s;
position: relative;
font-size: 20px;
}
.control-btn:hover {
background: #e0e0e0;
transform: scale(1.05);
}
.control-btn.active {
background: #1976d2;
color: white;
}
.control-btn.danger {
background: #ef5350;
color: white;
}
.control-btn.danger:hover {
background: #e53935;
transform: scale(1.05);
}
.control-btn-with-menu {
display: flex;
align-items: center;
gap: 4px;
padding: 0 12px;
border-radius: 24px;
width: auto;
}
.invite-btn {
background: #1976d2;
color: white;
padding: 12px 20px;
border: none;
border-radius: 6px;
cursor: pointer;
display: flex;
align-items: center;
gap: 8px;
font-size: 14px;
font-weight: 500;
transition: all 0.2s;
}
.invite-btn:hover {
background: #1565c0;
transform: translateY(-1px);
}
.help-btn {
width: 48px;
height: 48px;
background: transparent;
border: 2px solid #1976d2;
color: #1976d2;
border-radius: 50%;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
font-size: 18px;
transition: all 0.2s;
}
.help-btn:hover {
background: #e3f2fd;
transform: scale(1.05);
}
/* 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;
transform: translateX(-4px);
}
.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;
}
.section-title {
font-size: 14px;
font-weight: 600;
margin-bottom: 16px;
display: flex;
align-items: center;
gap: 8px;
}
/* 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;
}
/* Modal */
.modal {
display: none;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0,0,0,0.5);
z-index: 1000;
align-items: center;
justify-content: center;
}
.modal.active {
display: flex;
}
.modal-content {
background: white;
border-radius: 12px;
padding: 32px;
max-width: 500px;
width: 90%;
position: relative;
animation: modalSlideIn 0.3s ease-out;
}
@keyframes modalSlideIn {
from {
opacity: 0;
transform: translateY(-20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.modal-close {
position: absolute;
top: 16px;
right: 16px;
width: 32px;
height: 32px;
background: none;
border: none;
cursor: pointer;
font-size: 24px;
color: #666;
}
.modal-title {
font-size: 24px;
font-weight: 600;
margin-bottom: 16px;
}
.modal-description {
color: #666;
line-height: 1.6;
margin-bottom: 20px;
}
.invite-link-container {
display: flex;
gap: 12px;
margin-bottom: 20px;
}
.invite-link-input {
flex: 1;
padding: 12px;
border: 1px solid #e0e0e0;
border-radius: 6px;
font-size: 14px;
}
.copy-btn {
padding: 12px 24px;
background: #1976d2;
color: white;
border: none;
border-radius: 6px;
cursor: pointer;
font-weight: 600;
transition: all 0.2s;
}
.copy-btn:hover {
background: #1565c0;
}
.share-options {
display: flex;
gap: 12px;
padding-top: 20px;
border-top: 1px solid #e0e0e0;
}
.share-btn {
flex: 1;
padding: 12px;
background: #f5f5f5;
border: 1px solid #e0e0e0;
border-radius: 6px;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
gap: 8px;
transition: all 0.2s;
}
.share-btn:hover {
background: #e0e0e0;
}
/* 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;
}
</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>
<!-- ROW 1: Video Display -->
<div class="video-row">
<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>
<!-- ROW 2: Layout Controls -->
<div class="layout-row">
<button class="layout-btn" title="Vista individual">👤</button>
<button class="layout-btn" title="Vista dual">👥</button>
<button class="layout-btn" title="Vista triple">👤👥</button>
<button class="layout-btn" title="Vista cuádruple">👥👥</button>
<button class="layout-btn active" title="Layouts guardados"></button>
<button class="layout-btn" title="Editar layout">✏️</button>
<button class="layout-btn" title="Agregar elemento"></button>
<button class="layout-btn" title="Configuración">⚙️</button>
</div>
<!-- ROW 3: Participants/Guests Management -->
<div class="participants-row">
<div class="participant-card">
<div class="participant-controls">
<button class="mini-control-btn" title="Configuración">🎤</button>
<button class="mini-control-btn" title="Más opciones"></button>
</div>
<div class="participant-avatar">👤</div>
<div class="participant-name">
🎤 Cesar Mendivil
</div>
</div>
<div class="invite-card" onclick="openInviteModal()">
<span style="font-size: 32px;"></span>
<span style="font-size: 14px; color: #666; font-weight: 500;">Presentar o invitar</span>
</div>
</div>
<!-- ROW 4: Video Conference Controls Footer -->
<div class="controls-footer">
<div class="controls-left">
<button class="invite-btn" onclick="openInviteModal()">
Invitar
</button>
</div>
<div class="controls-center">
<button class="control-btn active" title="Micrófono">🎤</button>
<button class="control-btn-with-menu control-btn" title="Opciones de audio">
<span></span>
</button>
<button class="control-btn active" title="Cámara">📹</button>
<button class="control-btn-with-menu control-btn" title="Opciones de video">
<span></span>
</button>
<button class="control-btn" title="Compartir pantalla">🖥️</button>
<button class="control-btn" title="Participantes">👥</button>
<button class="control-btn" title="Configuración">⚙️</button>
<button class="control-btn danger" title="Salir del estudio">🚪</button>
</div>
<div class="controls-right">
<button class="help-btn" title="¿Necesitas ayuda?"></button>
</div>
</div>
</div>
<!-- Right Sidebar -->
<div class="right-sidebar" id="rightSidebar">
<div class="right-sidebar-tabs">
<button class="tab-btn" onclick="switchTab('comments')">
<span style="font-size: 20px;">💬</span>
<span>Comentarios</span>
</button>
<button class="tab-btn" onclick="switchTab('banners')">
<span style="font-size: 20px;">🖼️</span>
<span>Banners</span>
</button>
<button class="tab-btn" onclick="switchTab('multimedia')">
<span style="font-size: 20px;">🎬</span>
<span>Activos</span>
</button>
<button class="tab-btn active" onclick="switchTab('style')">
<span style="font-size: 20px;">🎨</span>
<span>Estilo</span>
</button>
<button class="tab-btn" onclick="switchTab('notes')">
<span style="font-size: 20px;">📝</span>
<span>Notas</span>
</button>
<button class="tab-btn" onclick="switchTab('people')">
<span style="font-size: 20px;">👥</span>
<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="section-title">Panel de Estilo</div>
<p style="color: #666; font-size: 14px; line-height: 1.6;">
Personaliza la apariencia de tu transmisión con temas, colores y overlays.
</p>
</div>
</div>
</div>
<!-- Invite Modal -->
<div class="modal" id="inviteModal">
<div class="modal-content">
<button class="modal-close" onclick="closeInviteModal()">×</button>
<h2 class="modal-title">Agrega invitados al estudio</h2>
<p class="modal-description">
Envía este enlace a tus invitados. Es posible que también quieras
compartir nuestras <a href="#" style="color: