Compare commits
27 Commits
9133a34283
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 6101a72fd5 | |||
| 69a5cc6ee0 | |||
| 1cb22384fd | |||
| 7fa3b132f9 | |||
| bc4f4331c8 | |||
| 9b49a1a024 | |||
| b05ac218c3 | |||
| 3496f41596 | |||
| 767d37ff88 | |||
| 9de6e8a1d1 | |||
| c518654da5 | |||
| fceeeda68e | |||
| eb925f2eab | |||
| 2a6cb3fbd0 | |||
| f7e9968d74 | |||
| 49f0826d8b | |||
| 7ce7b4f179 | |||
| b111696c26 | |||
| 7e7e473279 | |||
| 7a9232b992 | |||
| 838dabccca | |||
| b7ad462786 | |||
| 9bd514dac0 | |||
| eccb229f03 | |||
| 8346dd5754 | |||
| 85128647a3 | |||
| c5e553ea35 |
@@ -1,4 +1,3 @@
|
||||
public/
|
||||
resources/_gen/
|
||||
.hugo_build.lock
|
||||
.DS_Store
|
||||
|
||||
Executable → Regular
Executable
+30
@@ -0,0 +1,30 @@
|
||||
+++
|
||||
title = "Hochzeit von Stefan und Mariia"
|
||||
layout = "wedding"
|
||||
slug = "hochzeit"
|
||||
aliases = [
|
||||
"/hochzeit/",
|
||||
"/mariia-und-stefan/",
|
||||
"/heirat/"
|
||||
]
|
||||
|
||||
bg_image = "/images/hochzeit-bg.jpg"
|
||||
|
||||
[event]
|
||||
date = "2026-08-31"
|
||||
ceremony_time = "14:00"
|
||||
reception_time = "17:00"
|
||||
venue = "München, Deutschland"
|
||||
map_embed = """<iframe src="https://www.google.com/maps?q=Russische+Orthodoxe+Kirche+Auferstehungs-Gemeinde+Dachau+M%C3%BCnchen&hl=de&z=19&output=embed" width="600" height="450" frameborder="0" style="border:0;" allowfullscreen="" aria-hidden="false" tabindex="0"></iframe>"""
|
||||
|
||||
[rsvp]
|
||||
deadline = "30. Juni"
|
||||
email = "hochzeit@markinstefan.xyz"
|
||||
|
||||
+++
|
||||
|
||||
Wir freuen uns, Euch zu unserer Hochzeit von Stefan und Mariia einzuladen!
|
||||
|
||||
Feiern Sie mit uns diesen besonderen Tag voller Liebe, Freude und wundervoller Erinnerungen!
|
||||
|
||||
Wir freuen uns darauf, Sie dort zu sehen!
|
||||
Executable
+29
@@ -0,0 +1,29 @@
|
||||
+++
|
||||
title = "Marriage of Stefan and Mariia"
|
||||
layout = "wedding"
|
||||
slug = "wedding"
|
||||
aliases = [
|
||||
"/wedding/",
|
||||
"/mariia-and-stefan/"
|
||||
]
|
||||
|
||||
[event]
|
||||
date = "2026-08-31"
|
||||
ceremony_time = "14:00"
|
||||
reception_time = "17:00"
|
||||
venue = "Munich, Germany"
|
||||
map_embed = """<iframe src="https://www.google.com/maps?q=Russische+Orthodoxe+Kirche+Auferstehungs-Gemeinde+Dachau+M%C3%BCnchen&hl=en&z=19&output=embed" width="600" height="450" frameborder="0" style="border:0;" allowfullscreen="" aria-hidden="false" tabindex="0"></iframe>"""
|
||||
|
||||
[rsvp]
|
||||
deadline = "June 30"
|
||||
email = "hochzeit@markinstefan.xyz"
|
||||
|
||||
details = "Dress code: Smart casual. Please bring a light jacket, as the evening might get chilly."
|
||||
|
||||
+++
|
||||
|
||||
We are happy to invite you to our wedding of Stefan and Mariia!
|
||||
|
||||
Join us in celebrating this special day with love, joy, and wonderful memories.
|
||||
|
||||
We look forward to seeing you there!
|
||||
Executable
+31
@@ -0,0 +1,31 @@
|
||||
+++
|
||||
title = "Свадьба Стефана и Марии"
|
||||
layout = "wedding"
|
||||
slug = "svadba"
|
||||
aliases = [
|
||||
"/svadba/",
|
||||
"/mariia-i-stefan/",
|
||||
"/brak/"
|
||||
]
|
||||
|
||||
|
||||
[event]
|
||||
date = "2026-08-31"
|
||||
ceremony_time = "14:00"
|
||||
reception_time = "17:00"
|
||||
venue = "Мюнхен, Германия"
|
||||
map_embed = """<iframe src="https://www.google.com/maps?q=Russische+Orthodoxe+Kirche+Auferstehungs-Gemeinde+Dachau+M%C3%BCnchen&hl=ru&z=19&output=embed" width="600" height="450" frameborder="0" style="border:0;" allowfullscreen="" aria-hidden="false" tabindex="0"></iframe>"""
|
||||
|
||||
[rsvp]
|
||||
deadline = "30 июня"
|
||||
email = "hochzeit@markinstefan.xyz"
|
||||
|
||||
details = "Дресс-код: Smart casual. Пожалуйста, возьмите с собой легкую куртку, так как вечер может быть прохладным."
|
||||
|
||||
+++
|
||||
|
||||
С радостью приглашаем вас на свадьбу Стефана и Марии!
|
||||
|
||||
Мы приглашаем вас разделить с нами этот особенный день, наполненный любовью, радостью и незабываемыми воспоминаниями!
|
||||
|
||||
С нетерпением ждем встречи с вами!
|
||||
Executable → Regular
@@ -32,7 +32,7 @@ avatarURL = "images/avatar.jpg"
|
||||
dateFormat = "January 2, 2006"
|
||||
# since = 2019
|
||||
# Git Commit in Footer, uncomment the line below to enable it
|
||||
commit = "https://github.com/luizdepra/hugo-coder/tree/"
|
||||
# commit = "https://github.com/luizdepra/hugo-coder/tree/"
|
||||
# Right To Left, shift content direction for languages such as Arabic
|
||||
rtl = false
|
||||
# Specify light/dark colorscheme
|
||||
@@ -151,11 +151,23 @@ author = "authors"
|
||||
# weight = 1
|
||||
# url = "https://github.com/johndoe/"
|
||||
|
||||
# [[params.social]]
|
||||
# name = "Gitlab"
|
||||
# icon = "fa-brands fa-gitlab fa-2x"
|
||||
# weight = 2
|
||||
# url = "https://gitlab.com/johndoe/"
|
||||
[[params.social]]
|
||||
name = "Gitea"
|
||||
icon = "fa-brands fa-git-alt fa-2x"
|
||||
weight = 2
|
||||
url = "https://git.netinfection.xyz/iroxol"
|
||||
|
||||
[[params.social]]
|
||||
name = "Email"
|
||||
icon = "fa-solid fa-envelope fa-2x"
|
||||
weight = 3
|
||||
url = "contact"
|
||||
|
||||
[[params.social]]
|
||||
name = "XMPP"
|
||||
icon = "fa-solid fa-comment-dots fa-2x"
|
||||
weight = 4
|
||||
url = "xmpp:iroxol@netinfection.xyz"
|
||||
|
||||
# [[params.social]]
|
||||
# name = "LinkedIn"
|
||||
@@ -180,16 +192,16 @@ author = "authors"
|
||||
[languages.en]
|
||||
languageName = ":uk:"
|
||||
|
||||
# [[languages.en.menu.main]]
|
||||
# name = "About"
|
||||
# weight = 1
|
||||
# url = "about/"
|
||||
|
||||
# [[languages.en.menu.main]]
|
||||
# name = "Blog"
|
||||
# weight = 2
|
||||
# url = "posts/"
|
||||
|
||||
[[languages.en.menu.main]]
|
||||
name = "About"
|
||||
weight = 1
|
||||
url = "about/"
|
||||
|
||||
[[languages.en.menu.main]]
|
||||
name = "Projects"
|
||||
weight = 3
|
||||
@@ -210,16 +222,16 @@ info = ["Ausgebildeter Elektroniker für Geräte und Systeme ", "Informatikstude
|
||||
description = "Sítio pessoal de João Ninguém"
|
||||
keywords = "blog,desenvolvedor,pessoal"
|
||||
|
||||
# [[languages.de.menu.main]]
|
||||
# name = "Sobre"
|
||||
# weight = 1
|
||||
# url = "about/"
|
||||
|
||||
# [[languages.de.menu.main]]
|
||||
# name = "Blog"
|
||||
# weight = 2
|
||||
# url = "posts/"
|
||||
|
||||
[[languages.de.menu.main]]
|
||||
name = "Über mich"
|
||||
weight = 1
|
||||
url = "about/"
|
||||
|
||||
[[languages.de.menu.main]]
|
||||
name = "Projekte"
|
||||
weight = 3
|
||||
@@ -240,10 +252,10 @@ info = ["Квалифицированный электротехник по об
|
||||
description = "Sítio pessoal de João Ninguém"
|
||||
keywords = "blog,desenvolvedor,pessoal"
|
||||
|
||||
# [[languages.ru.menu.main]]
|
||||
# name = "Sobre"
|
||||
# weight = 1
|
||||
# url = "about/"
|
||||
[[languages.ru.menu.main]]
|
||||
name = "Обо мне"
|
||||
weight = 1
|
||||
url = "about/"
|
||||
|
||||
# [[languages.ru.menu.main]]
|
||||
# name = "Blog"
|
||||
|
||||
@@ -1,2 +1,28 @@
|
||||
javascript = "Bitte erlauben Sie JavaScript um diesen Inhalt zu sehen."
|
||||
redirect_message = "Weiterleitung zu {{ .URL }} in {{ .Seconds }} Sekunden..."
|
||||
click_here_redirect = "Hier klicken, falls Sie nicht weitergeleitet werden"
|
||||
countdown_title = "Countdown zu unserer Hochzeit:"
|
||||
day = "T"
|
||||
hour = "Std"
|
||||
minute = "min"
|
||||
second = "s"
|
||||
event_title = "Veranstaltung"
|
||||
ceremony = "Zeremonie"
|
||||
ceremony_time = "um"
|
||||
reception = "Empfang"
|
||||
location = "Ort"
|
||||
rsvp_title = "RSVP"
|
||||
rsvp_deadline = "Bitte antworten bis"
|
||||
rsvp_email = "E-Mail"
|
||||
rsvp_form = "RSVP Formular"
|
||||
rsvp_firstname = "Vorname"
|
||||
rsvp_lastname = "Nachname"
|
||||
rsvp_drinks = "Getränkevorlieben"
|
||||
rsvp_drinks_wine = "Wein"
|
||||
rsvp_drinks_beer = "Bier"
|
||||
rsvp_drinks_juice = "Saft"
|
||||
rsvp_allergies = "Allergisch auf"
|
||||
rsvp_send = "Abschicken"
|
||||
details_title = "Details"
|
||||
footer_message = "Wir freuen uns darauf, mit euch zu feiern ❤️"
|
||||
big_day = "Der große Tag ist da!"
|
||||
|
||||
Regular → Executable
+26
@@ -1,2 +1,28 @@
|
||||
javascript = "Please enable JavaScript to see this content."
|
||||
redirect_message = "Redirecting to {{ .URL }} in {{ .Seconds }} seconds..."
|
||||
click_here_redirect = "Click here if you are not redirected"
|
||||
countdown_title = "Countdown to our Wedding:"
|
||||
day = "d"
|
||||
hour = "h"
|
||||
minute = "m"
|
||||
second = "s"
|
||||
event_title = "Event"
|
||||
ceremony = "Ceremony"
|
||||
ceremony_time = "at"
|
||||
reception = "Reception"
|
||||
location = "Location"
|
||||
rsvp_title = "RSVP"
|
||||
rsvp_deadline = "Please respond by"
|
||||
rsvp_email = "Email"
|
||||
rsvp_form = "RSVP Form"
|
||||
rsvp_firstname = "First name"
|
||||
rsvp_lastname = "Last name"
|
||||
rsvp_drinks = "Drink preferences:"
|
||||
rsvp_drinks_wine = "Wine"
|
||||
rsvp_drinks_beer = "Beer"
|
||||
rsvp_drinks_juice = "Juice"
|
||||
rsvp_allergies = "Allergic to"
|
||||
rsvp_send = "Send"
|
||||
details_title = "Details"
|
||||
footer_message = "We look forward to celebrating with you ❤️"
|
||||
big_day = "The big day is here!"
|
||||
|
||||
Regular → Executable
+26
@@ -1,2 +1,28 @@
|
||||
javascript = "Пожалуйста, разрешите JavaScript для просмотра этого контента."
|
||||
redirect_message = "Перенаправление на {{ .URL }} через {{ .Seconds }} секунд..."
|
||||
click_here_redirect = "Нажмите здесь, если перенаправление не произошло"
|
||||
countdown_title = "До нашей свадьбы осталось:"
|
||||
day = "Д."
|
||||
hour = "ч."
|
||||
minute = "м."
|
||||
second = "c."
|
||||
event_title = "Мероприятие"
|
||||
ceremony = "Церемония"
|
||||
ceremony_time = "в"
|
||||
reception = "Начало"
|
||||
location = "Место"
|
||||
rsvp_title = "RSVP"
|
||||
rsvp_deadline = "Пожалуйста, ответьте до"
|
||||
rsvp_email = "Электронная почта"
|
||||
rsvp_form = "Форма RSVP"
|
||||
rsvp_firstname = "Имя"
|
||||
rsvp_lastname = "Фамилия"
|
||||
rsvp_drinks = "Предпочтения по напиткам:"
|
||||
rsvp_drinks_wine = "Вино"
|
||||
rsvp_drinks_beer = "Пиво"
|
||||
rsvp_drinks_juice = "Сок"
|
||||
rsvp_allergies = "Аллергия на"
|
||||
rsvp_send = "Отправить"
|
||||
details_title = "Детали"
|
||||
footer_message = "❤️ Мы с нетерпением ждем встречи с вами ❤️"
|
||||
big_day = "Наступил великий день!"
|
||||
|
||||
Executable → Regular
Executable
+237
@@ -0,0 +1,237 @@
|
||||
{{ define "content" }}
|
||||
|
||||
<style>
|
||||
body {
|
||||
background-color: #fff; /* light bg */
|
||||
color: #222; /* dark text */
|
||||
/* NEW: background image */
|
||||
background-image: url('/images/hochzeit-bg.jpg'); /* path to your image */
|
||||
background-size: cover; /* cover whole container */
|
||||
background-position: center; /* center the image */
|
||||
background-repeat: repeat; /* don't tile */
|
||||
border-radius: 8px; /* optional: match your hero border-radius */
|
||||
}
|
||||
.wedding-container {
|
||||
max-width: 1600px;
|
||||
margin: 0 auto;
|
||||
padding: 2rem;
|
||||
font-family: system-ui, sans-serif;
|
||||
line-height: 1.6;
|
||||
}
|
||||
.hero {
|
||||
text-align: center;
|
||||
margin-bottom: 3rem;
|
||||
}
|
||||
|
||||
.hero img {
|
||||
width: 100%;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.hero h1 {
|
||||
font-size: 2.5rem;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.hero .date {
|
||||
font-size: 1.2rem;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.section {
|
||||
margin-bottom: 2.5rem;
|
||||
}
|
||||
|
||||
.section h2 {
|
||||
font-size: 1.5rem;
|
||||
margin-bottom: 0.5rem;
|
||||
border-bottom: 1px solid #eee;
|
||||
padding-bottom: 0.3rem;
|
||||
}
|
||||
|
||||
.map iframe {
|
||||
width: 100%;
|
||||
background-color: rgba(255, 255, 255, 0.5); /* subtle white overlay */
|
||||
padding: 1rem;
|
||||
height: 400px;
|
||||
border: 0;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.rsvp {
|
||||
background-color: rgba(255, 255, 255, 0.8); /* subtle white overlay */
|
||||
padding: 1rem;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.countdown {
|
||||
text-align: center; margin-bottom: 2rem;
|
||||
font-size: 5rem;
|
||||
}
|
||||
|
||||
.footer {
|
||||
text-align: center;
|
||||
margin-top: 3rem;
|
||||
color: #888;
|
||||
font-size: 2rem;
|
||||
padding-top: 1rem;
|
||||
}
|
||||
|
||||
.footer a {
|
||||
color: #0066cc;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.footer a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="wedding-container">
|
||||
{{ partial "audio.html" . }}
|
||||
|
||||
<!-- Countdown Timer -->
|
||||
<div class="countdown">
|
||||
<h3>{{ i18n "countdown_title" }}</h3>
|
||||
<p id="timer"></p>
|
||||
</div>
|
||||
|
||||
<!-- Hero -->
|
||||
<div class="hero">
|
||||
<img src="/images/hochzeit-header.jpg" alt="Wedding Header Image">
|
||||
<h1>{{ .Title }}</h1>
|
||||
<div class="date">
|
||||
{{ .Params.event.date | time | time.Format ":date_long" }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Intro -->
|
||||
{{ if .Content }}
|
||||
<div class="section">
|
||||
{{ .Content }}
|
||||
</div>
|
||||
{{ end }}
|
||||
|
||||
<!-- Event Details -->
|
||||
<div class="section">
|
||||
<h2>📅 {{ i18n "event_title" }}</h2>
|
||||
{{ with .Params.event.date }}
|
||||
<p>
|
||||
<strong>{{ i18n "ceremony" }}:</strong>
|
||||
{{ . | time | time.Format ":date_long" }}{{ with $.Params.event.ceremony_time }}, {{ i18n "ceremony_time" }} {{ . }}
|
||||
{{ end }}
|
||||
</p>
|
||||
{{ end }}
|
||||
{{ with .Params.event.reception_time }}
|
||||
<p><strong>{{ i18n "reception" }}:</strong> {{ . }}</p>
|
||||
{{ end }}
|
||||
{{ with .Params.event.venue }}
|
||||
<p><strong>{{ i18n "location" }}:</strong> {{ . }}</p>
|
||||
{{ end }}
|
||||
</div>
|
||||
|
||||
<!-- Map -->
|
||||
{{ with .Params.event.map_embed }}
|
||||
<div class="section map">
|
||||
<h2>📍 {{ i18n "location" }}</h2>
|
||||
{{ . | safeHTML }}
|
||||
</div>
|
||||
{{ end }}
|
||||
|
||||
<!-- <!-1- RSVP -1-> -->
|
||||
<!-- <div class="section rsvp"> -->
|
||||
<!-- <h2>📝 {{ i18n "rsvp_title" }}</h2> -->
|
||||
<!-- {{ with .Params.rsvp.deadline }} -->
|
||||
<!-- <p>{{ i18n "rsvp_deadline" }} <strong>{{ . }}</strong>.</p> -->
|
||||
<!-- {{ end }} -->
|
||||
<!-- {{ with .Params.rsvp.form }} -->
|
||||
<!-- <p><a href="{{ . }}" target="_blank">{{ i18n "rsvp_form" }}</a></p> -->
|
||||
<!-- {{ end }} -->
|
||||
<!-- </div> -->
|
||||
<!-- RSVP -->
|
||||
<div class="section rsvp">
|
||||
<h2>📝 {{ i18n "rsvp_title" }}</h2>
|
||||
{{ with .Params.rsvp.deadline }}
|
||||
<p>{{ i18n "rsvp_deadline" }} <strong>{{ . }}</strong>.</p>
|
||||
{{ end }}
|
||||
{{ with .Params.rsvp.email }}
|
||||
<p>{{ i18n "rsvp_email" }}: {{ partial "obfuscate_email.html" . }}</p>
|
||||
{{ end }}
|
||||
|
||||
<!-- RSVP Form -->
|
||||
<form action="/rsvp-submit.php" method="POST">
|
||||
|
||||
<label for="first_name">{{ i18n "rsvp_firstname" }}:</label><br>
|
||||
<input type="text" id="first_name" name="first_name" required><br><br>
|
||||
|
||||
<label for="last_name">{{ i18n "rsvp_lastname" }}:</label><br>
|
||||
<input type="text" id="last_name" name="last_name" required><br><br>
|
||||
|
||||
<label>{{ i18n "rsvp_drinks" }}:</label><br>
|
||||
|
||||
<input type="checkbox" id="wine" name="drinks[]" value="Wine">
|
||||
<label for="wine">{{ i18n "rsvp_drinks_wine" }}</label><br>
|
||||
|
||||
<input type="checkbox" id="beer" name="drinks[]" value="Beer">
|
||||
<label for="beer">{{ i18n "rsvp_drinks_beer" }}</label><br>
|
||||
|
||||
<input type="checkbox" id="juice" name="drinks[]" value="Juice">
|
||||
<label for="juice">{{ i18n "rsvp_drinks_juice" }}</label><br><br>
|
||||
|
||||
<label for="allergies">{{ i18n "rsvp_allergies" }}:</label><br>
|
||||
<input type="text" id="allergies" name="allergies"><br><br>
|
||||
|
||||
<!-- optional but recommended: helps prevent spam bots -->
|
||||
<input type="text" name="website" style="display:none">
|
||||
|
||||
<button type="submit">{{ i18n "rsvp_send" }}</button>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
<!-- Extra Info -->
|
||||
{{ with .Params.details }}
|
||||
<div class="section">
|
||||
<h2>ℹ️ {{ i18n "details_title" }}</h2>
|
||||
<p>{{ . }}</p>
|
||||
</div>
|
||||
{{ end }}
|
||||
|
||||
<!-- Footer -->
|
||||
<div class="footer">
|
||||
<p>{{ i18n "footer_message" }}</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var labels = {
|
||||
day: "{{ i18n "day" }}",
|
||||
hour: "{{ i18n "hour" }}",
|
||||
minute: "{{ i18n "minute" }}",
|
||||
second: "{{ i18n "second" }}"
|
||||
};
|
||||
|
||||
var countDownDate = new Date("{{ .Params.event.date }} {{ .Params.event.ceremony_time }}").getTime();
|
||||
|
||||
var x = setInterval(function() {
|
||||
var now = new Date().getTime();
|
||||
var distance = countDownDate - now;
|
||||
|
||||
var days = Math.floor(distance / (1000 * 60 * 60 * 24));
|
||||
var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
|
||||
var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
|
||||
var seconds = Math.floor((distance % (1000 * 60)) / 1000);
|
||||
|
||||
document.getElementById("timer").innerHTML =
|
||||
days + " " + labels.day + " " +
|
||||
hours + " " + labels.hour + " " +
|
||||
minutes + " " + labels.minute + " " +
|
||||
seconds + " " + labels.second;
|
||||
|
||||
if (distance < 0) {
|
||||
clearInterval(x);
|
||||
document.getElementById("timer").innerHTML = "{{ i18n "big_day" }}";
|
||||
}
|
||||
}, 1000);
|
||||
</script>
|
||||
{{ end }}
|
||||
Executable
+65
@@ -0,0 +1,65 @@
|
||||
<style>
|
||||
.music-fab {
|
||||
position: fixed;
|
||||
bottom: 20px;
|
||||
left: 20px;
|
||||
z-index: 9999;
|
||||
}
|
||||
|
||||
.fab-button {
|
||||
width: 52px;
|
||||
height: 52px;
|
||||
border-radius: 50%;
|
||||
border: none;
|
||||
background: white;
|
||||
box-shadow: 0 6px 18px rgba(0,0,0,0.2);
|
||||
font-size: 20px;
|
||||
cursor: pointer;
|
||||
transition: transform 0.15s ease;
|
||||
}
|
||||
|
||||
.fab-button:active {
|
||||
transform: scale(0.95);
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="music-fab">
|
||||
<button id="music-btn" class="fab-button">⏸️</button>
|
||||
</div>
|
||||
|
||||
<audio id="bg-music" autoplay loop>
|
||||
<source src="/audio/canon-in-d.mp3" type="audio/mpeg">
|
||||
</audio>
|
||||
|
||||
<script>
|
||||
const btn = document.getElementById("music-btn");
|
||||
const audio = document.getElementById("bg-music");
|
||||
|
||||
audio.volume = 0.3;
|
||||
|
||||
// Initial state: assume autoplay started
|
||||
let isPlaying = true;
|
||||
btn.textContent = "⏸️"; // pause icon
|
||||
|
||||
// Handle autoplay blocked by some browsers
|
||||
audio.play().catch(() => {
|
||||
isPlaying = false;
|
||||
btn.textContent = "▶️"; // play icon
|
||||
});
|
||||
|
||||
btn.addEventListener("click", async () => {
|
||||
if (!isPlaying) {
|
||||
try {
|
||||
await audio.play();
|
||||
isPlaying = true;
|
||||
btn.textContent = "⏸️"; // pause icon
|
||||
} catch (e) {
|
||||
console.log("Playback blocked:", e);
|
||||
}
|
||||
} else {
|
||||
audio.pause();
|
||||
isPlaying = false;
|
||||
btn.textContent = "▶️"; // play icon
|
||||
}
|
||||
});
|
||||
</script>
|
||||
Executable
+17
@@ -0,0 +1,17 @@
|
||||
{{ $email := . }}
|
||||
<span class="email"><b>{{ i18n "javascript" }}</b></span>
|
||||
<script>
|
||||
(function() {
|
||||
var email = "{{ $email }}";
|
||||
var user = email.split('@')[0];
|
||||
var domain = email.split('@')[1];
|
||||
var link = document.createElement('a');
|
||||
link.href = 'mailto:' + user + '@' + domain;
|
||||
link.textContent = user + '@' + domain;
|
||||
|
||||
// Replace the placeholder text with the actual link
|
||||
var span = document.currentScript.previousElementSibling;
|
||||
span.textContent = ""; // clear the fallback text
|
||||
span.appendChild(link);
|
||||
})();
|
||||
</script>
|
||||
@@ -0,0 +1,8 @@
|
||||
// layouts/shortcodes/email.html
|
||||
{{ $user := .Get "user" }}
|
||||
{{ $domain := .Get "domain" }}
|
||||
|
||||
<script>
|
||||
const e = '{{ $user }}' + '@' + '{{ $domain }}';
|
||||
document.write('<a href="mailto:' + e + '">' + e + '</a>');
|
||||
</script>
|
||||
+2
-2
@@ -136,14 +136,14 @@
|
||||
|
||||
|
||||
<li class="navigation-item">
|
||||
<a href="/ru/404.html">🇷🇺</a>
|
||||
<a href="/de/404.html">🇩🇪</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="navigation-item">
|
||||
<a href="/de/404.html">🇩🇪</a>
|
||||
<a href="/ru/404.html">🇷🇺</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
Executable
BIN
Binary file not shown.
@@ -0,0 +1,835 @@
|
||||
body.colorscheme-dark {
|
||||
color: #dadada;
|
||||
background-color: #212121; }
|
||||
body.colorscheme-dark a {
|
||||
color: #42a5f5; }
|
||||
body.colorscheme-dark h1,
|
||||
body.colorscheme-dark h2,
|
||||
body.colorscheme-dark h3,
|
||||
body.colorscheme-dark h4,
|
||||
body.colorscheme-dark h5,
|
||||
body.colorscheme-dark h6 {
|
||||
color: #dadada; }
|
||||
body.colorscheme-dark h1:hover .heading-link,
|
||||
body.colorscheme-dark h2:hover .heading-link,
|
||||
body.colorscheme-dark h3:hover .heading-link,
|
||||
body.colorscheme-dark h4:hover .heading-link,
|
||||
body.colorscheme-dark h5:hover .heading-link,
|
||||
body.colorscheme-dark h6:hover .heading-link {
|
||||
visibility: visible; }
|
||||
body.colorscheme-dark h1 .heading-link,
|
||||
body.colorscheme-dark h2 .heading-link,
|
||||
body.colorscheme-dark h3 .heading-link,
|
||||
body.colorscheme-dark h4 .heading-link,
|
||||
body.colorscheme-dark h5 .heading-link,
|
||||
body.colorscheme-dark h6 .heading-link {
|
||||
color: #42a5f5;
|
||||
font-weight: inherit;
|
||||
text-decoration: none;
|
||||
font-size: 80%;
|
||||
visibility: hidden; }
|
||||
body.colorscheme-dark h1 .title-link,
|
||||
body.colorscheme-dark h2 .title-link,
|
||||
body.colorscheme-dark h3 .title-link,
|
||||
body.colorscheme-dark h4 .title-link,
|
||||
body.colorscheme-dark h5 .title-link,
|
||||
body.colorscheme-dark h6 .title-link {
|
||||
color: inherit;
|
||||
font-weight: inherit;
|
||||
text-decoration: none; }
|
||||
body.colorscheme-dark pre code {
|
||||
background-color: inherit;
|
||||
color: inherit; }
|
||||
body.colorscheme-dark code {
|
||||
background-color: #4f4f4f;
|
||||
color: #dadada; }
|
||||
body.colorscheme-dark blockquote {
|
||||
border-left: 2px solid #424242; }
|
||||
body.colorscheme-dark th,
|
||||
body.colorscheme-dark td {
|
||||
padding: 1.6rem; }
|
||||
body.colorscheme-dark table {
|
||||
border-collapse: collapse; }
|
||||
body.colorscheme-dark table td,
|
||||
body.colorscheme-dark table th {
|
||||
border: 2px solid #dadada; }
|
||||
body.colorscheme-dark table tr:first-child th {
|
||||
border-top: 0; }
|
||||
body.colorscheme-dark table tr:last-child td {
|
||||
border-bottom: 0; }
|
||||
body.colorscheme-dark table tr td:first-child,
|
||||
body.colorscheme-dark table tr th:first-child {
|
||||
border-left: 0; }
|
||||
body.colorscheme-dark table tr td:last-child,
|
||||
body.colorscheme-dark table tr th:last-child {
|
||||
border-right: 0; }
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body.colorscheme-auto {
|
||||
color: #dadada;
|
||||
background-color: #212121; }
|
||||
body.colorscheme-auto a {
|
||||
color: #42a5f5; }
|
||||
body.colorscheme-auto h1,
|
||||
body.colorscheme-auto h2,
|
||||
body.colorscheme-auto h3,
|
||||
body.colorscheme-auto h4,
|
||||
body.colorscheme-auto h5,
|
||||
body.colorscheme-auto h6 {
|
||||
color: #dadada; }
|
||||
body.colorscheme-auto h1:hover .heading-link,
|
||||
body.colorscheme-auto h2:hover .heading-link,
|
||||
body.colorscheme-auto h3:hover .heading-link,
|
||||
body.colorscheme-auto h4:hover .heading-link,
|
||||
body.colorscheme-auto h5:hover .heading-link,
|
||||
body.colorscheme-auto h6:hover .heading-link {
|
||||
visibility: visible; }
|
||||
body.colorscheme-auto h1 .heading-link,
|
||||
body.colorscheme-auto h2 .heading-link,
|
||||
body.colorscheme-auto h3 .heading-link,
|
||||
body.colorscheme-auto h4 .heading-link,
|
||||
body.colorscheme-auto h5 .heading-link,
|
||||
body.colorscheme-auto h6 .heading-link {
|
||||
color: #42a5f5;
|
||||
font-weight: inherit;
|
||||
text-decoration: none;
|
||||
font-size: 80%;
|
||||
visibility: hidden; }
|
||||
body.colorscheme-auto h1 .title-link,
|
||||
body.colorscheme-auto h2 .title-link,
|
||||
body.colorscheme-auto h3 .title-link,
|
||||
body.colorscheme-auto h4 .title-link,
|
||||
body.colorscheme-auto h5 .title-link,
|
||||
body.colorscheme-auto h6 .title-link {
|
||||
color: inherit;
|
||||
font-weight: inherit;
|
||||
text-decoration: none; }
|
||||
body.colorscheme-auto pre code {
|
||||
background-color: inherit;
|
||||
color: inherit; }
|
||||
body.colorscheme-auto code {
|
||||
background-color: #4f4f4f;
|
||||
color: #dadada; }
|
||||
body.colorscheme-auto blockquote {
|
||||
border-left: 2px solid #424242; }
|
||||
body.colorscheme-auto th,
|
||||
body.colorscheme-auto td {
|
||||
padding: 1.6rem; }
|
||||
body.colorscheme-auto table {
|
||||
border-collapse: collapse; }
|
||||
body.colorscheme-auto table td,
|
||||
body.colorscheme-auto table th {
|
||||
border: 2px solid #dadada; }
|
||||
body.colorscheme-auto table tr:first-child th {
|
||||
border-top: 0; }
|
||||
body.colorscheme-auto table tr:last-child td {
|
||||
border-bottom: 0; }
|
||||
body.colorscheme-auto table tr td:first-child,
|
||||
body.colorscheme-auto table tr th:first-child {
|
||||
border-left: 0; }
|
||||
body.colorscheme-auto table tr td:last-child,
|
||||
body.colorscheme-auto table tr th:last-child {
|
||||
border-right: 0; } }
|
||||
|
||||
body.colorscheme-dark .content .post .tags .tag {
|
||||
background-color: #424242; }
|
||||
body.colorscheme-dark .content .post .tags .tag a {
|
||||
color: #dadada; }
|
||||
body.colorscheme-dark .content .post .tags .tag a:active {
|
||||
color: #dadada; }
|
||||
|
||||
body.colorscheme-dark .content .list ul li .title {
|
||||
color: #dadada; }
|
||||
body.colorscheme-dark .content .list ul li .title:hover, body.colorscheme-dark .content .list ul li .title:focus {
|
||||
color: #42a5f5; }
|
||||
|
||||
body.colorscheme-dark .content .centered .about ul li a {
|
||||
color: #dadada; }
|
||||
body.colorscheme-dark .content .centered .about ul li a:hover, body.colorscheme-dark .content .centered .about ul li a:focus {
|
||||
color: #42a5f5; }
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body.colorscheme-auto .content .post .tags .tag {
|
||||
background-color: #424242; }
|
||||
body.colorscheme-auto .content .post .tags .tag a {
|
||||
color: #dadada; }
|
||||
body.colorscheme-auto .content .post .tags .tag a:active {
|
||||
color: #dadada; }
|
||||
body.colorscheme-auto .content .list ul li .title {
|
||||
color: #dadada; }
|
||||
body.colorscheme-auto .content .list ul li .title:hover, body.colorscheme-auto .content .list ul li .title:focus {
|
||||
color: #42a5f5; }
|
||||
body.colorscheme-auto .content .centered .about ul li a {
|
||||
color: #dadada; }
|
||||
body.colorscheme-auto .content .centered .about ul li a:hover, body.colorscheme-auto .content .centered .about ul li a:focus {
|
||||
color: #42a5f5; } }
|
||||
|
||||
body.colorscheme-dark .notice .notice-title {
|
||||
border-bottom: 1px solid #212121; }
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body.colorscheme-auto .notice .notice-title {
|
||||
border-bottom: 1px solid #212121; } }
|
||||
|
||||
body.colorscheme-dark .navigation a,
|
||||
body.colorscheme-dark .navigation span {
|
||||
color: #dadada; }
|
||||
|
||||
body.colorscheme-dark .navigation a:hover, body.colorscheme-dark .navigation a:focus {
|
||||
color: #42a5f5; }
|
||||
|
||||
@media only screen and (max-width: 768px) {
|
||||
body.colorscheme-dark .navigation .navigation-list {
|
||||
background-color: #212121;
|
||||
border-top: solid 2px #424242;
|
||||
border-bottom: solid 2px #424242; } }
|
||||
|
||||
@media only screen and (max-width: 768px) {
|
||||
body.colorscheme-dark .navigation .navigation-list .menu-separator {
|
||||
border-top: 2px solid #dadada; } }
|
||||
|
||||
@media only screen and (max-width: 768px) {
|
||||
body.colorscheme-dark .navigation #menu-toggle:checked + label > i {
|
||||
color: #424242; } }
|
||||
|
||||
body.colorscheme-dark .navigation i {
|
||||
color: #dadada; }
|
||||
body.colorscheme-dark .navigation i:hover, body.colorscheme-dark .navigation i:focus {
|
||||
color: #42a5f5; }
|
||||
|
||||
body.colorscheme-dark .navigation .menu-button i:hover, body.colorscheme-dark .navigation .menu-button i:focus {
|
||||
color: #dadada; }
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body.colorscheme-auto .navigation a,
|
||||
body.colorscheme-auto .navigation span {
|
||||
color: #dadada; }
|
||||
body.colorscheme-auto .navigation a:hover, body.colorscheme-auto .navigation a:focus {
|
||||
color: #42a5f5; } }
|
||||
|
||||
@media only screen and (prefers-color-scheme: dark) and (max-width: 768px) {
|
||||
body.colorscheme-auto .navigation .navigation-list {
|
||||
background-color: #212121;
|
||||
border-top: solid 2px #424242;
|
||||
border-bottom: solid 2px #424242; } }
|
||||
|
||||
@media only screen and (prefers-color-scheme: dark) and (max-width: 768px) {
|
||||
body.colorscheme-auto .navigation .navigation-list .menu-separator {
|
||||
border-top: 2px solid #dadada; } }
|
||||
|
||||
@media only screen and (prefers-color-scheme: dark) and (max-width: 768px) {
|
||||
body.colorscheme-auto .navigation #menu-toggle:checked + label > i {
|
||||
color: #424242; } }
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body.colorscheme-auto .navigation i {
|
||||
color: #dadada; }
|
||||
body.colorscheme-auto .navigation i:hover, body.colorscheme-auto .navigation i:focus {
|
||||
color: #42a5f5; }
|
||||
body.colorscheme-auto .navigation .menu-button i:hover, body.colorscheme-auto .navigation .menu-button i:focus {
|
||||
color: #dadada; } }
|
||||
|
||||
body.colorscheme-dark .tabs label.tab-label {
|
||||
background-color: #424242;
|
||||
border-color: #4f4f4f; }
|
||||
|
||||
body.colorscheme-dark .tabs input.tab-input:checked + label.tab-label {
|
||||
background-color: #212121; }
|
||||
|
||||
body.colorscheme-dark .tabs .tab-content {
|
||||
background-color: #212121;
|
||||
border-color: #4f4f4f; }
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body.colorscheme-auto .tabs label.tab-label {
|
||||
background-color: #424242;
|
||||
border-color: #4f4f4f; }
|
||||
body.colorscheme-auto .tabs input.tab-input:checked + label.tab-label {
|
||||
background-color: #212121; }
|
||||
body.colorscheme-auto .tabs .tab-content {
|
||||
background-color: #212121;
|
||||
border-color: #4f4f4f; } }
|
||||
|
||||
body.colorscheme-dark .taxonomy-element {
|
||||
background-color: #424242; }
|
||||
body.colorscheme-dark .taxonomy-element a {
|
||||
color: #dadada; }
|
||||
body.colorscheme-dark .taxonomy-element a:active {
|
||||
color: #dadada; }
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body.colorscheme-auto .taxonomy-element {
|
||||
background-color: #424242; }
|
||||
body.colorscheme-auto .taxonomy-element a {
|
||||
color: #dadada; }
|
||||
body.colorscheme-auto .taxonomy-element a:active {
|
||||
color: #dadada; } }
|
||||
|
||||
body.colorscheme-dark .footer a {
|
||||
color: #42a5f5; }
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body.colorscheme-auto .footer a {
|
||||
color: #42a5f5; } }
|
||||
|
||||
body.colorscheme-dark .float-container a {
|
||||
color: #dadada;
|
||||
background-color: #424242; }
|
||||
body.colorscheme-dark .float-container a:hover, body.colorscheme-dark .float-container a:focus {
|
||||
color: #42a5f5; }
|
||||
@media only screen and (max-width: 768px) {
|
||||
body.colorscheme-dark .float-container a:hover, body.colorscheme-dark .float-container a:focus {
|
||||
color: #dadada; } }
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body.colorscheme-auto .float-container a {
|
||||
color: #dadada;
|
||||
background-color: #424242; }
|
||||
body.colorscheme-auto .float-container a:hover, body.colorscheme-auto .float-container a:focus {
|
||||
color: #42a5f5; } }
|
||||
@media only screen and (prefers-color-scheme: dark) and (max-width: 768px) {
|
||||
body.colorscheme-auto .float-container a:hover, body.colorscheme-auto .float-container a:focus {
|
||||
color: #dadada; } }
|
||||
body.colorscheme-dark {
|
||||
/* Background */
|
||||
/* PreWrapper */
|
||||
/* Other */
|
||||
/* Error */
|
||||
/* CodeLine */
|
||||
/* LineLink */
|
||||
/* LineTableTD */
|
||||
/* LineTable */
|
||||
/* LineHighlight */
|
||||
/* LineNumbersTable */
|
||||
/* LineNumbers */
|
||||
/* Line */
|
||||
/* Keyword */
|
||||
/* KeywordConstant */
|
||||
/* KeywordDeclaration */
|
||||
/* KeywordNamespace */
|
||||
/* KeywordPseudo */
|
||||
/* KeywordReserved */
|
||||
/* KeywordType */
|
||||
/* Name */
|
||||
/* NameAttribute */
|
||||
/* NameBuiltin */
|
||||
/* NameBuiltinPseudo */
|
||||
/* NameClass */
|
||||
/* NameConstant */
|
||||
/* NameDecorator */
|
||||
/* NameEntity */
|
||||
/* NameException */
|
||||
/* NameFunction */
|
||||
/* NameFunctionMagic */
|
||||
/* NameLabel */
|
||||
/* NameNamespace */
|
||||
/* NameOther */
|
||||
/* NameProperty */
|
||||
/* NameTag */
|
||||
/* NameVariable */
|
||||
/* NameVariableClass */
|
||||
/* NameVariableGlobal */
|
||||
/* NameVariableInstance */
|
||||
/* NameVariableMagic */
|
||||
/* Literal */
|
||||
/* LiteralDate */
|
||||
/* LiteralString */
|
||||
/* LiteralStringAffix */
|
||||
/* LiteralStringBacktick */
|
||||
/* LiteralStringChar */
|
||||
/* LiteralStringDelimiter */
|
||||
/* LiteralStringDoc */
|
||||
/* LiteralStringDouble */
|
||||
/* LiteralStringEscape */
|
||||
/* LiteralStringHeredoc */
|
||||
/* LiteralStringInterpol */
|
||||
/* LiteralStringOther */
|
||||
/* LiteralStringRegex */
|
||||
/* LiteralStringSingle */
|
||||
/* LiteralStringSymbol */
|
||||
/* LiteralNumber */
|
||||
/* LiteralNumberBin */
|
||||
/* LiteralNumberFloat */
|
||||
/* LiteralNumberHex */
|
||||
/* LiteralNumberInteger */
|
||||
/* LiteralNumberIntegerLong */
|
||||
/* LiteralNumberOct */
|
||||
/* Operator */
|
||||
/* OperatorWord */
|
||||
/* Punctuation */
|
||||
/* Comment */
|
||||
/* CommentHashbang */
|
||||
/* CommentMultiline */
|
||||
/* CommentSingle */
|
||||
/* CommentSpecial */
|
||||
/* CommentPreproc */
|
||||
/* CommentPreprocFile */
|
||||
/* Generic */
|
||||
/* GenericDeleted */
|
||||
/* GenericEmph */
|
||||
/* GenericError */
|
||||
/* GenericHeading */
|
||||
/* GenericInserted */
|
||||
/* GenericOutput */
|
||||
/* GenericPrompt */
|
||||
/* GenericStrong */
|
||||
/* GenericSubheading */
|
||||
/* GenericTraceback */
|
||||
/* GenericUnderline */
|
||||
/* TextWhitespace */ }
|
||||
body.colorscheme-dark .bg {
|
||||
color: #c9d1d9;
|
||||
background-color: #0d1117; }
|
||||
body.colorscheme-dark .chroma {
|
||||
color: #c9d1d9;
|
||||
background-color: #0d1117; }
|
||||
body.colorscheme-dark .chroma .err {
|
||||
color: #f85149; }
|
||||
body.colorscheme-dark .chroma .lnlinks {
|
||||
outline: none;
|
||||
text-decoration: none;
|
||||
color: inherit; }
|
||||
body.colorscheme-dark .chroma .lntd {
|
||||
vertical-align: top;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
border: 0; }
|
||||
body.colorscheme-dark .chroma .lntable {
|
||||
border-spacing: 0;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
border: 0; }
|
||||
body.colorscheme-dark .chroma .hl {
|
||||
background-color: #ffffcc; }
|
||||
body.colorscheme-dark .chroma .lnt {
|
||||
white-space: pre;
|
||||
user-select: none;
|
||||
margin-right: 0.4em;
|
||||
padding: 0 0.4em 0 0.4em;
|
||||
color: #64686c; }
|
||||
body.colorscheme-dark .chroma .ln {
|
||||
white-space: pre;
|
||||
user-select: none;
|
||||
margin-right: 0.4em;
|
||||
padding: 0 0.4em 0 0.4em;
|
||||
color: #6e7681; }
|
||||
body.colorscheme-dark .chroma .line {
|
||||
display: flex; }
|
||||
body.colorscheme-dark .chroma .k {
|
||||
color: #ff7b72; }
|
||||
body.colorscheme-dark .chroma .kc {
|
||||
color: #79c0ff; }
|
||||
body.colorscheme-dark .chroma .kd {
|
||||
color: #ff7b72; }
|
||||
body.colorscheme-dark .chroma .kn {
|
||||
color: #ff7b72; }
|
||||
body.colorscheme-dark .chroma .kp {
|
||||
color: #79c0ff; }
|
||||
body.colorscheme-dark .chroma .kr {
|
||||
color: #ff7b72; }
|
||||
body.colorscheme-dark .chroma .kt {
|
||||
color: #ff7b72; }
|
||||
body.colorscheme-dark .chroma .nc {
|
||||
color: #f0883e;
|
||||
font-weight: bold; }
|
||||
body.colorscheme-dark .chroma .no {
|
||||
color: #79c0ff;
|
||||
font-weight: bold; }
|
||||
body.colorscheme-dark .chroma .nd {
|
||||
color: #d2a8ff;
|
||||
font-weight: bold; }
|
||||
body.colorscheme-dark .chroma .ni {
|
||||
color: #ffa657; }
|
||||
body.colorscheme-dark .chroma .ne {
|
||||
color: #f0883e;
|
||||
font-weight: bold; }
|
||||
body.colorscheme-dark .chroma .nf {
|
||||
color: #d2a8ff;
|
||||
font-weight: bold; }
|
||||
body.colorscheme-dark .chroma .nl {
|
||||
color: #79c0ff;
|
||||
font-weight: bold; }
|
||||
body.colorscheme-dark .chroma .nn {
|
||||
color: #ff7b72; }
|
||||
body.colorscheme-dark .chroma .py {
|
||||
color: #79c0ff; }
|
||||
body.colorscheme-dark .chroma .nt {
|
||||
color: #7ee787; }
|
||||
body.colorscheme-dark .chroma .nv {
|
||||
color: #79c0ff; }
|
||||
body.colorscheme-dark .chroma .l {
|
||||
color: #a5d6ff; }
|
||||
body.colorscheme-dark .chroma .ld {
|
||||
color: #79c0ff; }
|
||||
body.colorscheme-dark .chroma .s {
|
||||
color: #a5d6ff; }
|
||||
body.colorscheme-dark .chroma .sa {
|
||||
color: #79c0ff; }
|
||||
body.colorscheme-dark .chroma .sb {
|
||||
color: #a5d6ff; }
|
||||
body.colorscheme-dark .chroma .sc {
|
||||
color: #a5d6ff; }
|
||||
body.colorscheme-dark .chroma .dl {
|
||||
color: #79c0ff; }
|
||||
body.colorscheme-dark .chroma .sd {
|
||||
color: #a5d6ff; }
|
||||
body.colorscheme-dark .chroma .s2 {
|
||||
color: #a5d6ff; }
|
||||
body.colorscheme-dark .chroma .se {
|
||||
color: #79c0ff; }
|
||||
body.colorscheme-dark .chroma .sh {
|
||||
color: #79c0ff; }
|
||||
body.colorscheme-dark .chroma .si {
|
||||
color: #a5d6ff; }
|
||||
body.colorscheme-dark .chroma .sx {
|
||||
color: #a5d6ff; }
|
||||
body.colorscheme-dark .chroma .sr {
|
||||
color: #79c0ff; }
|
||||
body.colorscheme-dark .chroma .s1 {
|
||||
color: #a5d6ff; }
|
||||
body.colorscheme-dark .chroma .ss {
|
||||
color: #a5d6ff; }
|
||||
body.colorscheme-dark .chroma .m {
|
||||
color: #a5d6ff; }
|
||||
body.colorscheme-dark .chroma .mb {
|
||||
color: #a5d6ff; }
|
||||
body.colorscheme-dark .chroma .mf {
|
||||
color: #a5d6ff; }
|
||||
body.colorscheme-dark .chroma .mh {
|
||||
color: #a5d6ff; }
|
||||
body.colorscheme-dark .chroma .mi {
|
||||
color: #a5d6ff; }
|
||||
body.colorscheme-dark .chroma .il {
|
||||
color: #a5d6ff; }
|
||||
body.colorscheme-dark .chroma .mo {
|
||||
color: #a5d6ff; }
|
||||
body.colorscheme-dark .chroma .o {
|
||||
color: #ff7b72;
|
||||
font-weight: bold; }
|
||||
body.colorscheme-dark .chroma .ow {
|
||||
color: #ff7b72;
|
||||
font-weight: bold; }
|
||||
body.colorscheme-dark .chroma .c {
|
||||
color: #8b949e;
|
||||
font-style: italic; }
|
||||
body.colorscheme-dark .chroma .ch {
|
||||
color: #8b949e;
|
||||
font-style: italic; }
|
||||
body.colorscheme-dark .chroma .cm {
|
||||
color: #8b949e;
|
||||
font-style: italic; }
|
||||
body.colorscheme-dark .chroma .c1 {
|
||||
color: #8b949e;
|
||||
font-style: italic; }
|
||||
body.colorscheme-dark .chroma .cs {
|
||||
color: #8b949e;
|
||||
font-weight: bold;
|
||||
font-style: italic; }
|
||||
body.colorscheme-dark .chroma .cp {
|
||||
color: #8b949e;
|
||||
font-weight: bold;
|
||||
font-style: italic; }
|
||||
body.colorscheme-dark .chroma .cpf {
|
||||
color: #8b949e;
|
||||
font-weight: bold;
|
||||
font-style: italic; }
|
||||
body.colorscheme-dark .chroma .gd {
|
||||
color: #ffa198;
|
||||
background-color: #490202; }
|
||||
body.colorscheme-dark .chroma .ge {
|
||||
font-style: italic; }
|
||||
body.colorscheme-dark .chroma .gr {
|
||||
color: #ffa198; }
|
||||
body.colorscheme-dark .chroma .gh {
|
||||
color: #79c0ff;
|
||||
font-weight: bold; }
|
||||
body.colorscheme-dark .chroma .gi {
|
||||
color: #56d364;
|
||||
background-color: #0f5323; }
|
||||
body.colorscheme-dark .chroma .go {
|
||||
color: #8b949e; }
|
||||
body.colorscheme-dark .chroma .gp {
|
||||
color: #8b949e; }
|
||||
body.colorscheme-dark .chroma .gs {
|
||||
font-weight: bold; }
|
||||
body.colorscheme-dark .chroma .gu {
|
||||
color: #79c0ff; }
|
||||
body.colorscheme-dark .chroma .gt {
|
||||
color: #ff7b72; }
|
||||
body.colorscheme-dark .chroma .gl {
|
||||
text-decoration: underline; }
|
||||
body.colorscheme-dark .chroma .w {
|
||||
color: #6e7681; }
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body.colorscheme-auto {
|
||||
/* Background */
|
||||
/* PreWrapper */
|
||||
/* Other */
|
||||
/* Error */
|
||||
/* CodeLine */
|
||||
/* LineLink */
|
||||
/* LineTableTD */
|
||||
/* LineTable */
|
||||
/* LineHighlight */
|
||||
/* LineNumbersTable */
|
||||
/* LineNumbers */
|
||||
/* Line */
|
||||
/* Keyword */
|
||||
/* KeywordConstant */
|
||||
/* KeywordDeclaration */
|
||||
/* KeywordNamespace */
|
||||
/* KeywordPseudo */
|
||||
/* KeywordReserved */
|
||||
/* KeywordType */
|
||||
/* Name */
|
||||
/* NameAttribute */
|
||||
/* NameBuiltin */
|
||||
/* NameBuiltinPseudo */
|
||||
/* NameClass */
|
||||
/* NameConstant */
|
||||
/* NameDecorator */
|
||||
/* NameEntity */
|
||||
/* NameException */
|
||||
/* NameFunction */
|
||||
/* NameFunctionMagic */
|
||||
/* NameLabel */
|
||||
/* NameNamespace */
|
||||
/* NameOther */
|
||||
/* NameProperty */
|
||||
/* NameTag */
|
||||
/* NameVariable */
|
||||
/* NameVariableClass */
|
||||
/* NameVariableGlobal */
|
||||
/* NameVariableInstance */
|
||||
/* NameVariableMagic */
|
||||
/* Literal */
|
||||
/* LiteralDate */
|
||||
/* LiteralString */
|
||||
/* LiteralStringAffix */
|
||||
/* LiteralStringBacktick */
|
||||
/* LiteralStringChar */
|
||||
/* LiteralStringDelimiter */
|
||||
/* LiteralStringDoc */
|
||||
/* LiteralStringDouble */
|
||||
/* LiteralStringEscape */
|
||||
/* LiteralStringHeredoc */
|
||||
/* LiteralStringInterpol */
|
||||
/* LiteralStringOther */
|
||||
/* LiteralStringRegex */
|
||||
/* LiteralStringSingle */
|
||||
/* LiteralStringSymbol */
|
||||
/* LiteralNumber */
|
||||
/* LiteralNumberBin */
|
||||
/* LiteralNumberFloat */
|
||||
/* LiteralNumberHex */
|
||||
/* LiteralNumberInteger */
|
||||
/* LiteralNumberIntegerLong */
|
||||
/* LiteralNumberOct */
|
||||
/* Operator */
|
||||
/* OperatorWord */
|
||||
/* Punctuation */
|
||||
/* Comment */
|
||||
/* CommentHashbang */
|
||||
/* CommentMultiline */
|
||||
/* CommentSingle */
|
||||
/* CommentSpecial */
|
||||
/* CommentPreproc */
|
||||
/* CommentPreprocFile */
|
||||
/* Generic */
|
||||
/* GenericDeleted */
|
||||
/* GenericEmph */
|
||||
/* GenericError */
|
||||
/* GenericHeading */
|
||||
/* GenericInserted */
|
||||
/* GenericOutput */
|
||||
/* GenericPrompt */
|
||||
/* GenericStrong */
|
||||
/* GenericSubheading */
|
||||
/* GenericTraceback */
|
||||
/* GenericUnderline */
|
||||
/* TextWhitespace */ }
|
||||
body.colorscheme-auto .bg {
|
||||
color: #c9d1d9;
|
||||
background-color: #0d1117; }
|
||||
body.colorscheme-auto .chroma {
|
||||
color: #c9d1d9;
|
||||
background-color: #0d1117; }
|
||||
body.colorscheme-auto .chroma .err {
|
||||
color: #f85149; }
|
||||
body.colorscheme-auto .chroma .lnlinks {
|
||||
outline: none;
|
||||
text-decoration: none;
|
||||
color: inherit; }
|
||||
body.colorscheme-auto .chroma .lntd {
|
||||
vertical-align: top;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
border: 0; }
|
||||
body.colorscheme-auto .chroma .lntable {
|
||||
border-spacing: 0;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
border: 0; }
|
||||
body.colorscheme-auto .chroma .hl {
|
||||
background-color: #ffffcc; }
|
||||
body.colorscheme-auto .chroma .lnt {
|
||||
white-space: pre;
|
||||
user-select: none;
|
||||
margin-right: 0.4em;
|
||||
padding: 0 0.4em 0 0.4em;
|
||||
color: #64686c; }
|
||||
body.colorscheme-auto .chroma .ln {
|
||||
white-space: pre;
|
||||
user-select: none;
|
||||
margin-right: 0.4em;
|
||||
padding: 0 0.4em 0 0.4em;
|
||||
color: #6e7681; }
|
||||
body.colorscheme-auto .chroma .line {
|
||||
display: flex; }
|
||||
body.colorscheme-auto .chroma .k {
|
||||
color: #ff7b72; }
|
||||
body.colorscheme-auto .chroma .kc {
|
||||
color: #79c0ff; }
|
||||
body.colorscheme-auto .chroma .kd {
|
||||
color: #ff7b72; }
|
||||
body.colorscheme-auto .chroma .kn {
|
||||
color: #ff7b72; }
|
||||
body.colorscheme-auto .chroma .kp {
|
||||
color: #79c0ff; }
|
||||
body.colorscheme-auto .chroma .kr {
|
||||
color: #ff7b72; }
|
||||
body.colorscheme-auto .chroma .kt {
|
||||
color: #ff7b72; }
|
||||
body.colorscheme-auto .chroma .nc {
|
||||
color: #f0883e;
|
||||
font-weight: bold; }
|
||||
body.colorscheme-auto .chroma .no {
|
||||
color: #79c0ff;
|
||||
font-weight: bold; }
|
||||
body.colorscheme-auto .chroma .nd {
|
||||
color: #d2a8ff;
|
||||
font-weight: bold; }
|
||||
body.colorscheme-auto .chroma .ni {
|
||||
color: #ffa657; }
|
||||
body.colorscheme-auto .chroma .ne {
|
||||
color: #f0883e;
|
||||
font-weight: bold; }
|
||||
body.colorscheme-auto .chroma .nf {
|
||||
color: #d2a8ff;
|
||||
font-weight: bold; }
|
||||
body.colorscheme-auto .chroma .nl {
|
||||
color: #79c0ff;
|
||||
font-weight: bold; }
|
||||
body.colorscheme-auto .chroma .nn {
|
||||
color: #ff7b72; }
|
||||
body.colorscheme-auto .chroma .py {
|
||||
color: #79c0ff; }
|
||||
body.colorscheme-auto .chroma .nt {
|
||||
color: #7ee787; }
|
||||
body.colorscheme-auto .chroma .nv {
|
||||
color: #79c0ff; }
|
||||
body.colorscheme-auto .chroma .l {
|
||||
color: #a5d6ff; }
|
||||
body.colorscheme-auto .chroma .ld {
|
||||
color: #79c0ff; }
|
||||
body.colorscheme-auto .chroma .s {
|
||||
color: #a5d6ff; }
|
||||
body.colorscheme-auto .chroma .sa {
|
||||
color: #79c0ff; }
|
||||
body.colorscheme-auto .chroma .sb {
|
||||
color: #a5d6ff; }
|
||||
body.colorscheme-auto .chroma .sc {
|
||||
color: #a5d6ff; }
|
||||
body.colorscheme-auto .chroma .dl {
|
||||
color: #79c0ff; }
|
||||
body.colorscheme-auto .chroma .sd {
|
||||
color: #a5d6ff; }
|
||||
body.colorscheme-auto .chroma .s2 {
|
||||
color: #a5d6ff; }
|
||||
body.colorscheme-auto .chroma .se {
|
||||
color: #79c0ff; }
|
||||
body.colorscheme-auto .chroma .sh {
|
||||
color: #79c0ff; }
|
||||
body.colorscheme-auto .chroma .si {
|
||||
color: #a5d6ff; }
|
||||
body.colorscheme-auto .chroma .sx {
|
||||
color: #a5d6ff; }
|
||||
body.colorscheme-auto .chroma .sr {
|
||||
color: #79c0ff; }
|
||||
body.colorscheme-auto .chroma .s1 {
|
||||
color: #a5d6ff; }
|
||||
body.colorscheme-auto .chroma .ss {
|
||||
color: #a5d6ff; }
|
||||
body.colorscheme-auto .chroma .m {
|
||||
color: #a5d6ff; }
|
||||
body.colorscheme-auto .chroma .mb {
|
||||
color: #a5d6ff; }
|
||||
body.colorscheme-auto .chroma .mf {
|
||||
color: #a5d6ff; }
|
||||
body.colorscheme-auto .chroma .mh {
|
||||
color: #a5d6ff; }
|
||||
body.colorscheme-auto .chroma .mi {
|
||||
color: #a5d6ff; }
|
||||
body.colorscheme-auto .chroma .il {
|
||||
color: #a5d6ff; }
|
||||
body.colorscheme-auto .chroma .mo {
|
||||
color: #a5d6ff; }
|
||||
body.colorscheme-auto .chroma .o {
|
||||
color: #ff7b72;
|
||||
font-weight: bold; }
|
||||
body.colorscheme-auto .chroma .ow {
|
||||
color: #ff7b72;
|
||||
font-weight: bold; }
|
||||
body.colorscheme-auto .chroma .c {
|
||||
color: #8b949e;
|
||||
font-style: italic; }
|
||||
body.colorscheme-auto .chroma .ch {
|
||||
color: #8b949e;
|
||||
font-style: italic; }
|
||||
body.colorscheme-auto .chroma .cm {
|
||||
color: #8b949e;
|
||||
font-style: italic; }
|
||||
body.colorscheme-auto .chroma .c1 {
|
||||
color: #8b949e;
|
||||
font-style: italic; }
|
||||
body.colorscheme-auto .chroma .cs {
|
||||
color: #8b949e;
|
||||
font-weight: bold;
|
||||
font-style: italic; }
|
||||
body.colorscheme-auto .chroma .cp {
|
||||
color: #8b949e;
|
||||
font-weight: bold;
|
||||
font-style: italic; }
|
||||
body.colorscheme-auto .chroma .cpf {
|
||||
color: #8b949e;
|
||||
font-weight: bold;
|
||||
font-style: italic; }
|
||||
body.colorscheme-auto .chroma .gd {
|
||||
color: #ffa198;
|
||||
background-color: #490202; }
|
||||
body.colorscheme-auto .chroma .ge {
|
||||
font-style: italic; }
|
||||
body.colorscheme-auto .chroma .gr {
|
||||
color: #ffa198; }
|
||||
body.colorscheme-auto .chroma .gh {
|
||||
color: #79c0ff;
|
||||
font-weight: bold; }
|
||||
body.colorscheme-auto .chroma .gi {
|
||||
color: #56d364;
|
||||
background-color: #0f5323; }
|
||||
body.colorscheme-auto .chroma .go {
|
||||
color: #8b949e; }
|
||||
body.colorscheme-auto .chroma .gp {
|
||||
color: #8b949e; }
|
||||
body.colorscheme-auto .chroma .gs {
|
||||
font-weight: bold; }
|
||||
body.colorscheme-auto .chroma .gu {
|
||||
color: #79c0ff; }
|
||||
body.colorscheme-auto .chroma .gt {
|
||||
color: #ff7b72; }
|
||||
body.colorscheme-auto .chroma .gl {
|
||||
text-decoration: underline; }
|
||||
body.colorscheme-auto .chroma .w {
|
||||
color: #6e7681; } }
|
||||
|
||||
/*# sourceMappingURL=coder-dark.css.map */
|
||||
File diff suppressed because one or more lines are too long
+11498
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@@ -137,14 +137,14 @@
|
||||
|
||||
|
||||
<li class="navigation-item">
|
||||
<a href="/ru/categories/">🇷🇺</a>
|
||||
<a href="/categories/">🇬🇧</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="navigation-item">
|
||||
<a href="/categories/">🇬🇧</a>
|
||||
<a href="/ru/categories/">🇷🇺</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<title>http://markinstefan.xyz/de/hochzeit/</title>
|
||||
<link rel="canonical" href="http://markinstefan.xyz/de/hochzeit/">
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="refresh" content="0; url=http://markinstefan.xyz/de/hochzeit/">
|
||||
</head>
|
||||
</html>
|
||||
@@ -0,0 +1,544 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
|
||||
<head>
|
||||
<title>Markin Stefan</title>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="color-scheme" content="light dark">
|
||||
|
||||
|
||||
|
||||
|
||||
<meta name="author" content="Markin Stefan">
|
||||
<meta name="description" content="Wir freuen uns, Euch zu unserer Hochzeit von Stefan und Mariia einzuladen!
|
||||
Feiern Sie mit uns diesen besonderen Tag voller Liebe, Freude und wundervoller Erinnerungen!
|
||||
Wir freuen uns darauf, Sie dort zu sehen!">
|
||||
<meta name="keywords" content="blog,desenvolvedor,pessoal">
|
||||
|
||||
|
||||
|
||||
<meta name="twitter:card" content="summary">
|
||||
<meta name="twitter:title" content="Hochzeit von Stefan und Mariia">
|
||||
<meta name="twitter:description" content="Wir freuen uns, Euch zu unserer Hochzeit von Stefan und Mariia einzuladen!
|
||||
Feiern Sie mit uns diesen besonderen Tag voller Liebe, Freude und wundervoller Erinnerungen!
|
||||
Wir freuen uns darauf, Sie dort zu sehen!">
|
||||
|
||||
<meta property="og:url" content="http://markinstefan.xyz/de/hochzeit/">
|
||||
<meta property="og:site_name" content="Markin Stefan">
|
||||
<meta property="og:title" content="Hochzeit von Stefan und Mariia">
|
||||
<meta property="og:description" content="Wir freuen uns, Euch zu unserer Hochzeit von Stefan und Mariia einzuladen!
|
||||
Feiern Sie mit uns diesen besonderen Tag voller Liebe, Freude und wundervoller Erinnerungen!
|
||||
Wir freuen uns darauf, Sie dort zu sehen!">
|
||||
<meta property="og:locale" content="de">
|
||||
<meta property="og:type" content="article">
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="canonical" href="http://markinstefan.xyz/de/hochzeit/">
|
||||
|
||||
|
||||
<link rel="preload" href="/fonts/fa-brands-400.woff2" as="font" type="font/woff2" crossorigin>
|
||||
<link rel="preload" href="/fonts/fa-regular-400.woff2" as="font" type="font/woff2" crossorigin>
|
||||
<link rel="preload" href="/fonts/fa-solid-900.woff2" as="font" type="font/woff2" crossorigin>
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="/css/coder.min.f6b1b35a7b02521b25338f6cf58975f9980a6c12847763fe35a48307758cd1e7.css" integrity="sha256-9rGzWnsCUhslM49s9Yl1+ZgKbBKEd2P+NaSDB3WM0ec=" crossorigin="anonymous" media="screen" />
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="/css/coder-dark.min.ad48f476275974885bdc03d5251e3cdbe1678c54a63ff772376b0ed2adc468dd.css" integrity="sha256-rUj0didZdIhb3APVJR482+FnjFSmP/dyN2sO0q3EaN0=" crossorigin="anonymous" media="screen" />
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="icon" type="image/svg+xml" href="/images/favicon.svg" sizes="any">
|
||||
<link rel="icon" type="image/png" href="/images/favicon-32x32.png" sizes="32x32">
|
||||
<link rel="icon" type="image/png" href="/images/favicon-16x16.png" sizes="16x16">
|
||||
|
||||
<link rel="apple-touch-icon" href="/images/apple-touch-icon.png">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon.png">
|
||||
|
||||
<link rel="manifest" href="/site.webmanifest">
|
||||
<link rel="mask-icon" href="/images/safari-pinned-tab.svg" color="#5bbad5">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</head>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<body class="preload-transitions colorscheme-auto">
|
||||
|
||||
<div class="float-container">
|
||||
<a id="dark-mode-toggle" class="colorscheme-toggle">
|
||||
<i class="fa-solid fa-adjust fa-fw" aria-hidden="true"></i>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
<main class="wrapper">
|
||||
<nav class="navigation">
|
||||
<section class="container">
|
||||
|
||||
<a class="navigation-title" href="http://markinstefan.xyz/de/">
|
||||
Markin Stefan
|
||||
</a>
|
||||
|
||||
|
||||
<input type="checkbox" id="menu-toggle" />
|
||||
<label class="menu-button float-right" for="menu-toggle">
|
||||
<i class="fa-solid fa-bars fa-fw" aria-hidden="true"></i>
|
||||
</label>
|
||||
<ul class="navigation-list">
|
||||
|
||||
|
||||
<li class="navigation-item">
|
||||
<a class="navigation-link " href="/de/about/">Über mich</a>
|
||||
</li>
|
||||
|
||||
<li class="navigation-item">
|
||||
<a class="navigation-link " href="/de/projects/">Projekte</a>
|
||||
</li>
|
||||
|
||||
<li class="navigation-item">
|
||||
<a class="navigation-link " href="/de/contact/">Kontakt</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="navigation-item menu-separator">
|
||||
<span>|</span>
|
||||
</li>
|
||||
|
||||
|
||||
<li class="navigation-item">
|
||||
<a href="/wedding/">🇬🇧</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="navigation-item">
|
||||
<a href="/ru/svadba/">🇷🇺</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
|
||||
</section>
|
||||
</nav>
|
||||
|
||||
|
||||
<div class="content">
|
||||
|
||||
|
||||
<style>
|
||||
body {
|
||||
background-color: #fff;
|
||||
color: #222;
|
||||
|
||||
background-image: url('/images/hochzeit-bg.jpg');
|
||||
background-size: cover;
|
||||
background-position: center;
|
||||
background-repeat: repeat;
|
||||
border-radius: 8px;
|
||||
}
|
||||
.wedding-container {
|
||||
max-width: 1600px;
|
||||
margin: 0 auto;
|
||||
padding: 2rem;
|
||||
font-family: system-ui, sans-serif;
|
||||
line-height: 1.6;
|
||||
}
|
||||
.hero {
|
||||
text-align: center;
|
||||
margin-bottom: 3rem;
|
||||
}
|
||||
|
||||
.hero img {
|
||||
width: 100%;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.hero h1 {
|
||||
font-size: 2.5rem;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.hero .date {
|
||||
font-size: 1.2rem;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.section {
|
||||
margin-bottom: 2.5rem;
|
||||
}
|
||||
|
||||
.section h2 {
|
||||
font-size: 1.5rem;
|
||||
margin-bottom: 0.5rem;
|
||||
border-bottom: 1px solid #eee;
|
||||
padding-bottom: 0.3rem;
|
||||
}
|
||||
|
||||
.map iframe {
|
||||
width: 100%;
|
||||
background-color: rgba(255, 255, 255, 0.5);
|
||||
padding: 1rem;
|
||||
height: 400px;
|
||||
border: 0;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.rsvp {
|
||||
background-color: rgba(255, 255, 255, 0.8);
|
||||
padding: 1rem;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.countdown {
|
||||
text-align: center; margin-bottom: 2rem;
|
||||
font-size: 5rem;
|
||||
}
|
||||
|
||||
.footer {
|
||||
text-align: center;
|
||||
margin-top: 3rem;
|
||||
color: #888;
|
||||
font-size: 2rem;
|
||||
padding-top: 1rem;
|
||||
}
|
||||
|
||||
.footer a {
|
||||
color: #0066cc;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.footer a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="wedding-container">
|
||||
<style>
|
||||
.music-fab {
|
||||
position: fixed;
|
||||
bottom: 20px;
|
||||
left: 20px;
|
||||
z-index: 9999;
|
||||
}
|
||||
|
||||
.fab-button {
|
||||
width: 52px;
|
||||
height: 52px;
|
||||
border-radius: 50%;
|
||||
border: none;
|
||||
background: white;
|
||||
box-shadow: 0 6px 18px rgba(0,0,0,0.2);
|
||||
font-size: 20px;
|
||||
cursor: pointer;
|
||||
transition: transform 0.15s ease;
|
||||
}
|
||||
|
||||
.fab-button:active {
|
||||
transform: scale(0.95);
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="music-fab">
|
||||
<button id="music-btn" class="fab-button">⏸️</button>
|
||||
</div>
|
||||
|
||||
<audio id="bg-music" autoplay loop>
|
||||
<source src="/audio/canon-in-d.mp3" type="audio/mpeg">
|
||||
</audio>
|
||||
|
||||
<script>
|
||||
const btn = document.getElementById("music-btn");
|
||||
const audio = document.getElementById("bg-music");
|
||||
|
||||
audio.volume = 0.3;
|
||||
|
||||
|
||||
let isPlaying = true;
|
||||
btn.textContent = "⏸️";
|
||||
|
||||
|
||||
audio.play().catch(() => {
|
||||
isPlaying = false;
|
||||
btn.textContent = "▶️";
|
||||
});
|
||||
|
||||
btn.addEventListener("click", async () => {
|
||||
if (!isPlaying) {
|
||||
try {
|
||||
await audio.play();
|
||||
isPlaying = true;
|
||||
btn.textContent = "⏸️";
|
||||
} catch (e) {
|
||||
console.log("Playback blocked:", e);
|
||||
}
|
||||
} else {
|
||||
audio.pause();
|
||||
isPlaying = false;
|
||||
btn.textContent = "▶️";
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
<div class="countdown">
|
||||
<h3>Countdown zu unserer Hochzeit:</h3>
|
||||
<p id="timer"></p>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="hero">
|
||||
<img src="/images/hochzeit-header.jpg" alt="Wedding Header Image">
|
||||
<h1>Hochzeit von Stefan und Mariia</h1>
|
||||
<div class="date">
|
||||
31. August 2026
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="section">
|
||||
<p>Wir freuen uns, Euch zu unserer Hochzeit von Stefan und Mariia einzuladen!</p>
|
||||
<p>Feiern Sie mit uns diesen besonderen Tag voller Liebe, Freude und wundervoller Erinnerungen!</p>
|
||||
<p>Wir freuen uns darauf, Sie dort zu sehen!</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="section">
|
||||
<h2>📅 Veranstaltung</h2>
|
||||
|
||||
<p>
|
||||
<strong>Zeremonie:</strong>
|
||||
31. August 2026, um 14:00
|
||||
|
||||
</p>
|
||||
|
||||
|
||||
<p><strong>Empfang:</strong> 17:00</p>
|
||||
|
||||
|
||||
<p><strong>Ort:</strong> München, Deutschland</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="section map">
|
||||
<h2>📍 Ort</h2>
|
||||
<iframe src="https://www.google.com/maps?q=Russische+Orthodoxe+Kirche+Auferstehungs-Gemeinde+Dachau+M%C3%BCnchen&hl=de&z=19&output=embed" width="600" height="450" frameborder="0" style="border:0;" allowfullscreen="" aria-hidden="false" tabindex="0"></iframe>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="section rsvp">
|
||||
<h2>📝 RSVP</h2>
|
||||
|
||||
<p>Bitte antworten bis <strong>30. Juni</strong>.</p>
|
||||
|
||||
|
||||
<p>E-Mail:
|
||||
<span class="email"><b>Bitte erlauben Sie JavaScript um diesen Inhalt zu sehen.</b></span>
|
||||
<script>
|
||||
(function() {
|
||||
var email = "hochzeit@markinstefan.xyz";
|
||||
var user = email.split('@')[0];
|
||||
var domain = email.split('@')[1];
|
||||
var link = document.createElement('a');
|
||||
link.href = 'mailto:' + user + '@' + domain;
|
||||
link.textContent = user + '@' + domain;
|
||||
|
||||
|
||||
var span = document.currentScript.previousElementSibling;
|
||||
span.textContent = "";
|
||||
span.appendChild(link);
|
||||
})();
|
||||
</script>
|
||||
</p>
|
||||
|
||||
|
||||
|
||||
<form action="/rsvp-submit.php" method="POST">
|
||||
|
||||
<label for="first_name">Vorname:</label><br>
|
||||
<input type="text" id="first_name" name="first_name" required><br><br>
|
||||
|
||||
<label for="last_name">Nachname:</label><br>
|
||||
<input type="text" id="last_name" name="last_name" required><br><br>
|
||||
|
||||
<label>Getränkevorlieben:</label><br>
|
||||
|
||||
<input type="checkbox" id="wine" name="drinks[]" value="Wine">
|
||||
<label for="wine">Wein</label><br>
|
||||
|
||||
<input type="checkbox" id="beer" name="drinks[]" value="Beer">
|
||||
<label for="beer">Bier</label><br>
|
||||
|
||||
<input type="checkbox" id="juice" name="drinks[]" value="Juice">
|
||||
<label for="juice">Saft</label><br><br>
|
||||
|
||||
<label for="allergies">Allergisch auf:</label><br>
|
||||
<input type="text" id="allergies" name="allergies"><br><br>
|
||||
|
||||
|
||||
<input type="text" name="website" style="display:none">
|
||||
|
||||
<button type="submit">Abschicken</button>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="footer">
|
||||
<p>Wir freuen uns darauf, mit euch zu feiern ❤️</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var labels = {
|
||||
day: "T",
|
||||
hour: "Std",
|
||||
minute: "min",
|
||||
second: "s"
|
||||
};
|
||||
|
||||
var countDownDate = new Date("2026-08-31 14:00").getTime();
|
||||
|
||||
var x = setInterval(function() {
|
||||
var now = new Date().getTime();
|
||||
var distance = countDownDate - now;
|
||||
|
||||
var days = Math.floor(distance / (1000 * 60 * 60 * 24));
|
||||
var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
|
||||
var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
|
||||
var seconds = Math.floor((distance % (1000 * 60)) / 1000);
|
||||
|
||||
document.getElementById("timer").innerHTML =
|
||||
days + " " + labels.day + " " +
|
||||
hours + " " + labels.hour + " " +
|
||||
minutes + " " + labels.minute + " " +
|
||||
seconds + " " + labels.second;
|
||||
|
||||
if (distance < 0) {
|
||||
clearInterval(x);
|
||||
document.getElementById("timer").innerHTML = "Der große Tag ist da!";
|
||||
}
|
||||
}, 1000);
|
||||
</script>
|
||||
|
||||
</div>
|
||||
|
||||
<footer class="footer">
|
||||
<section class="container">
|
||||
©
|
||||
|
||||
2026
|
||||
Markin Stefan
|
||||
·
|
||||
|
||||
Gestaltet mit <a href="https://gohugo.io/" target="_blank" rel="noopener">Hugo</a> & <a href="https://github.com/luizdepra/hugo-coder/" target="_blank" rel="noopener">Coder</a>.
|
||||
|
||||
</section>
|
||||
</footer>
|
||||
|
||||
</main>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script src="/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js" integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
+29
-1
@@ -74,7 +74,7 @@
|
||||
<link rel="alternate" type="application/rss+xml" href="/de/index.xml" title="Markin Stefan" />
|
||||
|
||||
|
||||
<meta name="generator" content="Hugo 0.160.1">
|
||||
<meta name="generator" content="Hugo 0.161.0">
|
||||
|
||||
|
||||
|
||||
@@ -175,6 +175,34 @@
|
||||
|
||||
|
||||
|
||||
<ul>
|
||||
|
||||
|
||||
<li>
|
||||
<a href="https://git.netinfection.xyz/iroxol" aria-label="Gitea" >
|
||||
<i class="fa-brands fa-git-alt fa-2x" aria-hidden="true"></i>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
<a href="contact" aria-label="Email" >
|
||||
<i class="fa-solid fa-envelope fa-2x" aria-hidden="true"></i>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
<a href="xmpp:iroxol@netinfection.xyz" aria-label="XMPP" >
|
||||
<i class="fa-solid fa-comment-dots fa-2x" aria-hidden="true"></i>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
@@ -7,6 +7,13 @@
|
||||
<generator>Hugo</generator>
|
||||
<language>de</language>
|
||||
<atom:link href="http://markinstefan.xyz/de/index.xml" rel="self" type="application/rss+xml" />
|
||||
<item>
|
||||
<title>Hochzeit von Stefan und Mariia</title>
|
||||
<link>http://markinstefan.xyz/de/hochzeit/</link>
|
||||
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
|
||||
<guid>http://markinstefan.xyz/de/hochzeit/</guid>
|
||||
<description><p>Wir freuen uns, Euch zu unserer Hochzeit von Stefan und Mariia einzuladen!</p>
<p>Feiern Sie mit uns diesen besonderen Tag voller Liebe, Freude und wundervoller Erinnerungen!</p>
<p>Wir freuen uns darauf, Sie dort zu sehen!</p></description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Kontakt</title>
|
||||
<link>http://markinstefan.xyz/de/contact/</link>
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<title>http://markinstefan.xyz/de/hochzeit/</title>
|
||||
<link rel="canonical" href="http://markinstefan.xyz/de/hochzeit/">
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="refresh" content="0; url=http://markinstefan.xyz/de/hochzeit/">
|
||||
</head>
|
||||
</html>
|
||||
@@ -137,14 +137,14 @@
|
||||
|
||||
|
||||
<li class="navigation-item">
|
||||
<a href="/series/">🇬🇧</a>
|
||||
<a href="/ru/series/">🇷🇺</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="navigation-item">
|
||||
<a href="/ru/series/">🇷🇺</a>
|
||||
<a href="/series/">🇬🇧</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
+26
-9
@@ -20,21 +20,38 @@
|
||||
/>
|
||||
</url><url>
|
||||
<loc>http://markinstefan.xyz/de/categories/</loc>
|
||||
<xhtml:link
|
||||
rel="alternate"
|
||||
hreflang="ru"
|
||||
href="http://markinstefan.xyz/ru/categories/"
|
||||
/>
|
||||
<xhtml:link
|
||||
rel="alternate"
|
||||
hreflang="en"
|
||||
href="http://markinstefan.xyz/categories/"
|
||||
/>
|
||||
<xhtml:link
|
||||
rel="alternate"
|
||||
hreflang="ru"
|
||||
href="http://markinstefan.xyz/ru/categories/"
|
||||
/>
|
||||
<xhtml:link
|
||||
rel="alternate"
|
||||
hreflang="de"
|
||||
href="http://markinstefan.xyz/de/categories/"
|
||||
/>
|
||||
</url><url>
|
||||
<loc>http://markinstefan.xyz/de/hochzeit/</loc>
|
||||
<xhtml:link
|
||||
rel="alternate"
|
||||
hreflang="en"
|
||||
href="http://markinstefan.xyz/wedding/"
|
||||
/>
|
||||
<xhtml:link
|
||||
rel="alternate"
|
||||
hreflang="ru"
|
||||
href="http://markinstefan.xyz/ru/svadba/"
|
||||
/>
|
||||
<xhtml:link
|
||||
rel="alternate"
|
||||
hreflang="de"
|
||||
href="http://markinstefan.xyz/de/hochzeit/"
|
||||
/>
|
||||
</url><url>
|
||||
<loc>http://markinstefan.xyz/de/contact/</loc>
|
||||
<xhtml:link
|
||||
@@ -73,13 +90,13 @@
|
||||
<loc>http://markinstefan.xyz/de/series/</loc>
|
||||
<xhtml:link
|
||||
rel="alternate"
|
||||
hreflang="en"
|
||||
href="http://markinstefan.xyz/series/"
|
||||
hreflang="ru"
|
||||
href="http://markinstefan.xyz/ru/series/"
|
||||
/>
|
||||
<xhtml:link
|
||||
rel="alternate"
|
||||
hreflang="ru"
|
||||
href="http://markinstefan.xyz/ru/series/"
|
||||
hreflang="en"
|
||||
href="http://markinstefan.xyz/series/"
|
||||
/>
|
||||
<xhtml:link
|
||||
rel="alternate"
|
||||
|
||||
+21
-4
@@ -69,6 +69,23 @@
|
||||
hreflang="en"
|
||||
href="http://markinstefan.xyz/"
|
||||
/>
|
||||
</url><url>
|
||||
<loc>http://markinstefan.xyz/wedding/</loc>
|
||||
<xhtml:link
|
||||
rel="alternate"
|
||||
hreflang="de"
|
||||
href="http://markinstefan.xyz/de/hochzeit/"
|
||||
/>
|
||||
<xhtml:link
|
||||
rel="alternate"
|
||||
hreflang="ru"
|
||||
href="http://markinstefan.xyz/ru/svadba/"
|
||||
/>
|
||||
<xhtml:link
|
||||
rel="alternate"
|
||||
hreflang="en"
|
||||
href="http://markinstefan.xyz/wedding/"
|
||||
/>
|
||||
</url><url>
|
||||
<loc>http://markinstefan.xyz/about/</loc>
|
||||
<xhtml:link
|
||||
@@ -124,13 +141,13 @@
|
||||
<loc>http://markinstefan.xyz/tags/</loc>
|
||||
<xhtml:link
|
||||
rel="alternate"
|
||||
hreflang="ru"
|
||||
href="http://markinstefan.xyz/ru/tags/"
|
||||
hreflang="de"
|
||||
href="http://markinstefan.xyz/de/tags/"
|
||||
/>
|
||||
<xhtml:link
|
||||
rel="alternate"
|
||||
hreflang="de"
|
||||
href="http://markinstefan.xyz/de/tags/"
|
||||
hreflang="ru"
|
||||
href="http://markinstefan.xyz/ru/tags/"
|
||||
/>
|
||||
<xhtml:link
|
||||
rel="alternate"
|
||||
|
||||
Executable
BIN
Binary file not shown.
|
After Width: | Height: | Size: 9.9 MiB |
Executable
BIN
Binary file not shown.
|
After Width: | Height: | Size: 2.6 MiB |
+29
-1
@@ -74,7 +74,7 @@
|
||||
<link rel="alternate" type="application/rss+xml" href="/index.xml" title="Markin Stefan" />
|
||||
|
||||
|
||||
<meta name="generator" content="Hugo 0.160.1">
|
||||
<meta name="generator" content="Hugo 0.161.0">
|
||||
|
||||
|
||||
|
||||
@@ -175,6 +175,34 @@
|
||||
|
||||
|
||||
|
||||
<ul>
|
||||
|
||||
|
||||
<li>
|
||||
<a href="https://git.netinfection.xyz/iroxol" aria-label="Gitea" >
|
||||
<i class="fa-brands fa-git-alt fa-2x" aria-hidden="true"></i>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
<a href="contact" aria-label="Email" >
|
||||
<i class="fa-solid fa-envelope fa-2x" aria-hidden="true"></i>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
<a href="xmpp:iroxol@netinfection.xyz" aria-label="XMPP" >
|
||||
<i class="fa-solid fa-comment-dots fa-2x" aria-hidden="true"></i>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
@@ -14,6 +14,13 @@
|
||||
<guid>http://markinstefan.xyz/contact/</guid>
|
||||
<description><p>If you have my phone number, <strong>only</strong> through:</p>
<ul>
<li>SMS</li>
<li>Directly calling</li>
<li><a href="https://signal.org/" class="external-link" target="_blank" rel="noopener">Signal</a></li>
</ul>
<p>I do <strong>not</strong> use WhatsApp or Telegram <strong>for personal conversations</strong>.<br>
Write to me using one of the three recommendations mentioned.</p></description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Marriage of Stefan and Mariia</title>
|
||||
<link>http://markinstefan.xyz/wedding/</link>
|
||||
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
|
||||
<guid>http://markinstefan.xyz/wedding/</guid>
|
||||
<description><p>We are happy to invite you to our wedding of Stefan and Mariia!</p>
<p>Join us in celebrating this special day with love, joy, and wonderful memories.</p>
<p>We look forward to seeing you there!</p></description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Redirecting to Gitea Profile</title>
|
||||
<link>http://markinstefan.xyz/about/</link>
|
||||
|
||||
@@ -0,0 +1,97 @@
|
||||
const body = document.body;
|
||||
const darkModeToggle = document.getElementById('dark-mode-toggle');
|
||||
const darkModeMediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
|
||||
|
||||
// Check if user preference is set, if not check value of body class for light or dark else it means that colorscheme = auto
|
||||
if (localStorage.getItem("colorscheme")) {
|
||||
setTheme(localStorage.getItem("colorscheme"));
|
||||
} else if (body.classList.contains('colorscheme-light') || body.classList.contains('colorscheme-dark')) {
|
||||
setTheme(body.classList.contains("colorscheme-dark") ? "dark" : "light");
|
||||
} else {
|
||||
setTheme(darkModeMediaQuery.matches ? "dark" : "light");
|
||||
}
|
||||
|
||||
if (darkModeToggle) {
|
||||
darkModeToggle.addEventListener('click', () => {
|
||||
let theme = body.classList.contains("colorscheme-dark") ? "light" : "dark";
|
||||
setTheme(theme);
|
||||
rememberTheme(theme);
|
||||
});
|
||||
}
|
||||
|
||||
darkModeMediaQuery.addListener((event) => {
|
||||
setTheme(event.matches ? "dark" : "light");
|
||||
});
|
||||
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
let node = document.querySelector('.preload-transitions');
|
||||
node.classList.remove('preload-transitions');
|
||||
});
|
||||
|
||||
function setTheme(theme) {
|
||||
body.classList.remove('colorscheme-auto');
|
||||
let inverse = theme === 'dark' ? 'light' : 'dark';
|
||||
body.classList.remove('colorscheme-' + inverse);
|
||||
body.classList.add('colorscheme-' + theme);
|
||||
document.documentElement.style['color-scheme'] = theme;
|
||||
|
||||
function waitForElm(selector) {
|
||||
return new Promise(resolve => {
|
||||
if (document.querySelector(selector)) {
|
||||
return resolve(document.querySelector(selector));
|
||||
}
|
||||
|
||||
const observer = new MutationObserver(mutations => {
|
||||
if (document.querySelector(selector)) {
|
||||
resolve(document.querySelector(selector));
|
||||
observer.disconnect();
|
||||
}
|
||||
});
|
||||
|
||||
observer.observe(document.body, {
|
||||
childList: true,
|
||||
subtree: true
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
if (theme === 'dark') {
|
||||
const message = {
|
||||
type: 'set-theme',
|
||||
theme: 'github-dark'
|
||||
};
|
||||
waitForElm('.utterances-frame').then((iframe) => {
|
||||
iframe.contentWindow.postMessage(message, 'https://utteranc.es');
|
||||
})
|
||||
|
||||
}
|
||||
else {
|
||||
const message = {
|
||||
type: 'set-theme',
|
||||
theme: 'github-light'
|
||||
};
|
||||
waitForElm('.utterances-frame').then((iframe) => {
|
||||
iframe.contentWindow.postMessage(message, 'https://utteranc.es');
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
function sendMessage(message) {
|
||||
const iframe = document.querySelector('iframe.giscus-frame');
|
||||
if (!iframe) return;
|
||||
iframe.contentWindow.postMessage({ giscus: message }, 'https://giscus.app');
|
||||
}
|
||||
sendMessage({
|
||||
setConfig: {
|
||||
theme: theme,
|
||||
},
|
||||
});
|
||||
|
||||
// Create and send event
|
||||
const event = new Event('themeChanged');
|
||||
document.dispatchEvent(event);
|
||||
}
|
||||
|
||||
function rememberTheme(theme) {
|
||||
localStorage.setItem('colorscheme', theme);
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>http://markinstefan.xyz/wedding/</title>
|
||||
<link rel="canonical" href="http://markinstefan.xyz/wedding/">
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="refresh" content="0; url=http://markinstefan.xyz/wedding/">
|
||||
</head>
|
||||
</html>
|
||||
Executable
+58
@@ -0,0 +1,58 @@
|
||||
<?php
|
||||
require __DIR__ . '/vendor/autoload.php';
|
||||
use PHPMailer\PHPMailer\PHPMailer;
|
||||
use PHPMailer\PHPMailer\Exception;
|
||||
use Dotenv\Dotenv;
|
||||
|
||||
$dotenv = Dotenv::createImmutable(__DIR__ . '/../');
|
||||
$dotenv->safeLoad();
|
||||
|
||||
// Get form values
|
||||
$first_name = $_POST['first_name'] ?? '';
|
||||
$last_name = $_POST['last_name'] ?? '';
|
||||
$name = trim("$first_name $last_name") ?: 'No Name';
|
||||
|
||||
// Drinks can be an array
|
||||
$drinks = $_POST['drinks'] ?? 'None';
|
||||
if (is_array($drinks)) {
|
||||
$drinks = implode(', ', $drinks);
|
||||
}
|
||||
|
||||
// Allergies
|
||||
$allergies = $_POST['allergies'] ?? 'None';
|
||||
|
||||
// Convert to UTF-8
|
||||
$name = mb_convert_encoding($name, 'UTF-8', 'auto');
|
||||
$drinks = mb_convert_encoding($drinks, 'UTF-8', 'auto');
|
||||
$allergies = mb_convert_encoding($allergies, 'UTF-8', 'auto');
|
||||
|
||||
// PHPMailer setup
|
||||
$mail = new PHPMailer(true);
|
||||
try {
|
||||
$mail->CharSet = 'UTF-8';
|
||||
$mail->isSMTP();
|
||||
$mail->Host = $_ENV['SMTP_HOST'];
|
||||
$mail->SMTPAuth = true;
|
||||
$mail->Username = $_ENV['SMTP_USER'];
|
||||
$mail->Password = $_ENV['SMTP_PASS'];
|
||||
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
|
||||
$mail->Port = (int)$_ENV['SMTP_PORT'];
|
||||
|
||||
$mail->setFrom($_ENV['FROM_EMAIL'], $_ENV['FROM_NAME']);
|
||||
$mail->addAddress($_ENV['TO_EMAIL']);
|
||||
|
||||
$mail->Subject = mb_encode_mimeheader("New Wedding Guest: $name", 'UTF-8');
|
||||
|
||||
$body = <<<EOD
|
||||
Name: $name
|
||||
Drinks: $drinks
|
||||
Allergies: $allergies
|
||||
EOD;
|
||||
|
||||
$mail->Body = $body;
|
||||
$mail->send();
|
||||
|
||||
echo 'RSVP submitted successfully.';
|
||||
} catch (Exception $e) {
|
||||
echo "RSVP could not be sent. Mailer Error: {$mail->ErrorInfo}";
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<title>http://markinstefan.xyz/ru/svadba/</title>
|
||||
<link rel="canonical" href="http://markinstefan.xyz/ru/svadba/">
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="refresh" content="0; url=http://markinstefan.xyz/ru/svadba/">
|
||||
</head>
|
||||
</html>
|
||||
+29
-1
@@ -74,7 +74,7 @@
|
||||
<link rel="alternate" type="application/rss+xml" href="/ru/index.xml" title="Маркин Степан" />
|
||||
|
||||
|
||||
<meta name="generator" content="Hugo 0.160.1">
|
||||
<meta name="generator" content="Hugo 0.161.0">
|
||||
|
||||
|
||||
|
||||
@@ -175,6 +175,34 @@
|
||||
|
||||
|
||||
|
||||
<ul>
|
||||
|
||||
|
||||
<li>
|
||||
<a href="https://git.netinfection.xyz/iroxol" aria-label="Gitea" >
|
||||
<i class="fa-brands fa-git-alt fa-2x" aria-hidden="true"></i>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
<a href="contact" aria-label="Email" >
|
||||
<i class="fa-solid fa-envelope fa-2x" aria-hidden="true"></i>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
<a href="xmpp:iroxol@netinfection.xyz" aria-label="XMPP" >
|
||||
<i class="fa-solid fa-comment-dots fa-2x" aria-hidden="true"></i>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
@@ -28,5 +28,12 @@
|
||||
<guid>http://markinstefan.xyz/ru/about/</guid>
|
||||
<description></description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Свадьба Стефана и Марии</title>
|
||||
<link>http://markinstefan.xyz/ru/svadba/</link>
|
||||
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
|
||||
<guid>http://markinstefan.xyz/ru/svadba/</guid>
|
||||
<description><p>С радостью приглашаем вас на свадьбу Стефана и Марии!</p>
<p>Мы приглашаем вас разделить с нами этот особенный день, наполненный любовью, радостью и незабываемыми воспоминаниями!</p>
<p>С нетерпением ждем встречи с вами!</p></description>
|
||||
</item>
|
||||
</channel>
|
||||
</rss>
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<title>http://markinstefan.xyz/ru/svadba/</title>
|
||||
<link rel="canonical" href="http://markinstefan.xyz/ru/svadba/">
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="refresh" content="0; url=http://markinstefan.xyz/ru/svadba/">
|
||||
</head>
|
||||
</html>
|
||||
@@ -137,14 +137,14 @@
|
||||
|
||||
|
||||
<li class="navigation-item">
|
||||
<a href="/de/series/">🇩🇪</a>
|
||||
<a href="/series/">🇬🇧</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="navigation-item">
|
||||
<a href="/series/">🇬🇧</a>
|
||||
<a href="/de/series/">🇩🇪</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
+21
-4
@@ -39,13 +39,13 @@
|
||||
<loc>http://markinstefan.xyz/ru/series/</loc>
|
||||
<xhtml:link
|
||||
rel="alternate"
|
||||
hreflang="de"
|
||||
href="http://markinstefan.xyz/de/series/"
|
||||
hreflang="en"
|
||||
href="http://markinstefan.xyz/series/"
|
||||
/>
|
||||
<xhtml:link
|
||||
rel="alternate"
|
||||
hreflang="en"
|
||||
href="http://markinstefan.xyz/series/"
|
||||
hreflang="de"
|
||||
href="http://markinstefan.xyz/de/series/"
|
||||
/>
|
||||
<xhtml:link
|
||||
rel="alternate"
|
||||
@@ -137,5 +137,22 @@
|
||||
hreflang="ru"
|
||||
href="http://markinstefan.xyz/ru/about/"
|
||||
/>
|
||||
</url><url>
|
||||
<loc>http://markinstefan.xyz/ru/svadba/</loc>
|
||||
<xhtml:link
|
||||
rel="alternate"
|
||||
hreflang="de"
|
||||
href="http://markinstefan.xyz/de/hochzeit/"
|
||||
/>
|
||||
<xhtml:link
|
||||
rel="alternate"
|
||||
hreflang="en"
|
||||
href="http://markinstefan.xyz/wedding/"
|
||||
/>
|
||||
<xhtml:link
|
||||
rel="alternate"
|
||||
hreflang="ru"
|
||||
href="http://markinstefan.xyz/ru/svadba/"
|
||||
/>
|
||||
</url>
|
||||
</urlset>
|
||||
|
||||
@@ -0,0 +1,544 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
|
||||
<head>
|
||||
<title>Маркин Степан</title>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="color-scheme" content="light dark">
|
||||
|
||||
|
||||
|
||||
|
||||
<meta name="author" content="Маркин Степан">
|
||||
<meta name="description" content="С радостью приглашаем вас на свадьбу Стефана и Марии!
|
||||
Мы приглашаем вас разделить с нами этот особенный день, наполненный любовью, радостью и незабываемыми воспоминаниями!
|
||||
С нетерпением ждем встречи с вами!">
|
||||
<meta name="keywords" content="blog,desenvolvedor,pessoal">
|
||||
|
||||
|
||||
|
||||
<meta name="twitter:card" content="summary">
|
||||
<meta name="twitter:title" content="Свадьба Стефана и Марии">
|
||||
<meta name="twitter:description" content="С радостью приглашаем вас на свадьбу Стефана и Марии!
|
||||
Мы приглашаем вас разделить с нами этот особенный день, наполненный любовью, радостью и незабываемыми воспоминаниями!
|
||||
С нетерпением ждем встречи с вами!">
|
||||
|
||||
<meta property="og:url" content="http://markinstefan.xyz/ru/svadba/">
|
||||
<meta property="og:site_name" content="Маркин Степан">
|
||||
<meta property="og:title" content="Свадьба Стефана и Марии">
|
||||
<meta property="og:description" content="С радостью приглашаем вас на свадьбу Стефана и Марии!
|
||||
Мы приглашаем вас разделить с нами этот особенный день, наполненный любовью, радостью и незабываемыми воспоминаниями!
|
||||
С нетерпением ждем встречи с вами!">
|
||||
<meta property="og:locale" content="ru">
|
||||
<meta property="og:type" content="article">
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="canonical" href="http://markinstefan.xyz/ru/svadba/">
|
||||
|
||||
|
||||
<link rel="preload" href="/fonts/fa-brands-400.woff2" as="font" type="font/woff2" crossorigin>
|
||||
<link rel="preload" href="/fonts/fa-regular-400.woff2" as="font" type="font/woff2" crossorigin>
|
||||
<link rel="preload" href="/fonts/fa-solid-900.woff2" as="font" type="font/woff2" crossorigin>
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="/css/coder.min.f6b1b35a7b02521b25338f6cf58975f9980a6c12847763fe35a48307758cd1e7.css" integrity="sha256-9rGzWnsCUhslM49s9Yl1+ZgKbBKEd2P+NaSDB3WM0ec=" crossorigin="anonymous" media="screen" />
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="/css/coder-dark.min.ad48f476275974885bdc03d5251e3cdbe1678c54a63ff772376b0ed2adc468dd.css" integrity="sha256-rUj0didZdIhb3APVJR482+FnjFSmP/dyN2sO0q3EaN0=" crossorigin="anonymous" media="screen" />
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="icon" type="image/svg+xml" href="/images/favicon.svg" sizes="any">
|
||||
<link rel="icon" type="image/png" href="/images/favicon-32x32.png" sizes="32x32">
|
||||
<link rel="icon" type="image/png" href="/images/favicon-16x16.png" sizes="16x16">
|
||||
|
||||
<link rel="apple-touch-icon" href="/images/apple-touch-icon.png">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon.png">
|
||||
|
||||
<link rel="manifest" href="/site.webmanifest">
|
||||
<link rel="mask-icon" href="/images/safari-pinned-tab.svg" color="#5bbad5">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</head>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<body class="preload-transitions colorscheme-auto">
|
||||
|
||||
<div class="float-container">
|
||||
<a id="dark-mode-toggle" class="colorscheme-toggle">
|
||||
<i class="fa-solid fa-adjust fa-fw" aria-hidden="true"></i>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
<main class="wrapper">
|
||||
<nav class="navigation">
|
||||
<section class="container">
|
||||
|
||||
<a class="navigation-title" href="http://markinstefan.xyz/ru/">
|
||||
Маркин Степан
|
||||
</a>
|
||||
|
||||
|
||||
<input type="checkbox" id="menu-toggle" />
|
||||
<label class="menu-button float-right" for="menu-toggle">
|
||||
<i class="fa-solid fa-bars fa-fw" aria-hidden="true"></i>
|
||||
</label>
|
||||
<ul class="navigation-list">
|
||||
|
||||
|
||||
<li class="navigation-item">
|
||||
<a class="navigation-link " href="/ru/about/">Обо мне</a>
|
||||
</li>
|
||||
|
||||
<li class="navigation-item">
|
||||
<a class="navigation-link " href="/ru/projects/">Проекты</a>
|
||||
</li>
|
||||
|
||||
<li class="navigation-item">
|
||||
<a class="navigation-link " href="/ru/contact/">Контакты</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="navigation-item menu-separator">
|
||||
<span>|</span>
|
||||
</li>
|
||||
|
||||
|
||||
<li class="navigation-item">
|
||||
<a href="/de/hochzeit/">🇩🇪</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="navigation-item">
|
||||
<a href="/wedding/">🇬🇧</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
|
||||
</section>
|
||||
</nav>
|
||||
|
||||
|
||||
<div class="content">
|
||||
|
||||
|
||||
<style>
|
||||
body {
|
||||
background-color: #fff;
|
||||
color: #222;
|
||||
|
||||
background-image: url('/images/hochzeit-bg.jpg');
|
||||
background-size: cover;
|
||||
background-position: center;
|
||||
background-repeat: repeat;
|
||||
border-radius: 8px;
|
||||
}
|
||||
.wedding-container {
|
||||
max-width: 1600px;
|
||||
margin: 0 auto;
|
||||
padding: 2rem;
|
||||
font-family: system-ui, sans-serif;
|
||||
line-height: 1.6;
|
||||
}
|
||||
.hero {
|
||||
text-align: center;
|
||||
margin-bottom: 3rem;
|
||||
}
|
||||
|
||||
.hero img {
|
||||
width: 100%;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.hero h1 {
|
||||
font-size: 2.5rem;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.hero .date {
|
||||
font-size: 1.2rem;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.section {
|
||||
margin-bottom: 2.5rem;
|
||||
}
|
||||
|
||||
.section h2 {
|
||||
font-size: 1.5rem;
|
||||
margin-bottom: 0.5rem;
|
||||
border-bottom: 1px solid #eee;
|
||||
padding-bottom: 0.3rem;
|
||||
}
|
||||
|
||||
.map iframe {
|
||||
width: 100%;
|
||||
background-color: rgba(255, 255, 255, 0.5);
|
||||
padding: 1rem;
|
||||
height: 400px;
|
||||
border: 0;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.rsvp {
|
||||
background-color: rgba(255, 255, 255, 0.8);
|
||||
padding: 1rem;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.countdown {
|
||||
text-align: center; margin-bottom: 2rem;
|
||||
font-size: 5rem;
|
||||
}
|
||||
|
||||
.footer {
|
||||
text-align: center;
|
||||
margin-top: 3rem;
|
||||
color: #888;
|
||||
font-size: 2rem;
|
||||
padding-top: 1rem;
|
||||
}
|
||||
|
||||
.footer a {
|
||||
color: #0066cc;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.footer a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="wedding-container">
|
||||
<style>
|
||||
.music-fab {
|
||||
position: fixed;
|
||||
bottom: 20px;
|
||||
left: 20px;
|
||||
z-index: 9999;
|
||||
}
|
||||
|
||||
.fab-button {
|
||||
width: 52px;
|
||||
height: 52px;
|
||||
border-radius: 50%;
|
||||
border: none;
|
||||
background: white;
|
||||
box-shadow: 0 6px 18px rgba(0,0,0,0.2);
|
||||
font-size: 20px;
|
||||
cursor: pointer;
|
||||
transition: transform 0.15s ease;
|
||||
}
|
||||
|
||||
.fab-button:active {
|
||||
transform: scale(0.95);
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="music-fab">
|
||||
<button id="music-btn" class="fab-button">⏸️</button>
|
||||
</div>
|
||||
|
||||
<audio id="bg-music" autoplay loop>
|
||||
<source src="/audio/canon-in-d.mp3" type="audio/mpeg">
|
||||
</audio>
|
||||
|
||||
<script>
|
||||
const btn = document.getElementById("music-btn");
|
||||
const audio = document.getElementById("bg-music");
|
||||
|
||||
audio.volume = 0.3;
|
||||
|
||||
|
||||
let isPlaying = true;
|
||||
btn.textContent = "⏸️";
|
||||
|
||||
|
||||
audio.play().catch(() => {
|
||||
isPlaying = false;
|
||||
btn.textContent = "▶️";
|
||||
});
|
||||
|
||||
btn.addEventListener("click", async () => {
|
||||
if (!isPlaying) {
|
||||
try {
|
||||
await audio.play();
|
||||
isPlaying = true;
|
||||
btn.textContent = "⏸️";
|
||||
} catch (e) {
|
||||
console.log("Playback blocked:", e);
|
||||
}
|
||||
} else {
|
||||
audio.pause();
|
||||
isPlaying = false;
|
||||
btn.textContent = "▶️";
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
<div class="countdown">
|
||||
<h3>До нашей свадьбы осталось:</h3>
|
||||
<p id="timer"></p>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="hero">
|
||||
<img src="/images/hochzeit-header.jpg" alt="Wedding Header Image">
|
||||
<h1>Свадьба Стефана и Марии</h1>
|
||||
<div class="date">
|
||||
31 августа 2026 г.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="section">
|
||||
<p>С радостью приглашаем вас на свадьбу Стефана и Марии!</p>
|
||||
<p>Мы приглашаем вас разделить с нами этот особенный день, наполненный любовью, радостью и незабываемыми воспоминаниями!</p>
|
||||
<p>С нетерпением ждем встречи с вами!</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="section">
|
||||
<h2>📅 Мероприятие</h2>
|
||||
|
||||
<p>
|
||||
<strong>Церемония:</strong>
|
||||
31 августа 2026 г., в 14:00
|
||||
|
||||
</p>
|
||||
|
||||
|
||||
<p><strong>Начало:</strong> 17:00</p>
|
||||
|
||||
|
||||
<p><strong>Место:</strong> Мюнхен, Германия</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="section map">
|
||||
<h2>📍 Место</h2>
|
||||
<iframe src="https://www.google.com/maps?q=Russische+Orthodoxe+Kirche+Auferstehungs-Gemeinde+Dachau+M%C3%BCnchen&hl=ru&z=19&output=embed" width="600" height="450" frameborder="0" style="border:0;" allowfullscreen="" aria-hidden="false" tabindex="0"></iframe>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="section rsvp">
|
||||
<h2>📝 RSVP</h2>
|
||||
|
||||
<p>Пожалуйста, ответьте до <strong>30 июня</strong>.</p>
|
||||
|
||||
|
||||
<p>Электронная почта:
|
||||
<span class="email"><b>Пожалуйста, разрешите JavaScript для просмотра этого контента.</b></span>
|
||||
<script>
|
||||
(function() {
|
||||
var email = "hochzeit@markinstefan.xyz";
|
||||
var user = email.split('@')[0];
|
||||
var domain = email.split('@')[1];
|
||||
var link = document.createElement('a');
|
||||
link.href = 'mailto:' + user + '@' + domain;
|
||||
link.textContent = user + '@' + domain;
|
||||
|
||||
|
||||
var span = document.currentScript.previousElementSibling;
|
||||
span.textContent = "";
|
||||
span.appendChild(link);
|
||||
})();
|
||||
</script>
|
||||
</p>
|
||||
|
||||
|
||||
|
||||
<form action="/rsvp-submit.php" method="POST">
|
||||
|
||||
<label for="first_name">Имя:</label><br>
|
||||
<input type="text" id="first_name" name="first_name" required><br><br>
|
||||
|
||||
<label for="last_name">Фамилия:</label><br>
|
||||
<input type="text" id="last_name" name="last_name" required><br><br>
|
||||
|
||||
<label>Предпочтения по напиткам::</label><br>
|
||||
|
||||
<input type="checkbox" id="wine" name="drinks[]" value="Wine">
|
||||
<label for="wine">Вино</label><br>
|
||||
|
||||
<input type="checkbox" id="beer" name="drinks[]" value="Beer">
|
||||
<label for="beer">Пиво</label><br>
|
||||
|
||||
<input type="checkbox" id="juice" name="drinks[]" value="Juice">
|
||||
<label for="juice">Сок</label><br><br>
|
||||
|
||||
<label for="allergies">Аллергия на:</label><br>
|
||||
<input type="text" id="allergies" name="allergies"><br><br>
|
||||
|
||||
|
||||
<input type="text" name="website" style="display:none">
|
||||
|
||||
<button type="submit">Отправить</button>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="footer">
|
||||
<p>❤️ Мы с нетерпением ждем встречи с вами ❤️</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var labels = {
|
||||
day: "Д.",
|
||||
hour: "ч.",
|
||||
minute: "м.",
|
||||
second: "c."
|
||||
};
|
||||
|
||||
var countDownDate = new Date("2026-08-31 14:00").getTime();
|
||||
|
||||
var x = setInterval(function() {
|
||||
var now = new Date().getTime();
|
||||
var distance = countDownDate - now;
|
||||
|
||||
var days = Math.floor(distance / (1000 * 60 * 60 * 24));
|
||||
var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
|
||||
var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
|
||||
var seconds = Math.floor((distance % (1000 * 60)) / 1000);
|
||||
|
||||
document.getElementById("timer").innerHTML =
|
||||
days + " " + labels.day + " " +
|
||||
hours + " " + labels.hour + " " +
|
||||
minutes + " " + labels.minute + " " +
|
||||
seconds + " " + labels.second;
|
||||
|
||||
if (distance < 0) {
|
||||
clearInterval(x);
|
||||
document.getElementById("timer").innerHTML = "Наступил великий день!";
|
||||
}
|
||||
}, 1000);
|
||||
</script>
|
||||
|
||||
</div>
|
||||
|
||||
<footer class="footer">
|
||||
<section class="container">
|
||||
©
|
||||
|
||||
2026
|
||||
Маркин Степан
|
||||
·
|
||||
|
||||
Работает на <a href="https://gohugo.io/" target="_blank" rel="noopener">Hugo</a> & <a href="https://github.com/luizdepra/hugo-coder/" target="_blank" rel="noopener">Coder</a>.
|
||||
|
||||
</section>
|
||||
</footer>
|
||||
|
||||
</main>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script src="/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js" integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -137,14 +137,14 @@
|
||||
|
||||
|
||||
<li class="navigation-item">
|
||||
<a href="/ru/tags/">🇷🇺</a>
|
||||
<a href="/de/tags/">🇩🇪</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="navigation-item">
|
||||
<a href="/de/tags/">🇩🇪</a>
|
||||
<a href="/ru/tags/">🇷🇺</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,544 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<title>Markin Stefan</title>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="color-scheme" content="light dark">
|
||||
|
||||
|
||||
|
||||
|
||||
<meta name="author" content="Markin Stefan">
|
||||
<meta name="description" content="We are happy to invite you to our wedding of Stefan and Mariia!
|
||||
Join us in celebrating this special day with love, joy, and wonderful memories.
|
||||
We look forward to seeing you there!">
|
||||
<meta name="keywords" content="blog,developer,personal">
|
||||
|
||||
|
||||
|
||||
<meta name="twitter:card" content="summary">
|
||||
<meta name="twitter:title" content="Marriage of Stefan and Mariia">
|
||||
<meta name="twitter:description" content="We are happy to invite you to our wedding of Stefan and Mariia!
|
||||
Join us in celebrating this special day with love, joy, and wonderful memories.
|
||||
We look forward to seeing you there!">
|
||||
|
||||
<meta property="og:url" content="http://markinstefan.xyz/wedding/">
|
||||
<meta property="og:site_name" content="Markin Stefan">
|
||||
<meta property="og:title" content="Marriage of Stefan and Mariia">
|
||||
<meta property="og:description" content="We are happy to invite you to our wedding of Stefan and Mariia!
|
||||
Join us in celebrating this special day with love, joy, and wonderful memories.
|
||||
We look forward to seeing you there!">
|
||||
<meta property="og:locale" content="en">
|
||||
<meta property="og:type" content="article">
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="canonical" href="http://markinstefan.xyz/wedding/">
|
||||
|
||||
|
||||
<link rel="preload" href="/fonts/fa-brands-400.woff2" as="font" type="font/woff2" crossorigin>
|
||||
<link rel="preload" href="/fonts/fa-regular-400.woff2" as="font" type="font/woff2" crossorigin>
|
||||
<link rel="preload" href="/fonts/fa-solid-900.woff2" as="font" type="font/woff2" crossorigin>
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="/css/coder.min.f6b1b35a7b02521b25338f6cf58975f9980a6c12847763fe35a48307758cd1e7.css" integrity="sha256-9rGzWnsCUhslM49s9Yl1+ZgKbBKEd2P+NaSDB3WM0ec=" crossorigin="anonymous" media="screen" />
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="/css/coder-dark.min.ad48f476275974885bdc03d5251e3cdbe1678c54a63ff772376b0ed2adc468dd.css" integrity="sha256-rUj0didZdIhb3APVJR482+FnjFSmP/dyN2sO0q3EaN0=" crossorigin="anonymous" media="screen" />
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="icon" type="image/svg+xml" href="/images/favicon.svg" sizes="any">
|
||||
<link rel="icon" type="image/png" href="/images/favicon-32x32.png" sizes="32x32">
|
||||
<link rel="icon" type="image/png" href="/images/favicon-16x16.png" sizes="16x16">
|
||||
|
||||
<link rel="apple-touch-icon" href="/images/apple-touch-icon.png">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon.png">
|
||||
|
||||
<link rel="manifest" href="/site.webmanifest">
|
||||
<link rel="mask-icon" href="/images/safari-pinned-tab.svg" color="#5bbad5">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</head>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<body class="preload-transitions colorscheme-auto">
|
||||
|
||||
<div class="float-container">
|
||||
<a id="dark-mode-toggle" class="colorscheme-toggle">
|
||||
<i class="fa-solid fa-adjust fa-fw" aria-hidden="true"></i>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
<main class="wrapper">
|
||||
<nav class="navigation">
|
||||
<section class="container">
|
||||
|
||||
<a class="navigation-title" href="http://markinstefan.xyz/">
|
||||
Markin Stefan
|
||||
</a>
|
||||
|
||||
|
||||
<input type="checkbox" id="menu-toggle" />
|
||||
<label class="menu-button float-right" for="menu-toggle">
|
||||
<i class="fa-solid fa-bars fa-fw" aria-hidden="true"></i>
|
||||
</label>
|
||||
<ul class="navigation-list">
|
||||
|
||||
|
||||
<li class="navigation-item">
|
||||
<a class="navigation-link " href="/about/">About</a>
|
||||
</li>
|
||||
|
||||
<li class="navigation-item">
|
||||
<a class="navigation-link " href="/projects/">Projects</a>
|
||||
</li>
|
||||
|
||||
<li class="navigation-item">
|
||||
<a class="navigation-link " href="/contact/">Contact me</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="navigation-item menu-separator">
|
||||
<span>|</span>
|
||||
</li>
|
||||
|
||||
|
||||
<li class="navigation-item">
|
||||
<a href="/de/hochzeit/">🇩🇪</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="navigation-item">
|
||||
<a href="/ru/svadba/">🇷🇺</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
|
||||
</section>
|
||||
</nav>
|
||||
|
||||
|
||||
<div class="content">
|
||||
|
||||
|
||||
<style>
|
||||
body {
|
||||
background-color: #fff;
|
||||
color: #222;
|
||||
|
||||
background-image: url('/images/hochzeit-bg.jpg');
|
||||
background-size: cover;
|
||||
background-position: center;
|
||||
background-repeat: repeat;
|
||||
border-radius: 8px;
|
||||
}
|
||||
.wedding-container {
|
||||
max-width: 1600px;
|
||||
margin: 0 auto;
|
||||
padding: 2rem;
|
||||
font-family: system-ui, sans-serif;
|
||||
line-height: 1.6;
|
||||
}
|
||||
.hero {
|
||||
text-align: center;
|
||||
margin-bottom: 3rem;
|
||||
}
|
||||
|
||||
.hero img {
|
||||
width: 100%;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.hero h1 {
|
||||
font-size: 2.5rem;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.hero .date {
|
||||
font-size: 1.2rem;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.section {
|
||||
margin-bottom: 2.5rem;
|
||||
}
|
||||
|
||||
.section h2 {
|
||||
font-size: 1.5rem;
|
||||
margin-bottom: 0.5rem;
|
||||
border-bottom: 1px solid #eee;
|
||||
padding-bottom: 0.3rem;
|
||||
}
|
||||
|
||||
.map iframe {
|
||||
width: 100%;
|
||||
background-color: rgba(255, 255, 255, 0.5);
|
||||
padding: 1rem;
|
||||
height: 400px;
|
||||
border: 0;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.rsvp {
|
||||
background-color: rgba(255, 255, 255, 0.8);
|
||||
padding: 1rem;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.countdown {
|
||||
text-align: center; margin-bottom: 2rem;
|
||||
font-size: 5rem;
|
||||
}
|
||||
|
||||
.footer {
|
||||
text-align: center;
|
||||
margin-top: 3rem;
|
||||
color: #888;
|
||||
font-size: 2rem;
|
||||
padding-top: 1rem;
|
||||
}
|
||||
|
||||
.footer a {
|
||||
color: #0066cc;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.footer a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="wedding-container">
|
||||
<style>
|
||||
.music-fab {
|
||||
position: fixed;
|
||||
bottom: 20px;
|
||||
left: 20px;
|
||||
z-index: 9999;
|
||||
}
|
||||
|
||||
.fab-button {
|
||||
width: 52px;
|
||||
height: 52px;
|
||||
border-radius: 50%;
|
||||
border: none;
|
||||
background: white;
|
||||
box-shadow: 0 6px 18px rgba(0,0,0,0.2);
|
||||
font-size: 20px;
|
||||
cursor: pointer;
|
||||
transition: transform 0.15s ease;
|
||||
}
|
||||
|
||||
.fab-button:active {
|
||||
transform: scale(0.95);
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="music-fab">
|
||||
<button id="music-btn" class="fab-button">⏸️</button>
|
||||
</div>
|
||||
|
||||
<audio id="bg-music" autoplay loop>
|
||||
<source src="/audio/canon-in-d.mp3" type="audio/mpeg">
|
||||
</audio>
|
||||
|
||||
<script>
|
||||
const btn = document.getElementById("music-btn");
|
||||
const audio = document.getElementById("bg-music");
|
||||
|
||||
audio.volume = 0.3;
|
||||
|
||||
|
||||
let isPlaying = true;
|
||||
btn.textContent = "⏸️";
|
||||
|
||||
|
||||
audio.play().catch(() => {
|
||||
isPlaying = false;
|
||||
btn.textContent = "▶️";
|
||||
});
|
||||
|
||||
btn.addEventListener("click", async () => {
|
||||
if (!isPlaying) {
|
||||
try {
|
||||
await audio.play();
|
||||
isPlaying = true;
|
||||
btn.textContent = "⏸️";
|
||||
} catch (e) {
|
||||
console.log("Playback blocked:", e);
|
||||
}
|
||||
} else {
|
||||
audio.pause();
|
||||
isPlaying = false;
|
||||
btn.textContent = "▶️";
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
<div class="countdown">
|
||||
<h3>Countdown to our Wedding:</h3>
|
||||
<p id="timer"></p>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="hero">
|
||||
<img src="/images/hochzeit-header.jpg" alt="Wedding Header Image">
|
||||
<h1>Marriage of Stefan and Mariia</h1>
|
||||
<div class="date">
|
||||
August 31, 2026
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="section">
|
||||
<p>We are happy to invite you to our wedding of Stefan and Mariia!</p>
|
||||
<p>Join us in celebrating this special day with love, joy, and wonderful memories.</p>
|
||||
<p>We look forward to seeing you there!</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="section">
|
||||
<h2>📅 Event</h2>
|
||||
|
||||
<p>
|
||||
<strong>Ceremony:</strong>
|
||||
August 31, 2026, at 14:00
|
||||
|
||||
</p>
|
||||
|
||||
|
||||
<p><strong>Reception:</strong> 17:00</p>
|
||||
|
||||
|
||||
<p><strong>Location:</strong> Munich, Germany</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="section map">
|
||||
<h2>📍 Location</h2>
|
||||
<iframe src="https://www.google.com/maps?q=Russische+Orthodoxe+Kirche+Auferstehungs-Gemeinde+Dachau+M%C3%BCnchen&hl=en&z=19&output=embed" width="600" height="450" frameborder="0" style="border:0;" allowfullscreen="" aria-hidden="false" tabindex="0"></iframe>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="section rsvp">
|
||||
<h2>📝 RSVP</h2>
|
||||
|
||||
<p>Please respond by <strong>June 30</strong>.</p>
|
||||
|
||||
|
||||
<p>Email:
|
||||
<span class="email"><b>Please enable JavaScript to see this content.</b></span>
|
||||
<script>
|
||||
(function() {
|
||||
var email = "hochzeit@markinstefan.xyz";
|
||||
var user = email.split('@')[0];
|
||||
var domain = email.split('@')[1];
|
||||
var link = document.createElement('a');
|
||||
link.href = 'mailto:' + user + '@' + domain;
|
||||
link.textContent = user + '@' + domain;
|
||||
|
||||
|
||||
var span = document.currentScript.previousElementSibling;
|
||||
span.textContent = "";
|
||||
span.appendChild(link);
|
||||
})();
|
||||
</script>
|
||||
</p>
|
||||
|
||||
|
||||
|
||||
<form action="/rsvp-submit.php" method="POST">
|
||||
|
||||
<label for="first_name">First name:</label><br>
|
||||
<input type="text" id="first_name" name="first_name" required><br><br>
|
||||
|
||||
<label for="last_name">Last name:</label><br>
|
||||
<input type="text" id="last_name" name="last_name" required><br><br>
|
||||
|
||||
<label>Drink preferences::</label><br>
|
||||
|
||||
<input type="checkbox" id="wine" name="drinks[]" value="Wine">
|
||||
<label for="wine">Wine</label><br>
|
||||
|
||||
<input type="checkbox" id="beer" name="drinks[]" value="Beer">
|
||||
<label for="beer">Beer</label><br>
|
||||
|
||||
<input type="checkbox" id="juice" name="drinks[]" value="Juice">
|
||||
<label for="juice">Juice</label><br><br>
|
||||
|
||||
<label for="allergies">Allergic to:</label><br>
|
||||
<input type="text" id="allergies" name="allergies"><br><br>
|
||||
|
||||
|
||||
<input type="text" name="website" style="display:none">
|
||||
|
||||
<button type="submit">Send</button>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="footer">
|
||||
<p>We look forward to celebrating with you ❤️</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var labels = {
|
||||
day: "d",
|
||||
hour: "h",
|
||||
minute: "m",
|
||||
second: "s"
|
||||
};
|
||||
|
||||
var countDownDate = new Date("2026-08-31 14:00").getTime();
|
||||
|
||||
var x = setInterval(function() {
|
||||
var now = new Date().getTime();
|
||||
var distance = countDownDate - now;
|
||||
|
||||
var days = Math.floor(distance / (1000 * 60 * 60 * 24));
|
||||
var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
|
||||
var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
|
||||
var seconds = Math.floor((distance % (1000 * 60)) / 1000);
|
||||
|
||||
document.getElementById("timer").innerHTML =
|
||||
days + " " + labels.day + " " +
|
||||
hours + " " + labels.hour + " " +
|
||||
minutes + " " + labels.minute + " " +
|
||||
seconds + " " + labels.second;
|
||||
|
||||
if (distance < 0) {
|
||||
clearInterval(x);
|
||||
document.getElementById("timer").innerHTML = "The big day is here!";
|
||||
}
|
||||
}, 1000);
|
||||
</script>
|
||||
|
||||
</div>
|
||||
|
||||
<footer class="footer">
|
||||
<section class="container">
|
||||
©
|
||||
|
||||
2026
|
||||
Markin Stefan
|
||||
·
|
||||
|
||||
Powered by <a href="https://gohugo.io/" target="_blank" rel="noopener">Hugo</a> & <a href="https://github.com/luizdepra/hugo-coder/" target="_blank" rel="noopener">Coder</a>.
|
||||
|
||||
</section>
|
||||
</footer>
|
||||
|
||||
</main>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script src="/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js" integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
Executable → Regular
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
|
After Width: | Height: | Size: 9.9 MiB |
Executable
BIN
Binary file not shown.
|
After Width: | Height: | Size: 2.6 MiB |
Executable
+58
@@ -0,0 +1,58 @@
|
||||
<?php
|
||||
require __DIR__ . '/vendor/autoload.php';
|
||||
use PHPMailer\PHPMailer\PHPMailer;
|
||||
use PHPMailer\PHPMailer\Exception;
|
||||
use Dotenv\Dotenv;
|
||||
|
||||
$dotenv = Dotenv::createImmutable(__DIR__ . '/../');
|
||||
$dotenv->safeLoad();
|
||||
|
||||
// Get form values
|
||||
$first_name = $_POST['first_name'] ?? '';
|
||||
$last_name = $_POST['last_name'] ?? '';
|
||||
$name = trim("$first_name $last_name") ?: 'No Name';
|
||||
|
||||
// Drinks can be an array
|
||||
$drinks = $_POST['drinks'] ?? 'None';
|
||||
if (is_array($drinks)) {
|
||||
$drinks = implode(', ', $drinks);
|
||||
}
|
||||
|
||||
// Allergies
|
||||
$allergies = $_POST['allergies'] ?? 'None';
|
||||
|
||||
// Convert to UTF-8
|
||||
$name = mb_convert_encoding($name, 'UTF-8', 'auto');
|
||||
$drinks = mb_convert_encoding($drinks, 'UTF-8', 'auto');
|
||||
$allergies = mb_convert_encoding($allergies, 'UTF-8', 'auto');
|
||||
|
||||
// PHPMailer setup
|
||||
$mail = new PHPMailer(true);
|
||||
try {
|
||||
$mail->CharSet = 'UTF-8';
|
||||
$mail->isSMTP();
|
||||
$mail->Host = $_ENV['SMTP_HOST'];
|
||||
$mail->SMTPAuth = true;
|
||||
$mail->Username = $_ENV['SMTP_USER'];
|
||||
$mail->Password = $_ENV['SMTP_PASS'];
|
||||
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
|
||||
$mail->Port = (int)$_ENV['SMTP_PORT'];
|
||||
|
||||
$mail->setFrom($_ENV['FROM_EMAIL'], $_ENV['FROM_NAME']);
|
||||
$mail->addAddress($_ENV['TO_EMAIL']);
|
||||
|
||||
$mail->Subject = mb_encode_mimeheader("New Wedding Guest: $name", 'UTF-8');
|
||||
|
||||
$body = <<<EOD
|
||||
Name: $name
|
||||
Drinks: $drinks
|
||||
Allergies: $allergies
|
||||
EOD;
|
||||
|
||||
$mail->Body = $body;
|
||||
$mail->send();
|
||||
|
||||
echo 'RSVP submitted successfully.';
|
||||
} catch (Exception $e) {
|
||||
echo "RSVP could not be sent. Mailer Error: {$mail->ErrorInfo}";
|
||||
}
|
||||
Reference in New Issue
Block a user