<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Blog auf cbrueggenolte.de</title>
    <link>https://cbrueggenolte.de/tags/blog/</link>
    <description>Neueste Beiträge in Blog auf cbrueggenolte.de</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>de-DE</language>
    <managingEditor>96ca5227@cbrueggenolte.de (cbrueggenolte.de)</managingEditor>
    <webMaster>96ca5227@cbrueggenolte.de (cbrueggenolte.de)</webMaster>
    <copyright>2018-2026 cbrueggenolte</copyright>
    <lastBuildDate>Mon, 22 Dec 2025 00:00:00 +0100</lastBuildDate>
    <atom:link href="https://cbrueggenolte.de/tags/blog/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>disable-javascript.org</title>
      <link>https://cbrueggenolte.de/disable-javascript-org/</link>
      <pubDate>Mon, 22 Dec 2025 00:00:00 +0100</pubDate><author>96ca5227@cbrueggenolte.de (cbrueggenolte.de)</author>
      <guid>https://cbrueggenolte.de/disable-javascript-org/</guid>
      <description>&lt;p&gt;Kürzlich bin ich über die Website von Marius auf &lt;strong&gt;disable-javascript.org&lt;/strong&gt; gestoßen:&#xA;&lt;a href=&#34;https://%e3%83%9e%e3%83%aa%e3%82%a6%e3%82%b9.com/disable-javascript-org/&#34;&gt;https://マリウス.com/disable-javascript-org/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Die Idee war sofort nachvollziehbar.&#xA;Die Initiative benennt strukturelle Probleme des heutigen, stark JavaScript-getriebenen Webs&#xA;und zeigt auf sachliche, praxisnahe Weise,&#xA;wie sich JavaScript standardmäßig deaktivieren lässt –&#xA;um es anschließend gezielt dort zu aktivieren,&#xA;wo tatsächlich Vertrauen besteht.&lt;/p&gt;&#xA;&lt;p&gt;Die Reaktionen auf die Einführung des Tab-Verhaltens waren aufschlussreich.&#xA;Neben einigen humorvollen Kommentaren zeigte sich auch deutliche Kritik,&#xA;vor allem aus Entwicklerkreisen.&#xA;Der Ansatz wurde als unnötig, feindselig oder sogar extrem dargestellt.&#xA;Häufig ging es dabei weniger um den konkreten Vorschlag&#xA;als um die grundsätzliche Frage,&#xA;ob es überhaupt sinnvoll oder praktikabel sei,&#xA;JavaScript zu deaktivieren.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Kürzlich bin ich über die Website von Marius auf <strong>disable-javascript.org</strong> gestoßen:
<a href="https://%e3%83%9e%e3%83%aa%e3%82%a6%e3%82%b9.com/disable-javascript-org/">https://マリウス.com/disable-javascript-org/</a></p>
<p>Die Idee war sofort nachvollziehbar.
Die Initiative benennt strukturelle Probleme des heutigen, stark JavaScript-getriebenen Webs
und zeigt auf sachliche, praxisnahe Weise,
wie sich JavaScript standardmäßig deaktivieren lässt –
um es anschließend gezielt dort zu aktivieren,
wo tatsächlich Vertrauen besteht.</p>
<p>Die Reaktionen auf die Einführung des Tab-Verhaltens waren aufschlussreich.
Neben einigen humorvollen Kommentaren zeigte sich auch deutliche Kritik,
vor allem aus Entwicklerkreisen.
Der Ansatz wurde als unnötig, feindselig oder sogar extrem dargestellt.
Häufig ging es dabei weniger um den konkreten Vorschlag
als um die grundsätzliche Frage,
ob es überhaupt sinnvoll oder praktikabel sei,
JavaScript zu deaktivieren.</p>
<p>Damit wird der eigentliche Punkt verfehlt.
Und hier stimme ich Marius ausdrücklich zu:
Es geht nicht darum, JavaScript grundsätzlich abzulehnen.
Es geht darum,
nicht blind beliebigen Code auszuführen –
insbesondere nicht aus unbekannten Quellen.
Etablierte Plattformen mögen ein gewisses Maß an Vertrauen verdienen.
Zufällige, unbekannte Seiten tun das nicht.
Beides gleichzubehandeln
ist kein Komfortmerkmal,
sondern ein Sicherheitsproblem.</p>
<p>Was mich dabei besonders irritiert,
ist, wie viele Einwände offenbar daraus entstehen,
dass der Text schlicht nicht gelesen wird.
Die Empfehlung ist klar formuliert:
JavaScript standardmäßig deaktivieren
und dann selektiv dort aktivieren,
wo eine Vertrauensbasis besteht.
Dennoch wird häufig gegen eine Haltung argumentiert,
die so nie vertreten wurde.
Das wirkt weniger wie eine fachliche Debatte
und mehr wie ein Symptom
eines zunehmend oberflächlichen Diskurses.</p>
<p>Zur Klarstellung:
Ich nutze selbst JavaScript.
Auf Seiten mit Code aktiviere ich es bewusst,
etwa um Kopierfunktionen
oder kleine Komfortverbesserungen bereitzustellen.
Genau dieses Verständnis steht hier im Mittelpunkt:
JavaScript als gezielte Erweiterung –
nicht als Voraussetzung,
um Inhalte überhaupt konsumieren zu können.</p>
<p>Der Vorwurf eines „militanten Techno-Minimalismus“
greift daher ins Leere.
Diese Haltung ist weder nostalgisch
noch fortschrittsfeindlich.
Sie stellt vielmehr die Frage
nach sinnvollen Standards.
Inhalte sollten möglichst ohne JavaScript zugänglich bleiben,
mit Skripten als bewusster Ergänzung –
nicht als verpflichtender Ausführungsschicht,
die einfache Seiten
in fragile Laufzeitumgebungen verwandelt.</p>
<p>Eine solche Position als radikal zu bezeichnen,
sagt letztlich mehr
über den Zustand des heutigen Webs aus
als über das Argument selbst.
Skepsis gegenüber der standardmäßigen Ausführung
unvertrauenswürdigen Codes
sollte keine Provokation sein.
Sie sollte selbstverständlich sein.</p>
<p>Genau deshalb halte ich <strong>disable-javascript.org</strong> für relevant.
Die Seite bleibt nicht bei abstrakter Kritik stehen,
sondern macht konkrete Vorschläge:
Sie benennt reale Risiken,
zeigt praktikable Wege auf
und wirbt für ein ausgewogenes Verhältnis
zwischen Sicherheit,
Nutzbarkeit
und Selbstbestimmung.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Simple Admonitions in Astro</title>
      <link>https://cbrueggenolte.de/simple-admonitions-in-astro/</link>
      <pubDate>Fri, 14 Nov 2025 00:00:00 +0100</pubDate><author>96ca5227@cbrueggenolte.de (cbrueggenolte.de)</author>
      <guid>https://cbrueggenolte.de/simple-admonitions-in-astro/</guid>
      <description>&lt;p&gt;Add &lt;strong&gt;clean, professional, and accessible&lt;/strong&gt; admonition blocks to your Astro site&#xA;— perfect for documentation, tutorials, or blog posts.&lt;/p&gt;&#xA;&lt;p&gt;This guide gives you:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;6 types&lt;/strong&gt;: &lt;code&gt;tip&lt;/code&gt;, &lt;code&gt;warning&lt;/code&gt;, &lt;code&gt;danger&lt;/code&gt;, &lt;code&gt;note&lt;/code&gt;, &lt;code&gt;info&lt;/code&gt;, &lt;code&gt;caution&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Custom titles&lt;/strong&gt; via &lt;code&gt;[Your Title]&lt;/code&gt; syntax&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Soft stone-themed colors&lt;/strong&gt; (pale, desaturated, readable)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Zero JavaScript&lt;/strong&gt;, fully static&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;No icons&lt;/strong&gt;, minimal &amp;amp; elegant&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;step-1-install-required-package&#34;&gt;Step 1: Install Required Package&lt;/h2&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;npm install remark-directive&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#xA;&lt;h2 id=&#34;step-2-create-the-remark-plugin&#34;&gt;Step 2: Create the Remark Plugin&lt;/h2&gt;&#xA;&lt;p&gt;Create &lt;code&gt;remark-admonition.js&lt;/code&gt; in your project root:&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Add <strong>clean, professional, and accessible</strong> admonition blocks to your Astro site
