Commit 19d07f88 authored by santiago duque's avatar santiago duque

prallax now working, also with image and text as 2 blocks

parent 349f1f15
# resident-kirby — Claude instructions
## Project structure
- **Edit source files only:** `src/` (SCSS, JS) and `www/site/` (PHP templates, snippets, blueprints)
- **Never read or edit:** `www/kirby/` — Kirby CMS core, treat as a black box
- **Never manually edit:** `www/assets/` — CodeKit compiles `src/` into here automatically
## Tooling
- CodeKit 3 watches `src/css/``www/assets/css/` and `src/js/``www/assets/js/`
- After editing a `src/` file, CodeKit recompiles; no need to touch the output files
...@@ -17,6 +17,51 @@ ...@@ -17,6 +17,51 @@
"oAP" : "\/.gitignore", "oAP" : "\/.gitignore",
"oF" : 0 "oF" : 0
}, },
"\/CLAUDE.md" : {
"cB" : 0,
"cS" : 0,
"eF" : 1,
"eL" : 1,
"ema" : 1,
"eSQ" : 1,
"ft" : 4096,
"hM" : 0,
"oA" : 0,
"oAP" : "\/CLAUDE.html",
"oF" : 0,
"oFM" : 0,
"oS" : 0,
"pHT" : 0,
"pME" : 1,
"rFN" : 0,
"uCM" : 0
},
"\/src\/css\/_mixins.scss" : {
"aP" : 1,
"bl" : 0,
"co" : 0,
"ec" : 1,
"ft" : 4,
"ma" : 1,
"oA" : 1,
"oAP" : "\/www\/assets\/css\/_mixins.css",
"oF" : 0,
"oS" : 3,
"pg" : 0
},
"\/src\/css\/_vars.scss" : {
"aP" : 1,
"bl" : 0,
"co" : 0,
"ec" : 1,
"ft" : 4,
"ma" : 1,
"oA" : 1,
"oAP" : "\/www\/assets\/css\/_vars.css",
"oF" : 0,
"oS" : 3,
"pg" : 0
},
"\/src\/css\/shared.scss" : { "\/src\/css\/shared.scss" : {
"aP" : 1, "aP" : 1,
"bl" : 0, "bl" : 0,
......
// Sass breakpoints + shared patterns
$bp-laptop: 1100px;
$bp-tablet: 900px;
$bp-mobile: 600px;
@mixin bp($max) {
@media (max-width: $max) {
@content;
}
}
// Monospaced label — font-family, size, tracking, uppercase
@mixin mono-label($size: 11px, $tracking: 0.25em) {
font-family: var(--font-mono);
font-size: $size;
letter-spacing: $tracking;
text-transform: uppercase;
}
// Display type — font-family, size, italic, weight
@mixin display-italic($size, $weight: 400) {
font-family: var(--font-display);
font-size: $size;
font-style: italic;
font-weight: $weight;
}
// Design tokens — The Friedrichshof Account
:root {
--bg: #0a0707;
--bg-2: #120c0c;
--paper: #e8e2d6;
--ink: #d8d2c4;
--ink-dim: #8a847a;
--ink-faint: #4a4540;
--accent: #b91c1c;
--accent-bright: #ef2b2b;
--accent-deep: #5a0e0e;
--rule: #1f1616;
--vignette: rgba(0, 0, 0, 0.85);
--section-margin-bottom: 80px;
--font-display: "Cormorant Garamond", "EB Garamond", Georgia, serif;
--font-body: "EB Garamond", Georgia, "Times New Roman", serif;
--font-mono: "JetBrains Mono", ui-monospace, "Courier New", monospace;
--font-sans: "Inter Tight", system-ui, sans-serif;
}
:root[data-mode="dim"] {
--bg: #1a1414;
--bg-2: #221919;
--ink: #e8e2d6;
--ink-dim: #a8a298;
--ink-faint: #5a5550;
--rule: #2f2222;
--vignette: rgba(0, 0, 0, 0.55);
}
This diff is collapsed.
This diff is collapsed.
/* ===== Cover-specific ===== */ /* ===================================================================
Home / cover page
=================================================================== */
@use '../mixins' as m;
// ===== Cover hero =====
.cover-hero { .cover-hero {
min-height: 100vh; min-height: 100vh;
position: relative; position: relative;
...@@ -6,6 +11,7 @@ ...@@ -6,6 +11,7 @@
flex-direction: column; flex-direction: column;
overflow: hidden; overflow: hidden;
} }
.cover-bg { .cover-bg {
position: absolute; position: absolute;
inset: 0; inset: 0;
...@@ -14,17 +20,17 @@ ...@@ -14,17 +20,17 @@
radial-gradient(ellipse at 80% 70%, rgba(120, 20, 20, 0.25) 0%, transparent 50%), radial-gradient(ellipse at 80% 70%, rgba(120, 20, 20, 0.25) 0%, transparent 50%),
radial-gradient(ellipse at 50% 100%, rgba(20, 8, 8, 1) 0%, transparent 60%), radial-gradient(ellipse at 50% 100%, rgba(20, 8, 8, 1) 0%, transparent 60%),
var(--bg); var(--bg);
}
.cover-bg::after { &::after {
content: ""; content: "";
position: absolute; position: absolute;
inset: 0; inset: 0;
background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='600' height='600'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.012' numOctaves='4' seed='8'/><feColorMatrix values='0 0 0 0 0.4 0 0 0 0 0.05 0 0 0 0 0.05 0 0 0 0.55 0'/></filter><rect width='100%25' height='100%25' filter='url(%23n)'/></svg>"); background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='600' height='600'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.012' numOctaves='4' seed='8'/><feColorMatrix values='0 0 0 0 0.4 0 0 0 0 0.05 0 0 0 0 0.05 0 0 0 0.55 0'/></filter><rect width='100%25' height='100%25' filter='url(%23n)'/></svg>");
mix-blend-mode: multiply; mix-blend-mode: multiply;
opacity: 0.5; opacity: 0.5;
} }
.cover-bg .brush { .brush {
position: absolute; position: absolute;
left: -5%; left: -5%;
right: -5%; right: -5%;
...@@ -32,6 +38,7 @@ ...@@ -32,6 +38,7 @@
height: 220px; height: 220px;
pointer-events: none; pointer-events: none;
opacity: 0.55; opacity: 0.55;
}
} }
.cover-content { .cover-content {
...@@ -42,27 +49,28 @@ ...@@ -42,27 +49,28 @@
grid-template-rows: 1fr auto; grid-template-rows: 1fr auto;
padding: 140px 80px 60px; padding: 140px 80px 60px;
} }
.cover-titleblock { .cover-titleblock {
align-self: center; align-self: center;
max-width: 1100px; max-width: 1100px;
} }
.cover-eyebrow { .cover-eyebrow {
font-family: var(--font-mono); @include m.mono-label(12px, 0.4em);
font-size: 12px;
letter-spacing: 0.4em;
text-transform: uppercase;
color: var(--accent); color: var(--accent);
margin-bottom: 40px; margin-bottom: 40px;
display: flex; display: flex;
align-items: center; align-items: center;
gap: 16px; gap: 16px;
}
.cover-eyebrow::before { &::before {
content: ""; content: "";
width: 32px; width: 32px;
height: 1px; height: 1px;
background: var(--accent); background: var(--accent);
}
} }
.cover-title { .cover-title {
font-family: var(--font-display); font-family: var(--font-display);
font-size: clamp(72px, 11vw, 168px); font-size: clamp(72px, 11vw, 168px);
...@@ -72,33 +80,32 @@ ...@@ -72,33 +80,32 @@
color: var(--paper); color: var(--paper);
margin-bottom: 32px; margin-bottom: 32px;
text-wrap: balance; text-wrap: balance;
}
.cover-title em { em {
font-style: italic; font-style: italic;
font-weight: 400; font-weight: 400;
color: var(--accent-bright); color: var(--accent-bright);
display: block; display: block;
}
} }
.cover-tagline { .cover-tagline {
font-family: var(--font-display); @include m.display-italic(clamp(20px, 2vw, 26px));
font-size: clamp(20px, 2vw, 26px);
font-style: italic;
color: var(--ink-dim); color: var(--ink-dim);
max-width: 540px; max-width: 540px;
line-height: 1.4; line-height: 1.4;
margin-bottom: 48px; margin-bottom: 48px;
} }
.cover-meta { .cover-meta {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 32px; gap: 32px;
font-family: var(--font-mono); @include m.mono-label(11px, 0.25em);
font-size: 11px;
letter-spacing: 0.25em;
text-transform: uppercase;
color: var(--ink-dim); color: var(--ink-dim);
.pip { color: var(--accent); }
} }
.cover-meta .pip { color: var(--accent); }
.cover-bottom { .cover-bottom {
align-self: end; align-self: end;
...@@ -109,60 +116,56 @@ ...@@ -109,60 +116,56 @@
padding-top: 60px; padding-top: 60px;
border-top: 1px solid var(--rule); border-top: 1px solid var(--rule);
} }
.cover-cta { .cover-cta {
display: inline-flex; display: inline-flex;
align-items: center; align-items: center;
gap: 16px; gap: 16px;
font-family: var(--font-mono); @include m.mono-label(12px, 0.3em);
font-size: 12px;
letter-spacing: 0.3em;
text-transform: uppercase;
color: var(--paper); color: var(--paper);
text-decoration: none; text-decoration: none;
padding: 18px 28px; padding: 18px 28px;
border: 1px solid var(--accent); border: 1px solid var(--accent);
background: rgba(185, 28, 28, 0.08); background: rgba(185, 28, 28, 0.08);
transition: background 0.3s, border-color 0.3s, transform 0.3s; transition: background 0.3s, border-color 0.3s, transform 0.3s;
}
.cover-cta:hover { &:hover {
background: rgba(185, 28, 28, 0.2); background: rgba(185, 28, 28, 0.2);
border-color: var(--accent-bright); border-color: var(--accent-bright);
transform: translateX(4px); transform: translateX(4px);
}
.arr { color: var(--accent); }
} }
.cover-cta .arr { color: var(--accent); }
.cover-warning { .cover-warning {
font-family: var(--font-mono); @include m.mono-label(10px, 0.25em);
font-size: 10px;
letter-spacing: 0.25em;
text-transform: uppercase;
color: var(--ink-faint); color: var(--ink-faint);
line-height: 1.8; line-height: 1.8;
max-width: 280px; max-width: 280px;
text-align: right; text-align: right;
}
.cover-warning .label { .label {
color: var(--accent); color: var(--accent);
display: block; display: block;
margin-bottom: 6px; margin-bottom: 6px;
}
} }
.cover-stamp { .cover-stamp {
font-family: var(--font-mono); @include m.mono-label(10px, 0.25em);
font-size: 10px;
letter-spacing: 0.25em;
text-transform: uppercase;
color: var(--ink-faint); color: var(--ink-faint);
line-height: 1.8; line-height: 1.8;
} }
/* ===== Chapter index ===== */ // ===== Chapter index =====
.index-section { .index-section {
position: relative; position: relative;
padding: 160px 80px 120px; padding: 160px 80px 120px;
background: var(--bg-2); background: var(--bg-2);
border-top: 1px solid var(--rule); border-top: 1px solid var(--rule);
} }
.index-header { .index-header {
display: grid; display: grid;
grid-template-columns: 1fr 1fr; grid-template-columns: 1fr 1fr;
...@@ -171,8 +174,8 @@ ...@@ -171,8 +174,8 @@
max-width: 1400px; max-width: 1400px;
margin-left: auto; margin-left: auto;
margin-right: auto; margin-right: auto;
}
.index-header h2 { h2 {
font-family: var(--font-display); font-family: var(--font-display);
font-size: clamp(56px, 7vw, 96px); font-size: clamp(56px, 7vw, 96px);
font-style: italic; font-style: italic;
...@@ -180,29 +183,29 @@ ...@@ -180,29 +183,29 @@
line-height: 1; line-height: 1;
color: var(--paper); color: var(--paper);
letter-spacing: -0.02em; letter-spacing: -0.02em;
} }
.index-header .text {
font-family: var(--font-display); .text {
font-size: 22px; @include m.display-italic(22px);
font-style: italic;
color: var(--ink-dim); color: var(--ink-dim);
line-height: 1.5; line-height: 1.5;
max-width: 36ch; max-width: 36ch;
align-self: end; align-self: end;
}
} }
.index-list { .index-list {
max-width: 1400px; max-width: 1400px;
margin: 0 auto; margin: 0 auto;
list-style: none; list-style: none;
}
.index-list li { li {
border-top: 1px solid var(--rule); border-top: 1px solid var(--rule);
}
.index-list li:last-child { &:last-child { border-bottom: 1px solid var(--rule); }
border-bottom: 1px solid var(--rule); }
}
.index-list a { a {
display: grid; display: grid;
grid-template-columns: 100px 1fr 200px 80px; grid-template-columns: 100px 1fr 200px 80px;
align-items: center; align-items: center;
...@@ -212,46 +215,49 @@ ...@@ -212,46 +215,49 @@
color: var(--ink); color: var(--ink);
transition: padding 0.4s, background 0.4s; transition: padding 0.4s, background 0.4s;
position: relative; position: relative;
}
.index-list a:hover { &:hover {
background: rgba(185, 28, 28, 0.06); background: rgba(185, 28, 28, 0.06);
padding-left: 48px; padding-left: 48px;
}
.index-list a::before { &::before { width: 3px; }
.index-title { color: var(--accent-bright); }
.index-arrow { color: var(--accent-bright); transform: translateX(8px); }
}
&::before {
content: ""; content: "";
position: absolute; position: absolute;
left: 0; top: 0; bottom: 0; left: 0;
top: 0;
bottom: 0;
width: 0; width: 0;
background: var(--accent); background: var(--accent);
transition: width 0.4s; transition: width 0.4s;
}
}
} }
.index-list a:hover::before {
width: 3px;
}
.index-num { .index-num {
font-family: var(--font-mono); font-family: var(--font-mono);
font-size: 14px; font-size: 14px;
letter-spacing: 0.2em; letter-spacing: 0.2em;
color: var(--accent); color: var(--accent);
} }
.index-title { .index-title {
font-family: var(--font-display); @include m.display-italic(clamp(28px, 3vw, 42px));
font-size: clamp(28px, 3vw, 42px);
font-style: italic;
font-weight: 400; font-weight: 400;
line-height: 1.1; line-height: 1.1;
color: var(--paper); color: var(--paper);
} }
.index-list a:hover .index-title {
color: var(--accent-bright);
}
.index-meta { .index-meta {
font-family: var(--font-mono); @include m.mono-label(11px, 0.2em);
font-size: 11px;
letter-spacing: 0.2em;
text-transform: uppercase;
color: var(--ink-faint); color: var(--ink-faint);
} }
.index-arrow { .index-arrow {
text-align: right; text-align: right;
font-family: var(--font-mono); font-family: var(--font-mono);
...@@ -260,12 +266,8 @@ ...@@ -260,12 +266,8 @@
color: var(--ink-faint); color: var(--ink-faint);
transition: color 0.3s, transform 0.3s; transition: color 0.3s, transform 0.3s;
} }
.index-list a:hover .index-arrow {
color: var(--accent-bright);
transform: translateX(8px);
}
/* ===== Footer ===== */ // ===== Footer =====
.cover-footer { .cover-footer {
padding: 80px 80px 60px; padding: 80px 80px 60px;
border-top: 1px solid var(--rule); border-top: 1px solid var(--rule);
...@@ -273,45 +275,48 @@ ...@@ -273,45 +275,48 @@
grid-template-columns: 1fr auto 1fr; grid-template-columns: 1fr auto 1fr;
gap: 40px; gap: 40px;
align-items: center; align-items: center;
font-family: var(--font-mono); @include m.mono-label(10px, 0.25em);
font-size: 10px;
letter-spacing: 0.25em;
text-transform: uppercase;
color: var(--ink-faint); color: var(--ink-faint);
.center { color: var(--accent); text-align: center; }
.right { text-align: right; }
} }
.cover-footer .center {
color: var(--accent);
text-align: center;
}
.cover-footer .right { text-align: right; }
/* Floating numerals in cover bg */ // Floating numerals in cover bg
.cover-numerals { .cover-numerals {
position: absolute; position: absolute;
inset: 0; inset: 0;
pointer-events: none; pointer-events: none;
z-index: 1; z-index: 1;
overflow: hidden; overflow: hidden;
}
.cover-numerals span { span {
position: absolute; position: absolute;
font-family: var(--font-display); font-family: var(--font-display);
font-style: italic; font-style: italic;
font-weight: 300; font-weight: 300;
color: rgba(185, 28, 28, 0.05); color: rgba(185, 28, 28, 0.05);
user-select: none; user-select: none;
&:nth-child(1) { font-size: 320px; top: 8%; left: -40px; }
&:nth-child(2) { font-size: 200px; top: 60%; right: 6%; color: rgba(232, 226, 214, 0.025); }
}
} }
.cover-numerals span:nth-child(1) { font-size: 320px; top: 8%; left: -40px; }
.cover-numerals span:nth-child(2) { font-size: 200px; top: 60%; right: 6%; color: rgba(232, 226, 214, 0.025); }
@media (max-width: 900px) { // ===== Responsive =====
@include m.bp(m.$bp-tablet) {
.cover-content { padding: 120px 32px 40px; } .cover-content { padding: 120px 32px 40px; }
.cover-bottom { grid-template-columns: 1fr; gap: 32px; } .cover-bottom { grid-template-columns: 1fr; gap: 32px; }
.cover-warning, .cover-footer .right { text-align: left; } .cover-warning { text-align: left; }
.index-section { padding: 100px 32px; } .index-section { padding: 100px 32px; }
.index-list a { grid-template-columns: 60px 1fr 60px; gap: 20px; } .index-list a { grid-template-columns: 60px 1fr 60px; gap: 20px; }
.index-meta { display: none; } .index-meta { display: none; }
.index-header { grid-template-columns: 1fr; gap: 24px; margin-bottom: 60px; } .index-header { grid-template-columns: 1fr; gap: 24px; margin-bottom: 60px; }
.cover-footer { grid-template-columns: 1fr; }
.cover-footer .center, .cover-footer .right { text-align: left; } .cover-footer {
grid-template-columns: 1fr;
.center, .right { text-align: left; }
}
} }
...@@ -36,22 +36,16 @@ ...@@ -36,22 +36,16 @@
const onScroll = () => { const onScroll = () => {
bgs.forEach(bg => { bgs.forEach(bg => {
const speed = parseFloat(bg.dataset.parallax) || 0.4; const speed = parseFloat(bg.dataset.parallax) || 0.4;
const section = bg.closest('.pinned-section'); const section = bg.closest('.pinned-text-section');
if (section) { if (section) {
// Inside sticky container: getBoundingClientRect on the bg itself is always
// ~0 because the sticky parent pins it. Track the outer section's scroll
// progress instead. The bg has inset:-15% 0 so it extends beyond the stage;
// overflow:hidden clips the edges, giving the image room to travel.
const r = section.getBoundingClientRect(); const r = section.getBoundingClientRect();
const scrollable = section.offsetHeight - window.innerHeight; const scrollable = section.offsetHeight - window.innerHeight;
if (scrollable <= 0) return; if (scrollable <= 0) return;
const progress = Math.max(0, Math.min(1, -r.top / scrollable)); const progress = Math.max(0, Math.min(1, -r.top / scrollable));
const shift = (progress - 0.5) * speed * 400; bg.style.backgroundPosition = `center ${(progress * 100).toFixed(2)}%`;
bg.style.transform = `translate3d(0, ${shift}px, 0)`;
} else { } else {
const r = bg.getBoundingClientRect(); const r = bg.getBoundingClientRect();
const offset = -r.top * speed; bg.style.transform = `translate3d(0, ${-r.top * speed}px, 0)`;
bg.style.transform = `translate3d(0, ${offset}px, 0)`;
} }
}); });
}; };
...@@ -130,27 +124,6 @@ ...@@ -130,27 +124,6 @@
}); });
} }
// ----- Tweaks integration -----
function initTweaksListener() {
window.addEventListener('message', (e) => {
const d = e.data;
if (!d || typeof d !== 'object') return;
if (d.type === '__re_tweaks_apply') applyTweaks(d.tweaks);
});
try {
const saved = localStorage.getItem('re_tweaks');
if (saved) applyTweaks(JSON.parse(saved));
} catch(e) {}
}
function applyTweaks(t) {
if (!t) return;
const root = document.documentElement;
if (t.grain != null) root.style.setProperty('--grain-opacity', t.grain);
if (t.effects != null) root.dataset.effects = t.effects ? 'on' : 'off';
if (t.mode) root.dataset.mode = t.mode;
}
// ----- Init ----- // ----- Init -----
document.addEventListener('DOMContentLoaded', () => { document.addEventListener('DOMContentLoaded', () => {
bindReveals(); bindReveals();
...@@ -159,6 +132,5 @@ ...@@ -159,6 +132,5 @@
initTypewriter(); initTypewriter();
initMenu(); initMenu();
initMenuFilter(); initMenuFilter();
initTweaksListener();
}); });
})(); })();
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
{"version":3,"sources":["../../../../src/css/templates/chapter.scss"],"names":[],"mappings":"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","file":"chapter.css"} {"version":3,"sources":["../../../../src/css/templates/chapter.scss","../../../../src/css/_mixins.scss"],"names":[],"mappings":"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","file":"chapter.css"}
\ No newline at end of file \ No newline at end of file
This diff is collapsed.
{"version":3,"sources":["../../../../src/css/templates/home.scss"],"names":[],"mappings":"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","file":"home.css"} {"version":3,"sources":["../../../../src/css/templates/home.scss","../../../../src/css/_mixins.scss"],"names":[],"mappings":"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","file":"home.css"}
\ No newline at end of file \ No newline at end of file
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="currentColor"><title>Discord</title><path d="M6.552,6.712a.891.891,0,0,0,0,1.776A.852.852,0,0,0,7.368,7.6.847.847,0,0,0,6.552,6.712Zm2.92,0a.891.891,0,1,0,.816.888A.852.852,0,0,0,9.472,6.712Z"/><path d="M13.36,0H2.64A1.644,1.644,0,0,0,1,1.648V12.464a1.644,1.644,0,0,0,1.64,1.648h9.072l-.424-1.48,1.024.952.968.9L15,16V1.648A1.644,1.644,0,0,0,13.36,0ZM10.272,10.448S9.984,10.1,9.744,9.8a2.524,2.524,0,0,0,1.448-.952,4.578,4.578,0,0,1-.92.472,5.265,5.265,0,0,1-1.16.344A5.6,5.6,0,0,1,7.04,9.656a6.716,6.716,0,0,1-1.176-.344,4.683,4.683,0,0,1-.912-.472,2.488,2.488,0,0,0,1.4.944c-.24.3-.536.664-.536.664a2.9,2.9,0,0,1-2.44-1.216A10.713,10.713,0,0,1,4.528,4.568a3.956,3.956,0,0,1,2.248-.84l.08.1a5.4,5.4,0,0,0-2.1,1.048s.176-.1.472-.232a6.008,6.008,0,0,1,1.816-.5.788.788,0,0,1,.136-.016A6.769,6.769,0,0,1,8.792,4.1a6.521,6.521,0,0,1,2.408.768A5.324,5.324,0,0,0,9.208,3.856l.112-.128a3.956,3.956,0,0,1,2.248.84A10.713,10.713,0,0,1,12.72,9.232,2.924,2.924,0,0,1,10.272,10.448Z" /></svg>
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="currentColor"><title>Instagram</title><circle cx="12.145" cy="3.892" r="0.96"/><path d="M8,12c-2.206,0-4-1.794-4-4s1.794-4,4-4s4,1.794,4,4S10.206,12,8,12z M8,6C6.897,6,6,6.897,6,8 s0.897,2,2,2s2-0.897,2-2S9.103,6,8,6z"/><path d="M12,16H4c-2.056,0-4-1.944-4-4V4c0-2.056,1.944-4,4-4h8c2.056,0,4,1.944,4,4v8C16,14.056,14.056,16,12,16z M4,2C3.065,2,2,3.065,2,4v8c0,0.953,1.047,2,2,2h8c0.935,0,2-1.065,2-2V4c0-0.935-1.065-2-2-2H4z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="currentColor"><title>Mastodon</title><path d="M14.943 3.935c-.215-1.591-1.612-2.845-3.268-3.088-.28-.041-1.338-.19-3.79-.19h-.019c-2.453 0-2.979.148-3.258.19-1.61.236-3.08 1.363-3.437 2.973-.172.793-.19 1.672-.158 2.478.045 1.157.054 2.311.16 3.463.073.765.2 1.524.382 2.27.339 1.38 1.711 2.53 3.056 2.998 1.44.488 2.988.57 4.472.234.163-.038.325-.081.484-.131.36-.114.783-.241 1.093-.465a.036.036 0 0 0 .015-.027v-1.116a.033.033 0 0 0-.041-.031c-.951.225-1.925.338-2.902.336-1.682 0-2.134-.792-2.264-1.122a3.463 3.463 0 0 1-.196-.884.032.032 0 0 1 .04-.033c.935.224 1.893.337 2.855.336.231 0 .461 0 .693-.006.967-.027 1.986-.076 2.938-.26l.067-.015c1.501-.286 2.93-1.184 3.075-3.458.005-.09.018-.938.018-1.03.001-.316.103-2.24-.015-3.422Zm-2.31 5.674h-1.578V5.772c0-.808-.339-1.22-1.028-1.22-.758 0-1.138.488-1.138 1.45v2.1H7.32v-2.1c0-.962-.38-1.45-1.138-1.45-.686 0-1.029.412-1.03 1.22v3.837H3.577V5.656c0-.808.208-1.45.623-1.926.429-.474.991-.718 1.689-.718.808 0 1.418.308 1.825.924l.393.655.393-.655c.407-.616 1.017-.924 1.823-.924.698 0 1.26.244 1.69.718.415.475.623 1.117.623 1.926l-.002 3.953Z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="currentColor"><title>YouTube</title><path d="M15.8 4.8c-.2-1.3-.8-2.2-2.2-2.4C11.4 2 8 2 8 2s-3.4 0-5.6.4C1 2.6.3 3.5.2 4.8 0 6.1 0 8 0 8s0 1.9.2 3.2c.2 1.3.8 2.2 2.2 2.4C4.6 14 8 14 8 14s3.4 0 5.6-.4c1.4-.3 2-1.1 2.2-2.4C16 9.9 16 8 16 8s0-1.9-.2-3.2zM6 11V5l5 3-5 3z"/></svg>
!function(e){"function"==typeof define&&define.amd?define(e):e()}((function(){"use strict";!function(){const e=new IntersectionObserver((t=>{t.forEach((t=>{t.isIntersecting&&(t.target.classList.add("in"),e.unobserve(t.target))}))}),{threshold:.15,rootMargin:"0px 0px -10% 0px"});function t(e){if(!e)return;const t=document.documentElement;null!=e.grain&&t.style.setProperty("--grain-opacity",e.grain),null!=e.effects&&(t.dataset.effects=e.effects?"on":"off"),e.mode&&(t.dataset.mode=e.mode)}document.addEventListener("DOMContentLoaded",(()=>{document.querySelectorAll(".reveal").forEach((t=>e.observe(t))),function(){const e=document.querySelector(".progress");if(!e)return;const t=()=>{const t=document.documentElement,n=t.scrollTop,o=t.scrollHeight-t.clientHeight;e.style.width=o>0?n/o*100+"%":"0%"};window.addEventListener("scroll",t,{passive:!0}),t()}(),function(){const e=document.querySelectorAll("[data-parallax]");if(!e.length)return;const t=()=>{e.forEach((e=>{const t=parseFloat(e.dataset.parallax)||.4,n=e.closest(".pinned-section");if(n){const o=n.getBoundingClientRect(),s=n.offsetHeight-window.innerHeight;if(s<=0)return;const c=(Math.max(0,Math.min(1,-o.top/s))-.5)*t*400;e.style.transform=`translate3d(0, ${c}px, 0)`}else{const n=-e.getBoundingClientRect().top*t;e.style.transform=`translate3d(0, ${n}px, 0)`}}))};window.addEventListener("scroll",t,{passive:!0}),t()}(),function(){const e=document.querySelector("[data-typewriter]");if(!e)return;const t=e.textContent.trim();e.innerHTML='<span class="typed"></span><span class="typed-cursor">&nbsp;</span>';const n=e.querySelector(".typed");let o=0;const s=()=>{o<=t.length?(n.textContent=t.slice(0,o),o++,setTimeout(s,55)):setTimeout((()=>{const t=e.querySelector(".typed-cursor");t&&(t.style.opacity="0")}),1500)};setTimeout(s,600)}(),function(){const e=document.querySelector(".menu-btn"),t=document.querySelector(".menu-overlay"),n=document.querySelector(".menu-close");if(!e||!t)return;const o=()=>{t.classList.remove("open"),document.body.style.overflow=""};e.addEventListener("click",(()=>{t.classList.add("open"),document.body.style.overflow="hidden"})),n&&n.addEventListener("click",o),document.addEventListener("keydown",(e=>{"Escape"===e.key&&o()})),t.addEventListener("click",(e=>{e.target===t&&o()}))}(),function(){const e=document.querySelector(".menu-filter"),t=document.querySelector(".menu-list");if(!e||!t)return;let n=t.querySelector(".menu-empty");n||(n=document.createElement("div"),n.className="menu-empty",n.textContent="No chapters match.",t.appendChild(n)),e.addEventListener("input",(()=>{const n=e.value.trim().toLowerCase();let o=!1;t.querySelectorAll(".menu-chapters li").forEach((e=>{const t=e.textContent.toLowerCase(),s=!n||t.includes(n);e.classList.toggle("hidden",!s),s&&(o=!0)})),t.querySelectorAll(".menu-part").forEach((e=>{const t=e.querySelectorAll(".menu-chapters li:not(.hidden)").length;e.style.display=t?"":"none"})),t.classList.toggle("is-empty",!o)}))}(),function(){window.addEventListener("message",(e=>{const n=e.data;n&&"object"==typeof n&&"__re_tweaks_apply"===n.type&&t(n.tweaks)}));try{const e=localStorage.getItem("re_tweaks");e&&t(JSON.parse(e))}catch(e){}}()}))}()})); !function(e){"function"==typeof define&&define.amd?define(e):e()}((function(){"use strict";!function(){const e=new IntersectionObserver((t=>{t.forEach((t=>{t.isIntersecting&&(t.target.classList.add("in"),e.unobserve(t.target))}))}),{threshold:.15,rootMargin:"0px 0px -10% 0px"});document.addEventListener("DOMContentLoaded",(()=>{document.querySelectorAll(".reveal").forEach((t=>e.observe(t))),function(){const e=document.querySelector(".progress");if(!e)return;const t=()=>{const t=document.documentElement,n=t.scrollTop,o=t.scrollHeight-t.clientHeight;e.style.width=o>0?n/o*100+"%":"0%"};window.addEventListener("scroll",t,{passive:!0}),t()}(),function(){const e=document.querySelectorAll("[data-parallax]");if(!e.length)return;const t=()=>{e.forEach((e=>{const t=parseFloat(e.dataset.parallax)||.4,n=e.closest(".pinned-text-section");if(n){const t=n.getBoundingClientRect(),o=n.offsetHeight-window.innerHeight;if(o<=0)return;const s=Math.max(0,Math.min(1,-t.top/o));e.style.backgroundPosition=`center ${(100*s).toFixed(2)}%`}else{const n=e.getBoundingClientRect();e.style.transform=`translate3d(0, ${-n.top*t}px, 0)`}}))};window.addEventListener("scroll",t,{passive:!0}),t()}(),function(){const e=document.querySelector("[data-typewriter]");if(!e)return;const t=e.textContent.trim();e.innerHTML='<span class="typed"></span><span class="typed-cursor">&nbsp;</span>';const n=e.querySelector(".typed");let o=0;const s=()=>{o<=t.length?(n.textContent=t.slice(0,o),o++,setTimeout(s,55)):setTimeout((()=>{const t=e.querySelector(".typed-cursor");t&&(t.style.opacity="0")}),1500)};setTimeout(s,600)}(),function(){const e=document.querySelector(".menu-btn"),t=document.querySelector(".menu-overlay"),n=document.querySelector(".menu-close");if(!e||!t)return;const o=()=>{t.classList.remove("open"),document.body.style.overflow=""};e.addEventListener("click",(()=>{t.classList.add("open"),document.body.style.overflow="hidden"})),n&&n.addEventListener("click",o),document.addEventListener("keydown",(e=>{"Escape"===e.key&&o()})),t.addEventListener("click",(e=>{e.target===t&&o()}))}(),function(){const e=document.querySelector(".menu-filter"),t=document.querySelector(".menu-list");if(!e||!t)return;let n=t.querySelector(".menu-empty");n||(n=document.createElement("div"),n.className="menu-empty",n.textContent="No chapters match.",t.appendChild(n)),e.addEventListener("input",(()=>{const n=e.value.trim().toLowerCase();let o=!1;t.querySelectorAll(".menu-chapters li").forEach((e=>{const t=e.textContent.toLowerCase(),s=!n||t.includes(n);e.classList.toggle("hidden",!s),s&&(o=!0)})),t.querySelectorAll(".menu-part").forEach((e=>{const t=e.querySelectorAll(".menu-chapters li:not(.hidden)").length;e.style.display=t?"":"none"})),t.classList.toggle("is-empty",!o)}))}()}))}()}));
//# sourceMappingURL=shared.js.map //# sourceMappingURL=shared.js.map
\ No newline at end of file
This diff is collapsed.
// Tweaks app — adds an in-page panel for grain/effects/mode controls.
// Loaded on every page after React + the tweaks-panel starter.
const RE_DEFAULTS = /*EDITMODE-BEGIN*/{
"grain": 0.18,
"effects": true,
"mode": "dark"
}/*EDITMODE-END*/;
function applyAll(t) {
const root = document.documentElement;
if (t.grain != null) root.style.setProperty('--grain-opacity', t.grain);
root.dataset.effects = t.effects ? 'on' : 'off';
root.dataset.mode = t.mode || 'dark';
try { localStorage.setItem('re_tweaks', JSON.stringify(t)); } catch(e) {}
}
// Apply persisted tweaks immediately so the page doesn't flash defaults
try {
const saved = JSON.parse(localStorage.getItem('re_tweaks') || 'null');
if (saved) applyAll({ ...RE_DEFAULTS, ...saved });
else applyAll(RE_DEFAULTS);
} catch(e) { applyAll(RE_DEFAULTS); }
function ReTweaks() {
const [tweaks, setTweak] = useTweaks(RE_DEFAULTS);
React.useEffect(() => { applyAll(tweaks); }, [tweaks]);
return (
<TweaksPanel title="Tweaks">
<TweakSection title="Atmosphere">
<TweakSlider
label="Brush / grain density"
value={tweaks.grain}
min={0} max={0.45} step={0.01}
onChange={(v) => setTweak('grain', v)}
/>
<TweakToggle
label="Scroll & ambient effects"
value={tweaks.effects}
onChange={(v) => setTweak('effects', v)}
/>
</TweakSection>
<TweakSection title="Mode">
<TweakRadio
label="Tone"
value={tweaks.mode}
options={[
{ value: 'dark', label: 'Dark' },
{ value: 'dim', label: 'Dim' },
]}
onChange={(v) => setTweak('mode', v)}
/>
</TweakSection>
</TweaksPanel>
);
}
const reTweaksRoot = document.createElement('div');
reTweaksRoot.id = 're-tweaks-root';
document.body.appendChild(reTweaksRoot);
ReactDOM.createRoot(reTweaksRoot).render(<ReTweaks />);
This diff is collapsed.
This diff is collapsed.
name: Pinned Image
icon: image
preview: fields
fields:
image:
label: Background Image
type: files
max: 1
required: true
text:
label: Scrolling Text
type: writer
name: Pinned Section name: Pinned Text
icon: layers icon: layers
preview: fields preview: fields
fields: fields:
......
...@@ -4,5 +4,5 @@ preview: fields ...@@ -4,5 +4,5 @@ preview: fields
fields: fields:
text: text:
label: Quote Text label: Quote Text
type: textarea type: writer
required: true required: true
...@@ -49,7 +49,8 @@ tabs: ...@@ -49,7 +49,8 @@ tabs:
- pull - pull
- note - note
- texture - texture
- pinned - pinned-text
- pinned-image
seo: seo:
label: SEO label: SEO
......
<?php
/**
* Collections help with keeping your code DRY
* if you need to reuse the same set up pages, files or users in multiple places across your site.
*
* More about collections:
* https://getkirby.com/docs/guide/templates/collections
*/
return function () {
return page('notes')
->children()
->listed()
->sortBy('date', 'desc');
};
<?php
/**
* Controllers allow you to separate the logic of your templates from your markup.
* This is especially useful for complex logic, but also in general to keep your templates clean.
*
* In this example, we define the `$gallery` variable which is passed to the template
*
* More about controllers:
* https://getkirby.com/docs/guide/templates/controllers
*/
return function ($page) {
$gallery = $page->images()->sortBy('sort', 'filename');
return [
'gallery' => $gallery
];
};
<?php
/**
* Controllers allow you to separate the logic of your templates from your markup.
* This is especially useful for complex logic, but also in general to keep your templates clean.
*
* In this example, we split the tags from the tags field to create a nice tag list
*
* More about controllers:
* https://getkirby.com/docs/guide/templates/controllers
*/
return function ($page) {
return [
'tags' => $page->tags()->split(','),
];
};
<?php
/**
* Controllers allow you to separate the logic of your templates from your markup.
* This is especially useful for complex logic, but also in general to keep your templates clean.
*
* In this example, we handle tag filtering and paginating notes in the controller,
* before we pass the currently active tag and the notes to the template.
*
* More about controllers:
* https://getkirby.com/docs/guide/templates/controllers
*/
return function ($page) {
/**
* We use the collection helper to fetch the notes collection defined in `/site/collections/notes.php`
*
* More about collections:
* https://getkirby.com/docs/guide/templates/collections
*/
$notes = collection('notes');
$tag = param('tag');
if (empty($tag) === false) {
$notes = $notes->filterBy('tags', $tag, ',');
}
return [
'tag' => $tag,
'notes' => $notes->paginate(6)
];
};
<?php
/**
* Page models extend Kirby's default page object.
*
* In page models you can define methods that are then available
* everywhere in Kirby where you call a page of the extended type.
*
* In this example, we define the cover method that either returns
* an image selected in the cover field or the first image in the folder.
*
* You can see the method in use in the `home.php` and `photography.php` templates
* and in the `site/blueprints/sections/albums.yml` image query
*
* More about models: https://getkirby.com/docs/guide/templates/page-models
*/
class AlbumPage extends Page
{
public function cover()
{
return $this->content()->get('cover')->toFile() ?? $this->image();
}
}
<?php
/**
* Page models extend Kirby's default page object.
*
* In page models you can define methods that are then available
* everywhere in Kirby where you call a page of the extended type.
*
* In this example, we define the cover method that either returns
* an image selected in the cover field or the first image in the folder.
*
* You can see the method in use in the `note.php` snippet.
* and in the `site/blueprints/sections/notes.yml` image query
*
* We also define a custom date handler here, which keeps date formatting
* for the published date consistent in templates, snippets and blueprints.
*
* More about models: https://getkirby.com/docs/guide/templates/page-models
*/
class NotePage extends Page
{
public function cover()
{
return $this->content()->cover()->toFile() ?? $this->image();
}
public function published($format = null)
{
return parent::date()->toDate($format ?? 'd M, Y');
}
}
<?php
$bg = $block->image()->toFile();
?>
<section class="pinned-image-section">
<div class="pinned-image-stage">
<?php if ($bg): ?>
<div class="pinned-image-bg" style="background-image: url('<?= $bg->url() ?>')"></div>
<?php endif ?>
<div class="pinned-image-overlay"></div>
</div>
<?php if ($block->text()->isNotEmpty()): ?>
<div class="pinned-image-content">
<?= $block->text() ?>
</div>
<?php endif ?>
</section>
<?php <?php
/**
* Block snippet: pinned
* Renders a sticky full-viewport pinned scroll section.
*/
$bg = $block->image()->toFile(); $bg = $block->image()->toFile();
?> ?>
<section class="pinned-section"> <section class="pinned-text-section">
<div class="pinned-stage"> <div class="pinned-text-stage">
<div class="pinned-bg<?= $bg ? '' : ' t1' ?>" data-parallax="0.2"<?= $bg ? ' style="background-image: url(\'' . $bg->url() . '\')"' : '' ?>></div> <div class="pinned-text-bg<?= $bg ? '' : ' t1' ?>" data-parallax="1"<?= $bg ? ' style="background-image: url(\'' . $bg->url() . '\')"' : '' ?>></div>
<div class="pinned-overlay"></div> <div class="pinned-text-overlay"></div>
<div class="pinned-text"> <div class="pinned-text-copy">
<h2><?= $block->heading() ?></h2> <h2><?= $block->heading() ?></h2>
<?php if ($block->body()->isNotEmpty()): ?> <?php if ($block->body()->isNotEmpty()): ?>
<?= $block->body() ?> <?= $block->body() ?>
......
<?php
/*
Snippets are a great way to store code snippets for reuse
or to keep your templates clean.
This footer snippet is reused in all templates.
More about snippets:
https://getkirby.com/docs/guide/templates/snippets
*/
?>
</main>
<footer class="footer">
<div class="grid">
<div class="column" style="--columns: 8">
<h2><a href="https://getkirby.com">Made with Kirby</a></h2>
<p>
Kirby: the file-based CMS that adapts to any project, loved by developers and editors alike
</p>
</div>
<div class="column" style="--columns: 2">
<h2>Pages</h2>
<ul>
<?php foreach ($site->children()->listed() as $example): ?>
<li><a href="<?= $example->url() ?>"><?= $example->title()->esc() ?></a></li>
<?php endforeach ?>
</ul>
</div>
<div class="column" style="--columns: 2">
<h2>Kirby</h2>
<ul>
<li><a href="https://getkirby.com">Website</a></li>
<li><a href="https://getkirby.com/docs">Docs</a></li>
<li><a href="https://forum.getkirby.com">Forum</a></li>
<li><a href="https://chat.getkirby.com">Chat</a></li>
<li><a href="https://github.com/getkirby">GitHub</a></li>
</ul>
</div>
</div>
</footer>
<?= js([
'assets/js/prism.js',
'assets/js/lightbox.js',
'assets/js/index.js',
'@auto'
]) ?>
</body>
</html>
<?php
$attrs = attr([
'data-lightbox' => $lightbox ?? false,
'href' => $href ?? $src,
]);
?>
<a <?= $attrs ?>>
<img
src="<?= esc($src, 'attr') ?>"
alt="<?= esc($alt, 'attr') ?>"
style="
aspect-ratio: <?= $ratio ?? 'auto' ?>;
object-fit: <?= ($contain ?? false) ? 'contain' : 'cover' ?>
"
>
</a>
<?php
/*
Snippets are a great way to store code snippets for reuse
or to keep your templates clean.
This intro snippet is reused in multiple templates.
While it does not contain much code, it helps to keep your
code DRY and thus facilitate maintenance when you have
to make changes.
More about snippets:
https://getkirby.com/docs/guide/templates/snippets
*/
?>
<header class="h1">
<h1><?= $page->headline()->or($page->title())->esc() ?></h1>
<?php if ($page->subheadline()->isNotEmpty()): ?>
<p class="color-grey"><?= $page->subheadline()->esc() ?></p>
<?php endif ?>
</header>
<?php
/*
Snippets are a great way to store code snippets for reuse
or to keep your templates clean.
The note snippet renders an excerpt of a blog article.
More about snippets:
https://getkirby.com/docs/guide/templates/snippets
*/
?>
<article class="note-excerpt">
<a href="<?= $note->url() ?>">
<header>
<figure class="img" style="--w: 16; --h:9">
<?php if ($cover = $note->cover()): ?>
<img src="<?= $cover->crop(320, 180)->url() ?>" alt="<?= $cover->alt()->esc() ?>">
<?php endif ?>
</figure>
<h2 class="note-excerpt-title"><?= $note->title()->esc() ?></h2>
<time class="note-excerpt-date" datetime="<?= $note->published('c') ?>"><?= $note->published() ?></time>
</header>
<?php if (($excerpt ?? true) !== false): ?>
<div class="note-excerpt-text">
<?= $note->text()->toBlocks()->excerpt(280) ?>
</div>
<?php endif ?>
</a>
</article>
<?php
/*
Snippets are a great way to store code snippets for reuse
or to keep your templates clean.
The pagination snippet renders prev/next links in the
blog, when articles spread across multiple pages
More about snippets:
https://getkirby.com/docs/guide/templates/snippets
*/
?>
<?php if ($pagination->hasPages()): ?>
<nav class="pagination">
<?php if ($pagination->hasPrevPage()): ?>
<a class="pagination-prev" href="<?= $pagination->prevPageUrl() ?>">&larr;</a>
<?php else: ?>
<span class="pagination-prev">&larr;</span>
<?php endif ?>
<?php if ($pagination->hasNextPage()): ?>
<a class="pagination-next" href="<?= $pagination->nextPageUrl() ?>">&rarr;</a>
<?php else: ?>
<span class="pagination-next">&rarr;</span>
<?php endif ?>
</nav>
<?php endif ?>
<?php
/*
Snippets are a great way to store code snippets for reuse
or to keep your templates clean.
The prevnext snippet renders the nice "keep on reading"
section below each article in the blog, to jump between
articles. It reuses the note snippet to render a full
excerpt of the article.
More about snippets:
https://getkirby.com/docs/guide/templates/snippets
*/
?>
<nav class="blog-prevnext">
<h2 class="h2">Keep on reading</h2>
<div class="autogrid" style="--gutter: 1.5rem">
<?php if ($prev = $page->prevListed()): ?>
<?php snippet('note', ['note' => $prev, 'excerpt' => false]) ?>
<?php endif ?>
<?php if ($next = $page->nextListed()): ?>
<?php snippet('note', ['note' => $next, 'excerpt' => false]) ?>
<?php endif ?>
</div>
</nav>
<?php <?php
/** /**
* Snippet: scripts * Snippet: scripts
* Includes shared JS and the React tweaks panel. * Includes shared JS.
* Params: none
*/ */
?> ?>
<?= js('assets/js/shared.js') ?> <?= js('assets/js/shared.js') ?>
<script src="https://unpkg.com/react@18.3.1/umd/react.development.js" integrity="sha384-hD6/rw4ppMLGNu3tX5cjIb+uRZ7UkRJ6BPkLpg4hAu/6onKUg4lLsHAs9EBPT82L" crossorigin="anonymous"></script>
<script src="https://unpkg.com/react-dom@18.3.1/umd/react-dom.development.js" integrity="sha384-u6aeetuaXnQ38mYT8rp6sbXaQe3NL9t+IBXmnYxwkUI2Hw4bsp2Wvmx4yRQF1uAm" crossorigin="anonymous"></script>
<script src="https://unpkg.com/@babel/standalone@7.29.0/babel.min.js" integrity="sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y" crossorigin="anonymous"></script>
<script type="text/babel" src="<?= url('assets/js/tweaks-panel.js') ?>"></script>
<script type="text/babel" src="<?= url('assets/js/tweaks-app.js') ?>"></script>
<?php
/*
Snippets are a great way to store code snippets for reuse
or to keep your templates clean.
In this snippet the svg() helper is a great way to embed SVG
code directly in your HTML. Pass the path to your SVG
file to load it.
More about snippets:
https://getkirby.com/docs/guide/templates/snippets
*/
?>
<span class="social">
<a href="https://mastodon.social/@getkirby" aria-label="Follow us on Mastodon">
<?= svg('assets/icons/mastodon.svg') ?>
</a>
<a href="https://instagram.com/getkirby" aria-label="Follow us on Instagram">
<?= svg('assets/icons/instagram.svg') ?>
</a>
<a href="https://youtube.com/kirbycasts" aria-label="Watch our videos on YouTube">
<?= svg('assets/icons/youtube.svg') ?>
</a>
<a href="https://chat.getkirby.com" aria-label="Chat with us on Discord">
<?= svg('assets/icons/discord.svg') ?>
</a>
</span>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment