deb04c9315
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>
188 lines
5.3 KiB
HTML
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>
|