Files
AR-VMS-Seaman/docs/mockups/splash.html
T
alro65 deb04c9315 sprint-0: fundaciones VMS-Sailor
Sprint 0 completo del producto VMS-Sailor (Vessel Management System
integrado para buques 30-40m). Brief de referencia en
VMS_Sailor_v2_Parte_*.md (intacto).

Core (vmssailor.core, 95.17% coverage, 99 tests verde):
- ShipCoord: sistema naval x_pp/y_cl/z_bl frozen
- Vessel, Deck, Bulkhead
- Equipment, EquipmentModel, Sensor, EquipmentSpec
- Tag, AlarmConfig, TagBinding, Scaling
- CardInstance, Bus, Topology con validacion 21 puntos I/O AR-NMEA-IO-v1.0
- Alarm, PermissiveRule, Condition
- Project agregado raiz con validacion cross-entity
- Persistencia portable .vmsproj (SQLite) con roundtrip verificable

Biblioteca curada seed (vmssailor.library):
- systems_catalog.json completo (catalogo maestro Parte 1 sec 7)
- 2 vessels: Sunseeker 76, Ferretti 850
- 2 motores: MTU 12V 2000 M96, Volvo D13-900
- 1 genset: Northern Lights M65C13
- yacht_motor_planeo.yaml (reglas heuristicas)
- TODO marcado data_source=seed_estimate - requiere validacion datasheets

Tools:
- vms-validate-library: CLI valida biblioteca completa
- vms-generate-test-project: CLI demo + verificacion roundtrip persistencia

Design System + 8 mockups HTML estaticos:
- docs/design_system.md (paleta Deep Ocean, gradientes, typography, motion)
- docs/brand/ (logo + variantes SVG)
- docs/mockups/splash, studio_main, runtime_overview,
  runtime_mimic_fuel (P&ID animado), runtime_alarms, runtime_trim (panel
  estrella con horizonte artificial), mobile_overview, mobile_trim
- docs/mockups/index.html (galeria)

Firmware (Sprint 12+ implementacion):
- firmware/ar_nmea_io_v1/src/config/pinout.h con macros GPIO

Decisiones autonomas documentadas en docs/decisions_sprint0.md.

Stack: Python 3.11 + uv + Pydantic v2 + SQLite stdlib + hatchling +
pytest 9 + ruff + mypy. Sin PySide6, FastAPI, Flutter ni firmware
funcional (entran en sprints siguientes).

Criterio de aceptacion Sprint 0: cumplido.
- uv sync: OK
- pytest: 99/99 verde
- cov vmssailor.core: 95.17% (objetivo >=80%)
- ruff: clean
- vms-validate-library: OK
- vms-generate-test-project: INTEGRIDAD OK

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 07:26:06 -04:00

188 lines
5.3 KiB
HTML

