Fix: www/ movido a raíz, estructura final

This commit is contained in:
Ricardo Monla
2026-05-04 13:52:29 -03:00
parent 1e13888679
commit 17ff243bfb
337 changed files with 46456 additions and 19 deletions
View File
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 194 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

View File
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+508
View File
@@ -0,0 +1,508 @@
* { margin: 0; padding: 0; box-sizing: border-box; }
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap');
:root {
--sidebar-w: 280px;
--color-bg: #f5f3ef;
--color-surface: #ffffff;
--color-primary: #1a5276;
--color-primary-dark: #0d2b3e;
--color-accent: #2980b9;
--color-text: #2c2c2c;
--color-text-muted: #6b7280;
}
body {
font-family: 'Inter', 'Segoe UI', system-ui, sans-serif;
background: var(--color-bg);
color: var(--color-text);
line-height: 1.8;
font-size: 16px;
}
/* ── LAYOUT ── */
.app-layout {
display: flex;
min-height: 100vh;
}
/* ── SIDEBAR ── */
.sidebar {
width: var(--sidebar-w);
background: var(--color-primary-dark);
color: rgba(255,255,255,0.85);
position: fixed;
top: 0;
left: 0;
bottom: 0;
overflow-y: auto;
z-index: 100;
display: flex;
flex-direction: column;
transition: transform 0.3s ease;
}
.sidebar-header {
padding: 1.5rem 1.2rem 1rem;
border-bottom: 1px solid rgba(255,255,255,0.08);
flex-shrink: 0;
}
.sidebar-header .logo {
font-size: 1.8rem;
margin-bottom: 0.3rem;
}
.sidebar-header h1 {
font-size: 0.95rem;
font-weight: 700;
line-height: 1.3;
margin-bottom: 0.2rem;
}
.sidebar-header p {
font-size: 0.72rem;
opacity: 0.5;
font-weight: 400;
}
.sidebar-stats {
display: flex;
gap: 0.5rem;
padding: 0.8rem 1.2rem;
border-bottom: 1px solid rgba(255,255,255,0.08);
flex-shrink: 0;
}
.sidebar-stats .stat {
background: rgba(255,255,255,0.08);
padding: 0.3rem 0.6rem;
border-radius: 6px;
font-size: 0.7rem;
font-weight: 500;
flex: 1;
text-align: center;
}
.sidebar-nav {
flex: 1;
overflow-y: auto;
padding: 0.8rem 0;
}
.sidebar-nav .nav-modulo {
padding: 0.6rem 1.2rem 0.3rem;
font-size: 0.68rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 1px;
color: rgba(255,255,255,0.4);
}
.sidebar-nav a {
display: block;
padding: 0.45rem 1.2rem 0.45rem 1.6rem;
color: rgba(255,255,255,0.7);
text-decoration: none;
font-size: 0.82rem;
font-weight: 400;
transition: all 0.2s;
border-left: 3px solid transparent;
}
.sidebar-nav a:hover {
background: rgba(255,255,255,0.06);
color: white;
border-left-color: var(--color-accent);
}
.sidebar-nav a.active {
background: rgba(41,128,185,0.15);
color: white;
border-left-color: var(--color-accent);
font-weight: 600;
}
.sidebar-nav .nav-count {
font-size: 0.65rem;
opacity: 0.4;
margin-left: 0.3rem;
}
/* ── HAMBURGER ── */
.hamburger {
display: none;
position: fixed;
top: 1rem;
left: 1rem;
z-index: 200;
background: var(--color-primary-dark);
border: none;
color: white;
width: 44px;
height: 44px;
border-radius: 10px;
font-size: 1.4rem;
cursor: pointer;
box-shadow: 0 4px 12px rgba(0,0,0,0.2);
transition: transform 0.2s;
}
.hamburger:hover { transform: scale(1.05); }
.sidebar-overlay {
display: none;
position: fixed;
inset: 0;
background: rgba(0,0,0,0.4);
z-index: 99;
}
/* ── MAIN CONTENT ── */
.main-content {
flex: 1;
margin-left: var(--sidebar-w);
min-width: 0;
}
/* ── PORTADA ── */
.portada {
background: linear-gradient(135deg, var(--color-primary-dark) 0%, var(--color-primary) 50%, var(--color-accent) 100%);
color: white;
padding: 4rem 2rem;
text-align: center;
min-height: 50vh;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
position: relative;
overflow: hidden;
}
.portada::before {
content: '';
position: absolute;
top: -50%; left: -50%;
width: 200%; height: 200%;
background: radial-gradient(circle at 30% 70%, rgba(255,255,255,0.05) 0%, transparent 50%);
pointer-events: none;
}
.portada .icono-grande { font-size: 4rem; margin-bottom: 1rem; opacity: 0.3; }
.portada h1 { font-size: 2.4rem; margin-bottom: 0.5rem; font-weight: 800; letter-spacing: -1px; }
.portada h2 { font-size: 1.15rem; font-weight: 300; opacity: 0.8; margin-bottom: 1rem; }
.portada p { opacity: 0.6; font-size: 0.9rem; }
/* ── CONTENIDO ── */
.contenido {
max-width: 820px;
margin: 0 auto;
padding: 2.5rem;
background: var(--color-surface);
min-height: 60vh;
}
.contenido h1.modulo-titulo {
color: var(--color-primary-dark);
font-size: 1.8rem;
font-weight: 800;
border-bottom: 3px solid var(--color-accent);
padding-bottom: 0.5rem;
margin: 3rem 0 1.5rem;
letter-spacing: -0.5px;
}
.contenido h2.seccion-titulo {
color: var(--color-primary);
font-size: 1.35rem;
font-weight: 700;
margin: 2.5rem 0 1rem;
border-left: 4px solid var(--color-accent);
padding-left: 0.8rem;
scroll-margin-top: 1rem;
}
.contenido h3.tema-titulo {
color: #2c3e50;
font-size: 1.1rem;
margin: 1.8rem 0 0.8rem;
font-weight: 600;
}
.contenido h4 {
color: #34495e;
font-size: 1rem;
margin: 1.3rem 0 0.6rem;
font-weight: 600;
}
.contenido p { margin: 0.8rem 0; text-align: justify; }
.contenido ul, .contenido ol { margin: 0.8rem 0; padding-left: 1.8rem; }
.contenido li { margin: 0.4rem 0; }
.contenido strong { color: #1a3a4a; font-weight: 600; }
.contenido hr {
border: none;
border-top: 1px solid #e8e4df;
margin: 1.8rem 0;
}
.contenido table {
width: 100%;
border-collapse: collapse;
margin: 1.2rem 0;
font-size: 0.88rem;
overflow-x: auto;
display: block;
}
.contenido th, .contenido td {
border: 1px solid #ddd;
padding: 0.6rem 0.8rem;
text-align: left;
vertical-align: top;
}
.contenido th {
background: var(--color-primary-dark);
color: white;
font-weight: 600;
}
.contenido tr:nth-child(even) { background: #f8f6f3; }
.contenido tr:hover { background: #efece7; }
.contenido blockquote {
border-left: 4px solid var(--color-accent);
margin: 1rem 0;
padding: 0.8rem 1.2rem;
background: #f0f5fa;
color: #2c3e50;
border-radius: 0 4px 4px 0;
}
/* ── VIDEO PLAYER ── */
.video-viewer-wrap {
margin: 1rem 0;
border: 1px solid #2c3e50;
border-radius: 8px;
overflow: hidden;
background: #1a1a2e;
}
.video-viewer-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 0.7rem 1rem;
background: linear-gradient(135deg, #1a1a2e, #16213e);
color: #eee;
cursor: pointer;
user-select: none;
font-size: 0.9rem;
transition: background 0.2s;
}
.video-viewer-header:hover {
background: linear-gradient(135deg, #16213e, #0f3460);
}
.video-toggle {
transition: transform 0.3s;
font-size: 0.8rem;
opacity: 0.6;
color: #aaa;
}
.video-viewer-wrap.collapsed .video-toggle {
transform: rotate(-90deg);
}
.video-viewer-wrap.collapsed .video-container,
.video-viewer-wrap.collapsed .video-placeholder {
display: none;
}
.video-container {
border-radius: 0;
overflow: hidden;
background: #000;
}
.video-container video {
width: 100%;
display: block;
}
/* ── NOTAS ESPECIALES ── */
.nota-video {
background: #fef9e7;
border: 1px solid #f9e79f;
border-left: 4px solid #f1c40f;
padding: 0.6rem 1rem;
margin: 0.8rem 0;
border-radius: 0 4px 4px 0;
font-size: 0.88rem;
color: #7d6608;
}
.video-placeholder {
background: linear-gradient(135deg, #1a1a2e 0%, #16213e 50%, #0f3460 100%);
border-radius: 8px;
padding: 2rem;
margin: 1rem 0;
text-align: center;
color: #e0e0e0;
position: relative;
overflow: hidden;
}
.video-placeholder::before {
content: '';
position: absolute;
top: 0; left: -100%; width: 200%; height: 100%;
background: linear-gradient(90deg, transparent 25%, rgba(255,255,255,0.03) 50%, transparent 75%);
animation: shimmer 3s infinite;
}
@keyframes shimmer {
0% { transform: translateX(-50%); }
100% { transform: translateX(50%); }
}
.video-placeholder .play-icon {
font-size: 2.5rem;
margin-bottom: 0.5rem;
opacity: 0.5;
}
.video-placeholder .placeholder-text {
font-size: 0.85rem;
opacity: 0.6;
}
.video-placeholder .placeholder-label {
font-size: 0.75rem;
opacity: 0.35;
margin-top: 0.4rem;
}
/* ── BARRA DE PROGRESO ── */
.progress-section {
padding: 0.8rem 1.2rem;
border-top: 1px solid rgba(255,255,255,0.08);
}
.progress-section .progress-label {
font-size: 0.7rem;
color: rgba(255,255,255,0.5);
margin-bottom: 0.4rem;
text-transform: uppercase;
letter-spacing: 0.05em;
}
.progress-bar-bg {
background: rgba(255,255,255,0.1);
border-radius: 6px;
height: 8px;
overflow: hidden;
}
.progress-bar-fill {
height: 100%;
border-radius: 6px;
background: linear-gradient(90deg, #2980b9, #27ae60);
transition: width 0.5s ease;
}
.progress-stats {
display: flex;
justify-content: space-between;
font-size: 0.7rem;
color: rgba(255,255,255,0.4);
margin-top: 0.3rem;
}
.nota-recurso {
background: #eaf2f8;
border: 1px solid #aed6f1;
border-left: 4px solid var(--color-accent);
padding: 0.6rem 1rem;
margin: 0.8rem 0;
border-radius: 0 4px 4px 0;
font-size: 0.88rem;
}
.nota-recurso a {
color: var(--color-primary);
font-weight: 600;
}
.pdf-viewer-wrap {
margin: 1rem 0;
border: 1px solid #d5e8f0;
border-radius: 8px;
overflow: hidden;
background: #f8fbfd;
}
.pdf-viewer-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 0.7rem 1rem;
background: linear-gradient(135deg, #eaf2f8, #d4e6f1);
cursor: pointer;
user-select: none;
font-size: 0.9rem;
transition: background 0.2s;
}
.pdf-viewer-header:hover {
background: linear-gradient(135deg, #d4e6f1, #aed6f1);
}
.pdf-toggle {
transition: transform 0.3s;
font-size: 0.8rem;
opacity: 0.6;
}
.pdf-viewer-wrap.collapsed .pdf-toggle {
transform: rotate(-90deg);
}
.pdf-viewer {
width: 100%;
height: 70vh;
border: none;
display: block;
}
.pdf-viewer-wrap.collapsed .pdf-viewer,
.pdf-viewer-wrap.collapsed .pdf-download-link {
display: none;
}
.pdf-download-link {
display: block;
text-align: center;
padding: 0.5rem;
font-size: 0.82rem;
color: var(--color-primary);
text-decoration: none;
background: #eaf2f8;
border-top: 1px solid #d5e8f0;
}
.pdf-download-link:hover {
background: #d4e6f1;
}
.nota-vacio {
color: var(--color-text-muted);
font-style: italic;
font-size: 0.88rem;
margin: 0.5rem 0;
}
.contenido .tema-separador {
margin: 2rem 0;
border-top: 1px dashed #ddd;
}
/* ── PIE DE PÁGINA ── */
.footer {
text-align: center;
padding: 2rem;
color: var(--color-text-muted);
font-size: 0.8rem;
max-width: 820px;
margin: 0 auto;
border-top: 1px solid #e8e4df;
background: var(--color-surface);
}
/* ── RESPONSIVE ── */
@media (max-width: 900px) {
.sidebar { transform: translateX(-100%); }
.sidebar.open { transform: translateX(0); }
.sidebar-overlay.open { display: block; }
.hamburger { display: block; }
.main-content { margin-left: 0; }
.portada { padding: 3rem 1rem 2rem; min-height: 40vh; }
.portada h1 { font-size: 1.6rem; }
.portada h2 { font-size: 0.95rem; }
.contenido { padding: 1.5rem 1rem; }
}
+1209
View File
File diff suppressed because it is too large Load Diff
+44
View File
@@ -0,0 +1,44 @@
// Hamburger menu
const hamburger = document.getElementById('hamburger');
const sidebar = document.getElementById('sidebar');
const overlay = document.getElementById('sidebar-overlay');
hamburger.addEventListener('click', () => {
sidebar.classList.toggle('open');
overlay.classList.toggle('open');
});
overlay.addEventListener('click', () => {
sidebar.classList.remove('open');
overlay.classList.remove('open');
});
// Close sidebar on nav click (mobile)
sidebar.querySelectorAll('a').forEach(link => {
link.addEventListener('click', () => {
if (window.innerWidth <= 900) {
sidebar.classList.remove('open');
overlay.classList.remove('open');
}
});
});
// Highlight active section on scroll
const sections = document.querySelectorAll('.seccion-titulo');
const navLinks = document.querySelectorAll('.sidebar-nav a[data-section]');
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
navLinks.forEach(link => link.classList.remove('active'));
const id = entry.target.id;
const activeLink = document.querySelector('.sidebar-nav a[data-section="' + id + '"]');
if (activeLink) {
activeLink.classList.add('active');
activeLink.scrollIntoView({ block: 'nearest', behavior: 'smooth' });
}
}
});
}, { rootMargin: '-10% 0px -80% 0px' });
sections.forEach(section => observer.observe(section));