redesign site as "case file" theme

- new paper/ink palette with single red accent, replacing catppuccin
- self-hosted IBM Plex Serif (display) + Source Serif 4 (body), drop Outfit
- rebuilt homepage masthead, numbered post index, navbar with active states
- switch syntax highlighting + utterances to gruvbox, synced via postMessage
- remove terminal/404 easter egg chrome, clean up remaining inline styles
- fix stray syntax.css link causing a 404
This commit is contained in:
2026-07-16 12:28:34 +03:00
parent 57462869ec
commit a51671d7e4
62 changed files with 2116 additions and 2806 deletions
+3 -1
View File
@@ -1,6 +1,8 @@
{% if config.extra.enable_comments and config.extra.utterances_repo and page %}
{% if page.extra.comments is not defined or page.extra.comments %}
<div class="comments" id="comments" style="margin-top: 4rem;">
<div class="comments" id="comments"
data-utterances-theme-dark="{{ config.extra.utterances_theme | default(value="github-dark") }}"
data-utterances-theme-light="{{ config.extra.utterances_theme_light | default(value="github-light") }}">
<script src="https://utteranc.es/client.js"
repo="{{ config.extra.utterances_repo }}"
issue-term="pathname"
+4 -2
View File
@@ -1,7 +1,7 @@
<header class="site-header">
<nav class="nav-container">
<a href="{{ get_url(path="") }}" class="brand-link">
<span class="brand-text">{{ config.title | default(value="pwna4profit") }}</span>
<span class="brand-text">{{ config.title }}</span>
</a>
<div class="nav-right">
@@ -9,7 +9,9 @@
<div id="nav-links" class="nav-links">
{% if config.extra.menu %}
{% for item in config.extra.menu %}
<a href="{{ get_url(path=item.url) }}" class="nav-item">{{ item.name }}</a>
{% set current = current_path | default(value="") %}
{% set is_active = item.match and current is starting_with(item.match) %}
<a href="{{ get_url(path=item.url) }}" class="nav-item{% if is_active %} is-active{% endif %}"{% if is_active %} aria-current="page"{% endif %}>{{ item.name }}</a>
{% endfor %}
{% endif %}
</div>
+30 -62
View File
@@ -1,69 +1,37 @@
<article
class="feed-item"
style="border-bottom: 1px dashed var(--border-color); padding-bottom: 2rem"
>
<h2 class="item-title" style="font-size: 1.25rem; margin-bottom: 0.5rem; font-weight: 600">
<a href="{{ page.permalink }}">{{ page.title }}</a>
</h2>
<article class="feed-item card hover-scale">
<span class="item-index">{% if loop.index < 10 %}0{{ loop.index }}{% else %}{{ loop.index }}{% endif %}</span>
<div
class="item-meta"
style="
font-size: 0.85rem;
color: var(--text-muted);
margin-bottom: 1rem;
display: flex;
align-items: center;
gap: 0.25rem;
"
>
<span>{{ page.date | date(format="%Y-%m-%d") }}</span>
{% if page.reading_time %}
<span style="opacity: 0.5;">&middot;</span>
<span>{{ page.reading_time }} min read</span>
{% endif %}
</div>
<div class="item-body">
<h2 class="item-title">
<a href="{{ page.permalink }}">{{ page.title }}</a>
</h2>
<div
class="item-snippet"
style="font-size: 0.95rem; color: var(--text-color); margin-bottom: 1rem; opacity: 0.9"
>
{% if page.description %}
<p style="margin: 0">{{ page.description }}</p>
{% else %}
<p style="margin: 0">{{ page.content | striptags | truncate(length=120) | safe }}</p>
{% endif %}
</div>
<div class="item-meta">
<span>{{ page.date | date(format="%Y-%m-%d") }}</span>
{% if page.reading_time %}
<span class="item-meta-sep">&middot;</span>
<span>{{ page.reading_time }} min read</span>
{% endif %}
</div>
<div
class="item-footer"
style="display: flex; justify-content: space-between; align-items: center; font-size: 0.85rem"
>
<a href="{{ page.permalink }}" style="color: var(--accent-color)">Read more...</a>
<div class="item-snippet">
{% if page.description %}
<p>{{ page.description }}</p>
{% else %}
<p>{{ page.content | striptags | truncate(length=120) | safe }}</p>
{% endif %}
</div>
{% if page.taxonomies.tags %}
<div
class="item-tags"
style="display: flex; align-items: center; gap: 0.5rem; color: var(--text-muted)"
>
<svg
viewBox="0 0 24 24"
width="14"
height="14"
stroke="currentColor"
stroke-width="2"
fill="none"
>
<path
d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z"
></path>
<line x1="7" y1="7" x2="7.01" y2="7"></line>
</svg>
<span>
{% for tag in page.taxonomies.tags %} {{ tag }}{% if not loop.last %}, {% endif %} {% endfor
%}
</span>
<div class="item-footer">
<a href="{{ page.permalink }}" class="item-readmore">Read more<span class="readmore-arrow">→</span></a>
{% if page.taxonomies.tags %}
<div class="item-tags">
{% for tag in page.taxonomies.tags %}
<a href="{{ get_taxonomy_url(kind="tags", name=tag) }}" class="tag">{{ tag }}</a>
{% endfor %}
</div>
{% endif %}
</div>
{% endif %}
</div>
</article>
+13 -42
View File
@@ -1,45 +1,16 @@
{% if config.extra.show_profile %}
<div class="profile-section" style="display: flex; flex-direction: column; align-items: center; justify-content: center; margin-bottom: 4rem; text-align: center;">
{% if config.extra.avatar_url %}
<div class="avatar" style="width: 100px; height: 100px; border-radius: 50%; overflow: hidden; margin-bottom: 1rem; background-color: #1a1a1a; display: flex; align-items: center; justify-content: center;">
<img src="{{ config.extra.avatar_url }}" alt="Avatar" loading="lazy" decoding="async" style="width: 100%; height: 100%; object-fit: cover;" onerror="this.src='data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 24 24\' fill=\'none\' stroke=\'%23f9fafb\' stroke-width=\'2\' stroke-linecap=\'round\' stroke-linejoin=\'round\'><path d=\'M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2\'></path><circle cx=\'12\' cy=\'7\' r=\'4\'></circle></svg>'"/>
</div>
{% endif %}
{% if config.extra.profile_subtitle %}
<p class="profile-subtitle" style="color: var(--text-muted); font-size: 1rem; margin-bottom: 1rem;">{{ config.extra.profile_subtitle }}</p>
{% endif %}
<div class="social-links" style="display: flex; gap: 1rem; color: var(--text-muted);">
{% if config.extra.github_url %}
<a href="{{ config.extra.github_url }}" style="color: inherit;" class="hover-scale" aria-label="GitHub">
<svg viewBox="0 0 24 24" width="20" height="20" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg>
</a>
{% endif %}
{% if config.extra.twitter_url %}
<a href="{{ config.extra.twitter_url }}" style="color: inherit;" class="hover-scale" aria-label="Twitter">
<svg viewBox="0 0 24 24" width="20" height="20" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><path d="M23 3a10.9 10.9 0 0 1-3.14 1.53 4.48 4.48 0 0 0-7.86 3v1A10.66 10.66 0 0 1 3 4s-4 9 5 13a11.64 11.64 0 0 1-7 2c9 5 20 0 20-11.5a4.5 4.5 0 0 0-.08-.83A7.72 7.72 0 0 0 23 3z"></path></svg>
</a>
{% endif %}
{% if config.extra.youtube_url %}
<a href="{{ config.extra.youtube_url }}" style="color: inherit;" class="hover-scale" aria-label="YouTube">
<svg viewBox="0 0 24 24" width="20" height="20" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><path d="M22.54 6.42a2.78 2.78 0 0 0-1.94-2C18.88 4 12 4 12 4s-6.88 0-8.6.42a2.78 2.78 0 0 0-1.94 2C1 8.13 1 12 1 12s0 3.87.46 5.58a2.78 2.78 0 0 0 1.94 2C5.12 20 12 20 12 20s6.88 0 8.6-.42a2.78 2.78 0 0 0 1.94-2C23 15.87 23 12 23 12s0-3.87-.46-5.58z"></path><polygon points="9.75 15.02 15.5 12 9.75 8.98 9.75 15.02"></polygon></svg>
</a>
{% endif %}
{% if config.extra.linkedin_url %}
<a href="{{ config.extra.linkedin_url }}" style="color: inherit;" class="hover-scale" aria-label="LinkedIn">
<svg viewBox="0 0 24 24" width="20" height="20" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><path d="M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z"></path><rect x="2" y="9" width="4" height="12"></rect><circle cx="4" cy="4" r="2"></circle></svg>
</a>
{% endif %}
{% if config.extra.email %}
<a href="mailto:{{ config.extra.email }}" style="color: inherit;" class="hover-scale" aria-label="Email">
<svg viewBox="0 0 24 24" width="20" height="20" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"></path><polyline points="22,6 12,13 2,6"></polyline></svg>
</a>
{% endif %}
{% if config.extra.show_rss_link %}
<a href="{{ get_url(path="rss.xml") }}" style="color: inherit;" class="hover-scale" aria-label="RSS">
<svg viewBox="0 0 24 24" width="20" height="20" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><path d="M4 11a9 9 0 0 1 9 9"></path><path d="M4 4a16 16 0 0 1 16 16"></path><circle cx="5" cy="19" r="1"></circle></svg>
</a>
{% endif %}
</div>
<div class="masthead">
<p class="masthead-kicker">{{ config.extra.author | default(value="andwati") }}{% if config.extra.profile_subtitle %} — {{ config.extra.profile_subtitle }}{% endif %}</p>
<h1 class="hero-title masthead-title">{{ config.title }}</h1>
<p class="hero-subtitle">{{ config.description }}</p>
<div class="masthead-links">
{% if config.extra.github_url %}<a href="{{ config.extra.github_url }}" target="_blank" rel="noopener noreferrer">GitHub</a>{% endif %}
{% if config.extra.twitter_url %}<a href="{{ config.extra.twitter_url }}" target="_blank" rel="noopener noreferrer">Twitter</a>{% endif %}
{% if config.extra.youtube_url %}<a href="{{ config.extra.youtube_url }}" target="_blank" rel="noopener noreferrer">YouTube</a>{% endif %}
{% if config.extra.linkedin_url %}<a href="{{ config.extra.linkedin_url }}" target="_blank" rel="noopener noreferrer">LinkedIn</a>{% endif %}
{% if config.extra.email %}<a href="mailto:{{ config.extra.email }}">Email</a>{% endif %}
{% if config.extra.show_rss_link %}<a href="{{ get_url(path="rss.xml") }}">RSS</a>{% endif %}
</div>
</div>
{% endif %}