wave-ai/doc/presentacion_kinetix.html
Jessica Orozco 93b1da4c6f update table
2026-06-18 09:56:39 -04:00

2097 lines
101 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>Propuesta Corporativa 2026 — Plataforma de Intranet</title>
<!-- Reveal.js CDN -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/reveal.js@5.1.0/dist/reveal.css" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/reveal.js@5.1.0/dist/theme/black.css" />
<!-- Google Fonts -->
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link
href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;600;700;900&family=Outfit:wght@300;400;600;700;900&family=Fira+Code:wght@400;600&display=swap"
rel="stylesheet" />
<style>
/* ─── Base Overrides ──────────────────────────────── */
:root {
--gold: #C9973C;
--gold-light: #F0C060;
--ivory: #F5F4F1;
--navy: #0D1B2A;
--plum: #1A0E2E;
--viridian: #0A2520;
--espresso: #1C0E08;
--ink: #0F0D0A;
--muted: rgba(255, 255, 255, 0.45);
--border: rgba(255, 255, 255, 0.09);
}
.reveal-viewport {
background: #080608;
}
.reveal {
font-family: 'Inter', sans-serif;
color: #fff;
}
.reveal h1,
.reveal h2,
.reveal h3,
.reveal h4 {
font-family: 'Inter', sans-serif;
font-weight: 900;
letter-spacing: -0.02em;
text-transform: none;
line-height: 1.1;
}
.reveal p,
.reveal li {
font-family: 'Outfit', sans-serif;
font-weight: 300;
}
/* ─── Slide base ──────────────────────────────────── */
.reveal .slides section {
padding: 0;
height: 100%;
box-sizing: border-box;
top: 0 !important;
}
.reveal .slides section.present {
display: flex !important;
flex-direction: column;
align-items: flex-start;
justify-content: flex-start;
}
/* ─── Utility ─────────────────────────────────────── */
.gold {
color: var(--gold);
}
.muted {
color: var(--muted);
}
.mono {
font-family: 'Fira Code', monospace;
font-size: 0.82em;
}
.tag {
display: inline-block;
padding: 3px 12px;
border-radius: 9999px;
border: 1px solid rgba(201, 151, 60, 0.35);
color: var(--gold);
font-size: 0.55em;
font-weight: 700;
letter-spacing: 0.14em;
text-transform: uppercase;
margin-bottom: 12px;
}
.dot-pulse {
display: inline-block;
width: 8px;
height: 8px;
border-radius: 50%;
background: #34D399;
margin-right: 8px;
animation: pulse 2s ease-in-out infinite;
}
@keyframes pulse {
0%,
100% {
opacity: 1
}
50% {
opacity: .3
}
}
.reveal .slides section.cover-slide {
background: linear-gradient(135deg, var(--navy) 0%, var(--plum) 55%, var(--viridian) 100%);
align-items: center;
justify-content: center;
text-align: center;
position: relative;
overflow: hidden;
}
/* ─── Slide: cover ────────────────────────────────── */
.cover-slide::before {
content: '';
position: absolute;
top: -120px;
right: -120px;
width: 500px;
height: 500px;
background: radial-gradient(circle, rgba(201, 151, 60, 0.14) 0%, transparent 70%);
pointer-events: none;
}
.cover-slide::after {
content: '';
position: absolute;
bottom: -80px;
left: -80px;
width: 400px;
height: 400px;
background: radial-gradient(circle, rgba(10, 37, 32, 0.8) 0%, transparent 70%);
pointer-events: none;
}
.cover-brand {
display: flex;
align-items: center;
justify-content: center;
gap: 16px;
margin-bottom: 24px;
position: relative;
z-index: 1;
}
.cover-brand-icon {
width: 56px;
height: 56px;
background: rgba(201, 151, 60, 0.15);
border-radius: 16px;
display: flex;
align-items: center;
justify-content: center;
}
.cover-brand-icon svg {
width: 32px;
height: 32px;
}
.cover-title {
font-size: 3.4em !important;
margin: 0 !important;
background: linear-gradient(90deg, #fff 60%, var(--gold-light));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
position: relative;
z-index: 1;
}
.cover-sub {
font-size: 1.05em;
color: rgba(255, 255, 255, 0.50);
font-weight: 300;
margin: 12px 0 40px !important;
position: relative;
z-index: 1;
}
.cover-meta {
font-size: 0.6em;
color: rgba(255, 255, 255, 0.30);
letter-spacing: 0.12em;
text-transform: uppercase;
position: relative;
z-index: 1;
}
.cover-divider {
width: 60px;
height: 2px;
background: var(--gold);
border-radius: 9999px;
margin: 18px auto;
}
/* ─── Slide: content ──────────────────────────────── */
.content-slide {
padding: 52px 64px !important;
align-items: flex-start !important;
}
.content-slide h2 {
font-size: 1.7em !important;
margin: 8px 0 28px !important;
color: #fff;
}
.content-slide h3 {
font-size: 1.1em !important;
color: var(--gold) !important;
margin: 0 0 10px !important;
}
/* ─── Cards ───────────────────────────────────────── */
.cards-row {
display: grid;
gap: 16px;
width: 100%;
}
.cards-row.cols-2 {
grid-template-columns: 1fr 1fr;
}
.cards-row.cols-3 {
grid-template-columns: 1fr 1fr 1fr;
}
.cards-row.cols-4 {
grid-template-columns: 1fr 1fr 1fr 1fr;
}
.cards-row.cols-5 {
grid-template-columns: repeat(5, 1fr);
}
.jewel-card {
border-radius: 16px;
padding: 24px 20px;
position: relative;
overflow: hidden;
border: 1px solid rgba(255, 255, 255, 0.08);
transition: all 0.3s ease;
}
.jewel-card::before {
content: '';
position: absolute;
top: -40px;
right: -40px;
width: 160px;
height: 160px;
background: radial-gradient(circle, var(--glow, rgba(201, 151, 60, 0.12)) 0%, transparent 70%);
pointer-events: none;
}
.jewel-card--navy {
background: var(--navy);
--glow: rgba(201, 151, 60, 0.14);
}
.jewel-card--plum {
background: var(--plum);
--glow: rgba(124, 58, 237, 0.18);
}
.jewel-card--viridian {
background: var(--viridian);
--glow: rgba(16, 185, 129, 0.15);
}
.jewel-card--espresso {
background: var(--espresso);
--glow: rgba(251, 146, 60, 0.15);
}
.jewel-card--slate {
background: #111827;
--glow: rgba(99, 102, 241, 0.14);
}
.jewel-card .card-icon {
font-size: 1.8em;
margin-bottom: 12px;
display: block;
}
.jewel-card h3 {
font-size: 0.75em !important;
font-weight: 900;
letter-spacing: 0.14em;
text-transform: uppercase;
color: #fff !important;
margin: 0 0 6px !important;
}
.jewel-card p {
font-size: 0.62em;
color: rgba(255, 255, 255, 0.42);
line-height: 1.65;
margin: 0 !important;
}
.jewel-card:hover {
transform: translateY(-5px);
border-color: rgba(201, 151, 60, 0.4);
}
/* ─── Light cards ─────────────────────────────────── */
.light-card {
background: rgba(255, 255, 255, 0.04);
border: 1px solid rgba(255, 255, 255, 0.08);
border-radius: 14px;
padding: 20px;
transition: all 0.2s ease;
}
.light-card h3 {
font-size: 0.78em !important;
color: #fff !important;
margin: 0 0 8px !important;
}
.light-card p {
font-size: 0.62em;
color: var(--muted);
line-height: 1.65;
margin: 0 !important;
}
.light-card:hover {
background: rgba(255, 255, 255, 0.07);
border-color: rgba(255, 255, 255, 0.15);
}
/* ─── Table ───────────────────────────────────────── */
.prop-table {
width: 100%;
border-collapse: collapse;
font-size: 0.58em;
}
.prop-table th {
text-align: left;
padding: 10px 14px;
font-size: 0.9em;
font-weight: 700;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--gold);
border-bottom: 1px solid rgba(201, 151, 60, 0.3);
}
.prop-table td {
padding: 10px 14px;
color: rgba(255, 255, 255, 0.75);
border-bottom: 1px solid rgba(255, 255, 255, 0.06);
line-height: 1.5;
vertical-align: top;
}
.prop-table tr:hover td {
background: rgba(255, 255, 255, 0.03);
}
.check {
color: #34D399;
font-weight: 900;
}
.warn {
color: #FBBF24;
}
.cross {
color: #F87171;
}
.highlight-td {
background: rgba(201, 151, 60, 0.08);
border-left: 2px solid var(--gold);
font-weight: bold;
}
/* ─── Timeline ────────────────────────────────────── */
.timeline {
display: flex;
flex-direction: column;
gap: 0;
width: 100%;
position: relative;
}
.timeline::before {
content: '';
position: absolute;
left: 18px;
top: 0;
bottom: 0;
width: 2px;
background: linear-gradient(to bottom, var(--gold), rgba(201, 151, 60, 0.1));
}
.tl-item {
display: flex;
gap: 24px;
padding: 0 0 15px 0;
position: relative;
}
.tl-dot {
width: 38px;
height: 38px;
border-radius: 50%;
background: var(--navy);
border: 2px solid var(--gold);
flex-shrink: 0;
display: flex;
align-items: center;
justify-content: center;
font-size: 0.85em;
font-weight: 900;
color: var(--gold);
z-index: 1;
}
.tl-content {
flex: 1;
padding-top: 4px;
}
.tl-phase {
font-size: 0.55em;
font-weight: 700;
letter-spacing: 0.16em;
text-transform: uppercase;
color: var(--gold);
margin-bottom: 2px;
}
.tl-title {
font-size: 0.75em !important;
color: #fff !important;
margin: 0 0 4px !important;
font-weight: 700;
}
.tl-desc {
font-size: 0.6em;
color: var(--muted);
line-height: 1.5;
}
/* ─── Stack pills ─────────────────────────────────── */
.stack-pill {
display: inline-flex;
align-items: center;
gap: 8px;
background: rgba(255, 255, 255, 0.06);
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: 10px;
padding: 10px 16px;
font-size: 0.62em;
color: #fff;
font-family: 'Fira Code', monospace;
}
.stack-pill .version {
color: var(--gold);
font-weight: 700;
}
.stack-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 10px;
width: 100%;
}
/* ─── Status badge ────────────────────────────────── */
.status-done {
color: #34D399;
font-weight: 700;
}
.status-wip {
color: #FBBF24;
font-weight: 700;
}
.status-planned {
color: #94A3B8;
font-weight: 700;
}
/* ─── Big number KPI ──────────────────────────────── */
.kpi-row {
display: flex;
gap: 24px;
width: 100%;
}
.kpi-box {
flex: 1;
background: rgba(255, 255, 255, 0.04);
border: 1px solid rgba(255, 255, 255, 0.08);
border-top: 3px solid var(--accent, var(--gold));
border-radius: 14px;
padding: 22px 18px;
}
.kpi-box .kpi-num {
font-size: 2em;
font-weight: 900;
color: #fff;
line-height: 1;
margin-bottom: 4px;
}
.kpi-box .kpi-label {
font-size: 0.55em;
text-transform: uppercase;
letter-spacing: 0.12em;
color: var(--muted);
font-weight: 700;
}
.kpi-box .kpi-sub {
font-size: 0.58em;
color: var(--accent, var(--gold));
font-weight: 600;
margin-top: 2px;
}
/* ─── SSO Flow Diagram ────────────────────────────── */
.sso-flow {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
margin-top: 25px;
font-size: 0.55em;
}
.sso-node {
background: rgba(255, 255, 255, 0.04);
border: 1px solid rgba(255, 255, 255, 0.08);
border-radius: 12px;
padding: 15px 12px;
width: 18%;
text-align: center;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
}
.sso-node.active-directory {
border-color: #34D399;
background: rgba(52, 211, 153, 0.04);
}
.sso-node.nest-api {
border-color: #F43F5E;
background: rgba(244, 63, 94, 0.04);
}
.sso-arrow {
color: var(--gold);
font-size: 1.5em;
font-weight: bold;
}
.sso-node h4 {
font-size: 0.9em !important;
color: #fff !important;
margin: 0 0 6px 0 !important;
text-transform: uppercase;
letter-spacing: 0.05em;
}
.sso-node p {
color: var(--muted);
font-size: 0.85em;
line-height: 1.4;
margin: 0 !important;
}
/* ─── Folder Tree Diagram ─────────────────────────── */
.tree-structure {
font-family: 'Fira Code', monospace;
font-size: 0.52em;
color: rgba(255, 255, 255, 0.8);
background: rgba(0, 0, 0, 0.2);
border: 1px solid var(--border);
border-radius: 10px;
padding: 16px 24px;
width: 100%;
box-sizing: border-box;
line-height: 1.5;
}
.tree-dir {
color: var(--gold-light);
font-weight: bold;
}
.tree-file {
color: #fff;
}
.tree-comment {
color: var(--muted);
font-size: 0.9em;
margin-left: 10px;
}
/* ─── Gantt Chart Diagram ─────────────────────────── */
.gantt-chart {
display: flex;
flex-direction: column;
gap: 10px;
width: 100%;
margin-top: 10px;
}
.gantt-row {
display: flex;
align-items: center;
font-size: 0.55em;
}
.gantt-label {
width: 220px;
font-weight: 700;
color: #fff;
text-align: right;
padding-right: 15px;
flex-shrink: 0;
}
.gantt-timeline-container {
flex: 1;
position: relative;
height: 24px;
background: rgba(255, 255, 255, 0.03);
border-radius: 6px;
border: 1px solid rgba(255, 255, 255, 0.05);
}
.gantt-bar {
position: absolute;
height: 100%;
border-radius: 6px;
display: flex;
align-items: center;
padding-left: 10px;
font-weight: 700;
color: #000;
font-size: 0.85em;
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.3);
}
.gantt-axis {
display: flex;
margin-left: 220px;
border-top: 1px dashed rgba(255, 255, 255, 0.1);
padding-top: 6px;
font-family: 'Fira Code', monospace;
font-size: 0.52em;
color: var(--muted);
}
.gantt-axis span {
flex: 1;
text-align: center;
}
/* ─── Color Swatch UI ─────────────────────────────── */
.color-swatch-row {
display: flex;
gap: 12px;
width: 100%;
margin-top: 15px;
}
.color-swatch-card {
flex: 1;
border-radius: 12px;
padding: 16px;
border: 1px solid rgba(255, 255, 255, 0.08);
font-size: 0.55em;
}
.color-box {
height: 40px;
border-radius: 8px;
margin-bottom: 8px;
border: 1px solid rgba(255, 255, 255, 0.1);
}
.color-swatch-card h4 {
font-size: 1.1em !important;
color: #fff !important;
margin: 0 0 4px 0 !important;
text-transform: uppercase;
letter-spacing: 0.05em;
}
.color-swatch-card p {
color: var(--muted);
margin: 0 !important;
}
/* ─── Closing slide ───────────────────────────────── */
.closing-slide {
background: linear-gradient(135deg, var(--ink) 0%, #0d0a18 100%) !important;
align-items: center !important;
justify-content: center !important;
text-align: center !important;
}
.closing-contact {
margin-top: 24px;
display: flex;
flex-direction: column;
align-items: center;
gap: 8px;
}
.closing-contact span {
font-size: 0.65em;
color: rgba(255, 255, 255, 0.40);
}
.closing-contact strong {
color: rgba(255, 255, 255, 0.75);
font-weight: 600;
}
/* ─── Progress bar ────────────────────────────────── */
.reveal .progress {
background: rgba(201, 151, 60, 0.15);
}
.reveal .progress span {
background: var(--gold);
}
/* ─── Navigation ──────────────────────────────────── */
.reveal .controls {
color: var(--gold);
}
.reveal .slide-number {
color: var(--gold);
font-family: 'Fira Code', monospace;
font-size: 0.7em;
}
/* ─── Slide number box ────────────────────────────── */
.slide-label {
position: absolute;
top: 24px;
right: 36px;
font-family: 'Fira Code', monospace;
font-size: 0.52em;
color: rgba(255, 255, 255, 0.20);
letter-spacing: 0.1em;
}
/* ─── Print / PDF ─────────────────────────────────── */
@media print {
.reveal .slides {
zoom: 0.7;
}
}
</style>
</head>
<body>
<div class="reveal">
<div class="slides">
<!-- ══════════════════════════════════════════════
SLIDE 1 — COVER
Fiel a la propuesta /doc/propuesta_App.md
SIN NOMBRE DE APP
══════════════════════════════════════════════ -->
<section class="cover-slide">
<div class="cover-brand">
<div class="cover-brand-icon">
<svg viewBox="0 0 24 24" fill="none">
<path d="M12 2L22 7L12 12L2 7L12 2Z" stroke="#C9973C" stroke-width="1.8" stroke-linejoin="round" />
<path d="M2 12L12 17L22 12" stroke="#C9973C" stroke-width="1.8" stroke-linecap="round"
stroke-linejoin="round" />
<path d="M2 17L12 22L22 17" stroke="#C9973C" stroke-width="1.8" stroke-linecap="round"
stroke-linejoin="round" />
</svg>
</div>
</div>
<h1 class="cover-title" style="font-size: 2.8em !important;">Intranet Corporativa</h1>
<p class="cover-sub">Plataforma de Nueva Generación · Propuesta Técnica y Comercial</p>
<div class="cover-divider"></div>
<p class="cover-meta">
<span class="dot-pulse"></span>
Pranical · Junio 2026
</p>
</section>
<!-- ══════════════════════════════════════════════
SLIDE 2 — RESUMEN EJECUTIVO
══════════════════════════════════════════════ -->
<section class="content-slide" style="background:#0a0810;">
<div class="slide-label">01 / 19</div>
<div class="tag">Resumen Ejecutivo</div>
<h2>Una plataforma integrada y <span class="gold">lista para producción</span></h2>
<div class="kpi-row" style="margin-top: 8px;">
<div class="kpi-box" style="--accent:#C9973C;">
<div class="kpi-num">5</div>
<div class="kpi-label">Módulos core</div>
<div class="kpi-sub">Directorio · Espacios · Workflow · CMS · Tickets</div>
</div>
<div class="kpi-box" style="--accent:#34D399;">
<div class="kpi-num">SSO</div>
<div class="kpi-label">Azure Entra ID</div>
<div class="kpi-sub">Autenticación nativa de nivel empresarial</div>
</div>
<div class="kpi-box" style="--accent:#A78BFA;">
<div class="kpi-num">100%</div>
<div class="kpi-label">Código Abierto</div>
<div class="kpi-sub">Angular 18 · NestJS 10 · PostgreSQL 15</div>
</div>
</div>
<div
style="margin-top:22px; padding:16px 20px; background:rgba(201,151,60,0.07); border-left:3px solid var(--gold); border-radius:0 10px 10px 0; width: 100%; box-sizing: border-box;">
<p style="font-size:0.65em; color:rgba(255,255,255,0.75); line-height:1.75; margin:0;">
<strong>LA PLATAFORMA NO ES UN PROTOTIPO.</strong> Se presenta como una solución central de intranet
corporativa completamente funcional en desarrollo activo, con frontends y backends estables. Consolida
procesos dispersos, garantiza seguridad empresarial y otorga propiedad total del código al cliente sin
dependencias ni vendor lock-in.
</p>
</div>
</section>
<!-- ══════════════════════════════════════════════
SLIDE 3 — EL PROBLEMA
══════════════════════════════════════════════ -->
<section class="content-slide" style="background:#080608;">
<div class="slide-label">02 / 19</div>
<div class="tag">El Diagnóstico</div>
<h2>El impacto de la <span class="gold">fragmentación de herramientas</span></h2>
<table class="prop-table" style="margin-top: 12px;">
<thead>
<tr>
<th style="width: 40%;">Síntoma Operativo</th>
<th style="width: 60%;">Impacto en el Negocio</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Fragmentación de herramientas</strong></td>
<td>Pérdida de tiempo, ineficiencia operativa y errores de coordinación interdepartamental.</td>
</tr>
<tr>
<td><strong>Sin integración con Active Directory</strong></td>
<td>Onboarding y offboarding lentos, gestión manual de accesos y serios riesgos de seguridad.</td>
</tr>
<tr>
<td><strong>Reservas de salas sin control centralizado</strong></td>
<td>Conflictos de disponibilidad, overbooking y salas de reuniones subutilizadas.</td>
</tr>
<tr>
<td><strong>Aprobaciones de contenidos por correo/chats</strong></td>
<td>Falta absoluta de trazabilidad, cuellos de botella operativos y pérdida de historial.</td>
</tr>
<tr>
<td><strong>Directorio de personal desactualizado</strong></td>
<td>Dificultad para localizar habilidades internas, baja colaboración y silos de información.</td>
</tr>
</tbody>
</table>
</section>
<!-- ══════════════════════════════════════════════
SLIDE 4 — LA SOLUCIÓN
══════════════════════════════════════════════ -->
<section class="content-slide" style="background:#08060e;">
<div class="slide-label">03 / 19</div>
<div class="tag">La Propuesta</div>
<h2>Un ecosistema. <span class="gold">Todos los procesos internos en uno.</span></h2>
<div
style="background: rgba(255,255,255,0.02); border: 1px solid var(--border); border-radius: 16px; padding: 24px; width: 100%; box-sizing: border-box; margin-top: 10px;">
<div
style="display: flex; justify-content: space-around; align-items: center; text-align: center; margin-bottom: 20px;">
<div
style="background: var(--navy); border: 1px solid rgba(201,151,60,0.3); border-radius: 12px; padding: 12px; width: 18%;">
<span style="font-size: 1.2em;">🏢</span>
<h4 style="font-size: 0.6em !important; margin: 4px 0 0 0 !important; color: #fff !important;">Directorio
(IAM)</h4>
</div>
<div
style="background: var(--plum); border: 1px solid rgba(201,151,60,0.3); border-radius: 12px; padding: 12px; width: 18%;">
<span style="font-size: 1.2em;">📅</span>
<h4 style="font-size: 0.6em !important; margin: 4px 0 0 0 !important; color: #fff !important;">Espacios
&amp; IA</h4>
</div>
<div
style="background: var(--viridian); border: 1px solid rgba(201,151,60,0.3); border-radius: 12px; padding: 12px; width: 18%;">
<span style="font-size: 1.2em;">⚙️</span>
<h4 style="font-size: 0.6em !important; margin: 4px 0 0 0 !important; color: #fff !important;">
Aprobaciones</h4>
</div>
<div
style="background: var(--espresso); border: 1px solid rgba(201,151,60,0.3); border-radius: 12px; padding: 12px; width: 18%;">
<span style="font-size: 1.2em;">📰</span>
<h4 style="font-size: 0.6em !important; margin: 4px 0 0 0 !important; color: #fff !important;">Info Hub
CMS</h4>
</div>
<div
style="background: #111827; border: 1px solid rgba(201,151,60,0.3); border-radius: 12px; padding: 12px; width: 18%;">
<span style="font-size: 1.2em;">🎫</span>
<h4 style="font-size: 0.6em !important; margin: 4px 0 0 0 !important; color: #fff !important;">Ticketing
SLA</h4>
</div>
</div>
<div
style="display: flex; justify-content: space-between; align-items: center; border-top: 1px dashed rgba(255,255,255,0.1); padding-top: 16px; font-size: 0.6em;">
<div style="text-align: left;"><span class="gold">🔑 Autenticación SSO:</span> Directorio Activo</div>
<div style="text-align: center;"><span class="gold">🐘 Persistencia:</span> PostgreSQL (ACID) &amp; Prisma
ORM</div>
<div style="text-align: right;"><span class="gold">🐳 Infraestructura:</span> Docker / Cloud Ready</div>
</div>
</div>
<p style="font-size: 0.65em; color: var(--muted); margin-top: 20px; text-align: center; width: 100%;">
La solución consolida la seguridad y la experiencia del usuario bajo un mismo diseño unificado y coherente.
</p>
</section>
<!-- ══════════════════════════════════════════════
SLIDE 5 — MÓDULO 1: DIRECTORIO CORPORATIVO
══════════════════════════════════════════════ -->
<section class="content-slide"
style="background:#0b0510; width: 100vw; height: 100vh; max-width: 100%; max-height: 100%; overflow: hidden; box-sizing: border-box; padding: 20px;">
<div class="slide-label">04 / 19</div>
<div class="tag">Módulos de la Solución</div>
<h2 style="margin-bottom: 15px;">Módulo 1: Directorio Corporativo <span class="gold">(IAM / HR)</span></h2>
<div class="w-50 h-100 cards-row cols-2"
style="display: flex; gap: 20px; height: calc(100% - 120px); overflow-y: auto;">
<div style="display: flex; flex-direction: column; gap: 14px; flex: 1;">
<div class="light-card" style="background: rgba(255,255,255,0.05); padding: 15px; border-radius: 8px;">
<h3 style="margin: 0 0 8px 0; font-size: 1.1rem;">👥 Sincronización Directorio Activo</h3>
<p style="margin: 0; font-size: 0.9rem; color: #ccc;">Lectura directa de usuarios, departamentos y
jerarquías sin replicar datos sensibles de manera local.</p>
</div>
<div class="light-card" style="background: rgba(255,255,255,0.05); padding: 15px; border-radius: 8px;">
<h3 style="margin: 0 0 8px 0; font-size: 1.1rem;">🔍 Búsqueda Reactiva en Tiempo Real</h3>
<p style="margin: 0; font-size: 0.9rem; color: #ccc;">Búsqueda instantánea integrada con Angular Signals.
Filtros por rol, departamento o habilidades específicas de manera fluida.</p>
</div>
</div>
<div style="display: flex; flex-direction: column; gap: 14px; flex: 1;">
<div class="light-card" style="background: rgba(255,255,255,0.05); padding: 15px; border-radius: 8px;">
<h3 style="margin: 0 0 8px 0; font-size: 1.1rem;">🆔 Perfiles de Colaborador Detallados</h3>
<p style="margin: 0; font-size: 0.9rem; color: #ccc;">Muestra ID del directorio (AD-XXXX), tarifa por
hora, badge de calificación y datos de contacto integrados.</p>
</div>
<div class="light-card" style="background: rgba(255,255,255,0.05); padding: 15px; border-radius: 8px;">
<h3 style="margin: 0 0 8px 0; font-size: 1.1rem;">⚡ Interfaz Ergónomica e Inmersiva</h3>
<p style="margin: 0; font-size: 0.9rem; color: #ccc;">Tarjetas de personal dinámicas con
micro-interacciones de hover y navegación rápida a información de contacto.</p>
</div>
</div>
</div>
</section>
<!-- ══════════════════════════════════════════════
SLIDE 6 — MÓDULO 2: GESTIÓN DE ESPACIOS
══════════════════════════════════════════════ -->
<section class="content-slide"
style="background:#080608; width: 100vw; height: 100vh; max-width: 100%; max-height: 100%; overflow: hidden; box-sizing: border-box; padding: 25px; display: flex; flex-direction: column;">
<div class="slide-label">05 / 19</div>
<div class="tag">Módulos de la Solución</div>
<h2 style="margin-bottom: 12px; flex-shrink: 0;">Módulo 2: Autogestión de Espacios y Reservas <span
class="gold">(PMS)</span></h2>
<div class="cards-row cols-2"
style="margin-top: 5px; display: flex; gap: 20px; flex-grow: 1; min-height: 0; width: 100%;">
<div style="display: flex; flex-direction: column; gap: 10px; flex: 1; min-height: 0;">
<div class="light-card"
style="padding: 12px; background: rgba(255,255,255,0.04); border-radius: 8px; flex: 1; display: flex; flex-direction: column; justify-content: center; min-height: 0;">
<h3 style="margin: 0 0 3px 0; font-size: 1.05rem;">📅 Calendario Interactivo</h3>
<p style="margin: 0; font-size: 0.8rem; color: #ccc; line-height: 1.3;">Vistas completas de Mes, Semana y
Día. Clic en bloques disponibles redirige al formulario con parámetros precargados.</p>
</div>
<div class="light-card"
style="padding: 12px; background: rgba(255,255,255,0.04); border-radius: 8px; flex: 1; display: flex; flex-direction: column; justify-content: center; min-height: 0;">
<h3 style="margin: 0 0 3px 0; font-size: 1.05rem;">🛡️ Anti-Overbooking Garantizado</h3>
<p style="margin: 0; font-size: 0.8rem; color: #ccc; line-height: 1.3;">Control transaccional estricto en
PostgreSQL, asegurando consistencia absoluta sin duplicidad de reservas.</p>
</div>
<div class="light-card"
style="padding: 12px; background: rgba(255,255,255,0.04); border-radius: 8px; flex: 1; display: flex; flex-direction: column; justify-content: center; min-height: 0;">
<h3 style="margin: 0 0 3px 0; font-size: 1.05rem;">⚙️ Filtros por Tipo de Activo</h3>
<p style="margin: 0; font-size: 0.8rem; color: #ccc; line-height: 1.3;">Filtrado de recursos en tiempo
real: salas de reuniones, equipos tecnológicos, vehículos y áreas comunes.</p>
</div>
</div>
<div
style="background: var(--plum, #1f142e); border-radius: 16px; padding: 20px; border: 1px solid rgba(255,255,255,0.08); display: flex; flex-direction: column; gap: 10px; flex: 1; min-height: 0; justify-content: space-between;">
<div style="flex-shrink: 0;">
<div
style="font-size: 0.65em; font-weight: 700; letter-spacing: 0.16em; text-transform: uppercase; color: rgba(201,151,60,0.8); margin-bottom: 4px;">
🤖 ASISTENTE DE IA INTEGRADO (NLP)
</div>
<p style="font-size: 0.8em; color: rgba(255,255,255,0.7); line-height: 1.4; margin: 0 !important;">
El usuario puede agendar recursos usando lenguaje natural de forma intuitiva:
</p>
</div>
<div
style="background: rgba(0,0,0,0.3); border-radius: 10px; font-family: 'Fira Code', monospace; font-size: 10px; color: rgba(255,255,255,0.75); line-height: 1.6; flex-grow: 1; display: flex; flex-direction: column; justify-content: center; min-height: 0;">
<span style="color: var(--gold, #c9973c);">Entrada libre:</span>
<span style="color: #fff; font-style: italic;">"Reservar la sala Londres para mañana a las 10 am para 8
personas"</span>
<br />
<span style="color: #34D399; margin-top: 4px; display: inline-block;">Variables detectadas por IA:</span>
<div style="margin-left: 6px; color: rgba(255,255,255,0.85);">
• Espacio: London Hall (ID: SALA-02)<br />
• Fecha: 2026-06-17 (Calculado)<br />
• Hora: 10:00 AM - 11:00 AM<br />
• Participantes: 8 colaboradores
</div>
</div>
</div>
</div>
</section>
<!-- ══════════════════════════════════════════════
SLIDE 7 — MÓDULO 3: WORKFLOW DE APROBACIÓN
══════════════════════════════════════════════ -->
<section class="content-slide"
style="background:#0a0510; width: 100vw; height: 100vh; max-width: 100%; max-height: 100%; overflow: hidden; box-sizing: border-box; padding: 25px; display: flex; flex-direction: column;">
<div class="slide-label">06 / 19</div>
<div class="tag">Módulos de la Solución</div>
<h2 style="margin-bottom: 12px; flex-shrink: 0;">Módulo 3: Workflow de Aprobación y Publicación </h2>
<div class="cards-row cols-2"
style="margin-top: 5px; display: flex; gap: 20px; flex-grow: 1; min-height: 0; width: 100%;">
<div style="display: flex; flex-direction: column; gap: 12px; flex: 1; min-height: 0;">
<div class="light-card"
style="padding: 15px; background: rgba(255,255,255,0.04); border-radius: 8px; flex: 1; display: flex; flex-direction: column; justify-content: center; min-height: 0;">
<h3 style="margin: 0 0 4px 0; font-size: 1.05rem;">⚙️ Motor de Reglas Jerárquicas</h3>
<p style="margin: 0; font-size: 0.82rem; color: #ccc; line-height: 1.35;">Flujo estructurado multinivel
basado en roles de Active Directory. Asigna aprobadores de manera automática según el departamento.</p>
</div>
<div class="light-card"
style="padding: 15px; background: rgba(255,255,255,0.04); border-radius: 8px; flex: 1; display: flex; flex-direction: column; justify-content: center; min-height: 0;">
<h3 style="margin: 0 0 4px 0; font-size: 1.05rem;">📈 Trazabilidad de Estados</h3>
<p style="margin: 0; font-size: 0.82rem; color: #ccc; line-height: 1.35;">Control exacto del estado de
cada solicitud (Borrador → En Aprobación → Aprobado → Publicado) con auditoría histórica detallada.</p>
</div>
</div>
<div style="display: flex; flex-direction: column; gap: 12px; flex: 1; min-height: 0;">
<div class="light-card"
style="padding: 15px; background: rgba(255,255,255,0.04); border-radius: 8px; flex: 1; display: flex; flex-direction: column; justify-content: center; min-height: 0;">
<h3 style="margin: 0 0 4px 0; font-size: 1.05rem;">🔔 Notificaciones y Alertas Reactivas</h3>
<p style="margin: 0; font-size: 0.82rem; color: #ccc; line-height: 1.35;">Integración directa con el
sistema de mensajería para avisos de solicitudes pendientes, garantizando flujos de trabajo sin demoras.
</p>
</div>
<div class="light-card"
style="padding: 15px; background: rgba(255,255,255,0.04); border-radius: 8px; flex: 1; display: flex; flex-direction: column; justify-content: center; min-height: 0;">
<h3 style="margin: 0 0 4px 0; font-size: 1.05rem;">📰 Integración con Canales CMS</h3>
<p style="margin: 0; font-size: 0.82rem; color: #ccc; line-height: 1.35;">Una vez aprobado el contenido
corporativo, el motor realiza la publicación automática en los tableros del Info Hub de la empresa.</p>
</div>
</div>
</div>
</section>
<!-- ══════════════════════════════════════════════
SLIDE 8 — MÓDULOS 4 & 5: CMS & TICKETING
══════════════════════════════════════════════ -->
<section class="content-slide" style="background:#050508;">
<div class="slide-label">07 / 19</div>
<div class="tag">Módulos de la Solución</div>
<h2>Módulos 4 &amp; 5: Info Hub CMS y Ticketing</h2>
<div class="cards-row cols-2"
style="margin-top: 5px; display: flex; gap: 20px; flex-grow: 1; min-height: 0; width: 100%;">
<div class="jewel-card jewel-card--espresso"
style="padding: 20px; background: rgba(255,255,255,0.03); border-radius: 12px; border: 1px solid rgba(255,255,255,0.05); flex: 1; display: flex; flex-direction: column; justify-content: center; min-height: 0;">
<div style="display: flex; align-items: center; gap: 10px; margin-bottom: 8px; flex-shrink: 0;">
<span class="card-icon" style="font-size: 1.3rem;">📰</span>
<h3 style="margin: 0; font-size: 1.1rem; font-weight: 600;">Módulo 4: Info Hub / CMS Corporativo</h3>
</div>
<p
style="margin: 0 0 10px 0 !important; font-size: 1rem; color: rgba(255, 255, 255, 0.7); line-height: 1.4; flex-shrink: 0;">
Gestión y publicación de información interna en un portal centralizado de noticias corporativas.
</p>
<ul
style="font-size: 1rem; color: rgba(255, 255, 255, 0.55); padding-left: 18px; margin: 0; line-height: 1.5; list-style-type: disc;">
<li>Editor WYSIWYG de contenidos enriquecidos</li>
<li>Categorías y taxonomías customizables</li>
<li>Programación de comunicados a futuro</li>
<li>Publicación segmentada por departamento o rol</li>
</ul>
</div>
<div class="jewel-card jewel-card--slate"
style="padding: 20px; background: rgba(255,255,255,0.03); border-radius: 12px; border: 1px solid rgba(255,255,255,0.05); flex: 1; display: flex; flex-direction: column; justify-content: center; min-height: 0;">
<div style="display: flex; align-items: center; gap: 10px; margin-bottom: 8px; flex-shrink: 0;">
<span class="card-icon" style="font-size: 1.3rem;">🎫</span>
<h3 style="margin: 0; font-size: 1.1rem; font-weight: 600;">Módulo 5: Soporte Técnico e Incidencias</h3>
</div>
<p
style="margin: 0 0 10px 0 !important; font-size: 1rem; color: rgba(255, 255, 255, 0.7); line-height: 1.4; flex-shrink: 0;">
Mesa de ayuda integrada para gestionar requerimientos de soporte interno técnico, operacional y de RR.HH.
</p>
<ul
style="font-size: 1rem; color: rgba(255, 255, 255, 0.55); padding-left: 18px; margin: 0; line-height: 1.5; list-style-type: disc;">
<li>Creación de solicitudes con prioridades claras</li>
<li>Asignación automatizada según especialidad del agente</li>
<li>Control de Tiempos de Respuesta y SLAs por ticket</li>
<li>Dashboard de resolución para coordinadores de mesa</li>
</ul>
</div>
</div>
</section>
<!-- ══════════════════════════════════════════════
SLIDE 9 — STACK TECNOLÓGICO
══════════════════════════════════════════════ -->
<section class="content-slide" style="background:#080608;">
<div class="slide-label">08 / 19</div>
<div class="tag">Arquitectura de Software</div>
<h2>Stack Tecnológico Moderno y <span class="gold">Open Source</span></h2>
<div
style="flex-grow: 1; width: 100%; min-height: 0; display: flex; flex-direction: column; justify-content: center; overflow: hidden;">
<table class="prop-table"
style="margin-top: 5px; width: 100%; table-layout: fixed; border-collapse: collapse; font-size: 1.5rem; line-height: 1.35;">
<thead>
<tr style="background: rgba(255, 255, 255, 0.05); text-align: left;">
<th style="width: 18%; padding: 8px 10px; color: #fff; font-weight: 600;">Capa</th>
<th style="width: 28%; padding: 8px 10px; color: #fff; font-weight: 600;">Tecnología Utilizada</th>
<th style="width: 14%; padding: 8px 10px; color: #fff; font-weight: 600;">Versión</th>
<th style="width: 40%; padding: 8px 10px; color: #fff; font-weight: 600;">Justificación y Beneficio</th>
</tr>
</thead>
<tbody>
<tr style="border-bottom: 1px solid rgba(255, 255, 255, 0.05);">
<td style="padding: 8px 10px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
<strong>Frontend</strong>
</td>
<td style="padding: 8px 10px; color: rgba(255,255,255,0.85);">Angular (Standalone &amp; Signals)</td>
<td style="padding: 8px 10px; color: rgba(255,255,255,0.6);">18.0</td>
<td style="padding: 8px 10px; color: rgba(255,255,255,0.7);">Framework enterprise por Google, alta
reactividad.</td>
</tr>
<tr style="border-bottom: 1px solid rgba(255, 255, 255, 0.05);">
<td style="padding: 8px 10px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
<strong>Backend</strong>
</td>
<td style="padding: 8px 10px; color: rgba(255,255,255,0.85);">NestJS (REST API)</td>
<td style="padding: 8px 10px; color: rgba(255,255,255,0.6);">10.0</td>
<td style="padding: 8px 10px; color: rgba(255,255,255,0.7);">Arquitectura modular sólida en TS, fácil
mantenimiento.</td>
</tr>
<tr style="border-bottom: 1px solid rgba(255, 255, 255, 0.05);">
<td style="padding: 8px 10px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
<strong>Autenticación</strong>
</td>
<td style="padding: 8px 10px; color: rgba(255,255,255,0.85);">Directorio Activo (SSO)</td>
<td style="padding: 8px 10px; color: rgba(255,255,255,0.6);">Estándar</td>
<td style="padding: 8px 10px; color: rgba(255,255,255,0.7);">Integración corporativa directa con Active
Directory.</td>
</tr>
<tr style="border-bottom: 1px solid rgba(255, 255, 255, 0.05);">
<td style="padding: 8px 10px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
<strong>Base de Datos</strong>
</td>
<td style="padding: 8px 10px; color: rgba(255,255,255,0.85);">PostgreSQL + Prisma ORM</td>
<td style="padding: 8px 10px; color: rgba(255,255,255,0.6);">15 / v5</td>
<td style="padding: 8px 10px; color: rgba(255,255,255,0.7);">Transacciones ACID para evitar overbooking
de salas.</td>
</tr>
<tr style="border-bottom: 1px solid rgba(255, 255, 255, 0.05);">
<td style="padding: 8px 10px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
<strong>Infraestructura</strong>
</td>
<td style="padding: 8px 10px; color: rgba(255,255,255,0.85);">Docker + Docker Compose</td>
<td style="padding: 8px 10px; color: rgba(255,255,255,0.6);">v3.8</td>
<td style="padding: 8px 10px; color: rgba(255,255,255,0.7);">Portabilidad absoluta y despliegue rápido
local/cloud.</td>
</tr>
</tbody>
</table>
</div>
</section>
<!-- ══════════════════════════════════════════════
SLIDE 10 — SEGURIDAD SSO / AD FLUX
══════════════════════════════════════════════ -->
<section class="content-slide" style="background:#060a06;">
<div class="slide-label">09 / 19</div>
<div class="tag">Seguridad Corporativa</div>
<h2>Arquitectura SSO: <span class="gold">Cero almacenamiento de credenciales</span></h2>
<div class="sso-flow">
<div class="sso-node">
<h4>1. Usuario</h4>
<p>Accede a la plataforma web desde el navegador.</p>
</div>
<div class="sso-arrow"></div>
<div class="sso-node active-directory">
<h4>2. Directorio Activo</h4>
<p>Autenticación delegada (OAuth2) con credenciales corporativas.</p>
</div>
<div class="sso-arrow"></div>
<div class="sso-node">
<h4>3. Token JWT</h4>
<p>Retorna token con identidad y pertenencia a grupos de AD.</p>
</div>
<div class="sso-arrow"></div>
<div class="sso-node nest-api">
<h4>4. NestJS API</h4>
<p>Decodifica y valida firma del JWT por cada petición HTTP.</p>
</div>
<div class="sso-arrow"></div>
<div class="sso-node">
<h4>5. Autorización</h4>
<p>Acceso concedido según rol: employee, manager o admin.</p>
</div>
</div>
<div style="margin-top: 30px; display: flex; gap: 16px; width: 100%;">
<div
style="flex: 1; padding: 14px 18px; background: rgba(52,211,153,0.07); border-left: 3px solid #34D399; border-radius: 0 10px 10px 0;">
<p style="font-size: 0.6em; color: rgba(255,255,255,0.75); margin: 0;">
<strong style="color: #34D399;">OWASP Top 10 Compliance:</strong> Toda la transmisión de datos corre sobre
HTTPS y los permisos expiran automáticamente mediante tokens JWT firmados.
</p>
</div>
<div
style="flex: 1; padding: 14px 18px; background: rgba(167,139,250,0.07); border-left: 3px solid #A78BFA; border-radius: 0 10px 10px 0;">
<p style="font-size: 0.6em; color: rgba(255,255,255,0.75); margin: 0;">
<strong style="color: #A78BFA;">Control Centralizado:</strong> Si se da de baja un colaborador en el AD
corporativo de la empresa, pierde acceso de forma inmediata y automática a la intranet.
</p>
</div>
</div>
</section>
<!-- ══════════════════════════════════════════════
SLIDE 11 — ESTRUCTURA DEL PROYECTO
══════════════════════════════════════════════ -->
<section class="content-slide" style="background:#080608;">
<div class="slide-label">10 / 19</div>
<div class="tag">Ingeniería de Software</div>
<h2>Arquitectura de Repositorio Estructurado</h2>
<div
style="flex-grow: 1; width: 100%; min-height: 0; display: flex; flex-direction: column; justify-content: center; overflow: hidden;">
<div class="tree-structure"
style="margin-top: 5px; font-family: 'Fira Code', Consolas, Monaco, monospace; font-size: 1rem; line-height: 1.4; color: rgba(255, 255, 255, 0.85); width: 100%;">
<span class="tree-dir" style="font-weight: 600; color: #fff;">proyecto-intranet/</span><br />
<div style="display: flex; align-items: flex-start; width: 100%;">
<span style="flex-shrink: 0; color: rgba(255,255,255,0.3);">├──&nbsp;</span>
<span class="tree-dir"
style="font-weight: 600; color: var(--gold, #c9973c); flex-shrink: 0;">frontend/</span>
<span class="tree-comment" style="color: rgba(255,255,255,0.45); margin-left: 8px;">← Aplicación Angular
18 (Standalone &amp; Signals)</span>
</div>
<span style="color: rgba(255,255,255,0.3);">&nbsp;&nbsp;└──&nbsp;</span>src/app/<br />
<div style="display: flex; align-items: flex-start; width: 100%; padding-left: 24px;">
<span style="flex-shrink: 0; color: rgba(255,255,255,0.3);">├──&nbsp;</span>
<span class="tree-dir"
style="font-weight: 600; color: rgba(255,255,255,0.9); flex-shrink: 0;">core/</span>
<span class="tree-comment" style="color: rgba(255,255,255,0.45); margin-left: 8px;">← Guard SSO,
interceptores HTTP, auth y tokens</span>
</div>
<div style="display: flex; align-items: flex-start; width: 100%; padding-left: 24px;">
<span style="flex-shrink: 0; color: rgba(255,255,255,0.3);">├──&nbsp;</span>
<span class="tree-dir"
style="font-weight: 600; color: rgba(255,255,255,0.9); flex-shrink: 0;">shared/</span>
<span class="tree-comment" style="color: rgba(255,255,255,0.45); margin-left: 8px;">← Componentes del
Design System y pipes comunes</span>
</div>
<div style="display: flex; align-items: flex-start; width: 100%; padding-left: 24px;">
<span style="flex-shrink: 0; color: rgba(255,255,255,0.3);">└──&nbsp;</span>
<span class="tree-dir"
style="font-weight: 600; color: rgba(255,255,255,0.9); flex-shrink: 0;">features/</span>
<span class="tree-comment" style="color: rgba(255,255,255,0.45); margin-left: 8px;">← Módulos funcionales
(directorio, booking, etc.)</span>
</div>
<div style="display: flex; align-items: flex-start; width: 100%;">
<span style="flex-shrink: 0; color: rgba(255,255,255,0.3);">├──&nbsp;</span>
<span class="tree-dir"
style="font-weight: 600; color: var(--gold, #c9973c); flex-shrink: 0;">backend/</span>
<span class="tree-comment" style="color: rgba(255,255,255,0.45); margin-left: 8px;">← REST API en NestJS
(TypeScript modular)</span>
</div>
<span style="color: rgba(255,255,255,0.3);">&nbsp;&nbsp;└──&nbsp;</span>src/<br />
<div style="display: flex; align-items: flex-start; width: 100%; padding-left: 24px;">
<span style="flex-shrink: 0; color: rgba(255,255,255,0.3);">├──&nbsp;</span>
<span class="tree-dir"
style="font-weight: 600; color: rgba(255,255,255,0.9); flex-shrink: 0;">auth/</span>
<span class="tree-comment" style="color: rgba(255,255,255,0.45); margin-left: 8px;">← Módulo Passport con
validación JWT de Azure ID</span>
</div>
<div style="display: flex; align-items: flex-start; width: 100%; padding-left: 24px;">
<span style="flex-shrink: 0; color: rgba(255,255,255,0.3);">└──&nbsp;</span>
<span class="tree-dir" style="font-weight: 600; color: rgba(255,255,255,0.9); flex-shrink: 0;">directory/
/ spaces/ / workflow/</span>
<span class="tree-comment" style="color: rgba(255,255,255,0.45); margin-left: 8px;">← Módulos de lógica
empresarial</span>
</div>
<div style="display: flex; align-items: flex-start; width: 100%;">
<span style="flex-shrink: 0; color: rgba(255,255,255,0.3);">├──&nbsp;</span>
<span class="tree-dir"
style="font-weight: 600; color: rgba(255,255,255,0.9); flex-shrink: 0;">standards/</span>
<span class="tree-comment" style="color: rgba(255,255,255,0.45); margin-left: 8px;">← Documentación de
calidad y especificaciones</span>
</div>
<div style="display: flex; align-items: flex-start; width: 100%;">
<span style="flex-shrink: 0; color: rgba(255,255,255,0.3);">├──&nbsp;</span>
<span class="tree-file" style="color: #34D399; flex-shrink: 0;">docker-compose.yml</span>
<span class="tree-comment" style="color: rgba(255,255,255,0.45); margin-left: 8px;">← Orquestación local:
DB PostgreSQL</span>
</div>
<div style="display: flex; align-items: flex-start; width: 100%;">
<span style="flex-shrink: 0; color: rgba(255,255,255,0.3);">└──&nbsp;</span>
<span class="tree-file" style="color: #34D399; flex-shrink: 0;">setup.ps1 / .sh</span>
<span class="tree-comment" style="color: rgba(255,255,255,0.45); margin-left: 8px;">← Scripts de
automatización para desarrollo</span>
</div>
</div>
</div>
<p style="font-size: 0.6em; color: var(--gold); margin-top: 15px; font-weight: bold;">
→ Código limpio, modular y documentado que permite la adición de nuevos desarrolladores de forma ágil.
</p>
</section>
<!-- ══════════════════════════════════════════════
SLIDE 12 — DISEÑO E INTERFAZ UI
══════════════════════════════════════════════ -->
<section class="content-slide"
style="background:#0d0d0d; width: 100vw; height: 100vh; max-width: 100%; max-height: 100%; overflow: hidden; box-sizing: border-box; padding: 25px; display: flex; flex-direction: column;">
<div class="slide-label">11 / 19</div>
<div class="tag">Experiencia de Usuario</div>
<h2 style="margin-bottom: 4px; flex-shrink: 0;">Executive Suite Design System</h2>
<p style="font-size: 1.5rem; color: rgba(255,255,255,0.7); margin: 0 0 12px 0 !important; flex-shrink: 0;">
Diseñado bajo directrices premium que mezclan sobriedad corporativa y tecnología de vanguardia.
</p>
<div
style="flex-grow: 1; display: flex; flex-direction: column; gap: 15px; min-height: 0; justify-content: space-between;">
<div class="cards-row cols-3" style="display: flex; gap: 15px; flex: 1; min-height: 0;">
<div class="light-card"
style="padding: 12px; background: rgba(255,255,255,0.03); border-radius: 8px; flex: 1; display: flex; flex-direction: column; justify-content: center; min-height: 0;">
<h3 style="margin: 0 0 4px 0; font-size: 1rem;">✨ Tipografía Limpia</h3>
<p style="margin: 0; font-size: 1rem; color: #ccc; line-height: 1.35;">Inter para titulares de gran
peso, brindando jerarquía y firmeza, complementada con Outfit para lecturas.</p>
</div>
<div class="light-card"
style="padding: 12px; background: rgba(255,255,255,0.03); border-radius: 8px; flex: 1; display: flex; flex-direction: column; justify-content: center; min-height: 0;">
<h3 style="margin: 0 0 4px 0; font-size: 1rem;">🖼️ Card System Joya</h3>
<p style="margin: 0; font-size: 1rem; color: #ccc; line-height: 1.35;">Glows de fondo en colores
oscuros pero ricos (Navy, Plum, Viridian). Estructura elegante sin bordes cargados.</p>
</div>
<div class="light-card"
style="padding: 12px; background: rgba(255,255,255,0.03); border-radius: 8px; flex: 1; display: flex; flex-direction: column; justify-content: center; min-height: 0;">
<h3 style="margin: 0 0 4px 0; font-size: 1rem;">🔮 Micro-animaciones</h3>
<p style="margin: 0; font-size: 1rem; color: #ccc; line-height: 1.35;">Efectos de hover sutiles en
tarjetas y botones, feedback inmediato al clickear y transiciones fluidas de página.</p>
</div>
</div>
<div class="color-swatch-row" style="display: flex; gap: 12px; flex: 1; min-height: 0; width: 100%;">
<div class="color-swatch-card"
style="flex: 1; background: rgba(255,255,255,0.02); padding: 10px; border-radius: 8px; border: 1px solid rgba(255,255,255,0.04); display: flex; flex-direction: column; justify-content: space-between; min-height: 0;">
<div class="color-box"
style="background: #F5F4F1; height: 35px; width: 100%; border-radius: 4px; flex-shrink: 0;"></div>
<div style="margin-top: 6px;">
<h4 style="margin: 0; font-size: 0.85rem; color: #fff;">Ivory</h4>
<p style="margin: 2px 0 0 0; font-size: 1rem; color: #aaa; line-height: 1.2;">Contraste de textos
limpios y legibilidad.</p>
</div>
</div>
<div class="color-swatch-card"
style="flex: 1; background: rgba(255,255,255,0.02); padding: 10px; border-radius: 8px; border: 1px solid rgba(255,255,255,0.04); display: flex; flex-direction: column; justify-content: space-between; min-height: 0;">
<div class="color-box"
style="background: #C9973C; height: 35px; width: 100%; border-radius: 4px; flex-shrink: 0;"></div>
<div style="margin-top: 6px;">
<h4 style="margin: 0; font-size: 0.85rem; color: #fff;">Gold</h4>
<p style="margin: 2px 0 0 0; font-size: 1rem; color: #aaa; line-height: 1.2;">Dorado corporativo para
estados activos.</p>
</div>
</div>
<div class="color-swatch-card"
style="flex: 1; background: rgba(255,255,255,0.02); padding: 10px; border-radius: 8px; border: 1px solid rgba(255,255,255,0.04); display: flex; flex-direction: column; justify-content: space-between; min-height: 0;">
<div class="color-box"
style="background: #0D1B2A; height: 35px; width: 100%; border-radius: 4px; border: 1px solid rgba(255,255,255,0.1); flex-shrink: 0;">
</div>
<div style="margin-top: 6px;">
<h4 style="margin: 0; font-size: 0.85rem; color: #fff;">Navy</h4>
<p style="margin: 2px 0 0 0; font-size: 1rem; color: #aaa; line-height: 1.2;">Fondo para Directorio
IAM y seguridad.</p>
</div>
</div>
<div class="color-swatch-card"
style="flex: 1; background: rgba(255,255,255,0.02); padding: 10px; border-radius: 8px; border: 1px solid rgba(255,255,255,0.04); display: flex; flex-direction: column; justify-content: space-between; min-height: 0;">
<div class="color-box"
style="background: #1A0E2E; height: 35px; width: 100%; border-radius: 4px; border: 1px solid rgba(255,255,255,0.1); flex-shrink: 0;">
</div>
<div style="margin-top: 6px;">
<h4 style="margin: 0; font-size: 0.85rem; color: #fff;">Plum</h4>
<p style="margin: 2px 0 0 0; font-size: 1rem; color: #aaa; line-height: 1.2;">Reservado para
calendario e IA.</p>
</div>
</div>
<div class="color-swatch-card"
style="flex: 1; background: rgba(255,255,255,0.02); padding: 10px; border-radius: 8px; border: 1px solid rgba(255,255,255,0.04); display: flex; flex-direction: column; justify-content: space-between; min-height: 0;">
<div class="color-box"
style="background: #0A2520; height: 35px; width: 100%; border-radius: 4px; border: 1px solid rgba(255,255,255,0.1); flex-shrink: 0;">
</div>
<div style="margin-top: 6px;">
<h4 style="margin: 0; font-size: 0.85rem; color: #fff;">Viridian</h4>
<p style="margin: 2px 0 0 0; font-size: 1rem; color: #aaa; line-height: 1.2;">Verde para motor de
aprobaciones.</p>
</div>
</div>
</div>
</div>
</section>
<!-- ══════════════════════════════════════════════
SLIDE 13 — ESTADO ACTUAL
══════════════════════════════════════════════ -->
<section class="content-slide"
style="background:#080608; width: 100vw; height: 100vh; max-width: 100%; max-height: 100%; overflow: hidden; box-sizing: border-box; padding: 25px; display: flex; flex-direction: column;">
<div class="slide-label">12 / 19</div>
<div class="tag">Estado del Proyecto</div>
<h2 style="margin-bottom: 12px; flex-shrink: 0;">Módulos desarrollados y <span class="gold">nivel de
avance</span></h2>
<div
style="flex-grow: 1; width: 100%; min-height: 0; display: flex; flex-direction: column; justify-content: center; overflow: hidden;">
<table class="prop-table"
style="margin-top: 0px; width: 100%; table-layout: fixed; border-collapse: collapse; font-size: 1rem; line-height: 1.35;">
<thead>
<tr style="background: rgba(255, 255, 255, 0.04); text-align: left; font-size: 1rem;">
<th style="width: 28%; padding: 8px 10px; color: #fff; font-weight: 600;"><span class="gold">Módulo o
Componente</span></th>
<th style="width: 18%; padding: 8px 10px; color: #fff; font-weight: 600;"><span
class="gold">Avance</span></th>
<th style="width: 54%; padding: 8px 10px; color: #fff; font-weight: 600;"><span class="gold">Detalles
Técnicos
Implementados</span></th>
</tr>
</thead>
<tbody>
<tr style="border-bottom: 1px solid rgba(255, 255, 255, 0.04);">
<td style="padding: 6px 10px; color: #fff;"><strong>Autenticación SSO corporativo</strong></td>
<td class="status-done" style="padding: 6px 10px; color: #34D399; font-weight: 500;">✅ Implementado</td>
<td
style="padding: 6px 10px; color: rgba(255,255,255,0.7); white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
Módulo Auth JWT en NestJS, interceptores en Angular y Guards SSO.</td>
</tr>
<tr style="border-bottom: 1px solid rgba(255, 255, 255, 0.04);">
<td style="padding: 6px 10px; color: #fff;"><strong>Dashboard &amp; Shell</strong></td>
<td class="status-done" style="padding: 6px 10px; color: #34D399; font-weight: 500;">✅ Implementado</td>
<td
style="padding: 6px 10px; color: rgba(255,255,255,0.7); white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
Sidebar interactivo colapsable, métricas globales, navegación.</td>
</tr>
<tr style="border-bottom: 1px solid rgba(255, 255, 255, 0.04);">
<td style="padding: 6px 10px; color: #fff;"><strong>Directorio de Personal</strong></td>
<td class="status-done" style="padding: 6px 10px; color: #34D399; font-weight: 500;">✅ Implementado</td>
<td
style="padding: 6px 10px; color: rgba(255,255,255,0.7); white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
Búsqueda reactiva con Signals, filtros por departamento, tarjetas de AD.</td>
</tr>
<tr style="border-bottom: 1px solid rgba(255, 255, 255, 0.04);">
<td style="padding: 6px 10px; color: #fff;"><strong>Calendario de Reservas</strong></td>
<td class="status-done" style="padding: 6px 10px; color: #34D399; font-weight: 500;">✅ Implementado</td>
<td
style="padding: 6px 10px; color: rgba(255,255,255,0.7); white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
Calendario reactivo en frontend con vistas de Mes, Semana y Día.</td>
</tr>
<tr style="border-bottom: 1px solid rgba(255, 255, 255, 0.04);">
<td style="padding: 6px 10px; color: #fff;"><strong>Formulario de Reservas + IA</strong></td>
<td class="status-done" style="padding: 6px 10px; color: #34D399; font-weight: 500;">✅ Implementado</td>
<td
style="padding: 6px 10px; color: rgba(255,255,255,0.7); white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
Parser NLP configurado con mock local y listado de consumo HTTP.</td>
</tr>
<tr style="border-bottom: 1px solid rgba(255, 255, 255, 0.04);">
<td style="padding: 6px 10px; color: #fff;"><strong>Workflow de Aprobación BPM</strong></td>
<td class="status-wip" style="padding: 6px 10px; color: #F59E0B; font-weight: 500;">🔄 En Desarrollo
</td>
<td
style="padding: 6px 10px; color: rgba(255,255,255,0.7); white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
Estructuración del motor de jerarquías y vistas de historial de cambios.</td>
</tr>
<tr style="border-bottom: 1px solid rgba(255, 255, 255, 0.04);">
<td style="padding: 6px 10px; color: #fff;"><strong>Info Hub CMS / Ticketing SLA</strong></td>
<td class="status-planned" style="padding: 6px 10px; color: #60A5FA; font-weight: 500;">📋 Planificado
</td>
<td
style="padding: 6px 10px; color: rgba(255,255,255,0.7); white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
Diseño de tablas de base de datos definidos en esquemas de Prisma.</td>
</tr>
</tbody>
</table>
</div>
</section>
<!-- ══════════════════════════════════════════════
SLIDE 14 — PLAN DE ACCIÓN FASES 0 & 1
══════════════════════════════════════════════ -->
<section class="content-slide"
style="background:#07050e; width: 100vw; height: 100vh; max-width: 100%; max-height: 100%; overflow: hidden; box-sizing: border-box; padding: 25px; display: flex; flex-direction: column;">
<div class="slide-label">13 / 19</div>
<div class="tag">Roadmap de Entrega</div>
<h2 style="margin-bottom: 4px; flex-shrink: 0;">Fase 0: Diagnóstico &amp; Fase 1: Setup e Integración</h2>
<div style="display: flex; gap: 20px; width: 100%; flex-grow: 1; min-height: 0; margin-top: 10px;">
<div style="flex: 1; display: flex; flex-direction: column; gap: 10px; min-height: 0;">
<div
style="font-size: 0.72rem; font-weight: 700; color: var(--gold, #c9973c); letter-spacing: 0.1em; text-transform: uppercase; flex-shrink: 0;">
Fase 0 — Diagnóstico y NDA (Semanas 12)
</div>
<div class="light-card"
style="padding: 12px; background: rgba(255,255,255,0.03); border-radius: 8px; flex: 1; display: flex; flex-direction: column; justify-content: center; min-height: 0;">
<h3 style="margin: 0 0 4px 0; font-size: 1rem;">📋 Kickoff e Inventario Técnico</h3>
<p style="margin: 0; font-size: 0.8rem; color: #ccc; line-height: 1.35;">Alineación de objetivos con el
departamento de IT y negocio. Definición de ambientes de desarrollo y sandbox.</p>
</div>
<div class="light-card"
style="padding: 12px; background: rgba(255,255,255,0.03); border-radius: 8px; flex: 1; display: flex; flex-direction: column; justify-content: center; min-height: 0;">
<h3 style="margin: 0 0 4px 0; font-size: 1rem;">🔍 Auditoría de Active Directory</h3>
<p style="margin: 0; font-size: 0.8rem; color: #ccc; line-height: 1.35;">Revisión de grupos, jerarquías de
aprobadores y políticas de acceso a la tenant del cliente.</p>
</div>
</div>
<div style="flex: 1; display: flex; flex-direction: column; gap: 10px; min-height: 0;">
<div
style="font-size: 0.72rem; font-weight: 700; color: #34D399; letter-spacing: 0.1em; text-transform: uppercase; flex-shrink: 0;">
Fase 1 — Setup y Conexión SSO (Semanas 34)
</div>
<div class="light-card"
style="padding: 12px; background: rgba(255,255,255,0.03); border-radius: 8px; flex: 1; display: flex; flex-direction: column; justify-content: center; min-height: 0;">
<h3 style="margin: 0 0 4px 0; font-size: 1rem;">🛡️ Integración Microsoft Entra ID</h3>
<p style="margin: 0; font-size: 0.8rem; color: #ccc; line-height: 1.35;">Conexión directa de SSO vía
OAuth2 en entorno de Staging. Traspaso de token JWT con claims asignados.</p>
</div>
<div class="light-card"
style="padding: 12px; background: rgba(255,255,255,0.03); border-radius: 8px; flex: 1; display: flex; flex-direction: column; justify-content: center; min-height: 0;">
<h3 style="margin: 0 0 4px 0; font-size: 1rem;">🐘 Despliegue de DB de Producción</h3>
<p style="margin: 0; font-size: 0.8rem; color: #ccc; line-height: 1.35;">Instalación de base de datos
PostgreSQL, ejecución de esquemas Prisma y pruebas de concurrencia base.</p>
</div>
</div>
</div>
<div
style="margin-top: 15px; font-size: 0.78rem; background: rgba(52,211,153,0.05); border: 1px solid rgba(52,211,153,0.18); padding: 10px 15px; border-radius: 8px; width: 100%; box-sizing: border-box; flex-shrink: 0; line-height: 1.4;">
<span style="font-weight: bold; color: #34D399;">🔑 HITO CLAVE FASE 1:</span> Inicio de sesión exitoso de
usuarios del cliente en ambiente de Staging usando sus credenciales corporativas reales.
</div>
</section>
<!-- ══════════════════════════════════════════════
SLIDE 15 — PLAN DE ACCIÓN FASES 2, 3 & 4
══════════════════════════════════════════════ -->
<section class="content-slide"
style="background:#08060c; width: 100vw; height: 100vh; max-width: 100%; max-height: 100%; overflow: hidden; box-sizing: border-box; padding: 25px; display: flex; flex-direction: column;">
<div class="slide-label">14 / 19</div>
<div class="tag">Roadmap de Entrega</div>
<h2 style="margin-bottom: 4px; flex-shrink: 0;">Fases 2, 3 &amp; 4: Módulos Core, Secundarios y Go-Live</h2>
<div
style="display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 16px; width: 100%; flex-grow: 1; min-height: 0; margin-top: 10px;">
<div class="light-card"
style="border-top: 3px solid #60A5FA; padding: 15px; background: rgba(255,255,255,0.03); border-radius: 8px; display: flex; flex-direction: column; justify-content: center; min-height: 0;">
<span
style="font-size: 0.72rem; color: #60A5FA; font-weight: bold; text-transform: uppercase; letter-spacing: 0.1em; flex-shrink: 0;">Fase
2 (Sem 510)</span>
<h3 style="margin: 6px 0 4px 0 !important; font-size: 1.1rem;">Módulos Core</h3>
<p style="font-size: 0.8rem; line-height: 1.4; margin: 0 0 6px 0; color: #ccc;">Desarrollo final de los
módulos esenciales:</p>
<ul
style="font-size: 0.78rem; color: rgba(255,255,255,0.6); padding-left: 16px; margin: 0; line-height: 1.5; list-style-type: disc;">
<li>Directorio IAM en Staging</li>
<li>Reservas e IA integradas</li>
<li>Motor de Workflow BPM</li>
<li><strong>Piloto con 50 usuarios</strong></li>
</ul>
</div>
<div class="light-card"
style="border-top: 3px solid #A78BFA; padding: 15px; background: rgba(255,255,255,0.03); border-radius: 8px; display: flex; flex-direction: column; justify-content: center; min-height: 0;">
<span
style="font-size: 0.72rem; color: #A78BFA; font-weight: bold; text-transform: uppercase; letter-spacing: 0.1em; flex-shrink: 0;">Fase
3 (Sem 1114)</span>
<h3 style="margin: 6px 0 4px 0 !important; font-size: 1.1rem;">Módulos Secundarios</h3>
<p style="font-size: 0.8rem; line-height: 1.4; margin: 0 0 6px 0; color: #ccc;">Construcción de soporte e
información:</p>
<ul
style="font-size: 0.78rem; color: rgba(255,255,255,0.6); padding-left: 16px; margin: 0; line-height: 1.5; list-style-type: disc;">
<li>Info Hub CMS con editor</li>
<li>Ticketing y asignación SLA</li>
<li>Pruebas de aceptación (UAT)</li>
<li>Congelamiento de código</li>
</ul>
</div>
<div class="light-card"
style="border-top: 3px solid #F43F5E; padding: 15px; background: rgba(255,255,255,0.03); border-radius: 8px; display: flex; flex-direction: column; justify-content: center; min-height: 0;">
<span
style="font-size: 0.72rem; color: #F43F5E; font-weight: bold; text-transform: uppercase; letter-spacing: 0.1em; flex-shrink: 0;">Fase
4 (Sem 1516)</span>
<h3 style="margin: 6px 0 4px 0 !important; font-size: 1.1rem;">Go-Live &amp; Traspaso</h3>
<p style="font-size: 0.8rem; line-height: 1.4; margin: 0 0 6px 0; color: #ccc;">Despliegue y estabilización:
</p>
<ul
style="font-size: 0.78rem; color: rgba(255,255,255,0.6); padding-left: 16px; margin: 0; line-height: 1.5; list-style-type: disc;">
<li>Paso a Producción Cloud</li>
<li>Capacitación de usuarios</li>
<li>Traspaso de Runbooks</li>
<li><strong>30 días de garantía incluidos</strong></li>
</ul>
</div>
</div>
<div
style="margin-top: 15px; font-size: 0.78rem; background: rgba(244,63,94,0.05); border: 1px solid rgba(244,63,94,0.18); padding: 10px 15px; border-radius: 8px; width: 100%; box-sizing: border-box; flex-shrink: 0; display: flex; justify-content: space-between; align-items: center; line-height: 1.4;">
<div><span style="font-weight: bold; color: #F43F5E;">🚀 HITO CLAVE FASE 4:</span> Plataforma 100% en vivo
para todos los colaboradores de la empresa.</div>
</div>
</section>
<!-- ══════════════════════════════════════════════
SLIDE 16 — ROADMAP GANTT VISUAL
══════════════════════════════════════════════ -->
<section class="content-slide"
style="background:#080608; width: 100vw; height: 100vh; max-width: 100%; max-height: 100%; overflow: hidden; box-sizing: border-box; padding: 25px; display: flex; flex-direction: column;">
<div class="slide-label">15 / 19</div>
<div class="tag">Roadmap de Entrega</div>
<h2 style="margin-bottom: 12px; flex-shrink: 0;">Cronograma General de Trabajo <span class="gold">(16
Semanas)</span></h2>
<div class="gantt-chart"
style="flex-grow: 1; width: 100%; min-height: 0; display: flex; flex-direction: column; justify-content: space-between; gap: 8px;">
<div class="gantt-row" style="display: flex; align-items: center; width: 100%; min-height: 0; flex: 1;">
<div class="gantt-label"
style="width: 22%; font-size: 0.8rem; color: rgba(255,255,255,0.9); font-weight: 500; padding-right: 10px; box-sizing: border-box; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
Fase 0: Diagnóstico</div>
<div class="gantt-timeline-container"
style="width: 78%; background: rgba(255,255,255,0.02); height: 26px; border-radius: 4px; position: relative;">
<div class="gantt-bar"
style="position: absolute; width: 12.5%; left: 0%; background: #C9973C; height: 100%; border-radius: 4px; font-size: 0.72rem; color: #000; font-weight: 600; display: flex; align-items: center; justify-content: center; padding: 0 4px; box-sizing: border-box; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
Diag. &amp; AD</div>
</div>
</div>
<div class="gantt-row" style="display: flex; align-items: center; width: 100%; min-height: 0; flex: 1;">
<div class="gantt-label"
style="width: 22%; font-size: 0.8rem; color: rgba(255,255,255,0.9); font-weight: 500; padding-right: 10px; box-sizing: border-box; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
Fase 1: Setup &amp; SSO</div>
<div class="gantt-timeline-container"
style="width: 78%; background: rgba(255,255,255,0.02); height: 26px; border-radius: 4px; position: relative;">
<div class="gantt-bar"
style="position: absolute; width: 12.5%; left: 12.5%; background: #34D399; height: 100%; border-radius: 4px; font-size: 0.72rem; color: #000; font-weight: 600; display: flex; align-items: center; justify-content: center; padding: 0 4px; box-sizing: border-box; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
SSO Azure</div>
</div>
</div>
<div class="gantt-row" style="display: flex; align-items: center; width: 100%; min-height: 0; flex: 1;">
<div class="gantt-label"
style="width: 22%; font-size: 0.8rem; color: rgba(255,255,255,0.9); font-weight: 500; padding-right: 10px; box-sizing: border-box; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
Fase 2: Módulos Core</div>
<div class="gantt-timeline-container"
style="width: 78%; background: rgba(255,255,255,0.02); height: 26px; border-radius: 4px; position: relative;">
<div class="gantt-bar"
style="position: absolute; width: 37.5%; left: 25%; background: #60A5FA; height: 100%; border-radius: 4px; font-size: 0.72rem; color: #000; font-weight: 600; display: flex; align-items: center; justify-content: center; padding: 0 6px; box-sizing: border-box; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
Dir + Espacios IA + BPM + Piloto</div>
</div>
</div>
<div class="gantt-row" style="display: flex; align-items: center; width: 100%; min-height: 0; flex: 1;">
<div class="gantt-label"
style="width: 22%; font-size: 0.8rem; color: rgba(255,255,255,0.9); font-weight: 500; padding-right: 10px; box-sizing: border-box; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
Fase 3: Módulos Sec.</div>
<div class="gantt-timeline-container"
style="width: 78%; background: rgba(255,255,255,0.02); height: 26px; border-radius: 4px; position: relative;">
<div class="gantt-bar"
style="position: absolute; width: 25%; left: 62.5%; background: #A78BFA; height: 100%; border-radius: 4px; font-size: 0.72rem; color: #000; font-weight: 600; display: flex; align-items: center; justify-content: center; padding: 0 6px; box-sizing: border-box; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
CMS + Tickets + UAT General</div>
</div>
</div>
<div class="gantt-row" style="display: flex; align-items: center; width: 100%; min-height: 0; flex: 1;">
<div class="gantt-label"
style="width: 22%; font-size: 0.8rem; color: rgba(255,255,255,0.9); font-weight: 500; padding-right: 10px; box-sizing: border-box; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
Fase 4: Lanzamiento</div>
<div class="gantt-timeline-container"
style="width: 78%; background: rgba(255,255,255,0.02); height: 26px; border-radius: 4px; position: relative;">
<div class="gantt-bar"
style="position: absolute; width: 12.5%; left: 87.5%; background: #F43F5E; height: 100%; border-radius: 4px; font-size: 0.72rem; color: #000; font-weight: 600; display: flex; align-items: center; justify-content: center; padding: 0 4px; box-sizing: border-box; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
Go-Live &amp; Traspaso</div>
</div>
</div>
<div class="gantt-axis"
style="display: flex; width: 78%; margin-left: 22%; justify-content: space-between; border-top: 1px solid rgba(255,255,255,0.1); padding-top: 4px; font-size: 0.7rem; color: rgba(255,255,255,0.4); flex-shrink: 0;">
<span style="flex: 1; text-align: left;">Mes 1 (Sem 1-4)</span>
<span style="flex: 1; text-align: left; padding-left: 5%;">Mes 2 (Sem 5-8)</span>
<span style="flex: 1; text-align: left; padding-left: 5%;">Mes 3 (Sem 9-12)</span>
<span style="flex: 1; text-align: right;">Mes 4 (Sem 13-16)</span>
</div>
</div>
<p
style="font-size: 0.78rem; color: rgba(255,255,255,0.5); margin: 12px 0 0 0; text-align: center; width: 100%; flex-shrink: 0; line-height: 1.3;">
Cada hito requiere aprobación y pruebas UAT de cara al cliente antes del paso a la siguiente fase del
proyecto.
</p>
</section>
<!-- ══════════════════════════════════════════════
SLIDE 17 — PROPUESTA ECONÓMICA
══════════════════════════════════════════════ -->
<section class="content-slide"
style="background:#0a0810; width: 100vw; height: 100vh; max-width: 100%; max-height: 100%; overflow: hidden; box-sizing: border-box; padding: 25px; display: flex; flex-direction: column;">
<div class="slide-label">16 / 19</div>
<div class="tag">Presupuesto y Adquisición</div>
<h2 style="margin-bottom: 4px; flex-shrink: 0;">Esquema de Presupuesto y Modalidades de Contratación</h2>
<div style="display: flex; gap: 20px; width: 100%; flex-grow: 1; min-height: 0; margin-top: 12px;">
<div
style="flex: 1.2; min-height: 0; display: flex; flex-direction: column; justify-content: center; overflow: hidden;">
<table class="prop-table"
style="width: 100%; table-layout: fixed; border-collapse: collapse; font-size: 1rem; line-height: 1.35;">
<thead>
<tr style="background: rgba(255, 255, 255, 0.04); text-align: left;">
<th style="width: 38%; padding: 8px 10px; color: #fff; font-weight: 600;">Concepto de Trabajo</th>
<th style="width: 62%; padding: 8px 10px; color: #fff; font-weight: 600;">Descripción del Entregable
</th>
</tr>
</thead>
<tbody>
<tr style="border-bottom: 1px solid rgba(255, 255, 255, 0.04);">
<td style="padding: 7px 10px; color: #fff;"><strong>Licenciamiento base</strong></td>
<td
style="padding: 7px 10px; color: rgba(255,255,255,0.7); white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
Entrega de la plataforma e infraestructura base preconfigurada.</td>
</tr>
<tr style="border-bottom: 1px solid rgba(255, 255, 255, 0.04);">
<td style="padding: 7px 10px; color: #fff;"><strong>Integración SSO e Infra</strong></td>
<td
style="padding: 7px 10px; color: rgba(255,255,255,0.7); white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
Fases 0 y 1: Configuración de Azure Entra ID, base PostgreSQL.</td>
</tr>
<tr style="border-bottom: 1px solid rgba(255, 255, 255, 0.04);">
<td style="padding: 7px 10px; color: #fff;"><strong>Desarrollo Core &amp; BPM</strong></td>
<td
style="padding: 7px 10px; color: rgba(255,255,255,0.7); white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
Fase 2: Conexión de Directorio, Calendario + IA, workflow BPM.</td>
</tr>
<tr style="border-bottom: 1px solid rgba(255, 255, 255, 0.04);">
<td style="padding: 7px 10px; color: #fff;"><strong>Desarrollo CMS &amp; Tickets</strong></td>
<td
style="padding: 7px 10px; color: rgba(255,255,255,0.7); white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
Fase 3: Info Hub, Ticketing y SLA. Pruebas UAT.</td>
</tr>
<tr style="border-bottom: 1px solid rgba(255, 255, 255, 0.04);">
<td style="padding: 7px 10px; color: #fff;"><strong>Go-Live &amp; Garantía</strong></td>
<td
style="padding: 7px 10px; color: rgba(255,255,255,0.7); white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
Despliegue, manuales, capacitación y 30 días de garantía.</td>
</tr>
</tbody>
</table>
</div>
<div
style="flex: 0.8; display: flex; flex-direction: column; gap: 10px; min-height: 0; justify-content: center;">
<div
style="font-size: 0.72rem; font-weight: bold; color: var(--gold, #c9973c); letter-spacing: 0.05em; text-transform: uppercase; flex-shrink: 0; margin-bottom: 2px;">
Modalidades de Adquisición
</div>
<div class="light-card"
style="padding: 10px 12px; background: rgba(255,255,255,0.03); border-radius: 8px; flex: 1; display: flex; flex-direction: column; justify-content: center; min-height: 0;">
<h3 style="font-size: 0.95rem; margin: 0 0 4px 0;">🔑 Proyecto Llave en Mano</h3>
<p style="font-size: 1rem; margin: 0; color: #ccc; line-height: 1.3;">Precio y plazos fijos por la
entrega del alcance completo. Ideal para presupuestos definidos.</p>
</div>
<div class="light-card"
style="padding: 10px 12px; background: rgba(255,255,255,0.03); border-radius: 8px; flex: 1; display: flex; flex-direction: column; justify-content: center; min-height: 0;">
<h3 style="font-size: 0.95rem; margin: 0 0 4px 0;">⏳ Tiempo y Materiales (T&amp;M)</h3>
<p style="font-size: 1rem; margin: 0; color: #ccc; line-height: 1.3;">Facturación mensual por sprints
según requerimientos variables y flexibilidad de prioridades.</p>
</div>
<div class="light-card"
style="padding: 10px 12px; background: rgba(255,255,255,0.03); border-radius: 8px; flex: 1; display: flex; flex-direction: column; justify-content: center; min-height: 0;">
<h3 style="font-size: 0.95rem; margin: 0 0 4px 0;">☁️ SaaS Mensual (OpEx)</h3>
<p style="font-size: 1rem; margin: 0; color: #ccc; line-height: 1.3;">Suscripción recurrente con
hosting, soporte continuo y actualizaciones evolutivas incluidas.</p>
</div>
</div>
</div>
</section>
<!-- ══════════════════════════════════════════════
SLIDE 18 — COMPARATIVA DE ALTERNATIVAS
══════════════════════════════════════════════ -->
<section class="content-slide">
<div style="width: 100%; flex-shrink: 0;">
<div class="slide-label">17 / 19</div>
<div class="tag">Análisis del Mercado</div>
<h2>Por qué nuestra solución frente a las alternativas</h2>
</div>
<div
style="flex: 1.2; min-height: 0; display: flex; flex-direction: column; justify-content: center; overflow: hidden;">
<table class="prop-table"
style="width: 100%; table-layout: fixed; border-collapse: collapse; font-size: 1rem; line-height: 1.35;">
<thead>
<tr>
<th style="width: 24%;">Criterio</th>
<th style="width: 21%;" class="highlight-td">Nuestra Plataforma</th>
<th style="width: 19%;">Liferay CMS</th>
<th style="width: 18%;">WordPress</th>
<th style="width: 18%;">Joomla</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Integración AD Nativa</strong></td>
<td class="highlight-td">✅ Sí (SSO)</td>
<td>✅ Sí (Nativo Java)</td>
<td>⚠️ Vía Plugins (Pago)</td>
<td>⚠️ Vía Extensiones</td>
</tr>
<tr>
<td><strong>Personalización UI/UX</strong></td>
<td class="highlight-td">✅ 100% Libre</td>
<td>⚠️ Complejo (Portlets)</td>
<td>⚠️ Basado en Plantillas</td>
<td>⚠️ Curva compleja</td>
</tr>
<tr>
<td><strong>Asistente IA NLP</strong></td>
<td class="highlight-td">✅ Integrado</td>
<td>⚠️ Requiere Desarrollo</td>
<td>❌ No (Requiere Plugins)</td>
<td>❌ No (Requiere Extensiones)</td>
</tr>
<tr>
<td><strong>Plazos de Entrega</strong></td>
<td class="highlight-td">✅ 16 Semanas</td>
<td>❌ 6 - 12 Meses</td>
<td>✅ 4 - 8 Semanas</td>
<td>⚠️ 8 - 12 Semanas</td>
</tr>
<tr>
<td><strong>Propiedad de Código</strong></td>
<td class="highlight-td">✅ Del Cliente</td>
<td>⚠️ Suscripción Enterprise</td>
<td>⚠️ Licencia GPL v2</td>
<td>⚠️ Licencia GPL v2</td>
</tr>
<tr>
<td><strong>Vendor Lock-in</strong></td>
<td class="highlight-td">✅ Cero (Open Source)</td>
<td>❌ Alto (Ecosistema)</td>
<td>⚠️ Dependencia de Plugins</td>
<td>⚠️ Dependencia de Plugins</td>
</tr>
</tbody>
</table>
</div>
</section>
<!-- ══════════════════════════════════════════════
SLIDE 19 — GARANTÍAS Y COMPROMISOS
══════════════════════════════════════════════ -->
<section class="content-slide"
style="background:#0a0510; width: 100vw; height: 100vh; max-width: 100%; max-height: 100%; overflow: hidden; box-sizing: border-box; padding: 25px; display: flex; flex-direction: column;">
<div class="slide-label">18 / 19</div>
<div class="tag">Transparencia</div>
<h2 style="margin-bottom: 4px; flex-shrink: 0;">Garantías y Respaldos del Proyecto</h2>
<div class="cards-row"
style="display: grid; grid-template-columns: repeat(2, 1fr); gap: 10px; width: 100%; flex-grow: 1; min-height: 0; margin-top: 10px;">
<div class="light-card"
style="padding: 10px 15px; background: rgba(255,255,255,0.03); border-radius: 8px; display: flex; flex-direction: column; justify-content: center; min-height: 0; box-sizing: border-box;">
<h3
style="margin: 0 0 2px 0; font-size: 0.95rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
📦 Propiedad Intelectual Total</h3>
<p style="margin: 0; font-size: 0.95rem; color: #ccc; line-height: 1.3;">El cliente es dueño absoluto del
código fuente, base de datos y documentación al cierre del proyecto. Sin regalías.</p>
</div>
<div class="light-card"
style="padding: 10px 15px; background: rgba(255,255,255,0.03); border-radius: 8px; display: flex; flex-direction: column; justify-content: center; min-height: 0; box-sizing: border-box;">
<h3
style="margin: 0 0 2px 0; font-size: 0.95rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
🔓 Cero Dependencias</h3>
<p style="margin: 0; font-size: 0.95rem; color: #ccc; line-height: 1.3;">Uso de stack open source estándar
(Angular, NestJS, Postgres). Cualquier equipo puede asumir y escalar el sistema.</p>
</div>
<div class="light-card"
style="padding: 10px 15px; background: rgba(255,255,255,0.03); border-radius: 8px; display: flex; flex-direction: column; justify-content: center; min-height: 0; box-sizing: border-box;">
<h3
style="margin: 0 0 2px 0; font-size: 0.95rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
📈 Escalabilidad Enterprise</h3>
<p style="margin: 0; font-size: 0.95rem; color: #ccc; line-height: 1.3;">Arquitectura desacoplada, preparada
para soportar más de 10,000 usuarios concurrentes sin degradar la velocidad.</p>
</div>
<div class="light-card"
style="padding: 10px 15px; background: rgba(255,255,255,0.03); border-radius: 8px; display: flex; flex-direction: column; justify-content: center; min-height: 0; box-sizing: border-box;">
<h3
style="margin: 0 0 2px 0; font-size: 0.95rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
🛡️ Seguridad by Design</h3>
<p style="margin: 0; font-size: 0.95rem; color: #ccc; line-height: 1.3;">Cumplimiento estricto de OWASP Top
10, cifrado SSL/TLS obligatorio y validación de sesiones delegadas en el SSO.</p>
</div>
<div class="light-card"
style="padding: 10px 15px; background: rgba(255,255,255,0.03); border-radius: 8px; display: flex; flex-direction: column; justify-content: center; min-height: 0; box-sizing: border-box;">
<h3
style="margin: 0 0 2px 0; font-size: 0.95rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
📄 Soporte y Operatividad</h3>
<p style="margin: 0; font-size: 0.95rem; color: #ccc; line-height: 1.3;">30 días de soporte técnico reactivo
de primer nivel tras el Go-Live, garantizando una transición operativa suave.</p>
</div>
<div class="light-card"
style="padding: 10px 15px; background: rgba(255,255,255,0.03); border-radius: 8px; display: flex; flex-direction: column; justify-content: center; min-height: 0; box-sizing: border-box;">
<h3
style="margin: 0 0 2px 0; font-size: 0.95rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
⚙️ Documentación Exhaustiva</h3>
<p style="margin: 0; font-size: 0.95rem; color: #ccc; line-height: 1.3;">Traspaso completo de guías de
desarrollo, runbooks de DevOps, esquemas de bases de datos y manuales de usuario.</p>
</div>
</div>
</section>
<!-- ══════════════════════════════════════════════
SLIDE 20 — PRÓXIMOS PASOS & CIERRE
══════════════════════════════════════════════ -->
<section class="closing-slide">
<div class="tag">Propuesta de Intranet · 2026</div>
<h2
style="font-size:2.3em !important; margin:10px 0 20px !important; background:linear-gradient(90deg,#fff 50%,var(--gold-light)); -webkit-background-clip:text; -webkit-text-fill-color:transparent; background-clip:text;">
Unificando procesos para<br />potenciar tu organización.
</h2>
<div
style="display:flex; justify-content:center; gap:20px; text-align:left; width: 80%; margin: 0 auto 15px auto;">
<div
style="background:rgba(255,255,255,0.03); border: 1px solid rgba(255,255,255,0.06); padding: 14px 18px; border-radius:10px; flex:1; font-size:0.55em; line-height:1.55;">
<strong style="color: var(--gold); display:block; margin-bottom:4px;">PRÓXIMOS PASOS</strong>
1. Demo en vivo de la plataforma actual (30 min)<br />
2. Workshop técnico sobre Active Directory (2h)<br />
3. Propuesta comercial formal ajustada a usuarios<br />
4. Firma de acuerdo NDA y Contrato de Desarrollo<br />
5. Kick-off de Fase 0
</div>
</div>
<div class="cover-divider"></div>
<div class="closing-contact" style="margin-top: 15px;">
<span style="margin-top:8px; font-size:0.52em; color:rgba(255,255,255,0.2);">
Para descargar o imprimir a PDF: Ctrl+P (Chrome) → Guardar como PDF → Habilitar "Gráficos de fondo" e
imprimir horizontal.
</span>
</div>
</section>
</div><!-- /slides -->
</div><!-- /reveal -->
<!-- Reveal.js Scripts -->
<script src="https://cdn.jsdelivr.net/npm/reveal.js@5.1.0/dist/reveal.js"></script>
<script>
Reveal.initialize({
hash: true,
slideNumber: false,
controls: true,
progress: true,
center: false,
transition: 'fade',
transitionSpeed: 'fast',
backgroundTransition: 'fade',
width: 1280,
height: 720,
margin: 0.025,
minScale: 0.2,
maxScale: 2.0,
pdfSeparateFragments: false,
plugins: []
});
// PDF export hint
if (window.location.search.includes('print-pdf')) {
document.querySelector('.reveal').classList.add('print-pdf');
}
</script>
</body>
</html>