diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..30cf57e
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,10 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Ignored default folder with query files
+/queries/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..4b151ab
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..d1d7b44
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/oncodiario.iml b/.idea/oncodiario.iml
new file mode 100644
index 0000000..d6ebd48
--- /dev/null
+++ b/.idea/oncodiario.iml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/frontend/css/estilos.css b/frontend/css/estilos.css
new file mode 100644
index 0000000..7610dd7
--- /dev/null
+++ b/frontend/css/estilos.css
@@ -0,0 +1,445 @@
+:root{
+ --primary:#4da3ff;
+ --secondary:#7dd3fc;
+ --success:#22c55e;
+ --bg:#0b1220;
+ --bg-soft:#111c2d;
+ --card:#101b2d;
+ --card-strong:#16243d;
+ --text:#eaf3ff;
+ --navy:#dfeafe;
+ --muted:#9bb0d0;
+ --border:#1d2f49;
+ --shadow:0 20px 50px rgba(0, 0, 0, 0.45);
+}
+
+*{
+ box-sizing:border-box;
+ margin:0;
+ padding:0;
+}
+
+body{
+ font-family: 'Inter', Segoe UI, Arial, sans-serif;
+ background:radial-gradient(circle at top, #11213d 0%, #0b1220 38%, #070d1a 100%);
+ color:var(--text);
+ padding:20px;
+}
+
+.container{
+ max-width:1200px;
+ margin:auto;
+}
+
+.page-shell{
+ max-width:1280px;
+ margin:0 auto;
+}
+
+.topbar{
+ display:flex;
+ align-items:center;
+ justify-content:space-between;
+ gap:20px;
+ background:rgba(16, 27, 45, 0.9);
+ border:1px solid var(--border);
+ border-radius:18px;
+ padding:18px 24px;
+ box-shadow:var(--shadow);
+ margin-bottom:32px;
+}
+
+.brand{
+ display:flex;
+ align-items:center;
+ gap:12px;
+ font-weight:700;
+ color:var(--navy);
+}
+
+.brand-mark{
+ width:36px;
+ height:36px;
+ border-radius:12px;
+ background:linear-gradient(135deg, var(--primary), var(--secondary));
+ color:#08101d;
+ display:flex;
+ align-items:center;
+ justify-content:center;
+ font-size:1.1rem;
+ box-shadow:0 12px 20px rgba(77, 163, 255, 0.35);
+}
+
+.topbar-nav{
+ display:flex;
+ align-items:center;
+ gap:22px;
+}
+
+.topbar-nav a{
+ text-decoration:none;
+ color:var(--navy);
+ font-weight:600;
+ opacity:.8;
+}
+
+.topbar-nav a:hover{
+ color:var(--secondary);
+}
+
+.btn{
+ display:inline-flex;
+ align-items:center;
+ justify-content:center;
+ padding:12px 20px;
+ border-radius:12px;
+ font-weight:700;
+ text-decoration:none;
+ transition:all .2s ease;
+ border:1px solid transparent;
+ cursor:pointer;
+}
+
+.btn:hover{
+ transform:translateY(-1px);
+ box-shadow:0 10px 18px rgba(77, 163, 255, 0.2);
+}
+
+.btn-primary{
+ background:linear-gradient(135deg, var(--primary), #5ea9ff);
+ color:#08101d;
+ box-shadow:0 10px 18px rgba(77, 163, 255, 0.28);
+}
+
+.btn-secondary{
+ background:rgba(18, 31, 50, 0.9);
+ color:var(--text);
+ border-color:var(--border);
+}
+
+.hero{
+ display:grid;
+ grid-template-columns:1.2fr .8fr;
+ gap:32px;
+ align-items:center;
+ padding:20px 0 28px;
+}
+
+.hero-copy{
+ padding:20px 0;
+}
+
+.eyebrow{
+ display:inline-block;
+ background:rgba(77, 163, 255, 0.12);
+ color:var(--secondary);
+ padding:8px 12px;
+ border:1px solid rgba(125, 211, 252, 0.28);
+ border-radius:999px;
+ font-size:.8rem;
+ font-weight:700;
+ letter-spacing:.04em;
+ text-transform:uppercase;
+ margin-bottom:18px;
+}
+
+h1{
+ color:var(--navy);
+ font-size:clamp(2.2rem, 4vw, 4rem);
+ line-height:1.1;
+ margin-bottom:18px;
+}
+
+.hero-copy p{
+ font-size:1.08rem;
+ line-height:1.7;
+ color:var(--muted);
+ max-width:620px;
+}
+
+.actions{
+ display:flex;
+ gap:16px;
+ margin-top:26px;
+ flex-wrap:wrap;
+}
+
+.mini-stats{
+ list-style:none;
+ display:flex;
+ gap:24px;
+ margin-top:28px;
+ flex-wrap:wrap;
+}
+
+.mini-stats li{
+ min-width:110px;
+ background:rgba(19, 29, 46, 0.95);
+ border:1px solid var(--border);
+ border-radius:16px;
+ padding:16px 18px;
+ box-shadow:0 8px 20px rgba(0,0,0,0.15);
+}
+
+.mini-stats strong{
+ display:block;
+ color:var(--secondary);
+ font-size:1.35rem;
+ margin-bottom:6px;
+}
+
+.mini-stats span{
+ color:var(--muted);
+ font-size:.9rem;
+}
+
+.hero-panel{
+ background:linear-gradient(180deg, #111d2e 0%, #0d1726 100%);
+ border:1px solid var(--border);
+ border-radius:24px;
+ padding:24px;
+ box-shadow:var(--shadow);
+}
+
+.panel-header{
+ display:flex;
+ align-items:center;
+ gap:10px;
+ font-weight:700;
+ color:var(--navy);
+ margin-bottom:18px;
+}
+
+.status-dot{
+ width:10px;
+ height:10px;
+ border-radius:50%;
+ background:var(--success);
+ box-shadow:0 0 0 6px rgba(34, 197, 94, 0.15);
+}
+
+.panel-card{
+ background:rgba(77, 163, 255, 0.08);
+ border-radius:18px;
+ padding:18px;
+ border:1px solid rgba(77, 163, 255, 0.24);
+ margin-bottom:22px;
+}
+
+.label{
+ color:var(--muted);
+ font-size:.8rem;
+ margin-bottom:8px;
+}
+
+.panel-card h3{
+ color:var(--text);
+ font-size:1.7rem;
+}
+
+.panel-metrics{
+ display:grid;
+ grid-template-columns:1fr 1fr;
+ gap:14px;
+ margin-bottom:20px;
+}
+
+.panel-metrics div{
+ background:rgba(17, 29, 46, 0.8);
+ border:1px solid var(--border);
+ border-radius:14px;
+ padding:14px 12px;
+}
+
+.panel-metrics small{
+ display:block;
+ color:var(--muted);
+ margin-bottom:8px;
+}
+
+.panel-metrics strong{
+ color:var(--text);
+ font-size:1rem;
+}
+
+.panel-progress{
+ background:rgba(17, 29, 46, 0.8);
+ border:1px solid var(--border);
+ border-radius:14px;
+ padding:14px;
+}
+
+.progress-labels{
+ display:flex;
+ align-items:center;
+ justify-content:space-between;
+ gap:10px;
+ margin-bottom:10px;
+ font-size:.9rem;
+ color:var(--navy);
+}
+
+.progress-bar{
+ background:#101a2b;
+ height:12px;
+ border-radius:999px;
+ overflow:hidden;
+ border:1px solid var(--border);
+}
+
+.progress-bar span{
+ display:block;
+ width:68%;
+ height:100%;
+ background:linear-gradient(90deg, var(--primary), var(--secondary));
+ border-radius:inherit;
+}
+
+.features{
+ display:grid;
+ grid-template-columns:repeat(3, minmax(0, 1fr));
+ gap:24px;
+ padding:20px 0 40px;
+}
+
+.feature-card{
+ background:rgba(16, 27, 45, 0.96);
+ border:1px solid var(--border);
+ border-radius:20px;
+ padding:26px 20px;
+ box-shadow:0 12px 22px rgba(0,0,0,0.12);
+}
+
+.feature-card h2{
+ color:var(--secondary);
+ margin-bottom:12px;
+ font-size:1.25rem;
+}
+
+.feature-card p{
+ color:var(--muted);
+ line-height:1.7;
+}
+
+@media (max-width: 900px){
+ .hero{
+ grid-template-columns:1fr;
+ }
+
+ .topbar{
+ flex-wrap:wrap;
+ justify-content:center;
+ }
+
+ .topbar-nav{
+ order:3;
+ width:100%;
+ justify-content:center;
+ }
+}
+
+@media (max-width: 640px){
+ body{
+ padding:14px;
+ }
+
+ .features{
+ grid-template-columns:1fr;
+ }
+
+ .actions,
+ .mini-stats{
+ flex-direction:column;
+ }
+
+ .btn{
+ width:100%;
+ }
+}
+
+.card{
+ background:var(--card);
+ padding:20px;
+ margin-bottom:20px;
+ border-radius:12px;
+ box-shadow:0 2px 8px rgba(0,0,0,.08);
+}
+
+h1, h2{
+ margin-bottom:10px;
+}
+
+h2{
+ margin-bottom:15px;
+ color:#dfeafe;
+}
+
+.progress{
+ display:flex;
+ gap:8px;
+ flex-wrap:wrap;
+ margin:15px 0;
+}
+
+.session{
+ width:40px;
+ height:40px;
+ border:2px solid var(--primary);
+ border-radius:50%;
+ display:flex;
+ align-items:center;
+ justify-content:center;
+ cursor:pointer;
+ transition:.3s;
+}
+
+.session.completed{
+ background:var(--success);
+ color:white;
+ border-color:var(--success);
+}
+
+table{
+ width:100%;
+ border-collapse:collapse;
+ margin-top:10px;
+}
+
+th{
+ background:var(--primary);
+ color:#07111d;
+}
+
+th,td{
+ border:1px solid var(--border);
+ padding:10px;
+ text-align:center;
+ color:var(--text);
+}
+
+input[type="text"],
+input[type="date"],
+textarea,
+select{
+ width:100%;
+ padding:8px;
+ border:1px solid var(--border);
+ border-radius:6px;
+ background:rgba(13, 23, 38, 0.9);
+ color:var(--text);
+}
+
+textarea{
+ min-height:120px;
+ resize:vertical;
+}
+
+.question{
+ margin-bottom:10px;
+}
+
+small{
+ display:block;
+ margin-top:10px;
+ color:var(--muted);
+}
\ No newline at end of file
diff --git a/frontend/index.html b/frontend/index.html
new file mode 100644
index 0000000..450aa1b
--- /dev/null
+++ b/frontend/index.html
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+ OncoDiario
+
+
+
+
+
+
+
+
+
+
+
+ Cuidado personalizado
+ Tu tratamiento, monitorizado con claridad.
+
+ Registra sesiones, revisa síntomas y lleva un control semanal de tu evolución
+ para acompañarte mejor en cada fase del tratamiento.
+
+
+
+
+
+ -
+ 12
+ semanas
+
+ -
+ 3
+ registros
+
+ -
+ 24/7
+ seguimiento
+
+
+
+
+
+
+
+
+
+ Calendario
+ Organiza sesiones, fechas de tratamiento y revisiones médicas.
+
+
+ Síntomas
+ Controla fatiga, náuseas, dolor y bienestar general cada semana.
+
+
+ Consulta
+ Prepara preguntas y anota observaciones para tus citas con el equipo.
+
+
+
+
+
\ No newline at end of file
diff --git a/frontend/seguimiento.html b/frontend/seguimiento.html
new file mode 100644
index 0000000..d641c5b
--- /dev/null
+++ b/frontend/seguimiento.html
@@ -0,0 +1,114 @@
+
+
+
+
+
+ OncoDiario - Seguimiento del Tratamiento
+
+
+
+
+
+
+
+
+
+
+
+
+
🩺 OncoDiario
+
Seguimiento del tratamiento oncológico
+
+
+
+
+
+
+
+
+
+
+
Calendario de sesiones
+
+
+
+
+ | Semana |
+ Fecha |
+ Tratamiento |
+ Completada |
+
+
+
+
+
+
+
+
Registro semanal de síntomas
+
+
+
+
+ | Semana |
+ Fatiga |
+ Náuseas |
+ Dolor |
+ Neuropatía |
+ Sueño |
+ Estado ánimo |
+ Observaciones |
+
+
+
+
+
+
+ Escala: 0=nada | 1=leve | 2=moderado | 3=importante |
+ 4=muy importante | 5=incapacitante
+
+
+
+
+
Preguntas para el oncólogo
+
+
+
+
+
+
Notas de consulta
+
+
+
+
+
+