PageSourceSearch

https://smallbird.games/blog/

html smallbird.games collected 2026-10-05 03:05:00 UTC 14,316 bytes, 431 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en">
3
4<!-- Powered by Bear Blog -->
5
6<head>
7  
8  
9  <meta charset="utf-8">
10  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5">
11  
11<script>
12    (function() {
13      'use strict';
14      document.cookie = `timezone=${Intl.DateTimeFormat().resolvedOptions().timeZone};path=/`;
15    })();
16  </script>
16
17  
18  <title>Blog – smallbird games</title>
19  <link rel="canonical" href="https://smallbird.games/blog/">
20  
21
22
23<meta name="smallbirdgames" content="look-for-the-bear-necessities">
24
25
26<!-- Primary Meta Tags -->
27<meta name="title" content="Blog">
28<meta name="description" content="storytelling games for the tabletop, pen and paper, and computer.">
29
30<!-- Open Graph / Facebook -->
31<meta property="og:site_name" content="smallbird games">
32<meta property="og:title" content="Blog">
33<meta property="og:type" content="website">
34<meta property="og:url" content="https://smallbird.games">
35<meta property="og:description" content="storytelling games for the tabletop, pen and paper, and computer.">
36<meta property="og:image" content="https://bear-images.sfo2.cdn.digitaloceanspaces.com/smallbirdgames/previewthumb.png">
37
38
39<!-- Twitter -->
40<meta property="twitter:card" content="summary">
41<meta property="twitter:url" content="https://smallbird.games">
42<meta property="twitter:title" content="Blog">
43<meta property="twitter:description" content="storytelling games for the tabletop, pen and paper, and computer.">
44<meta property="twitter:image" content="https://bear-images.sfo2.cdn.digitaloceanspaces.com/smallbirdgames/previewthumb.png">
45
46
47
48<!-- Microdata -->
49<script type="application/ld+json">
50  {
51    "@context": "http://schema.org",
52    "@type": "website",
53    "name": "Blog",
54    "headline": "Blog",
55    "url": "https://smallbird.games",
56    "description": "storytelling games for the tabletop, pen and paper, and computer.",
57    "image": "https://bear-images.sfo2.cdn.digitaloceanspaces.com/smallbirdgames/previewthumb.png"
58  }
59</script>
59
60<link rel="alternate" type="application/atom+xml" href="/feed/" title="smallbird games">
61<link rel="alternate" type="application/rss+xml" href="/feed/?type=rss" title="smallbird games">
62
63  
64
65<link href="mailto:[email protected]" rel="me">
66<link rel="webmention" href="https://webmention.io/smallbird.games/webmention" />
67
68
69  
70  
71  
72    
73        <link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20100%20100'%3E%3Ctext%20y='.9em'%20font-size='90'%3E⻦%3C/text%3E%3C/svg%3E">
74    
75
76
77
78  <style data-name="default">
79      
80      
81@import url("https://cdn.jsdelivr.net/npm/@fortawesome/[email protected]/css/fontawesome.min.css");
82@font-face {
83  font-family: "Nanum Gothic";
84  src: url('https://bear-images.sfo2.cdn.digitaloceanspaces.com/smallbirdgames/nanumgothic-regular-webfont-1.woff2') format('woff2'),
85    url('https://bear-images.sfo2.cdn.digitaloceanspaces.com/smallbirdgames/nanumgothic-regular-webfont.woff') format('woff');
86  font-style: normal;
87  font-weight: normal;
88}
89@font-face {
90  font-family: "Nanum Gothic";
91  src: url('https://bear-images.sfo2.cdn.digitaloceanspaces.com/smallbirdgames/nanumgothic-bold-webfont-1.woff2') format('woff2'),
92    url('https://bear-images.sfo2.cdn.digitaloceanspaces.com/smallbirdgames/nanumgothic-bold-webfont.woff') format('woff');
93  font-style: normal;
94  font-weight: 700;
95}
96@font-face {
97  font-family: "Nanum Gothic";
98  src: url('https://bear-images.sfo2.cdn.digitaloceanspaces.com/smallbirdgames/nanumgothic-extrabold-webfont-1.woff2') format('woff2'),
99    url('https://bear-images.sfo2.cdn.digitaloceanspaces.com/smallbirdgames/nanumgothic-extrabold-webfont.woff') format('woff');
100  font-style: normal;
101  font-weight: 800;
102}
103@font-face {
104  font-family: "MaiMai_e";
105  src: url('https://bear-images.sfo2.cdn.digitaloceanspaces.com/smallbirdgames/maimai_e-regular-webfont-1.woff2') format('woff2'),
106    url('https://bear-images.sfo2.cdn.digitaloceanspaces.com/smallbirdgames/maimai_e-regular-webfont.woff') format('woff');
107  font-style: normal;
108  font-weight: normal;
109}
110body {
111  font-family: "Nanum Gothic", sans-serif;
112  font-size: 14px;
113  background-color: #DAB49D;
114  color: #000000;
115  max-width: 600px;
116  margin: 20px auto;
117  line-height: 1.4;
118  padding: 0 20px;
119}
120
121a {
122  color: #5E3023;
123  text-decoration: none;
124}
125
126h1 {
127  font-size: 36px;
128  font-weight: normal;
129  font-family: "MaiMai_e", sans-serif;
130  margin: 0;
131  line-height: 1;
132}
133header h1:before {
134  content: "";
135  width: 50px;
136  height: 50px;
137  display: inline-block;
138  vertical-align: middle;
139  background-image: url('https://bear-images.sfo2.cdn.digitaloceanspaces.com/smallbirdgames-1725053104.png');
140  background-size: contain;
141}
142
143h2 {
144  font-family: "MaiMai_e", sans-serif;
145  font-weight: normal;
146  text-transform: lowercase;
147  font-size: 30px;
148  margin-bottom: 0;
149  line-height: 1;
150}
151
152input[type=text],
153input[type=number],
154input[type=email],
155input[type=tel] {
156  border: 1px #5E3023 solid;
157  border-radius: 3px;
158  font-family: "Nanum Gothic", sans-serif;
159}
160
161button,
162input[type=submit] {
163  background-color: #5E3023;
164  color: white;
165  padding: 5px 10px;
166  border: none;
167  font-family: "Nanum Gothic", sans-serif;
168  border-radius: 3px;
169  text-transform: lowercase;
170}
171
172form.email-signup br {
173  display: none;
174}
175
176header {
177  margin-bottom: 60px;
178  display: flex;
179  flex-wrap: wrap;
180}
181header .title {
182  color: inherit;
183  text-decoration: none;
184  order: 2;
185  margin-top: 50px;
186}
187header nav {
188  order: 1;
189  width: 100%;
190}
191header nav ul {
192  list-style: none;
193  display: flex;
194  flex-wrap: wrap;
195  margin: 0;
196  padding: 0;
197  text-transform: lowercase;
198}
199header nav ul li:after {
200  content: "/";
201  margin: 0 10px;
202}
203header nav ul li:last-child:after {
204  display: none;
205}
206
207footer {
208  font-size: 0.8em;
209  margin-top: 50px;
210  border-top: 1px #5E3023 dotted;
211  padding-top: 10px !important;
212}
213
214main h1 + p {
215  margin: 0;
216  font-size: 10px;
217  text-transform: uppercase;
218}
219
220main h1 + p i {
221  font-style: normal;
222}
223
224main .blog-posts {
225  list-style: none;
226  padding: 0;
227}
228
229main .blog-posts li time {
230  text-transform: uppercase;
231  font-style: normal;
232}
233
234main .blog-posts li time:after {
235  content: " | ";
236}
237
238main .blog-posts li a {
239  font-weight: bold;
240}
241
242iframe {
243  max-width: 100%;
244}
245
246.upvote-button.upvoted {
247  color: #5E3023 !important;
248}
249
250.toc {
251  border: 1px rgba(0,0,0,.25) solid;
252  padding: 10px;
253  display: inline-block;
254  min-width: 300px;
255}
256
257.toc p:first-child {
258  margin: 0;
259}
260
261.toc ol {
262  list-style: upper-roman;
263  margin-bottom: 0;
264}
265      
266  </style>
267</head>
268
269<body class="blog">
270  
271  <header>
272    <a class="title" href="/">
273      <h1>
274        smallbird games
275      </h1>
276    </a>
277    <nav>
278      <ul>
279<li><a href='/'>Home</a></li>
280<li><a href='/about/'>About</a></li>
281<li><a href='/blog/'>Blog</a></li>
282<li><a href='/games/'>Games</a></li>
283<li><a href='/favs/'>Favorites</a></li>
284<li><a href='https://ko-fi.com/veryroundbird'>Ko-Fi</a></li>
285</ul>
286
287    </nav>
288  </header>
289  <main>
290    
291
292
293
294
295
296<ul class="blog-posts">
297    
298    <li data-tags="lyric games,writing">
299        <span>
300            <i>
301                <time datetime="2024-09-11T06:45Z">
302    11 Sep, 2024
303</time>
304            </i>
305        </span>
306        <a href="/the-process-of-emotional-writing/">The process of emotional writing</a>
307        
308
309        
310
311        
312    </li>
313    
314</ul>
315
316
317<small>
318    <div class="tags">
319        
320        <a rel="nofollow" href="/blog/?q=pot-of-honey" style="display:none;">#potofhoney</a>
321        
322        <a rel="nofollow" href="/blog/?q=lyric%20games">#lyric games</a>
323        
324        <a rel="nofollow" href="/blog/?q=writing">#writing</a>
325        
326    </div>
327</small>
328
329
330  </main>
331  <footer>
332    
333
334<span id="footer-directive">
335<script src="https://tinylytics.app/embed/3gtZobCmFSa2aySLn9x7.js" defer></script>
335 
336<script type="text/javascript">
337const links = document.querySelectorAll('a');
338window.addEventListener('load', () => {
339  if (document.querySelector('body').classList.contains('post')) {
340    const wm = document.createElement('div');
341    wm.id = 'webmentions';
342    document.querySelector('main').append(wm);
343  }
344  links.forEach((item) => {
345    if (!item.href.match(/^https?:\/\/smallbird.games/)) {
346      item.target = "_blank";
347    }
348  });
349});
350</script>
vendor: 1 bytes, line 350
350
351<script type="text/javascript">
352!function(){"use strict";function e(e,t){return document.currentScript.getAttribute("data-"+e)||t}var t=e("page-url",window.location.href.replace(/#.*$/,"")),o=e("add-urls",void 0),n=e("data-id","webmentions"),r=e("wordcount"),a=e("max-webmentions",30),i=e("prevent-spoofing")?"wm-source":"url",s={"in-reply-to":"replied","like-of":"liked","repost-of":"reposted","bookmark-of":"bookmarked","mention-of":"mentioned",rsvp:"RSVPed","follow-of":"followed"},u={"in-reply-to":"💬","like-of":"❤️","repost-of":"🔄","bookmark-of":"⭐️","mention-of":"💬",rsvp:"📅","follow-of":"🐜"},l={yes:"✅",no:"❌",interested:"💡",maybe:"💭"};function c(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function f(e){var t='<a class="reaction" rel="nofollow ugc" title="'+c(e.author&&e.author.name?e.author.name:e.url.split("/")[2])+" "+(s[e["wm-property"]]||"reacted")+'" href="'+e[i]+'">';return e.author&&e.author.photo&&(t+='<img src="'+c(e.author.photo)+'">'),t+=u[e["wm-property"]]||"💥",e.rsvp&&l[e.rsvp]&&(t+="<sub>"+l[e.rsvp]+"</sub>"),t+="</a>"}function p(e){return e.substr(e.indexOf("//"))}function h(e){var t=[],o={};return e.forEach((function(e){var n=p(e.url);o[n]||(t.push(e),o[n]=!0)})),t}window.addEventListener("load",(function(){var e=document.getElementById(n);if(e){var s=[p(t)];o&&o.split("|").forEach((function(e){s.push(p(e))}));var u="https://webmention.io/api/mentions.jf2?per-page="+a;s.forEach((function(e){u+="&target[]="+encodeURIComponent("http:"+e)+"&target[]="+encodeURIComponent("https:"+e)})),function(e,t){if(window.fetch)window.fetch(e).then((function(e){return e.status>=200&&e.status<300?Promise.resolve(e):Promise.reject(new Error(e.statusText))})).then((function(e){return e.json()})).then(t).catch((function(e){console.error("Request failed",e)}));else{var o=new XMLHttpRequest;o.onload=function(e){t(JSON.parse(e))},o.onerror=function(e){console.error("Request failed",e)}}}(u,(function(t){var o="",n=[],a=[],s={"in-reply-to":n,"like-of":a,"repost-of":a,"bookmark-of":a,"mention-of":n,rsvp:n};t.children.forEach((function(e){var t=s[e["wm-property"]];t&&t.push(e)})),n.length>0&&(o+=function(e){var t="<h2>"+e.length+" Response"+(e.length>1?"s":"")+'</h2><ul class="comments">';return e.forEach((function(e){var o,n;if(t+="<li>",t+=f(e),t+=' <a class="source" rel="nofollow ugc" href="'+e[i]+'">',e.author&&e.author.name?t+=c(e.author.name):t+=c(e.url.split("/")[2]),t+="</a>: ",e.name)o="name",n=e.name;else if(e.content&&e.content.text){var a=c(e.content.text);if(r){var s=a.replace(/\s+/g," ").split(" ",r+1);s.length>r&&(s[r-1]+="&hellip;",a=(s=s.slice(0,r)).join(" "))}o="text",n=a}else o="name",n="(mention)";t+='<span class="'+o+'">'+n+"</span>",t+="</li>"})),t+="</ul>"}(h(n))),a.length>0&&(o+=function(e){var t="<h2>"+e.length+" Reaction"+(e.length>1?"s":"")+'</h2><ul class="reacts">';return e.forEach((function(e){t+=f(e)})),t}(h(a))),e.innerHTML=o}))}}))}();
353</script>
353
354
355</span>
356
357<span>
358    Powered by <a href="https://bearblog.dev">Bear <span role="img" class="bear" aria-label="ASCII bear logo">ʕ•ᴥ•ʔ</span></a>
359</span>
360
361  </footer>
362
363  
364  
364<script>
365        (() => {
366          "use strict";
367          const times = document.querySelectorAll('time');
368          const format_string = "" || "d M, Y"
369
370          times.forEach(time => {
371              time.innerText = formatDate(time.dateTime, format_string)
372          });
373
374          function formatDate(dateStr, formatStr) {
375            const date = new Date(dateStr);
376            const day = date.getDate();
377            const month = date.getMonth();
378            const year = date.getFullYear();
379            const weekday = date.getDay();
380            const hours = date.getHours();
381            const minutes = date.getMinutes();
382            const monthsFull = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
383            const monthsShort = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
384            const daysFull = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
385            const daysShort = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
386            
387            function getOrdinal(n) {
388                const s = ['th', 'st', 'nd', 'rd'];
389                const v = n % 100;
390                return s[(v - 20) % 10] || s[v] || s[0];
391            }
392            
393            const map = {
394                'd': () => day.toString().padStart(2, '0'),
395                'm': () => (month + 1).toString().padStart(2, '0'),
396                'Y': () => year.toString(),
397                'y': () => year.toString().slice(-2),
398                'F': () => monthsFull[month],
399                'j': () => day.toString(),
400                'D': () => daysShort[weekday],
401                'l': () => daysFull[weekday],
402                'S': () => getOrdinal(day),
403                'M': () => monthsShort[month],
404                'H': () => hours.toString().padStart(2, '0'),
405                'h': () => {
406                    let h = hours % 12;
407                    h = h === 0 ? 12 : h;
408                    return h.toString().padStart(2, '0');
409                },
410                'g': () => {
411                    let h = hours % 12;
412                    return h === 0 ? '12' : h.toString();
413                },
414                'i': () => minutes.toString().padStart(2, '0'),
415                'a': () => hours < 12 ? 'am' : 'pm',
416                'A': () => hours < 12 ? 'AM' : 'PM',
417            };
418            
419            let result = '';
420            for (let char of formatStr) {
421                result += map[char] ? map[char]() : char;
422            }
423            return result;
424        }
425        })();
426    </script>
426
427    
428</body>
429<!-- ID: smallbirdgames -->
430<!-- 🐻 -->
431</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.