— perfect for documentation, tutorials, or blog posts.</p>
<p>This guide gives you:</p>
<ul>
<li><strong>6 types</strong>: <code>tip</code>, <code>warning</code>, <code>danger</code>, <code>note</code>, <code>info</code>, <code>caution</code></li>
<li><strong>Custom titles</strong> via <code>[Your Title]</code> syntax</li>
<li><strong>Soft stone-themed colors</strong> (pale, desaturated, readable)</li>
<li><strong>Zero JavaScript</strong>, fully static</li>
<li><strong>No icons</strong>, minimal &amp; elegant</li>
</ul>
<hr>
<h2 id="step-1-install-required-package">Step 1: Install Required Package</h2>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">npm install remark-directive</span></span></code></pre></div><hr>
<h2 id="step-2-create-the-remark-plugin">Step 2: Create the Remark Plugin</h2>
<p>Create <code>remark-admonition.js</code> in your project root:</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-js" data-lang="js"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="kr">import</span> <span class="p">{</span> <span class="nx">visit</span> <span class="p">}</span> <span class="nx">from</span> <span class="s1">&#39;unist-util-visit&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">
</span></span><span class="line"><span class="ln"> 3</span><span class="cl"><span class="cm">/** Admonition Plugin – compatible with Astro + ESM + remark-directive */</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl"><span class="kd">function</span> <span class="nx">remarkAdmonitionCompatible</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">  <span class="k">return</span> <span class="p">(</span><span class="nx">tree</span><span class="p">)</span> <span class="p">=&gt;</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">    <span class="nx">visit</span><span class="p">(</span><span class="nx">tree</span><span class="p">,</span> <span class="p">(</span><span class="nx">node</span><span class="p">)</span> <span class="p">=&gt;</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">      <span class="k">if</span> <span class="p">(</span>
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">        <span class="nx">node</span><span class="p">.</span><span class="nx">type</span> <span class="o">===</span> <span class="s1">&#39;containerDirective&#39;</span> <span class="o">&amp;&amp;</span>
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">        <span class="p">[</span><span class="s1">&#39;tip&#39;</span><span class="p">,</span> <span class="s1">&#39;warning&#39;</span><span class="p">,</span> <span class="s1">&#39;danger&#39;</span><span class="p">,</span> <span class="s1">&#39;note&#39;</span><span class="p">,</span> <span class="s1">&#39;info&#39;</span><span class="p">,</span> <span class="s1">&#39;caution&#39;</span><span class="p">].</span><span class="nx">includes</span><span class="p">(</span><span class="nx">node</span><span class="p">.</span><span class="nx">name</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">10</span><span class="cl">      <span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">11</span><span class="cl">        <span class="kr">const</span> <span class="nx">data</span> <span class="o">=</span> <span class="nx">node</span><span class="p">.</span><span class="nx">data</span> <span class="o">||</span> <span class="p">(</span><span class="nx">node</span><span class="p">.</span><span class="nx">data</span> <span class="o">=</span> <span class="p">{});</span>
</span></span><span class="line"><span class="ln">12</span><span class="cl">        <span class="kr">const</span> <span class="nx">type</span> <span class="o">=</span> <span class="nx">node</span><span class="p">.</span><span class="nx">name</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">13</span><span class="cl">        <span class="kr">const</span> <span class="nx">titleText</span> <span class="o">=</span> <span class="nx">type</span><span class="p">.</span><span class="nx">charAt</span><span class="p">(</span><span class="mi">0</span><span class="p">).</span><span class="nx">toUpperCase</span><span class="p">()</span> <span class="o">+</span> <span class="nx">type</span><span class="p">.</span><span class="nx">slice</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">14</span><span class="cl">
</span></span><span class="line"><span class="ln">15</span><span class="cl">        <span class="c1">// Main element: &lt;div class=&#34;admonition admonition-tip&#34;&gt;
</span></span></span><span class="line"><span class="ln">16</span><span class="cl">        <span class="nx">data</span><span class="p">.</span><span class="nx">hName</span> <span class="o">=</span> <span class="s1">&#39;div&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">17</span><span class="cl">        <span class="nx">data</span><span class="p">.</span><span class="nx">hProperties</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">18</span><span class="cl">          <span class="nx">className</span><span class="o">:</span> <span class="p">[</span><span class="sb">`admonition`</span><span class="p">,</span> <span class="sb">`admonition-</span><span class="si">${</span><span class="nx">type</span><span class="si">}</span><span class="sb">`</span><span class="p">],</span>
</span></span><span class="line"><span class="ln">19</span><span class="cl">        <span class="p">};</span>
</span></span><span class="line"><span class="ln">20</span><span class="cl">
</span></span><span class="line"><span class="ln">21</span><span class="cl">        <span class="c1">// Check if the first child is a paragraph (often contains the title)
</span></span></span><span class="line"><span class="ln">22</span><span class="cl">        <span class="kr">const</span> <span class="nx">firstChild</span> <span class="o">=</span> <span class="nx">node</span><span class="p">.</span><span class="nx">children</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span>
</span></span><span class="line"><span class="ln">23</span><span class="cl">        <span class="kd">let</span> <span class="nx">titleContent</span> <span class="o">=</span> <span class="p">[];</span>
</span></span><span class="line"><span class="ln">24</span><span class="cl">
</span></span><span class="line"><span class="ln">25</span><span class="cl">        <span class="k">if</span> <span class="p">(</span><span class="nx">firstChild</span><span class="o">?</span><span class="p">.</span><span class="nx">type</span> <span class="o">===</span> <span class="s1">&#39;paragraph&#39;</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">26</span><span class="cl">          <span class="kr">const</span> <span class="nx">textContent</span> <span class="o">=</span> <span class="nx">firstChild</span><span class="p">.</span><span class="nx">children</span>
</span></span><span class="line"><span class="ln">27</span><span class="cl">            <span class="p">.</span><span class="nx">filter</span><span class="p">((</span><span class="nx">child</span><span class="p">)</span> <span class="p">=&gt;</span> <span class="nx">child</span><span class="p">.</span><span class="nx">type</span> <span class="o">===</span> <span class="s1">&#39;text&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">28</span><span class="cl">            <span class="p">.</span><span class="nx">map</span><span class="p">((</span><span class="nx">child</span><span class="p">)</span> <span class="p">=&gt;</span> <span class="nx">child</span><span class="p">.</span><span class="nx">value</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">29</span><span class="cl">            <span class="p">.</span><span class="nx">join</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">30</span><span class="cl">            <span class="p">.</span><span class="nx">trim</span><span class="p">();</span>
</span></span><span class="line"><span class="ln">31</span><span class="cl">
</span></span><span class="line"><span class="ln">32</span><span class="cl">          <span class="k">if</span> <span class="p">(</span><span class="nx">textContent</span> <span class="o">&amp;&amp;</span> <span class="o">!</span><span class="nx">textContent</span><span class="p">.</span><span class="nx">includes</span><span class="p">(</span><span class="s1">&#39;\n&#39;</span><span class="p">))</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">33</span><span class="cl">            <span class="nx">titleContent</span> <span class="o">=</span> <span class="nx">firstChild</span><span class="p">.</span><span class="nx">children</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">34</span><span class="cl">            <span class="c1">// Remove the first paragraph, as it is now the title
</span></span></span><span class="line"><span class="ln">35</span><span class="cl">            <span class="nx">node</span><span class="p">.</span><span class="nx">children</span><span class="p">.</span><span class="nx">shift</span><span class="p">();</span>
</span></span><span class="line"><span class="ln">36</span><span class="cl">          <span class="p">}</span>
</span></span><span class="line"><span class="ln">37</span><span class="cl">        <span class="p">}</span>
</span></span><span class="line"><span class="ln">38</span><span class="cl">
</span></span><span class="line"><span class="ln">39</span><span class="cl">        <span class="c1">// If no title from content → default title
</span></span></span><span class="line"><span class="ln">40</span><span class="cl">        <span class="k">if</span> <span class="p">(</span><span class="nx">titleContent</span><span class="p">.</span><span class="nx">length</span> <span class="o">===</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">41</span><span class="cl">          <span class="nx">titleContent</span> <span class="o">=</span> <span class="p">[{</span> <span class="nx">type</span><span class="o">:</span> <span class="s1">&#39;text&#39;</span><span class="p">,</span> <span class="nx">value</span><span class="o">:</span> <span class="nx">titleText</span> <span class="p">}];</span>
</span></span><span class="line"><span class="ln">42</span><span class="cl">        <span class="p">}</span>
</span></span><span class="line"><span class="ln">43</span><span class="cl">
</span></span><span class="line"><span class="ln">44</span><span class="cl">        <span class="c1">// Create title element: &lt;p class=&#34;admonition-title&#34;&gt;TIP&lt;/p&gt;
</span></span></span><span class="line"><span class="ln">45</span><span class="cl">        <span class="kr">const</span> <span class="nx">titleNode</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">46</span><span class="cl">          <span class="nx">type</span><span class="o">:</span> <span class="s1">&#39;paragraph&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln">47</span><span class="cl">          <span class="nx">data</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">48</span><span class="cl">            <span class="nx">hName</span><span class="o">:</span> <span class="s1">&#39;p&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln">49</span><span class="cl">            <span class="nx">hProperties</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">50</span><span class="cl">              <span class="nx">className</span><span class="o">:</span> <span class="s1">&#39;admonition-title&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln">51</span><span class="cl">            <span class="p">},</span>
</span></span><span class="line"><span class="ln">52</span><span class="cl">          <span class="p">},</span>
</span></span><span class="line"><span class="ln">53</span><span class="cl">          <span class="nx">children</span><span class="o">:</span> <span class="nx">titleContent</span><span class="p">,</span>
</span></span><span class="line"><span class="ln">54</span><span class="cl">        <span class="p">};</span>
</span></span><span class="line"><span class="ln">55</span><span class="cl">
</span></span><span class="line"><span class="ln">56</span><span class="cl">        <span class="c1">// Insert title at the front
</span></span></span><span class="line"><span class="ln">57</span><span class="cl">        <span class="nx">node</span><span class="p">.</span><span class="nx">children</span><span class="p">.</span><span class="nx">unshift</span><span class="p">(</span><span class="nx">titleNode</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">58</span><span class="cl">      <span class="p">}</span>
</span></span><span class="line"><span class="ln">59</span><span class="cl">    <span class="p">});</span>
</span></span><span class="line"><span class="ln">60</span><span class="cl">  <span class="p">};</span>
</span></span><span class="line"><span class="ln">61</span><span class="cl"><span class="p">}</span></span></span></code></pre></div><hr>
<h2 id="step-3-update-astroconfigmjs">Step 3: Update <code>astro.config.mjs</code></h2>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-js" data-lang="js"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="c1">// astro.config.mjs
</span></span></span><span class="line"><span class="ln"> 2</span><span class="cl"><span class="kr">import</span> <span class="p">{</span> <span class="nx">defineConfig</span> <span class="p">}</span> <span class="nx">from</span> <span class="s1">&#39;astro/config&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 3</span><span class="cl"><span class="kr">import</span> <span class="nx">remarkDirective</span> <span class="nx">from</span> <span class="s1">&#39;remark-directive&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl"><span class="kr">import</span> <span class="nx">remarkAdmonitionCompatible</span> <span class="nx">from</span> <span class="s1">&#39;./remark-admonition.js&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">
</span></span><span class="line"><span class="ln"> 6</span><span class="cl"><span class="kr">export</span> <span class="k">default</span> <span class="nx">defineConfig</span><span class="p">({</span>
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">  <span class="nx">markdown</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">    <span class="nx">remarkPlugins</span><span class="o">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">      <span class="nx">remarkDirective</span><span class="p">,</span>
</span></span><span class="line"><span class="ln">10</span><span class="cl">      <span class="nx">remarkAdmonitionCompatible</span><span class="p">,</span>
</span></span><span class="line"><span class="ln">11</span><span class="cl">    <span class="p">],</span>
</span></span><span class="line"><span class="ln">12</span><span class="cl">  <span class="p">},</span>
</span></span><span class="line"><span class="ln">13</span><span class="cl"><span class="p">});</span></span></span></code></pre></div><hr>
<h2 id="step-4-add-global-styles">Step 4: Add Global Styles</h2>
<p>Either add the styles to your <code>global.css</code> file
or create <code>src/styles/admonitions.css</code> and import it into your layout.</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="c">/* src/styles/admonitions.css */</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl"><span class="p">.</span><span class="nc">admonition</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">  <span class="k">margin</span><span class="p">:</span> <span class="mf">1.5</span><span class="kt">rem</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">  <span class="k">padding</span><span class="p">:</span> <span class="mf">0.75</span><span class="kt">rem</span> <span class="mi">1</span><span class="kt">rem</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">  <span class="k">border-left</span><span class="p">:</span> <span class="mi">4</span><span class="kt">px</span> <span class="kc">solid</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">  <span class="k">border-radius</span><span class="p">:</span> <span class="mf">0.375</span><span class="kt">rem</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">  <span class="k">background-color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="kc">color</span><span class="o">-</span><span class="n">stone</span><span class="mi">-50</span><span class="p">);</span>
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">  <span class="k">font-size</span><span class="p">:</span> <span class="mf">0.9375</span><span class="kt">rem</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">  <span class="k">line-height</span><span class="p">:</span> <span class="mf">1.6</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">10</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln">11</span><span class="cl">
</span></span><span class="line"><span class="ln">12</span><span class="cl"><span class="p">.</span><span class="nc">admonition</span> <span class="o">&gt;</span> <span class="p">:</span><span class="nd">first-child</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">13</span><span class="cl">  <span class="k">margin-top</span><span class="p">:</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">14</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln">15</span><span class="cl">
</span></span><span class="line"><span class="ln">16</span><span class="cl"><span class="p">.</span><span class="nc">admonition</span> <span class="o">&gt;</span> <span class="p">:</span><span class="nd">last-child</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">17</span><span class="cl">  <span class="k">margin-bottom</span><span class="p">:</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">18</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln">19</span><span class="cl">
</span></span><span class="line"><span class="ln">20</span><span class="cl"><span class="p">.</span><span class="nc">admonition</span> <span class="nt">p</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">21</span><span class="cl">  <span class="k">margin</span><span class="p">:</span> <span class="mf">0.5</span><span class="kt">rem</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">22</span><span class="cl">  <span class="k">color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="kc">color</span><span class="o">-</span><span class="n">stone</span><span class="mi">-700</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">23</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln">24</span><span class="cl">
</span></span><span class="line"><span class="ln">25</span><span class="cl"><span class="p">.</span><span class="nc">admonition</span> <span class="nt">p</span><span class="p">:</span><span class="nd">first-of-type</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">26</span><span class="cl">  <span class="k">margin-top</span><span class="p">:</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">27</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln">28</span><span class="cl">
</span></span><span class="line"><span class="ln">29</span><span class="cl"><span class="p">.</span><span class="nc">admonition</span> <span class="nt">p</span><span class="p">:</span><span class="nd">last-of-type</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">30</span><span class="cl">  <span class="k">margin-bottom</span><span class="p">:</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">31</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln">32</span><span class="cl">
</span></span><span class="line"><span class="ln">33</span><span class="cl"><span class="c">/* Title */</span>
</span></span><span class="line"><span class="ln">34</span><span class="cl"><span class="p">.</span><span class="nc">admonition-title</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">35</span><span class="cl">  <span class="k">margin</span><span class="p">:</span> <span class="mi">0</span> <span class="mi">0</span> <span class="mf">0.5</span><span class="kt">rem</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">36</span><span class="cl">  <span class="k">font-weight</span><span class="p">:</span> <span class="mi">600</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">37</span><span class="cl">  <span class="k">font-size</span><span class="p">:</span> <span class="mf">0.8125</span><span class="kt">rem</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">38</span><span class="cl">  <span class="k">text-transform</span><span class="p">:</span> <span class="kc">uppercase</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">39</span><span class="cl">  <span class="k">letter-spacing</span><span class="p">:</span> <span class="mf">0.05</span><span class="kt">em</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">40</span><span class="cl">  <span class="k">color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="kc">color</span><span class="o">-</span><span class="n">stone</span><span class="mi">-800</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">41</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln">42</span><span class="cl">
</span></span><span class="line"><span class="ln">43</span><span class="cl"><span class="c">/* Tip – Green */</span>
</span></span><span class="line"><span class="ln">44</span><span class="cl"><span class="p">.</span><span class="nc">admonition-tip</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">45</span><span class="cl">  <span class="k">background-color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="kc">color</span><span class="o">-</span><span class="kc">green</span><span class="mi">-100</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">46</span><span class="cl">  <span class="k">border-color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="kc">color</span><span class="o">-</span><span class="kc">green</span><span class="mi">-300</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">47</span><span class="cl">  <span class="k">color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="kc">color</span><span class="o">-</span><span class="kc">green</span><span class="mi">-800</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">48</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln">49</span><span class="cl">
</span></span><span class="line"><span class="ln">50</span><span class="cl"><span class="c">/* Warning – Yellow */</span>
</span></span><span class="line"><span class="ln">51</span><span class="cl"><span class="p">.</span><span class="nc">admonition-warning</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">52</span><span class="cl">  <span class="k">background-color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="kc">color</span><span class="o">-</span><span class="kc">yellow</span><span class="mi">-100</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">53</span><span class="cl">  <span class="k">border-color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="kc">color</span><span class="o">-</span><span class="kc">yellow</span><span class="mi">-300</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">54</span><span class="cl">  <span class="k">color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="kc">color</span><span class="o">-</span><span class="kc">yellow</span><span class="mi">-800</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">55</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln">56</span><span class="cl">
</span></span><span class="line"><span class="ln">57</span><span class="cl"><span class="c">/* Danger – Red */</span>
</span></span><span class="line"><span class="ln">58</span><span class="cl"><span class="p">.</span><span class="nc">admonition-danger</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">59</span><span class="cl">  <span class="k">background-color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="kc">color</span><span class="o">-</span><span class="kc">red</span><span class="mi">-100</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">60</span><span class="cl">  <span class="k">border-color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="kc">color</span><span class="o">-</span><span class="kc">red</span><span class="mi">-300</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">61</span><span class="cl">  <span class="k">color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="kc">color</span><span class="o">-</span><span class="kc">red</span><span class="mi">-800</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">62</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln">63</span><span class="cl">
</span></span><span class="line"><span class="ln">64</span><span class="cl"><span class="c">/* Note – Blue */</span>
</span></span><span class="line"><span class="ln">65</span><span class="cl"><span class="p">.</span><span class="nc">admonition-note</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">66</span><span class="cl">  <span class="k">background-color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="kc">color</span><span class="o">-</span><span class="kc">blue</span><span class="mi">-100</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">67</span><span class="cl">  <span class="k">border-color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="kc">color</span><span class="o">-</span><span class="kc">blue</span><span class="mi">-300</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">68</span><span class="cl">  <span class="k">color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="kc">color</span><span class="o">-</span><span class="kc">blue</span><span class="mi">-800</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">69</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln">70</span><span class="cl">
</span></span><span class="line"><span class="ln">71</span><span class="cl"><span class="c">/* Info – Cyan */</span>
</span></span><span class="line"><span class="ln">72</span><span class="cl"><span class="p">.</span><span class="nc">admonition-info</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">73</span><span class="cl">  <span class="k">background-color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="kc">color</span><span class="o">-</span><span class="kc">cyan</span><span class="mi">-100</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">74</span><span class="cl">  <span class="k">border-color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="kc">color</span><span class="o">-</span><span class="kc">cyan</span><span class="mi">-300</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">75</span><span class="cl">  <span class="k">color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="kc">color</span><span class="o">-</span><span class="kc">cyan</span><span class="mi">-800</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">76</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln">77</span><span class="cl">
</span></span><span class="line"><span class="ln">78</span><span class="cl"><span class="c">/* Caution – Orange */</span>
</span></span><span class="line"><span class="ln">79</span><span class="cl"><span class="p">.</span><span class="nc">admonition-caution</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">80</span><span class="cl">  <span class="k">background-color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="kc">color</span><span class="o">-</span><span class="kc">orange</span><span class="mi">-100</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">81</span><span class="cl">  <span class="k">border-color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="kc">color</span><span class="o">-</span><span class="kc">orange</span><span class="mi">-300</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">82</span><span class="cl">  <span class="k">color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="kc">color</span><span class="o">-</span><span class="kc">orange</span><span class="mi">-800</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">83</span><span class="cl"><span class="p">}</span></span></span></code></pre></div><blockquote>
<p><strong>Import in your layout:</strong></p>
</blockquote>





