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 + + + + + + +
+
+
+ O + OncoDiario +
+ + + + Abrir seguimiento +
+ +
+
+ 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

+ + + + + + + + + + + +
SemanaFechaTratamientoCompletada
+
+ +
+

Registro semanal de síntomas

+ + + + + + + + + + + + + + + +
SemanaFatigaNáuseasDolorNeuropatíaSueñoEstado ánimoObservaciones
+ + + Escala: 0=nada | 1=leve | 2=moderado | 3=importante | + 4=muy importante | 5=incapacitante + +
+ +
+

Preguntas para el oncólogo

+ +
+
+ +
+

Notas de consulta

+ +
+ +
+ +