212 lines
13 KiB
HTML
212 lines
13 KiB
HTML
{{ define "main" }}
|
|
<div class="person-page-wrapper visible" style="padding-bottom: 100px; opacity: 1 !important;">
|
|
|
|
<!-- Oben: Die runden Thumbnails -->
|
|
{{ partial "person_nav.html" . }}
|
|
|
|
<div class="container" style="max-width: 900px; margin: 0 auto; padding: 0 20px;">
|
|
<header style="text-align: center; margin-bottom: 20px;">
|
|
<h1 style="color: #ff4500; letter-spacing: 10px; font-size: 2.2rem; text-shadow: 0 0 20px rgba(255,69,0,0.3); font-family: 'Courier New', monospace; margin-top: 10px;">{{ .Title | upper }}</h1>
|
|
<p style="color: rgba(212,175,55,0.5); font-family: 'Courier New', monospace; letter-spacing: 3px; font-size: 0.8rem;">// DATENSTROM & CHRONIK</p>
|
|
</header>
|
|
|
|
<!-- DIE SCHÖNE STEAMPUNK TIMELINE -->
|
|
<div class="timeline-track">
|
|
{{ range $index, $element := .Params.events }}
|
|
{{ $side := "right" }}{{ if (mod $index 2) }}{{ $side = "left" }}{{ end }}
|
|
<div class="time-node {{ $side }} {{ if .omega }}omega{{ end }}">
|
|
<div class="time-content {{ if .omega }}omega-node{{ end }}">
|
|
<div class="tc-header">
|
|
<span class="tc-year">[ {{ .year }} ]</span>
|
|
{{ if .tag }}<span class="tc-tag">{{ .tag }}</span>{{ end }}
|
|
</div>
|
|
<p>{{ .text }}</p>
|
|
</div>
|
|
</div>
|
|
{{ end }}
|
|
</div>
|
|
|
|
<!-- DAS GROSSE STEAMPUNK-SCHILD -->
|
|
<div class="akte-sign-container" style="text-align: center; margin-top: 100px;">
|
|
{{ if eq .Title "RODE, SASCHA" }}
|
|
<button class="mega-akte-btn sascha-special"
|
|
onclick="document.getElementById('person-akte-modal').style.display='flex'; document.body.style.overflow='hidden';"
|
|
style="background-image: url('/img/hp_akte.jpeg'); width: 580px; height: 320px;">
|
|
</button>
|
|
{{ else if eq .Title "Mutti" }}
|
|
<button class="mega-akte-btn mutti-special"
|
|
onclick="document.getElementById('person-akte-modal').style.display='flex'; document.body.style.overflow='hidden';"
|
|
style="background-image: url('/img/hp_akte_mutti_1.jpeg'); width: 500px; height: 280px;">
|
|
</button>
|
|
{{ else }}
|
|
<button class="mega-akte-btn default-btn"
|
|
onclick="document.getElementById('person-akte-modal').style.display='flex'; document.body.style.overflow='hidden';"
|
|
style="background: linear-gradient(135deg, #2a1b0a 0%, #000 100%); border: 4px double #b87333; color: #d4af37; padding: 40px 80px; cursor: pointer; position: relative; box-shadow: 0 0 40px rgba(0,0,0,0.8); display: inline-flex; flex-direction: column; align-items: center; font-family: 'Courier New', monospace;">
|
|
<span style="color: #b87333; font-size: 1.5rem; letter-spacing: 10px; margin-bottom: 15px;">⚙ ⚙ ⚙</span>
|
|
<span style="font-size: 0.7rem; letter-spacing: 5px; color: rgba(212,175,55,0.6); text-transform: uppercase;">ZENTRAL-ARCHIV ZUGRIFF</span>
|
|
<span style="font-size: 2.2rem; font-weight: bold; letter-spacing: 12px; margin: 15px 0; color: #ff4500; text-shadow: 0 0 15px rgba(255,69,0,0.4);">AKTE: {{ .Title | upper }}</span>
|
|
<span style="font-size: 0.75rem; border-top: 1px solid rgba(212,175,55,0.3); padding-top: 15px; width: 100%; letter-spacing: 2px;">STATUS: {{ .Params.status | default "KLASSIFIZIERT" }}</span>
|
|
<span style="color: #b87333; font-size: 1.5rem; letter-spacing: 10px; margin-top: 15px;">⚙ ⚙ ⚙</span>
|
|
</button>
|
|
{{ end }}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- DAS ECHTE ABGEWETZTE PAPIER AKTE MODAL -->
|
|
<div id="person-akte-modal" style="position: fixed; inset: 0; z-index: 1000000; background: rgba(0,0,0,0.85); display: none; align-items: center; justify-content: center; padding: 10px; overflow: hidden; perspective: 1000px;">
|
|
<div style="display: flex; flex-direction: column; align-items: center; max-width: 585px; width: 95%;">
|
|
<div class="akte-inner" style="width: 100%; background: #d9c5a0; background-image: radial-gradient(circle at 50% 50%, rgba(255,255,255,0.1) 0%, transparent 100%), url('https://www.transparenttextures.com/patterns/old-paper.png'); border: 1px solid #8b7355; padding: 25px; position: relative; font-family: 'Courier New', monospace; box-shadow: 10px 20px 50px rgba(0,0,0,0.8), inset 0 0 100px rgba(139,115,85,0.3); transform: rotate(-2deg); animation: throw-sign 0.5s ease-out forwards; color: #2a1b0a;">
|
|
|
|
<style>
|
|
@keyframes throw-sign {
|
|
0% { transform: rotate(-10deg) scale(0.7) translateY(500px); opacity: 0; }
|
|
100% { transform: rotate(-2deg) scale(1) translateY(0); opacity: 1; }
|
|
}
|
|
.akte-inner h1 { color: #2a1b0a !important; font-size: 1.8rem !important; margin: 10px 0 2px !important; text-shadow: none !important; border-bottom: 2px solid rgba(42,27,10,0.2); }
|
|
.akte-inner div, .akte-inner p { font-size: 0.75rem !important; }
|
|
.akte-inner .data-row { border-bottom: 1px solid rgba(42,27,10,0.1) !important; padding: 6px 0 !important; }
|
|
.akte-inner .label { color: #5d4037 !important; font-weight: bold; }
|
|
.akte-inner .red-stamp { border: 2px solid #b71c1c; color: #b71c1c; padding: 3px 10px; font-weight: bold; transform: rotate(10deg); opacity: 0.8; font-size: 0.8rem !important; display: inline-block; }
|
|
</style>
|
|
|
|
<!-- Top Header Bar -->
|
|
<div style="display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 20px;">
|
|
<div class="red-stamp">TOP SECRET</div>
|
|
<button onclick="document.getElementById('person-akte-modal').style.display='none'; document.body.style.overflow='auto';"
|
|
style="background: rgba(0,0,0,0.1); border: 1px solid #2a1b0a; color: #2a1b0a; cursor: pointer; padding: 3px 10px; font-size: 0.7rem !important;">[X] SCHLIESSEN</button>
|
|
</div>
|
|
|
|
<div style="display: flex; gap: 20px; align-items: flex-start;">
|
|
<!-- Left: Photo -->
|
|
<div style="position: relative; border: 1px solid #2a1b0a; padding: 3px; background: #fff; box-shadow: 2px 2px 5px rgba(0,0,0,0.2);">
|
|
{{ $photo := .Params.img | default "/img/hero.png" }}
|
|
<img src="{{ $photo }}" class="akte-foto" style="width: 200px; height: 250px; object-fit: cover; filter: none; cursor: zoom-in; display: block;"
|
|
onclick="document.getElementById('akte-foto-zoom').style.display='flex';">
|
|
<div style="position: absolute; bottom: 5px; right: -10px; background: #b71c1c; color: #fff; padding: 2px 5px; font-weight: bold; font-size: 0.6rem !important; transform: rotate(-5deg);">GESPERRT</div>
|
|
</div>
|
|
|
|
<!-- ZOOM OVERLAY -->
|
|
<div id="akte-foto-zoom" onclick="this.style.display='none';"
|
|
style="display:none; position:fixed; inset:0; z-index:9999999; background:rgba(0,0,0,0.92); align-items:center; justify-content:center; cursor:zoom-out;">
|
|
<img src="{{ $photo }}" style="max-width:90vw; max-height:90vh; object-fit:contain; box-shadow: 0 0 60px rgba(0,0,0,0.9); border: 2px solid #2a1b0a;">
|
|
</div>
|
|
|
|
<!-- Right: Main Info -->
|
|
<div style="flex: 1;">
|
|
<div style="font-size: 0.5rem !important; color: #5d4037; letter-spacing: 2px; margin-bottom: 2px;">PROTOKOLL NR. 1974-Ø</div>
|
|
<h1 style="font-weight: bold;">{{ .Title | upper }}</h1>
|
|
<p style="color: #5d4037; font-size: 0.7rem !important; margin: 5px 0 10px;">ALIAS: {{ .Params.alias | upper }}</p>
|
|
|
|
<div style="display: flex; gap: 10px;">
|
|
<div style="border: 1px solid #b71c1c; padding: 2px 8px; color: #b71c1c; font-size: 0.6rem !important; font-weight: bold;">STATUS: {{ .Params.status | upper }}</div>
|
|
<div style="color: #2a1b0a; font-size: 0.6rem !important; font-weight: bold;">GEFAHR: <span style="letter-spacing: 1px;">{{ .Params.gefahr }}</span><br><img src="/img/akte/hp_totenkopf_1.png" style="width: 70px; height: 70px; object-fit: contain; margin-top: 4px;"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Data Table -->
|
|
<div style="margin-top: 20px; border-top: 2px solid rgba(42,27,10,0.2);">
|
|
{{ $data := slice
|
|
(dict "l" "DESIGNATION" "v" .Title)
|
|
(dict "l" "GEBURTSDATUM" "v" $.Params.geburtsjahr "c" true)
|
|
(dict "l" "BESCHÄFTIGUNG" "v" $.Params.occupation)
|
|
(dict "l" "SPEZIALFÄHIGK." "v" $.Params.spezialfaehigkeit)
|
|
(dict "l" "BEKANNTE KOMPL." "v" $.Params.komplizen "c" true)
|
|
(dict "l" "LETZTE AKTIVITÄT" "v" "GERADE JETZT")
|
|
(dict "l" "STABILITÄT" "v" $.Params.stabilitaet)
|
|
(dict "l" "STANDORT" "v" $.Params.standort)
|
|
}}
|
|
{{ range $data }}
|
|
<div class="data-row" style="display: flex; align-items: center;">
|
|
<div class="label" style="width: 160px; letter-spacing: 1px;">{{ .l }}:</div>
|
|
<div style="flex: 1; font-weight: normal;">
|
|
{{ .v }}
|
|
{{ if .c }}<span style="background: rgba(0,0,0,0.8); color: rgba(0,0,0,0); margin-left: 5px; padding: 0 10px;">XXXXX</span>{{ end }}
|
|
</div>
|
|
</div>
|
|
{{ end }}
|
|
</div>
|
|
|
|
<!-- Footer Elements -->
|
|
<div style="margin-top: 20px; display: flex; justify-content: space-between; align-items: flex-end;">
|
|
<div style="display: flex; align-items: center; gap: 10px; opacity: 0.7;">
|
|
<div style="width: 35px; height: 35px;">
|
|
<svg viewBox="0 0 100 100" stroke="#2a1b0a" fill="none"><circle cx="50" cy="50" r="40"/><path d="M30 50 Q50 10 70 50 T30 50 Z"/></svg>
|
|
</div>
|
|
<div style="font-size: 0.6rem !important; color: #2a1b0a; line-height: 1.2;">ID-SCAN: 94.7%<br>VERIFIZIERT</div>
|
|
</div>
|
|
|
|
<div style="font-family: 'Courier New', monospace; font-size: 0.75rem !important; letter-spacing: 2px; color: #5d4037; border: 1px dashed #2a1b0a; padding: 2px 10px;">ARCHIV_PERMANENT</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<style>
|
|
.mega-akte-btn:hover { border-color: #ff4500 !important; transform: scale(1.05); transition: all 0.2s; }
|
|
.akte-foto { transition: transform 0.2s, box-shadow 0.2s; }
|
|
.akte-foto:hover { transform: scale(1.04); box-shadow: 0 0 15px rgba(184,115,51,0.7); }
|
|
|
|
.sascha-special, .mutti-special {
|
|
background-position: center;
|
|
background-size: contain;
|
|
background-repeat: no-repeat;
|
|
background-color: transparent;
|
|
border: none;
|
|
cursor: pointer;
|
|
position: relative;
|
|
display: inline-flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
transition: all 0.3s ease;
|
|
mix-blend-mode: screen;
|
|
}
|
|
|
|
.sascha-special:hover, .mutti-special:hover {
|
|
transform: scale(1.02) !important;
|
|
filter: brightness(1.2);
|
|
}
|
|
|
|
/* OMEGA PULSE ANIMATION (VIBRATING & BLINKING) */
|
|
.time-node.omega .time-content {
|
|
border: 2px solid #ff4500 !important;
|
|
box-shadow: inset 0 0 30px rgba(255, 69, 0, 0.4), 0 0 20px rgba(255, 0, 0, 0.6);
|
|
animation: omega-pulse 1s infinite alternate, omega-shake 0.1s infinite;
|
|
background: linear-gradient(135deg, rgba(80, 20, 10, 0.95), rgba(30, 0, 0, 0.95)) !important;
|
|
}
|
|
.time-node.omega .node-dot {
|
|
border-color: #ff4500 !important;
|
|
background: radial-gradient(circle, #ff0000 0%, #330000 100%) !important;
|
|
box-shadow: 0 0 15px #ff4500, 0 0 25px rgba(255, 69, 0, 0.6);
|
|
animation: omega-dot-pulse 0.8s infinite alternate ease-in-out;
|
|
}
|
|
.node-dot {
|
|
box-shadow: 0 0 8px rgba(212, 175, 55, 0.4);
|
|
transition: all 0.3s ease;
|
|
}
|
|
.time-node.omega .tc-year {
|
|
color: #ff4500 !important;
|
|
text-shadow: 0 0 10px #ff4500;
|
|
font-weight: 900 !important;
|
|
}
|
|
|
|
@keyframes omega-dot-pulse {
|
|
0% { transform: scale(1); box-shadow: 0 0 10px #ff4500; filter: brightness(1); }
|
|
100% { transform: scale(1.4); box-shadow: 0 0 25px #ff0000, 0 0 40px rgba(255, 0, 0, 0.8); filter: brightness(1.5); }
|
|
}
|
|
@keyframes omega-pulse {
|
|
0% { box-shadow: inset 0 0 30px rgba(255, 69, 0, 0.4), 0 0 20px rgba(255, 0, 0, 0.6); border-color: rgba(255, 69, 0, 0.5); }
|
|
100% { box-shadow: inset 0 0 60px rgba(255, 69, 0, 0.9), 0 0 40px rgba(255, 0, 0, 1); border-color: #ff4500; }
|
|
}
|
|
@keyframes omega-shake {
|
|
0%, 100% { transform: translate(0, 0); }
|
|
25% { transform: translate(1px, 1px); }
|
|
50% { transform: translate(-1px, -1px); }
|
|
75% { transform: translate(1px, -1px); }
|
|
}
|
|
@keyframes omega-dot-blink {
|
|
50% { opacity: 0; transform: scale(1.5); }
|
|
}
|
|
</style>
|
|
{{ end }}
|