<pre tabindex="0"><code class="language-astro" data-lang="astro">---
// src/layouts/BlogPost.astro
import &#39;../styles/admonitions.css&#39;;
---</code></pre><hr>
<h2 id="step-5-define-color-variables-optional-but-recommended">Step 5: Define Color Variables (Optional but Recommended)</h2>
<p>If you are not using Tailwind.css as I am, add these color variables to your global CSS or <code>:root</code>:</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="p">:</span><span class="nd">root</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">  <span class="c">/* Stone */</span>
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">  <span class="nv">--color-stone-50</span><span class="p">:</span> <span class="mh">#fafaf9</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">  <span class="nv">--color-stone-700</span><span class="p">:</span> <span class="mh">#44403c</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">  <span class="nv">--color-stone-800</span><span class="p">:</span> <span class="mh">#292524</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">  <span class="c">/* Green */</span>
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">  <span class="nv">--color-green-100</span><span class="p">:</span> <span class="mh">#f0fdf4</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">  <span class="nv">--color-green-300</span><span class="p">:</span> <span class="mh">#86efac</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">10</span><span class="cl">  <span class="nv">--color-green-800</span><span class="p">:</span> <span class="mh">#166534</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">11</span><span class="cl">
</span></span><span class="line"><span class="ln">12</span><span class="cl">  <span class="c">/* Yellow */</span>
</span></span><span class="line"><span class="ln">13</span><span class="cl">  <span class="nv">--color-yellow-100</span><span class="p">:</span> <span class="mh">#fefce8</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">14</span><span class="cl">  <span class="nv">--color-yellow-300</span><span class="p">:</span> <span class="mh">#fde047</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">15</span><span class="cl">  <span class="nv">--color-yellow-800</span><span class="p">:</span> <span class="mh">#9a3412</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">16</span><span class="cl">
</span></span><span class="line"><span class="ln">17</span><span class="cl">  <span class="c">/* Red */</span>
</span></span><span class="line"><span class="ln">18</span><span class="cl">  <span class="nv">--color-red-100</span><span class="p">:</span> <span class="mh">#fef2f2</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">19</span><span class="cl">  <span class="nv">--color-red-300</span><span class="p">:</span> <span class="mh">#fca5a5</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">20</span><span class="cl">  <span class="nv">--color-red-800</span><span class="p">:</span> <span class="mh">#991b1b</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">21</span><span class="cl">
</span></span><span class="line"><span class="ln">22</span><span class="cl">  <span class="c">/* Blue */</span>
</span></span><span class="line"><span class="ln">23</span><span class="cl">  <span class="nv">--color-blue-100</span><span class="p">:</span> <span class="mh">#eff6ff</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">24</span><span class="cl">  <span class="nv">--color-blue-300</span><span class="p">:</span> <span class="mh">#93c5fd</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">25</span><span class="cl">  <span class="nv">--color-blue-800</span><span class="p">:</span> <span class="mh">#1e40af</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">26</span><span class="cl">
</span></span><span class="line"><span class="ln">27</span><span class="cl">  <span class="c">/* Cyan */</span>
</span></span><span class="line"><span class="ln">28</span><span class="cl">  <span class="nv">--color-cyan-100</span><span class="p">:</span> <span class="mh">#ecfeff</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">29</span><span class="cl">  <span class="nv">--color-cyan-300</span><span class="p">:</span> <span class="mh">#67e8f9</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">30</span><span class="cl">  <span class="nv">--color-cyan-800</span><span class="p">:</span> <span class="mh">#0e7490</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">31</span><span class="cl">
</span></span><span class="line"><span class="ln">32</span><span class="cl">  <span class="c">/* Orange */</span>
</span></span><span class="line"><span class="ln">33</span><span class="cl">  <span class="nv">--color-orange-100</span><span class="p">:</span> <span class="mh">#fff7ed</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">34</span><span class="cl">  <span class="nv">--color-orange-300</span><span class="p">:</span> <span class="mh">#fdba74</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">35</span><span class="cl">  <span class="nv">--color-orange-800</span><span class="p">:</span> <span class="mh">#9c4221</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">36</span><span class="cl"><span class="p">}</span></span></span></code></pre></div><hr>
<h2 id="example-usage-in-markdown">Example Usage in Markdown</h2>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-md" data-lang="md"><span class="line"><span class="ln"> 1</span><span class="cl">:::tip[Pro Tip]
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">Use <span class="sb">`Cmd + K`</span> to open the command palette.
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">:::
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">:::warning
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">Never commit your <span class="sb">`.env`</span> file.
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">:::
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">:::danger
</span></span><span class="line"><span class="ln">10</span><span class="cl">This action <span class="gs">**cannot be undone**</span>.
</span></span><span class="line"><span class="ln">11</span><span class="cl">:::
</span></span><span class="line"><span class="ln">12</span><span class="cl">
</span></span><span class="line"><span class="ln">13</span><span class="cl">:::note
</span></span><span class="line"><span class="ln">14</span><span class="cl">Astro compiles to static HTML by default.
</span></span><span class="line"><span class="ln">15</span><span class="cl">:::
</span></span><span class="line"><span class="ln">16</span><span class="cl">
</span></span><span class="line"><span class="ln">17</span><span class="cl">:::info[Did You Know?]
</span></span><span class="line"><span class="ln">18</span><span class="cl">You can use <span class="sb">`.astro`</span> files inside Markdown with MDX.
</span></span><span class="line"><span class="ln">19</span><span class="cl">:::
</span></span><span class="line"><span class="ln">20</span><span class="cl">
</span></span><span class="line"><span class="ln">21</span><span class="cl">:::caution
</span></span><span class="line"><span class="ln">22</span><span class="cl">This feature is experimental — test thoroughly.
</span></span><span class="line"><span class="ln">23</span><span class="cl">:::</span></span></code></pre></div><hr>
<h3 id="result">Result</h3>
<p>:::tip[Pro Tip]
Use <code>Cmd + K</code> to open the command palette.
:::</p>
<p>:::warning
Never commit your <code>.env</code> file.
:::</p>
<p>:::danger
This action <strong>cannot be undone</strong>.
:::</p>
<p>:::note
Astro compiles to static HTML by default.
:::</p>
<p>:::info[Did You Know?]
You can use <code>.astro</code> files inside Markdown with MDX.
:::</p>
<p>:::caution
This feature is experimental — test thoroughly.
:::</p>
<hr>
<h2 id="done">Done</h2>
<p>You now have:</p>
<ul>
<li><strong>6 flexible admonition types</strong></li>
<li><strong>Custom titles</strong> with <code>[Title]</code> syntax</li>
<li><strong>Clean, stone-themed design</strong></li>
<li><strong>Full Astro + ESM compatibility</strong></li>
<li><strong>Zero runtime overhead</strong></li>
</ul>
<blockquote>
<p><strong>Pro tip</strong>: Want <code>success</code> or <code>example</code> later? Just add the name to the array in the plugin and a CSS rule — done.</p>
</blockquote>
<p>Clean. Simple. Powerful.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Blog aufgeräumt, neues Design und ein bisschen Klarheit</title>
      <link>https://cbrueggenolte.de/blog-aufgeraeumt-neues-design-und-ein-bisschen-klarheit/</link>
      <pubDate>Tue, 10 Jun 2025 00:00:00 +0200</pubDate><author>96ca5227@cbrueggenolte.de (cbrueggenolte.de)</author>
      <guid>https://cbrueggenolte.de/blog-aufgeraeumt-neues-design-und-ein-bisschen-klarheit/</guid>
      <description>&lt;h2 id=&#34;frischer-wind-neues-design-und-klare-strukturen&#34;&gt;Frischer Wind: Neues Design und klare Strukturen&lt;/h2&gt;&#xA;&lt;p&gt;Den Blog habe ich heute umfassend überarbeitet&#xA;und das dunkle Design komplett verworfen.&#xA;Stattdessen ist jetzt alles hell mit blauen Akzenten –&#xA;einfach, weil es die Lesbarkeit spürbar verbessert.&lt;/p&gt;&#xA;&lt;p&gt;Es hat eine Weile gedauert,&#xA;bis ich mich zu diesem Umbau durchringen konnte.&#xA;Aber ich bin ehrlich gesagt froh,&#xA;dass ich nicht schon wieder das ganze System gewechselt habe.&#xA;Astro gefällt mir nach wie vor richtig gut;&#xA;ich komme damit wesentlich besser zurecht als mit Hugo.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<h2 id="frischer-wind-neues-design-und-klare-strukturen">Frischer Wind: Neues Design und klare Strukturen</h2>
