source: Klonkt/src/views/pages/circle-feed.ejs@ cd69b6a

main
Last change on this file since cd69b6a was cd69b6a, checked in by roboburr <roboburr@…>, 3 months ago

feat(circles): new network logo as header on the /cirkel page

Ring with asymmetric directed network (Robin's design) replaces the triangle
badge icon in the circles hero. currentColor (= accent colour, visible in both
light and dark), badge 60->112px. Standalone logo file in assets/img/cirkel-logo.svg.

Co-Authored-By: Claude <noreply@…>

  • Property mode set to 100644
File size: 5.0 KB
RevLine 
[8ea3d0d]1<div class="container cirkel-hero">
2 <span class="cirkel-badge" aria-hidden="true">
[cd69b6a]3 <svg viewBox="0 0 1024 1024" fill="none">
4 <defs>
5 <marker id="cf-arrow" markerWidth="12" markerHeight="12" refX="10" refY="6" orient="auto"><path d="M0,0 L12,6 L0,12 Z" fill="currentColor"/></marker>
6 </defs>
7 <circle cx="512" cy="512" r="420" fill="none" stroke="currentColor" stroke-width="10"/>
8 <g fill="currentColor">
9 <circle cx="300" cy="520" r="24"/>
10 <circle cx="500" cy="510" r="28"/>
11 <circle cx="670" cy="320" r="24"/>
12 <circle cx="720" cy="610" r="24"/>
13 <circle cx="400" cy="760" r="24"/>
14 </g>
15 <g stroke="currentColor" stroke-width="10" fill="none">
16 <line x1="330" y1="520" x2="460" y2="510" marker-end="url(#cf-arrow)"/>
17 <line x1="520" y1="500" x2="640" y2="350" marker-end="url(#cf-arrow)"/>
18 <line x1="530" y1="520" x2="680" y2="600" marker-end="url(#cf-arrow)"/>
19 <line x1="690" y1="350" x2="710" y2="580" marker-end="url(#cf-arrow)"/>
20 <line x1="320" y1="550" x2="390" y2="720" marker-end="url(#cf-arrow)"/>
21 <line x1="420" y1="740" x2="690" y2="620" marker-end="url(#cf-arrow)"/>
22 <path d="M610 280 C480 260, 430 360, 460 480" marker-end="url(#cf-arrow)"/>
23 <path d="M710 340 C860 360, 860 700, 450 800" marker-end="url(#cf-arrow)"/>
24 <path d="M330 600 C480 660, 600 760, 720 650" marker-end="url(#cf-arrow)"/>
25 </g>
[8ea3d0d]26 </svg>
27 </span>
[4885eab]28 <h1><%= t('cfeed.title') %></h1>
29 <p class="cirkel-sub"><%= t('cfeed.sub') %></p>
[8ea3d0d]30 <% if (typeof sites !== 'undefined' && sites && sites.length) { %>
[3f893bf]31 <% if (sites.length <= 5) { %>
[8ea3d0d]32 <div class="cirkel-members">
[3f893bf]33 <% sites.forEach(function(s){ %>
[8ea3d0d]34 <% if (s.url) { %><a class="cirkel-member" href="<%= s.url %>" target="_blank" rel="noopener" title="<%= s.name %>"><% } else { %><span class="cirkel-member" title="<%= s.name %>"><% } %>
35 <span class="cirkel-avatar"<% if (s.avatar) { %> style="background-image:url('<%= s.avatar %>')"<% } %>><% if (!s.avatar) { %><%= (s.name || '?').charAt(0).toUpperCase() %><% } %></span>
36 <span class="cirkel-member-name"><%= s.name %></span>
37 <% if (s.url) { %></a><% } else { %></span><% } %>
38 <% }); %>
39 </div>
[3f893bf]40 <% } else { %>
41 <%# Meer dan 5: geen chips (zou een muur worden) — alleen het aantal. %>
[4885eab]42 <span class="cirkel-count"><%= t('cfeed.count', { n: sites.length }) %></span>
[04a6b15]43 <% } %>
[8ea3d0d]44 <% } %>
[43dbf9c]45</div>
[0091cb7]46
[43dbf9c]47<% if (!posts.length) { %>
48 <div class="container">
[4885eab]49 <p class="cirkel-empty"><%= t('cfeed.empty') %></p>
[43dbf9c]50 </div>
51<% } else { %>
52
53 <%# Dezelfde view als de hoofdpagina: timeline (post-card) + grid (post-tile),
54 gewisseld door de view-switcher via body[data-feed-view]. De remote-posts
55 zijn in circle.js naar het lokale post-shape gevormd (met external_url,
56 zodat de kaarten naar de bron-site linken). %>
57
58 <!-- ===== TIMELINE (standaard) ===== -->
59 <div class="container feed-timeline">
60 <ul class="post-list feed-timeline-list">
61 <% posts.forEach(function(post){ %>
62 <%- include('../partials/post-card', { post: post }) %>
63 <% }); %>
64 </ul>
65 </div>
66
67 <!-- ===== GRID (body[data-feed-view="grid"]) ===== -->
[4885eab]68 <section class="feed-grid container" aria-label="<%= t('cfeed.grid_view') %>">
[43dbf9c]69 <div class="grid-tiles">
70 <% posts.forEach(function(post){ %>
71 <%- include('../partials/post-tile', { post: post }) %>
[0091cb7]72 <% }); %>
73 </div>
[43dbf9c]74 </section>
75
76<% } %>
[0091cb7]77
78<style>
[8ea3d0d]79.cirkel-hero { text-align: center; max-width: 640px; margin: 2.5rem auto 2rem; }
[cd69b6a]80.cirkel-badge { display: block; width: 112px; height: 112px; margin: 0 auto .7rem; color: var(--accent); }
[8ea3d0d]81.cirkel-badge svg { width: 100%; height: 100%; }
82.cirkel-hero h1 { font-family: var(--font-display, serif); font-size: 2.4rem; margin: 0 0 .3rem; }
83.cirkel-sub { color: var(--ink-muted); margin: 0 0 1.25rem; font-size: 1.02rem; }
84.cirkel-members { display: flex; flex-wrap: wrap; gap: .55rem; justify-content: center; }
85.cirkel-member { display: inline-flex; align-items: center; gap: .45rem;
86 padding: .28rem .8rem .28rem .3rem; border: 1px solid var(--rule); border-radius: 999px;
87 text-decoration: none; color: var(--ink); background: var(--paper-2);
88 transition: border-color .15s, transform .15s; }
89.cirkel-member:hover { border-color: var(--accent); transform: translateY(-1px); }
90.cirkel-avatar { width: 30px; height: 30px; border-radius: 50%; flex-shrink: 0;
91 background-size: cover; background-position: center; background-color: var(--accent);
92 color: #fff; display: inline-flex; align-items: center; justify-content: center;
93 font-weight: 700; font-size: .82rem; }
94.cirkel-member-name { font-size: .9rem; font-weight: 600; }
[3f893bf]95.cirkel-count { display: inline-block; color: var(--ink-muted); font-size: .92rem; font-weight: 600;
96 padding: .35rem 1rem; border: 1px solid var(--rule); border-radius: 999px; background: var(--paper-2); }
[8ea3d0d]97.cirkel-empty { color: var(--ink-muted); text-align: center; margin: 2rem auto; }
[43dbf9c]98.cirkel-empty a { color: var(--accent); }
[0091cb7]99</style>
Note: See TracBrowser for help on using the repository browser.