<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>VMS-Sailor · Splash</title>
<link rel="icon" type="image/svg+xml" href="../brand/favicon.svg">
<link rel="stylesheet" href="_tokens.css">
<style>
body {
background: var(--g-horizon);
overflow: hidden;
}
.splash {
min-height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
position: relative;
padding: var(--s-7);
}
.compass-bg {
position: absolute;
width: 720px;
height: 720px;
border-radius: 50%;
background: var(--g-cyan-glow);
opacity: 0.45;
filter: blur(20px);
animation: drift 8s ease-in-out infinite;
}
@keyframes drift {
0%, 100% { transform: scale(1) rotate(0deg); }
50% { transform: scale(1.1) rotate(180deg); }
}
.waves {
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 220px;
overflow: hidden;
pointer-events: none;
}
.wave {
position: absolute;
bottom: -10px;
width: 200%;
height: 220px;
opacity: 0.55;
}
.wave svg { width: 100%; height: 100%; }
.wave-1 { animation: waveMove 18s linear infinite; }
.wave-2 { animation: waveMove 26s linear infinite reverse; opacity: 0.35; }
@keyframes waveMove {
from { transform: translateX(0); }
to { transform: translateX(-50%); }
}
.logo-wrap {
position: relative;
z-index: 2;
display: flex;
flex-direction: column;
align-items: center;
gap: var(--s-5);
}
.logo-wrap img { width: 220px; height: 220px; filter: drop-shadow(0 12px 40px rgba(0,217,255,0.4)); }
.product-name {
font-family: var(--f-display);
font-size: 96px;
font-weight: 700;
letter-spacing: -3px;
line-height: 1;
color: var(--c-foam);
margin: 0;
text-shadow: 0 4px 32px rgba(0,217,255,0.25);
}
.product-name .accent { color: var(--c-cyan); font-weight: 300; }
.product-name .light { font-weight: 400; }
.tagline {
font-family: var(--f-ui);
font-size: 18px;
letter-spacing: 4px;
text-transform: uppercase;
color: var(--c-horizon);
margin-top: -8px;
margin-bottom: var(--s-6);
}
.build-bar {
display: flex;
gap: var(--s-5);
align-items: center;
padding: var(--s-3) var(--s-5);
background: rgba(4,17,31,0.55);
border: 1px solid rgba(255,255,255,0.08);
border-radius: var(--r-pill);
backdrop-filter: blur(20px);
-webkit-backdrop-filter: blur(20px);
font-family: var(--f-mono);
font-size: 12px;
color: var(--c-sand);
}
.build-bar .sep { color: var(--c-iron); }
.loading-track {
width: 360px;
height: 4px;
background: rgba(255,255,255,0.08);
border-radius: var(--r-pill);
margin-top: var(--s-6);
overflow: hidden;
position: relative;
}
.loading-bar {
position: absolute;
inset: 0;
width: 40%;
background: var(--g-cyan);
border-radius: var(--r-pill);
animation: scan 2.4s ease-in-out infinite;
box-shadow: var(--glow-cyan);
}
@keyframes scan {
0% { transform: translateX(-100%); }
50% { transform: translateX(150%); }
100% { transform: translateX(150%); }
}
.footer-marks {
position: absolute;
bottom: var(--s-5);
left: 0;
right: 0;
display: flex;
justify-content: center;
gap: var(--s-6);
color: var(--c-fog);
font-size: 11px;
letter-spacing: 2px;
text-transform: uppercase;
z-index: 2;
}
.footer-marks strong { color: var(--c-sand); font-weight: 600; letter-spacing: 2px; }
</style>
</head>
<body>
<div class="splash">
<div class="compass-bg"></div>
<div class="logo-wrap">
<img src="../brand/logo-mark.svg" alt="">
<h1 class="product-name">VMS<span class="accent"> · </span><span class="light">Sailor</span></h1>
<p class="tagline">Vessel Management System</p>
<div class="build-bar">
<span>v0.1.0 sprint0</span>
<span class="sep">|</span>
<span>IEC 60092-504</span>
<span class="sep">|</span>
<span>IACS UR E22</span>
<span class="sep">|</span>
<span>NMEA 2000</span>
</div>
<div class="loading-track"><div class="loading-bar"></div></div>
</div>
<div class="waves">
<div class="wave wave-2">
<svg viewBox="0 0 1440 220" preserveAspectRatio="none" xmlns="http://www.w3.org/2000/svg">
<path d="M 0 120 C 240 80 480 160 720 120 C 960 80 1200 160 1440 120 L 1440 220 L 0 220 Z" fill="#1B3E6E"/>
</svg>
</div>
<div class="wave wave-1">
<svg viewBox="0 0 1440 220" preserveAspectRatio="none" xmlns="http://www.w3.org/2000/svg">
<path d="M 0 150 C 240 110 480 190 720 150 C 960 110 1200 190 1440 150 L 1440 220 L 0 220 Z" fill="#04111F"/>
</svg>
</div>
</div>
<div class="footer-marks">
<span><strong>Álvaro</strong> · Propietario IP</span>
<span>HWID: <strong>04F3-2BA1-19EE</strong></span>
<span>Licencia: <strong>Activa</strong></span>
</div>
</div>
</body>
</html>