<p>Den Blog habe ich heute umfassend überarbeitet
und das dunkle Design komplett verworfen.
Stattdessen ist jetzt alles hell mit blauen Akzenten –
einfach, weil es die Lesbarkeit spürbar verbessert.</p>
<p>Es hat eine Weile gedauert,
bis ich mich zu diesem Umbau durchringen konnte.
Aber ich bin ehrlich gesagt froh,
dass ich nicht schon wieder das ganze System gewechselt habe.
Astro gefällt mir nach wie vor richtig gut;
ich komme damit wesentlich besser zurecht als mit Hugo.</p>
<h3 id="fokus-auf-den-inhalt">Fokus auf den Inhalt</h3>
<p>Neben dem Design habe ich auch inhaltlich aufgeräumt.
Ein alter Blogbeitrag ist nun endlich überarbeitet –
unpassende Passagen sind rausgeflogen,
andere habe ich so umgeschrieben,
dass sie nun einen klaren roten Faden haben
und nicht mehr wie eine lose Sammlung von Notizen wirken.</p>
<p>Das hat mich schon von Anfang an gestört,
doch jetzt fühlt es sich endlich richtig an.
Das ist allerdings erst der Anfang:
Ich werde nach und nach weitere Abschnitte glätten.
Inhalte, die nicht mehr in das große Ganze passen,
wandern demnächst in den Microblog.
An dessen Umsetzung arbeite ich aktuell noch.</p>
<h3 id="ein-blick-zurück">Ein Blick zurück</h3>
<p>Ich habe mir außerdem vorgenommen,
alte Beiträge aus früheren Zeiten wieder aufzunehmen.
Dazu bin ich bisher zwar noch nicht gekommen,
aber es steht fest auf meinem Plan.
Bis dahin schraube ich einfach weiter an den Details,
bis alles nahtlos ineinandergreift.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Mein Blog erfindet sich neu</title>
      <link>https://cbrueggenolte.de/mein-blog-erfindet-sich-neu/</link>
      <pubDate>Mon, 31 Mar 2025 00:00:00 +0200</pubDate><author>96ca5227@cbrueggenolte.de (cbrueggenolte.de)</author>
      <guid>https://cbrueggenolte.de/mein-blog-erfindet-sich-neu/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://cbrueggenolte.de/mein-blog-erfindet-sich-neu/2025-03-31-cover_hu_d7e153d8035b2730.webp&#34;&gt;&lt;img class=&#34;content-image&#34; src=&#34;https://cbrueggenolte.de/mein-blog-erfindet-sich-neu/2025-03-31-cover_hu_c1f2e45eeefbb3db.webp&#34; alt=&#34;A new blog software comes to life- Astro Logo&#34; loading=&#34;lazy&#34; width=&#34;1440&#34; height=&#34;754&#34; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Ich habe einige Zeit damit verbracht, meine Blog-Software komplett zu überarbeiten.&#xA;Anstelle von Python-Flask und Hugo verwende ich jetzt &lt;a href=&#34;https://astro.build&#34;&gt;Astro&lt;/a&gt;-&#xA;und ich könnte nicht zufriedener mit diesem Wechsel sein.&lt;/p&gt;&#xA;&lt;h2 id=&#34;warum-die-änderung&#34;&gt;Warum die Änderung?&lt;/h2&gt;&#xA;&lt;p&gt;Mein altes Python-Flask-Setup hat lange zuverlässig funktioniert, bis es irgendwann an seine Grenzen stieß.&#xA;Ich will mich für meinen zukünftigen Job mehr mit moderner Webentwicklung beschäftigen&#xA;und nehme deshalb gerade am &lt;a href=&#34;https://bootcamp.dev/&#34;&gt;Full-Stack Web Development Bootcamp&lt;/a&gt; teil.&#xA;Es schien der perfekte Moment zu sein, etwas Neues auszuprobieren&#xA;und vielleicht auch die unzähligen Stunden zu rechtfertigen,&#xA;die ich bisher in JavaScript-Tutorials investiert habe.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><a href="/mein-blog-erfindet-sich-neu/2025-03-31-cover_hu_d7e153d8035b2730.webp"><img class="content-image" src="/mein-blog-erfindet-sich-neu/2025-03-31-cover_hu_c1f2e45eeefbb3db.webp" alt="A new blog software comes to life- Astro Logo" loading="lazy" width="1440" height="754" /></a></p>
