206 lines
12 KiB
HTML
206 lines
12 KiB
HTML
{% extends "base.html" %}
|
|
{% from "macros/tag-links.html" import tag_links with context %}
|
|
{% from "macros/feed-links.html" import feed_autodiscovery, visible_feed_links with context %}
|
|
{% block feed_head %}
|
|
{% if this._id in ['articles', 'blog'] %}
|
|
{% set feed_base = 'https://www.labyricorn.com/' ~ this._id ~ '/' %}
|
|
{{ feed_autodiscovery(feed_base ~ 'feed.xml', feed_base ~ 'rss.xml', 'Labyricorn - ' ~ this.title) }}
|
|
{% endif %}
|
|
{% endblock %}
|
|
{% block body %}
|
|
{% set filter_tags = namespace(values=[]) %}
|
|
{% if this._id in ['blog', 'articles', 'projects'] %}
|
|
{% for item in this.children %}
|
|
{% set item_tags = item.taxonomy_tags if item._model == 'project' else item.tags %}
|
|
{% for tag in item_tags %}
|
|
{% if tag not in filter_tags.values %}{% set filter_tags.values = filter_tags.values + [tag] %}{% endif %}
|
|
{% endfor %}
|
|
{% endfor %}
|
|
{% endif %}
|
|
{% if this._id in ['blog', 'articles', 'projects'] %}
|
|
{% set hero_copy = {
|
|
'projects': {
|
|
'eyebrow': 'System Architecture',
|
|
'slash': 'Built to solve',
|
|
'intro': 'Systems, tools, experiments, and working software engineered from idea through implementation.',
|
|
'chips': [('Modular', 'architecture'), ('Active', 'development'), ('Documented', 'progress')]
|
|
},
|
|
'articles': {
|
|
'eyebrow': 'Intelligence Briefing',
|
|
'slash': 'Analysis & Insight',
|
|
'intro': 'In-depth analysis, real context, and actionable insight across technology, systems, security, and the work behind the work.',
|
|
'chips': [('Curated', 'research'), ('Verified', 'context'), ('Published', 'analysis')]
|
|
},
|
|
'blog': {
|
|
'eyebrow': 'Transmission / Live Feed',
|
|
'slash': 'Signal',
|
|
'intro': 'Raw thoughts, quick observations, experiments, and ideas transmitted before they become polished conclusions.',
|
|
'chips': [('Live', 'thoughts'), ('Direct', 'signal'), ('Unfiltered', 'notes')]
|
|
}
|
|
} %}
|
|
{% set hero = hero_copy[this._id] %}
|
|
<section class="section-hero section-hero--{{ this._id }}" data-section-hero aria-labelledby="{{ this._id }}-hero-title">
|
|
<span class="section-hero__corner section-hero__corner--tl" aria-hidden="true"></span>
|
|
<span class="section-hero__corner section-hero__corner--tr" aria-hidden="true"></span>
|
|
<span class="section-hero__corner section-hero__corner--bl" aria-hidden="true"></span>
|
|
<span class="section-hero__corner section-hero__corner--br" aria-hidden="true"></span>
|
|
{% if this._id == 'blog' %}<span class="section-hero__glitch-strip" aria-hidden="true"></span>{% endif %}
|
|
|
|
<div class="section-hero__content">
|
|
<div class="section-hero__copy">
|
|
<p class="section-hero__eyebrow">
|
|
{% if this._id == 'projects' %}
|
|
<span class="section-hero__pulse-dot" aria-hidden="true"></span>
|
|
{% elif this._id == 'articles' %}
|
|
<span class="section-hero__doc-icon" aria-hidden="true"></span>
|
|
{% else %}
|
|
<span class="section-hero__chat-icon" aria-hidden="true"></span>
|
|
{% endif %}
|
|
<span>{{ hero.eyebrow }}</span>
|
|
{% if this._id == 'blog' %}<span class="section-hero__live-dot" aria-hidden="true"></span>{% endif %}
|
|
</p>
|
|
<h1 id="{{ this._id }}-hero-title">{{ this.title }}</h1>
|
|
<p class="section-hero__slash" aria-hidden="true">// <span>{{ hero.slash }}</span></p>
|
|
<p class="section-hero__intro">{{ hero.intro }}</p>
|
|
<div class="section-hero__chips" aria-label="{{ this.title }} qualities">
|
|
{% for lead, rest in hero.chips %}<span><strong>{{ lead }}</strong> {{ rest }}</span>{% endfor %}
|
|
</div>
|
|
</div>
|
|
|
|
<div class="section-hero__visual" aria-hidden="true">
|
|
{% if this._id == 'projects' %}
|
|
<svg viewBox="0 0 500 220" preserveAspectRatio="none">
|
|
<path class="section-hero__trace-soft" d="M10 40 H110 V75 H180 V38 H260" />
|
|
<path class="section-hero__trace-soft" d="M20 170 H120 V145 H220 V190 H300" />
|
|
<path class="section-hero__trace-soft" d="M270 45 H350 V80 H470" />
|
|
<path class="section-hero__trace-soft" d="M245 155 H330 V125 H455" />
|
|
<path class="section-hero__trace" d="M40 105 H155 V100 H250 V70 H375" />
|
|
<path class="section-hero__trace" d="M85 185 H190 V140 H290 V165 H425" />
|
|
<path class="section-hero__packet" d="M40 105 H155 V100 H250 V70 H375" />
|
|
<path class="section-hero__packet section-hero__packet--alt" d="M85 185 H190 V140 H290 V165 H425" />
|
|
<circle class="section-hero__node" cx="40" cy="105" r="3" />
|
|
<circle class="section-hero__node" cx="155" cy="100" r="2.5" />
|
|
<circle class="section-hero__node" cx="250" cy="70" r="2.5" />
|
|
<circle class="section-hero__node" cx="375" cy="70" r="3" />
|
|
<circle class="section-hero__node" cx="85" cy="185" r="3" />
|
|
<circle class="section-hero__node" cx="290" cy="165" r="2.5" />
|
|
<circle class="section-hero__node" cx="425" cy="165" r="3" />
|
|
</svg>
|
|
{% elif this._id == 'articles' %}
|
|
<svg viewBox="0 0 520 210" preserveAspectRatio="none">
|
|
<path class="section-hero__trace-soft" d="M10 42 H125 V70 H205 V38 H290" />
|
|
<path class="section-hero__trace-soft" d="M25 170 H130 V142 H215 V188 H320" />
|
|
<path class="section-hero__trace-soft" d="M265 34 H345 V68 H500" />
|
|
<path class="section-hero__trace-soft" d="M255 148 H330 V118 H478" />
|
|
<path class="section-hero__trace" d="M35 106 H140 V102 H235 V72 H385" />
|
|
<path class="section-hero__trace" d="M82 184 H192 V141 H294 V164 H446" />
|
|
<path class="section-hero__packet" d="M35 106 H140 V102 H235 V72 H385" />
|
|
<path class="section-hero__packet section-hero__packet--alt" d="M82 184 H192 V141 H294 V164 H446" />
|
|
<circle class="section-hero__node" cx="35" cy="106" r="3" />
|
|
<circle class="section-hero__node" cx="140" cy="102" r="2.5" />
|
|
<circle class="section-hero__node" cx="235" cy="72" r="2.5" />
|
|
<circle class="section-hero__node" cx="385" cy="72" r="3" />
|
|
<circle class="section-hero__node" cx="82" cy="184" r="3" />
|
|
<circle class="section-hero__node" cx="294" cy="164" r="2.5" />
|
|
<circle class="section-hero__node" cx="446" cy="164" r="3" />
|
|
</svg>
|
|
{% else %}
|
|
<svg viewBox="0 0 520 210" preserveAspectRatio="none">
|
|
<path class="section-hero__trace-soft" d="M10 38 H110 V68 H200 V40 H290" />
|
|
<path class="section-hero__trace-soft" d="M28 170 H128 V145 H214 V188 H318" />
|
|
<path class="section-hero__trace-soft" d="M267 34 H354 V64 H500" />
|
|
<path class="section-hero__trace-soft" d="M258 150 H330 V118 H478" />
|
|
<path class="section-hero__trace" d="M34 105 H140 V100 H238 V72 H390" />
|
|
<path class="section-hero__trace" d="M84 184 H194 V141 H296 V164 H448" />
|
|
<path class="section-hero__packet" d="M34 105 H140 V100 H238 V72 H390" />
|
|
<path class="section-hero__packet section-hero__packet--alt" d="M84 184 H194 V141 H296 V164 H448" />
|
|
<circle class="section-hero__node" cx="34" cy="105" r="3" />
|
|
<circle class="section-hero__node" cx="140" cy="100" r="2.5" />
|
|
<circle class="section-hero__node" cx="238" cy="72" r="2.5" />
|
|
<circle class="section-hero__node" cx="390" cy="72" r="3" />
|
|
<circle class="section-hero__node" cx="84" cy="184" r="3" />
|
|
<circle class="section-hero__node" cx="296" cy="164" r="2.5" />
|
|
<circle class="section-hero__node" cx="448" cy="164" r="3" />
|
|
</svg>
|
|
{% endif %}
|
|
|
|
{% if this._id == 'projects' %}
|
|
<div class="section-hero__status-card">
|
|
<span class="section-hero__widget-label">Project Matrix</span>
|
|
<strong>Active</strong>
|
|
<span class="section-hero__bars"><i></i><i></i><i></i><i></i><i></i><i class="is-off"></i><i class="is-off"></i><i class="is-off"></i></span>
|
|
</div>
|
|
<p class="section-hero__signal-row section-hero__signal-row--stacked">Status bus // <b>Live</b><br>Devlog routing // enabled<br>Build signal // nominal</p>
|
|
{% elif this._id == 'articles' %}
|
|
<span class="section-hero__radar"></span>
|
|
<div class="section-hero__status-card">
|
|
<span class="section-hero__widget-label">Knowledge System</span>
|
|
<span class="section-hero__status-line"><span>Curated</span><b>Live</b></span>
|
|
<span class="section-hero__status-line"><span>Analyzed</span><b>Live</b></span>
|
|
<span class="section-hero__status-line"><span>Sourced</span><b>OK</b></span>
|
|
<span class="section-hero__status-line"><span>Published</span><b>Ready</b></span>
|
|
</div>
|
|
<p class="section-hero__signal-row"><span>Ref // <b>LBR-A01</b></span><span>Status // <b>Verified</b></span><span>Feed // <b>Active</b></span></p>
|
|
{% else %}
|
|
<span class="section-hero__signal-core"></span>
|
|
<div class="section-hero__status-card">
|
|
<span class="section-hero__widget-label">Transmission</span>
|
|
<span class="section-hero__status-line"><span>Source</span><b>Local</b></span>
|
|
<span class="section-hero__status-line"><span>Stream</span><b>Live</b></span>
|
|
<span class="section-hero__status-line"><span>Status</span><b>Open</b></span>
|
|
<span class="section-hero__status-line"><span>Integrity</span><b>Good</b></span>
|
|
</div>
|
|
<p class="section-hero__signal-row"><span>Feed // <b>Active</b></span><span>Mode // <b>Raw</b></span><span>Channel // <b>LBR-B01</b></span></p>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
</section>
|
|
{% else %}
|
|
<section class="hero compact">
|
|
<div class="shell narrow">
|
|
<p class="eyebrow">{{ this.eyebrow }}</p>
|
|
<h1>{{ this.summary }}</h1>
|
|
</div>
|
|
</section>
|
|
{% endif %}
|
|
<section class="activity-section">
|
|
<div class="shell">
|
|
<div class="section-heading">
|
|
<span>{{ this.title }}</span>
|
|
<span>
|
|
<span data-entry-count>{{ this.children.count() }} entries</span>
|
|
{% if this._id in ['articles', 'blog'] %}
|
|
{% set feed_base = 'https://www.labyricorn.com/' ~ this._id ~ '/' %}
|
|
· {{ visible_feed_links(feed_base ~ 'feed.xml', feed_base ~ 'rss.xml') }}
|
|
{% endif %}
|
|
</span>
|
|
</div>
|
|
{% if filter_tags.values %}
|
|
<div class="tag-filter" data-tag-filter aria-label="Filter {{ this.title }} by tag">
|
|
<button class="tag-filter-button is-active" type="button" data-tag-value="" aria-pressed="true">All</button>
|
|
{% for tag in filter_tags.values|sort %}
|
|
{% set tag_record = site.get('/tags/' ~ tag) %}
|
|
{% if tag_record %}<button class="tag-filter-button" type="button" data-tag-value="{{ tag }}" aria-pressed="false">{{ tag_record.title }}</button>{% endif %}
|
|
{% endfor %}
|
|
</div>
|
|
<p class="filter-status" data-filter-status aria-live="polite"></p>
|
|
{% endif %}
|
|
<div class="card-grid">
|
|
{% for item in this.children %}
|
|
{% set item_tags = item.taxonomy_tags if item._model == 'project' else item.tags %}
|
|
<article class="entry-card accent-{{ item.kicker|lower }}"{% if filter_tags.values %} data-filter-item data-tags="{{ item_tags|join(' ') }}"{% endif %}>
|
|
<div class="entry-meta"><span class="label">{{ item.kicker }}</span><time>{{ item.date|dateformat('YYYY.MM.dd') }}</time></div>
|
|
<h2><a href="{{ item|url }}">{{ item.title }}</a></h2>
|
|
<p>{{ item.summary }}</p>
|
|
{% if item_tags %}
|
|
<div class="entry-tags{% if item._model == 'project' %} technology-list{% endif %}">{{ tag_links(item_tags) }}</div>
|
|
{% endif %}
|
|
<a class="read-more" href="{{ item|url }}">{% if item._model == 'project' %}View project{% else %}Read entry{% endif %} →</a>
|
|
</article>
|
|
{% endfor %}
|
|
</div>
|
|
{% if filter_tags.values %}<p class="filter-empty" data-filter-empty hidden>No entries use this tag.</p>{% endif %}
|
|
</div>
|
|
</section>
|
|
{% endblock %}
|