Files
soleprint/soleprint/index.html

433 lines
14 KiB
HTML

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>soleprint</title>
<link
rel="icon"
type="image/svg+xml"
href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64' fill='%23e5e5e5'%3E%3Cg transform='rotate(-15 18 38)'%3E%3Cellipse cx='18' cy='32' rx='7' ry='13'/%3E%3Cellipse cx='18' cy='48' rx='6' ry='7'/%3E%3C/g%3E%3Cg transform='rotate(15 46 28)'%3E%3Cellipse cx='46' cy='22' rx='7' ry='13'/%3E%3Cellipse cx='46' cy='38' rx='6' ry='7'/%3E%3C/g%3E%3C/svg%3E"
/>
<style>
* {
box-sizing: border-box;
}
html {
background: #0a0a0a;
}
body {
font-family:
system-ui,
-apple-system,
sans-serif;
max-width: 960px;
margin: 0 auto;
padding: 2rem 1rem;
line-height: 1.6;
color: #e5e5e5;
background: #0a0a0a;
}
/* Sidebar styles */
.sidebar {
position: fixed;
top: 0;
left: 0;
width: 60px;
height: 100vh;
background: #1a1a1a;
border-right: 1px solid #333;
display: flex;
flex-direction: column;
align-items: center;
padding: 1rem 0;
z-index: 99999;
}
.sidebar-item {
width: 44px;
height: 44px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 8px;
margin-bottom: 0.5rem;
text-decoration: none;
color: #a3a3a3;
transition: all 0.2s;
}
a.sidebar-item:hover {
background: #333;
color: white;
}
.sidebar-item.active {
background: #d4a574;
color: #0a0a0a;
}
.sidebar-item svg {
width: 24px;
height: 24px;
}
.sidebar-divider {
width: 32px;
height: 1px;
background: #333;
margin: 0.5rem 0;
}
.sidebar-icon {
width: 44px;
height: 44px;
display: flex;
align-items: center;
justify-content: center;
color: #555;
margin-bottom: 0.5rem;
}
.sidebar-icon svg {
width: 20px;
height: 20px;
}
.sidebar-item .tooltip {
position: absolute;
left: 70px;
background: #333;
color: white;
padding: 0.5rem 0.75rem;
border-radius: 4px;
font-size: 0.85rem;
white-space: nowrap;
opacity: 0;
pointer-events: none;
transition: opacity 0.2s;
}
.sidebar-item:hover .tooltip {
opacity: 1;
}
body.has-sidebar {
margin-left: 60px;
}
header {
display: flex;
align-items: center;
gap: 1rem;
margin-bottom: 1rem;
}
.logo {
width: 64px;
height: 64px;
}
h1 {
font-size: 2.5rem;
margin: 0;
color: white;
}
.tagline {
color: #a3a3a3;
margin-bottom: 2rem;
border-bottom: 1px solid #333;
padding-bottom: 2rem;
}
.mission {
background: #1a1a1a;
border-left: 3px solid #d4a574;
padding: 1rem 1.5rem;
margin: 2rem 0;
border-radius: 0 8px 8px 0;
color: #d4a574;
}
.systems {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 1.5rem;
margin: 2rem 0;
}
.system {
display: flex;
align-items: flex-start;
gap: 1rem;
text-decoration: none;
padding: 1.5rem;
border-radius: 12px;
transition:
transform 0.15s,
box-shadow 0.15s;
}
.system:hover {
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
}
.system.disabled {
opacity: 0.5;
pointer-events: none;
}
.system svg {
width: 48px;
height: 48px;
flex-shrink: 0;
}
.system-info h2 {
margin: 0 0 0.25rem 0;
font-size: 1.2rem;
}
.system-info p {
margin: 0;
font-size: 0.9rem;
color: #a3a3a3;
}
.artery {
background: #1a1a1a;
border: 1px solid #b91c1c;
}
.artery h2 {
color: #fca5a5;
}
.artery svg {
color: #b91c1c;
}
.atlas {
background: #1a1a1a;
border: 1px solid #15803d;
}
.atlas h2 {
color: #86efac;
}
.atlas svg {
color: #15803d;
}
.station {
background: #1a1a1a;
border: 1px solid #1d4ed8;
}
.station h2 {
color: #93c5fd;
}
.station svg {
color: #1d4ed8;
}
footer {
margin-top: 3rem;
padding-top: 1.5rem;
border-top: 1px solid #333;
font-size: 0.85rem;
color: #666;
}
.showcase-container {
display: flex;
flex-direction: column;
align-items: center;
gap: 0.5rem;
margin-bottom: 2rem;
}
.showcase-link {
display: inline-block;
background: linear-gradient(135deg, #d4a574, #b8956a);
color: #0a0a0a;
padding: 0.75rem 1.5rem;
border-radius: 8px;
text-decoration: none;
font-weight: 600;
transition: transform 0.15s, box-shadow 0.15s;
}
.showcase-link:hover {
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(212, 165, 116, 0.3);
}
.showcase-hint {
color: #666;
font-size: 0.8rem;
text-decoration: none;
}
.showcase-hint:hover {
color: #d4a574;
}
</style>
{% if managed %}
<link rel="stylesheet" href="/sidebar.css">
<script src="/sidebar.js"></script>
{% endif %}
</head>
<body{% if managed %} class="has-sidebar"{% endif %}>
<header>
<!-- Two shoe prints walking -->
<svg class="logo" viewBox="0 0 64 64" fill="currentColor">
<!-- Left shoe print (back, lower) -->
<g transform="rotate(-15 18 38)">
<!-- Sole -->
<ellipse cx="18" cy="32" rx="7" ry="13" />
<!-- Heel -->
<ellipse cx="18" cy="48" rx="6" ry="7" />
</g>
<!-- Right shoe print (front, higher) -->
<g transform="rotate(15 46 28)">
<!-- Sole -->
<ellipse cx="46" cy="22" rx="7" ry="13" />
<!-- Heel -->
<ellipse cx="46" cy="38" rx="6" ry="7" />
</g>
</svg>
<h1>soleprint</h1>
</header>
<p class="tagline">Cada paso deja huella</p>
{% if showcase_url %}
<div class="showcase-container">
<a href="{{ showcase_url }}" class="showcase-link">Managed Room Demo</a>
<a href="/artery" class="showcase-hint">what's a room?</a>
<a href="https://mariano.mcrn.ar/docs/soleprint/" class="showcase-hint">see docs</a>
</div>
{% endif %}
<p class="mission" style="display: none">
<!-- placeholder for session alerts -->
</p>
<div class="systems">
<a
{%
if
artery
%}href="{{ artery }}"
{%
endif
%}
class="system artery{% if not artery %} disabled{% endif %}"
>
<!-- Flux capacitor style -->
<svg
viewBox="0 0 48 48"
fill="none"
stroke="currentColor"
stroke-width="2.5"
>
<path d="M24 4 L24 20 M24 20 L8 40 M24 20 L40 40" />
<circle cx="24" cy="4" r="3" fill="currentColor" />
<circle cx="8" cy="40" r="3" fill="currentColor" />
<circle cx="40" cy="40" r="3" fill="currentColor" />
<circle cx="24" cy="20" r="5" fill="none" />
<circle cx="24" cy="20" r="2" fill="currentColor" />
</svg>
<div class="system-info">
<h2>Artery</h2>
<p>Todo lo vital</p>
</div>
</a>
<a
{%
if
atlas
%}href="{{ atlas }}"
{%
endif
%}
class="system atlas{% if not atlas %} disabled{% endif %}"
>
<!-- Map/Atlas with compass rose -->
<svg viewBox="0 0 48 48" fill="currentColor">
<!-- Map fold lines -->
<path
d="M4 8 L44 8 M4 16 L44 16 M4 24 L44 24 M4 32 L44 32 M4 40 L44 40"
stroke="currentColor"
stroke-width="1.5"
opacity="0.3"
fill="none"
/>
<path
d="M16 4 L16 44 M32 4 L32 44"
stroke="currentColor"
stroke-width="1.5"
opacity="0.3"
fill="none"
/>
<!-- Compass rose in center -->
<circle
cx="24"
cy="24"
r="8"
fill="none"
stroke="currentColor"
stroke-width="2"
/>
<path
d="M24 16 L24 32 M16 24 L32 24"
stroke="currentColor"
stroke-width="2"
/>
<path
d="M24 16 L26 20 L24 24 L22 20 Z"
fill="currentColor"
/>
<!-- North arrow -->
</svg>
<div class="system-info">
<h2>Atlas</h2>
<p>Documentación accionable</p>
</div>
</a>
<a
{%
if
station
%}href="{{ station }}"
{%
endif
%}
class="system station{% if not station %} disabled{% endif %}"
>
<!-- Control panel with knobs and meters -->
<svg viewBox="0 0 48 48" fill="currentColor">
<!-- Panel frame -->
<rect
x="4"
y="8"
width="40"
height="32"
rx="2"
fill="none"
stroke="currentColor"
stroke-width="2"
/>
<!-- Knobs -->
<circle cx="14" cy="18" r="5" />
<circle cx="14" cy="18" r="2" fill="white" />
<circle cx="34" cy="18" r="5" />
<circle cx="34" cy="18" r="2" fill="white" />
<!-- Meter displays -->
<rect
x="10"
y="28"
width="8"
height="6"
rx="1"
fill="white"
opacity="0.6"
/>
<rect
x="30"
y="28"
width="8"
height="6"
rx="1"
fill="white"
opacity="0.6"
/>
<!-- Indicator lights -->
<circle cx="24" cy="14" r="2" fill="white" opacity="0.8" />
</svg>
<div class="system-info">
<h2>Station</h2>
<p>Monitores, Entornos y Herramientas</p>
</div>
</a>
</div>
<footer>soleprint</footer>
</body>
</html>