<p>Ich habe einige Zeit damit verbracht, meine Blog-Software komplett zu überarbeiten.
Anstelle von Python-Flask und Hugo verwende ich jetzt <a href="https://astro.build">Astro</a>-
und ich könnte nicht zufriedener mit diesem Wechsel sein.</p>
<h2 id="warum-die-änderung">Warum die Änderung?</h2>
<p>Mein altes Python-Flask-Setup hat lange zuverlässig funktioniert, bis es irgendwann an seine Grenzen stieß.
Ich will mich für meinen zukünftigen Job mehr mit moderner Webentwicklung beschäftigen
und nehme deshalb gerade am <a href="https://bootcamp.dev/">Full-Stack Web Development Bootcamp</a> teil.
Es schien der perfekte Moment zu sein, etwas Neues auszuprobieren
und vielleicht auch die unzähligen Stunden zu rechtfertigen,
die ich bisher in JavaScript-Tutorials investiert habe.</p>
<h2 id="neu-anfangen-mit-astro">Neu anfangen mit Astro</h2>
<p>Also habe ich beschlossen, nochmal bei Null anzufangen,
auch weil es mir einfach Spaß macht,
Dinge einzustampfen und immer mal wieder etwas Neues auszuprobieren.
Ich startete mit der Minimalvorlage von Astro
und fügte dann Baustein für Baustein hinzu,
fast so, als würde ich etwas aus LEGO zusammenbauen.
Die Einrichtung war überraschend einfach.
Innerhalb weniger Minuten lief eine kleine Website.
Ich entdecke immer noch neue Möglichkeiten mit Astro
und bin jetzt schon begeistert, was damit alles machbar ist.</p>
<h2 id="warum-astro">Warum Astro?</h2>
<p>Was mich an Astro begeistert, ist die starke Performance
und die Art, wie alles modular aufgebaut ist.
Dank der sogenannten „partiellen Hydrierung“ lädt der Blog jetzt schneller als je zuvor.
Markdown-Unterstützung ist direkt mit an Bord, super praktisch fürs Schreiben,
und die vielen Community-Integrations haben mir echt viel Zeit gespart
(auch wenn ich diese Zeit sofort wieder damit verbracht habe, ewig über Farbschemata zu grübeln).</p>
<h2 id="lernkurve">Lernkurve</h2>
<p>Bis vor Kurzem endeten meine JavaScript-Kenntnisse bei <code>alert('Hello World')</code>.
Der Umstieg auf dieses neue System war also&hellip; sagen wir mal: ziemlich spannend.
Gerade das Thema asynchrone Programmierung hat mich am Anfang ganz schön ins Schwitzen gebracht.
Aber jeden Tag verstehe ich ein bisschen mehr und ja,
mein Suchverlauf besteht inzwischen zu 90 % aus Einträgen wie „JavaScript Promises einfach erklärt für Fünfjährige“.</p>
<h2 id="migration-im-gange">Migration im Gange</h2>
<p>Ich bin gerade dabei, meine alten Blogbeiträge
nach und nach ins neue System zu übertragen.
Einen festen Zeitplan habe ich nicht (ehrlich gesagt: das wird dauern, so lange es eben dauert),
aber ich nehme mir vor, den Großteil bis Sommer 2025 fertig zu haben,
oder eben, sobald die Motivation wieder vorbeischaut.</p>
<h2 id="kurz-gesagt">Kurz gesagt</h2>
<p>Der Wechsel zu Astro bedeutet für mich mehr als nur ein technisches Update.
Es fühlt sich auch wie ein kleiner Schritt nach vorne auf meinem beruflichen Weg an.
Vom selbstgebauten Python-Tool (ja, das lief viel zu lange) über Hugo
bis hin zu einem modernen JavaScript-Framework.
Das passt perfekt zu dem, wo ich als Fullstack-Entwickler hinmöchte.</p>
<p>Und ja, ich gebe zu: Ich neige dazu, Dinge komplizierter zu machen, als sie sein müssten.</p>
<p>Auch wenn das Ganze seine Zeit braucht,
macht der Umstieg die Pflege und Weiterentwicklung des Blogs einfach viel angenehmer.
Ich werde regelmäßig neue Inhalte hinzufügen und die Seite Stück für Stück verbessern.
Schaue also gerne wieder vorbei und wenn du Feedback hast, immer her damit!
(Konstruktive Kritik nehme ich mit offenen Armen an, harsches Urteil wird still registriert.)</p>
<p>Dieser Blog wächst mit meinen Erfahrungen mit,
dokumentiert neue Ideen und technische Entwicklungen.
In der schnelllebigen Welt der Webentwicklung
ist ein kompletter Neustart manchmal einfach die beste Lösung
oder zumindest die beste Ausrede für nächtelanges Coden.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Die Transparenzsuchmaschine</title>
      <link>https://cbrueggenolte.de/die-transparenzsuchmaschine/</link>
      <pubDate>Thu, 27 Apr 2023 00:00:00 +0200</pubDate><author>96ca5227@cbrueggenolte.de (cbrueggenolte.de)</author>
      <guid>https://cbrueggenolte.de/die-transparenzsuchmaschine/</guid>
      <description>&lt;p&gt;In letzter Zeit dreht sich alles um KI und ihre Anwendungen wie ChatGPT und CoPilot. Stellen Sie sich vor, Sie könnten&#xA;den Namen einer beliebigen Person des öffentlichen Lebens eingeben und hätten sofort Zugriff auf alles, was diese Person&#xA;jemals zu einem bestimmten Thema gesagt hat. Was wäre, wenn wir eine Suchmaschine hätten, die uns das ermöglicht?&lt;/p&gt;&#xA;&lt;p&gt;Eine solche &lt;strong&gt;Transparenzsuchmaschine&lt;/strong&gt; kam uns beim Mittagessen in den Sinn.&lt;/p&gt;&#xA;&lt;p&gt;Die Möglichkeit, einen kompletten Datensatz über eine Person abzufragen und Informationen zu jedem beliebigen Thema zu&#xA;erhalten, wäre wohl die wahre Stärke dieser Technologie. Man könnte die Entwicklung der politischen Ansichten einer&#xA;Person während ihrer gesamten Online-Karriere verfolgen und die Genauigkeit ihrer Vorhersagen im Laufe ihrer Karriere&#xA;bewerten.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>In letzter Zeit dreht sich alles um KI und ihre Anwendungen wie ChatGPT und CoPilot. Stellen Sie sich vor, Sie könnten
