` |
+
+### C. Transiciones y Sombras
+
+```css
+/* Sombreado */
+.shadow-base {
+ box-shadow: var(--mk-shadow-default);
+}
+
+/* Transiciones para dinamismo */
+.transition-colors {
+ transition: background-color 0.3s ease, color 0.3s ease;
+}
+```
+
+-----
+
+## 🧩 4. Creación de Clases de Componentes
+
+Ahora usamos las utilidades para construir bloques complejos, como los botones de control de tu interfaz.
+
+### A. Botón Principal (Primary Button)
+
+```css
+.btn-primary {
+ /* Fondo y texto basados en variables */
+ background-color: var(--mk-color-primary);
+ color: white;
+ font-weight: 700;
+ padding: var(--mk-space-4) var(--mk-space-6);
+ border-radius: var(--mk-radius-md, 5px);
+ width: 100%;
+ /* Utilidades */
+ @extend .transition-colors;
+}
+.btn-primary:hover {
+ background-color: var(--mk-color-primary-hover);
+}
+```
+
+### B. Botones de Control de Medios
+
+Este ejemplo combina estilos de componente base con utilidades de estado:
+
+```css
+/* Clase base para el botón de control */
+.ctrl-media-base {
+ /* Utilidades internas */
+ @extend .transition-colors;
+ @extend .flex;
+ @extend .flex-col;
+ @extend .items-center;
+ /* Estilos fijos */
+ height: var(--button-height, 80px);
+ font-weight: 500;
+ font-size: 0.85em;
+ border: none;
+ cursor: pointer;
+}
+
+/* Utilidad de Estado para Error */
+.is-media-error {
+ background-color: var(--mk-color-bg-error);
+}
+
+/* Utilidad de Estado para Icono */
+.is-media-error .ctrl-icon {
+ color: var(--mk-color-error);
+}
+```
+
+### Uso en HTML (Ejemplo de Botones de Control)
+
+En lugar de aplicar 10 clases de utilidad, aplicas solo 3:
+
+```html
+
+```
+
+## 🚀 5. Herramientas para Escalabilidad
+
+Para que tu sistema sea realmente parecido a Tailwind, te recomiendo usar un **Preprocesador CSS** o un **Postprocesador**:
+
+* **Preprocesador (SASS/LESS):** Permite usar `@mixin` para agrupar utilidades y `@extend` para heredar estilos, haciendo que la creación de componentes sea mucho más limpia (como se muestra arriba).
+* **Postprocesador (PostCSS):** Similar a como funciona Tailwind. Puedes usar plugins como `postcss-nesting` para escribir CSS anidado y generar utilidades automáticamente a partir de tus variables.
+
+Este enfoque de **MiKit** te da la flexibilidad de las utilidades (velocidad) con la estructura y la legibilidad de los componentes (mantenimiento) en un sistema totalmente alineado con tu marca y estilo.
+
+¡Entendido\! Basándonos en la interfaz de **StreamYard** que se muestra en la imagen, podemos definir un sistema de diseño privado, tipo **Utility-First** (como Tailwind), pero capturando la estética específica de esta aplicación.
+
+Llamaremos a este sistema de diseño **StreamKit** (SK) para fines de referencia.
+
+-----
+
+## 🎨 1. Variables de Diseño (SK Variables)
+
+La clave para replicar el estilo es capturar la paleta de colores y el espaciado exactos.
+
+```css
+/* ====================================
+ VARIABLES DE ROOT (SK: StreamKit)
+ ==================================== */
+:root {
+ /* Colores */
+ --sk-color-primary: #1976d2; /* Azul principal de botones y enlaces */
+ --sk-color-secondary: #f4f6f9; /* Fondo de paneles laterales (Gris claro) */
+ --sk-color-accent: #ff4545; /* Rojo de acción principal (Botón "Grabar") */
+ --sk-color-text-dark: #3c4043; /* Texto principal oscuro */
+ --sk-color-text-sub: #70757a; /* Texto secundario/sutil */
+ --sk-color-border-light: #dadce0; /* Borde ligero de separadores */
+ --sk-color-bg-white: #ffffff;
+
+ /* Sombras (Limpias y definidas) */
+ --sk-shadow-panel: 0 1px 3px 0 rgba(60, 64, 67, 0.1), 0 1px 2px 0 rgba(60, 64, 67, 0.15); /* Sombra de botones/paneles */
+ --sk-shadow-float: 0 4px 12px rgba(60, 64, 67, 0.15); /* Sombra de elementos emergentes */
+
+ /* Espaciado (Escala Modular, aquí usando múltiplos de 8px) */
+ --sk-space-xs: 4px;
+ --sk-space-sm: 8px;
+ --sk-space-md: 16px;
+ --sk-space-lg: 24px;
+ --sk-space-xl: 32px;
+
+ /* Tipografía */
+ --sk-font-base: 'Roboto', 'Arial', sans-serif;
+ --sk-font-size-base: 14px;
+
+ /* Bordes */
+ --sk-radius-sm: 4px;
+ --sk-radius-md: 6px;
+}
+```
+
+-----
+
+## 🧱 2. Estilos de Utilidad (SK Utilities)
+
+Estas clases atómicas replicarán las propiedades de espaciado, tipografía y color de la interfaz.
+
+### A. Espaciado y Display
+
+| Utilidad | CSS Generado | Descripción |
+| :--- | :--- | :--- |
+| `.p-md` | `padding: var(--sk-space-md);` | Padding de 16px. |
+| `.my-lg` | `margin-top/bottom: var(--sk-space-lg);` | Margen vertical de 24px. |
+| `.flex-y-center` | `align-items: center;` | Alineación vertical común. |
+| `.flex-col-gap-sm` | `flex-direction: column; gap: var(--sk-space-sm);` | Columna con espaciado de 8px. |
+
+```css
+/* Utilidades de Espaciado */
+.p-md { padding: var(--sk-space-md); }
+.py-sm { padding-top: var(--sk-space-sm); padding-bottom: var(--sk-space-sm); }
+.mx-auto { margin-left: auto; margin-right: auto; }
+
+/* Utilidades de Flexbox */
+.flex { display: flex; }
+.flex-col { flex-direction: column; }
+.justify-between { justify-content: space-between; }
+.items-center { align-items: center; }
+
+/* Utilidades de Borde/Sombra */
+.border-light { border: 1px solid var(--sk-color-border-light); }
+.shadow-panel { box-shadow: var(--sk-shadow-panel); }
+.rounded-md { border-radius: var(--sk-radius-md); }
+```
+
+### B. Colores y Texto
+
+```css
+/* Colores de Fondo */
+.bg-white { background-color: var(--sk-color-bg-white); }
+.bg-secondary { background-color: var(--sk-color-secondary); }
+
+/* Colores de Texto */
+.text-dark { color: var(--sk-color-text-dark); }
+.text-sub { color: var(--sk-color-text-sub); }
+.text-primary { color: var(--sk-color-primary); }
+
+/* Estilos de Texto */
+.text-sm { font-size: 0.9em; }
+.text-lg { font-size: 1.1em; }
+.font-bold { font-weight: 700; }
+.font-medium { font-weight: 500; }
+```
+
+-----
+
+## 🧩 3. Clases de Componentes Específicos (SK Components)
+
+Estos estilos agrupan utilidades y estilos fijos para los elementos recurrentes de la interfaz de StreamYard.
+
+### A. Barra de Navegación Lateral (Side Nav / Sidebar)
+
+La barra de la izquierda y la derecha tienen un fondo gris muy claro o blanco, con líneas de división sutiles y texto denso.
+
+```css
+.sk-panel-left {
+ width: 200px; /* Ancho fijo para el panel izquierdo */
+ background-color: var(--sk-color-bg-white);
+ border-right: 1px solid var(--sk-color-border-light);
+ height: 100vh;
+ padding-top: var(--sk-space-md);
+}
+
+.sk-panel-right {
+ width: 250px; /* Ancho fijo para el panel derecho */
+ background-color: var(--sk-color-bg-white);
+ border-left: 1px solid var(--sk-color-border-light);
+ padding: var(--sk-space-md);
+ height: 100vh;
+}
+
+/* Estilo para los elementos de navegación (Mis Escenas, Comentarios, etc.) */
+.sk-nav-item {
+ @extend .py-sm;
+ @extend .px-md;
+ @extend .text-sm;
+ color: var(--sk-color-text-dark);
+ cursor: pointer;
+ transition: background-color 0.2s;
+}
+
+.sk-nav-item:hover {
+ background-color: var(--sk-color-secondary); /* Resaltado muy ligero al pasar el mouse */
+}
+
+/* Estado Activo (Demo Scene 2) */
+.sk-nav-item.is-active {
+ background-color: var(--sk-color-primary);
+ color: white;
+ font-weight: 500;
+}
+```
+
+### B. Botones de Acción Global
+
+Hay dos tipos de botones principales: Azul (Primario) y Rojo (Accento/Grabar).
+
+```css
+/* Botón Primario: "Agregar destino" / "Presentar o invitar" */
+.sk-btn-primary {
+ background-color: var(--sk-color-primary);
+ color: white;
+ padding: 8px 16px;
+ border: none;
+ border-radius: var(--sk-radius-md);
+ font-size: var(--sk-font-size-base);
+ font-weight: 500;
+ cursor: pointer;
+ box-shadow: var(--sk-shadow-panel);
+ transition: background-color 0.2s;
+}
+
+.sk-btn-primary:hover {
+ background-color: #1565c0; /* Azul ligeramente más oscuro */
+}
+
+/* Botón de Énfasis: "Grabar" / Botón de Salir (Rojo) */
+.sk-btn-accent {
+ background-color: var(--sk-color-accent);
+ color: white;
+ padding: 10px 20px;
+ border: none;
+ border-radius: var(--sk-radius-md);
+ font-size: 16px;
+ font-weight: 700;
+ cursor: pointer;
+ transition: background-color 0.2s;
+}
+
+.sk-btn-accent:hover {
+ background-color: #d83c3c; /* Rojo ligeramente más oscuro */
+}
+```
+
+### C. Contenedor de Previsualización de Escena
+
+El área central negra debe tener un borde y una sombra suaves.
+
+```css
+.sk-preview-main {
+ background-color: black;
+ color: white;
+ aspect-ratio: 16 / 9; /* Mantener la proporción de video */
+ width: 100%;
+ margin-bottom: var(--sk-space-md);
+ border-radius: var(--sk-radius-md);
+ box-shadow: 0 0 5px rgba(0, 0, 0, 0.2);
+ position: relative;
+ overflow: hidden;
+}
+
+/* El elemento del borde/fondo blanco bajo el video */
+.sk-bottom-controls-bar {
+ background-color: var(--sk-color-bg-white);
+ padding: var(--sk-space-md);
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ border-radius: var(--sk-radius-md);
+ box-shadow: var(--sk-shadow-panel);
+}
+```
+
+## 📝 4. Ejemplo de Uso en HTML
+
+Así usarías las clases de **StreamKit** para construir la interfaz (simulando los botones de la derecha):
+
+```html
+
+```
\ No newline at end of file
diff --git a/docs/streamyard_interface (1).html b/docs/streamyard_interface (1).html
new file mode 100644
index 0000000..ecc5ae5
--- /dev/null
+++ b/docs/streamyard_interface (1).html
@@ -0,0 +1,979 @@
+
+
+
+
+
+
+
+
+
+
+
+ ◀
+
+
+
+
720p
+
+ Producido con
+ StreamYard
+
+
+
+ ▶
+
+
+
+
+
+
+ 👤
+ 👥
+ 👤👥
+ 👥👥
+ ✓
+ ✏️
+ ➕
+ ⚙️
+
+
+
+
+
👤
+
+ 🎤 Cesar Mendivil
+
+
+
+ 👤➕
+ Presentar o invitar
+
+
+
+
+
+
+ 🎤
+ 📹
+ 🖥️
+ 👥
+ ⚙️
+ 🚪
+ ❓
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/streamyard_interface (2).html b/docs/streamyard_interface (2).html
new file mode 100644
index 0000000..3a25b65
--- /dev/null
+++ b/docs/streamyard_interface (2).html
@@ -0,0 +1,1000 @@
+
+
+
+
+
+
+
+
+
+
+
+ ◀
+
+
+
+
+
+
720p
+
+ Producido con
+ StreamYard
+
+
+
+ ▶
+
+
+
+
+
+ 👤
+ 👥
+ 👤👥
+ 👥👥
+ ✓
+ ✏️
+ ➕
+ ⚙️
+
+
+
+
+
+
+ 🎤
+ ⋮
+
+
👤
+
+ 🎤 Cesar Mendivil
+
+
+
+ ➕
+ Presentar o invitar
+
+
+
+
+
+
+
+
+
+
diff --git a/tailwind.config.shared.js b/tailwind.config.shared.js
index d2b7730..055c6a0 100644
--- a/tailwind.config.shared.js
+++ b/tailwind.config.shared.js
@@ -57,12 +57,37 @@ module.exports = {
800: '#1e40af',
900: '#1e3a8a',
},
+ /* Prejoin-specific tokens */
+ video: '#0a0a1a',
+ badge: '#6366f1',
+ 'badge-alpha': 'rgba(99,102,241,0.9)',
+ mic: {
+ from: '#22c55e',
+ to: '#86efac',
+ },
+ control: {
+ border: '#e5e5e5',
+ hover: '#fee2e2',
+ disabledBg: '#fecaca',
+ disabledText: '#dc2626',
+ },
+ kbd: '#374151',
+ input: {
+ border: '#d1d5db',
+ placeholder: '#9ca3af',
+ },
+ submit: {
+ DEFAULT: '#2563eb',
+ hover: '#1d4ed8',
+ active: '#1e40af',
+ },
},
boxShadow: {
sm: '0 2px 4px 0 rgb(60 72 88 / 0.15)',
DEFAULT: '0 0 3px rgb(60 72 88 / 0.15)',
md: '0 5px 13px rgb(60 72 88 / 0.20)',
lg: '0 10px 25px -3px rgb(60 72 88 / 0.15)',
+ controls: '0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.06)',
},
spacing: {
0.75: '0.1875rem',
@@ -72,6 +97,18 @@ module.exports = {
'1200': '71.25rem',
'992': '60rem',
'768': '45rem',
+ 'prejoin-container': '628px',
+ },
+ borderRadius: {
+ panel: '12px',
+ btn: '8px',
+ pill: '20px',
+ meter: '16px',
+ },
+ fontSize: {
+ 'h1-prejoin': '28px',
+ 'btn-sm': '13px',
+ 'btn-lg': '15px',
},
},
},