den Namen einer beliebigen Person des öffentlichen Lebens eingeben und hätten sofort Zugriff auf alles, was diese Person
jemals zu einem bestimmten Thema gesagt hat. Was wäre, wenn wir eine Suchmaschine hätten, die uns das ermöglicht?</p>
<p>Eine solche <strong>Transparenzsuchmaschine</strong> kam uns beim Mittagessen in den Sinn.</p>
<p>Die Möglichkeit, einen kompletten Datensatz über eine Person abzufragen und Informationen zu jedem beliebigen Thema zu
erhalten, wäre wohl die wahre Stärke dieser Technologie. Man könnte die Entwicklung der politischen Ansichten einer
Person während ihrer gesamten Online-Karriere verfolgen und die Genauigkeit ihrer Vorhersagen im Laufe ihrer Karriere
bewerten.</p>
<p>Die Technologie wird jedoch auch für Angriffe auf Personen, für die Untersuchung ihrer Beiträge und für die Erstellung
bemerkenswerter Darstellungen ihrer Entwicklung als Person im Laufe der Zeit genutzt werden. Vor allem aber wird es -
zumindest anfangs - dazu dienen, Menschen bloßzustellen.</p>
<blockquote>
<p>“The growth of the Internet will slow drastically, as the flaw in ‘Metcalfe’s law’—which states that the number of
potential connections in a network is proportional to the square of the number of participants—becomes apparent: most
people have nothing to say to each other! By 2005 or so, it will become clear that the Internet’s impact on the economy
has been no greater than the fax machine’s.”</p>
<p>// Paul Krugman, 1998</p>
</blockquote>
<p>Wie falsch diese Einschätzung war und wie rasant sich das Internet entwickelt hat. Man kann sagen, dass das Internet
revolutionäre Auswirkungen auf Wirtschaft, Gesellschaft und Kultur hatte. Die meisten Menschen haben heute Zugang zu
mehr Informationen als je zuvor und zu Möglichkeiten der Zusammenarbeit, die vor wenigen Jahren noch undenkbar waren.</p>
<p>Hätten wir damals schon eine solche Transparenz-Suchmaschine gehabt, hätten wir die Wirksamkeit solcher Aussagen in
Bezug auf Vertrauen und Genauigkeit bewerten können.</p>
<p>Aber die eigentliche Bedeutung dieser Technologie liegt nicht in einer bestimmten Anwendung, sondern in der Schaffung
von Transparenz. KI ermöglicht es, alle Informationen zu einem Thema abzurufen und dann gezielte Fragen zu stellen.
Dies führt zu bisher nicht möglichen Einblicken und Erkenntnissen.</p>
<p>Daraus ergibt sich natürlich auch die Sorge, dass KI als Instrument für Mobbing und öffentliche Demütigung eingesetzt
werden könnte. Es ist wichtig, mit den Informationen, die durch KI gewonnen werden, verantwortungsvoll umzugehen. Es geht
nicht darum, Antworten blind zu akzeptieren und Entscheidungen nur auf der Grundlage der gelieferten Daten zu treffen.
Leider geschieht dies teilweise bereits. Es ist sehr wahrscheinlich, dass viel Dreck ausgegraben wird, auch wenn sich
die Täter bereits entschuldigt oder längst von ihren Taten distanziert haben.</p>
<p>Wir müssen uns der potenziellen Voreingenommenheit und der Grenzen der Technologie bewusst sein. Wir müssen sie als
Werkzeug zur Verbesserung unseres Verständnisses nutzen und nicht als Ersatz für kritisches Denken und Analyse.</p>
<p>Insgesamt birgt die Technologie der Transparenz-Suchmaschine ein enormes Potenzial für den Zugang zu Informationen und
das Verständnis von Persönlichkeiten des öffentlichen Lebens. Es ist jedoch wichtig, dass wir diese Technologie mit
Bedacht einsetzen und uns ihrer Chancen und Risiken bewusst sind. Wir sollten uns bemühen, ihre Vorteile zu nutzen und
gleichzeitig dafür zu sorgen, dass sie im Einklang mit den Werten der Privatsphäre, der Fairness und den ethischen
Standards eingesetzt wird. Nur so können wir sicherstellen, dass die KI-Technologie unsere Gesellschaft und Kultur auch
in Zukunft weiter verbessert.</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
