<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">

  
  <title>API — Your Publication Name</title>

  
  <meta name="description" content="Public JSON API for {{ site.title }} — articles, quotes, events, glossary, and more.">

  
  <meta property="og:type" content="website">
  <meta property="og:title" content="API">
  <meta property="og:description" content="Public JSON API for {{ site.title }} — articles, quotes, events, glossary, and more.">
  <meta property="og:site_name" content="Your Publication Name">
  
  

  
  <meta name="twitter:card" content="summary_large_image">
  <meta name="twitter:title" content="API">
  <meta name="twitter:description" content="Public JSON API for {{ site.title }} — articles, quotes, events, glossary, and more.">
  

  
  <link rel="canonical" href="https://your-domain.com/api/">

  
  <link rel="alternate" type="application/rss+xml" title="Your Publication Name" href="https://your-domain.com/feed.xml">
  

  
  <link rel="icon" type="image/svg+xml" href="/assets/favicon.svg">
  <link rel="manifest" href="/manifest.json">
  <meta name="theme-color" content="#1a1a1a">

  
  <link rel="dns-prefetch" href="https://fonts.bunny.net">
  <link rel="preconnect" href="https://fonts.bunny.net" crossorigin>

  
  <link rel="stylesheet" href="https://fonts.bunny.net/css?family=dm-sans:ital,wght@0,300;0,400;0,500;0,600;0,700;1,400&amp;family=lora:ital,wght@0,400;0,600;0,700;1,400;1,600&amp;family=playfair-display:ital,wght@0,700;0,900;1,700&amp;family=source-serif-4:ital,wght@0,300;0,400;0,600;1,300;1,400&amp;display=swap" crossorigin>

  
  <link rel="stylesheet" href="/assets/css/main.css?v=1776465153130">

  
  <script src="/assets/js/theme.js"></script>

  
  
  <script type="application/ld+json">
  {
    "@context": "https://schema.org",
    "@type": "BreadcrumbList",
    "itemListElement": [
      { "@type": "ListItem", "position": 1, "name": "Home", "item": "https://your-domain.com/" },
      { "@type": "ListItem", "position": 2, "name": "API", "item": "https://your-domain.com/api/" }
    ]
  }
  </script>
  

  
  <script>window.__PREFIX='bs';</script>

  
  <script>
    (function(){const k='bs-theme',r=document.documentElement;function g(){try{return localStorage.getItem(k)}catch{return null}}function a(t){r.setAttribute('data-theme',t)}a(g()||(window.matchMedia('(prefers-color-scheme: dark)').matches?'dark':'light'))})();
  </script>

  
  

  
</head>

<body>
  <a href="#main-content" class="skip-link">Skip to main content</a>
  <div class="site-wrapper">

    
    

    
    <header class="masthead" role="banner" data-pagefind-ignore>
  <div class="container">

    
    <div class="masthead__nameplate">
      <button
        class="nav-drawer-toggle js-only"
        id="nav-drawer-toggle"
        aria-label="Open navigation menu"
        aria-expanded="false"
        aria-controls="nav-drawer"
        type="button"
        onclick="var d=document.getElementById('nav-drawer'),o=document.getElementById('nav-drawer-overlay');d.classList.add('is-open');o.classList.add('is-open');d.setAttribute('aria-hidden','false');this.setAttribute('aria-expanded','true');document.body.style.overflow='hidden';document.getElementById('nav-drawer-close').focus();">
        <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
          <line x1="3" y1="6" x2="21" y2="6"/>
          <line x1="3" y1="12" x2="21" y2="12"/>
          <line x1="3" y1="18" x2="21" y2="18"/>
        </svg>
      </button>
      <a href="/" class="masthead__title notranslate" aria-label="Your Publication Name — Home">
        Your Publication Name
      </a>
      <button
        class="masthead__search-mobile"
        type="button"
        aria-label="Search"
        title="Search"
        onclick="var m=document.getElementById('search-modal'),o=document.getElementById('search-overlay');if(m){m.classList.add('is-open');m.setAttribute('aria-hidden','false');o&&o.classList.add('is-open');document.body.style.overflow='hidden';var i=document.getElementById('search-input');i&&i.focus();}">
        <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg>
      </button>
      <div class="masthead__actions">

        
        <button
          class="masthead__icon-btn js-only"
          id="search-open"
          aria-label="Search"
          aria-expanded="false"
          aria-controls="search-modal"
          type="button"
          title="Search"
          onclick="var m=document.getElementById('search-modal'),o=document.getElementById('search-overlay');if(m){m.classList.add('is-open');m.setAttribute('aria-hidden','false');o&&o.classList.add('is-open');document.body.style.overflow='hidden';var i=document.getElementById('search-input');i&&i.focus();}">
          <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
            <circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/>
          </svg>
        </button>

        
        <a href="/notes/"
           class="masthead__icon-btn"
           aria-label="Notes & highlights"
           title="Notes & highlights">
          <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
            <path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/>
            <polyline points="14 2 14 8 20 8"/>
            <line x1="16" y1="13" x2="8" y2="13"/>
            <line x1="16" y1="17" x2="8" y2="17"/>
          </svg>
        </a>

        
        <a href="/reading-list/"
           class="masthead__icon-btn"
           aria-label="Reading list"
           title="Reading list">
          <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
            <path d="M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z"/>
          </svg>
        </a>

        
        <a href="/random/"
           class="masthead__icon-btn"
           aria-label="Surprise me — random article"
           title="Surprise me">
          <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
            <polyline points="16 3 21 3 21 8"/>
            <line x1="4" y1="20" x2="21" y2="3"/>
            <polyline points="21 16 21 21 16 21"/>
            <line x1="15" y1="15" x2="21" y2="21"/>
          </svg>
        </a>

        
        <div class="masthead__settings-wrap" style="position:relative;">
          <button
            class="masthead__icon-btn js-only"
            id="global-settings-btn"
            type="button"
            aria-label="Display settings"
            title="Display settings"
            onclick="var p=document.getElementById('global-settings-panel');p.hidden=!p.hidden;">
            <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
              <line x1="4" y1="21" x2="4" y2="14"/><line x1="4" y1="10" x2="4" y2="3"/>
              <line x1="12" y1="21" x2="12" y2="12"/><line x1="12" y1="8" x2="12" y2="3"/>
              <line x1="20" y1="21" x2="20" y2="16"/><line x1="20" y1="12" x2="20" y2="3"/>
              <line x1="1" y1="14" x2="7" y2="14"/><line x1="9" y1="8" x2="15" y2="8"/><line x1="17" y1="16" x2="23" y2="16"/>
            </svg>
          </button>
        </div>


      </div>
    </div>

    
    <div id="global-settings-panel" class="global-settings-panel" hidden>
      <div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--space-4);">
        <p style="font-family:var(--font-headline);font-size:var(--text-sm);font-weight:700;color:var(--color-ink);margin:0;">Display Settings</p>
        <button type="button" aria-label="Close" style="background:none;border:none;color:var(--color-ink-faint);cursor:pointer;padding:var(--space-1);line-height:1;" onclick="this.closest('.global-settings-panel').hidden=true;">
          <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>
        </button>
      </div>
      <div class="rs-group">
        <label class="rs-label" for="gs-font-size">Text size</label>
        <div class="rs-size-row">
          <span class="rs-size-a rs-small" aria-hidden="true">A</span>
          <input type="range" class="rs-slider" id="gs-font-size" min="14" max="24" step="1" value="16" aria-label="Font size">
          <span class="rs-size-a rs-large" aria-hidden="true">A</span>
        </div>
      </div>
      <div class="rs-group">
        <label class="rs-label" for="gs-font-select">Font</label>
        <select id="gs-font-select" class="rs-select">
          <optgroup label="Site fonts">
            <option value="default">Source Serif (default)</option>
            <option value="sans">DM Sans</option>
            <option value="lora">Lora</option>
            <option value="playfair">Playfair Display</option>
          </optgroup>
          <optgroup label="Serif">
            <option value="georgia">Georgia</option>
            <option value="palatino">Palatino</option>
            <option value="times">Times New Roman</option>
            <option value="garamond">Garamond</option>
            <option value="bookman">Bookman Old Style</option>
          </optgroup>
          <optgroup label="Sans-serif">
            <option value="system">System default</option>
            <option value="arial">Arial / Helvetica</option>
            <option value="verdana">Verdana</option>
            <option value="trebuchet">Trebuchet MS</option>
            <option value="tahoma">Tahoma</option>
            <option value="century">Century Gothic</option>
          </optgroup>
          <optgroup label="Monospace">
            <option value="mono">SF Mono / Consolas</option>
            <option value="courier">Courier New</option>
            <option value="lucida">Lucida Console</option>
          </optgroup>
          <optgroup label="Web fonts (loaded on demand)">
            <option value="inter">Inter</option>
            <option value="merriweather">Merriweather</option>
            <option value="roboto">Roboto</option>
            <option value="opensans">Open Sans</option>
            <option value="baskerville">Libre Baskerville</option>
            <option value="crimson">Crimson Pro</option>
            <option value="ibmplex">IBM Plex Serif</option>
            <option value="literata">Literata</option>
            <option value="atkinson">Atkinson Hyperlegible</option>
          </optgroup>
        </select>
      </div>
      <div class="rs-group">
        <p class="rs-label">Line spacing</p>
        <div class="rs-btngroup" role="group">
          <button class="rs-btn" data-gs-spacing="tight" type="button">Tight</button>
          <button class="rs-btn is-active" data-gs-spacing="normal" type="button">Normal</button>
          <button class="rs-btn" data-gs-spacing="relaxed" type="button">Relaxed</button>
        </div>
      </div>
      <div class="rs-group">
        <p class="rs-label">Word spacing</p>
        <div class="rs-btngroup" role="group">
          <button class="rs-btn is-active" data-gs-wordspace="normal" type="button">Normal</button>
          <button class="rs-btn" data-gs-wordspace="wide" type="button">Wide</button>
          <button class="rs-btn" data-gs-wordspace="wider" type="button">Wider</button>
        </div>
      </div>
      <div class="rs-group">
        <p class="rs-label">Theme</p>
        <div class="rs-btngroup" role="group" id="gs-theme-group">
          <button class="rs-btn is-active" data-gs-theme="auto" type="button">Auto</button>
          <button class="rs-btn" data-gs-theme="light" type="button">Light</button>
          <button class="rs-btn" data-gs-theme="sepia" type="button">Sepia</button>
          <button class="rs-btn" data-gs-theme="cream" type="button">Cream</button>
          <button class="rs-btn" data-gs-theme="dark" type="button">Dark</button>
        </div>
      </div>
      
      <button type="button" style="font-family:var(--font-ui);font-size:var(--text-xs);color:var(--color-ink-faint);background:none;border:none;cursor:pointer;padding:var(--space-1) 0;" onclick="if(window.__resetGlobalSettings)window.__resetGlobalSettings();">Reset to defaults</button>
    </div>

    
    <nav class="site-nav" aria-label="Main navigation">
      <div class="site-nav__inner">
        <ul class="site-nav__list" role="list">
          
          
          
          <li class="site-nav__item site-nav__item--has-dropdown">
            <a
              class="site-nav__link"
              href="/news/"
              id="nav-news" aria-haspopup="true" aria-expanded="false"
              >
              News
            </a>
          </li>
          
          
          
          <li class="site-nav__item site-nav__item--has-dropdown">
            <a
              class="site-nav__link"
              href="/opinion/"
              id="nav-opinion" aria-haspopup="true" aria-expanded="false"
              >
              Opinion
            </a>
          </li>
          
          
          
          <li class="site-nav__item">
            <a
              class="site-nav__link"
              href="/analysis/"
              
              >
              Analysis
            </a>
          </li>
          
          
          
          <li class="site-nav__item">
            <a
              class="site-nav__link"
              href="/arts-culture/"
              
              >
              Arts &amp; Culture
            </a>
          </li>
          
          
          
          <li class="site-nav__item">
            <a
              class="site-nav__link"
              href="/science-technology/"
              
              >
              Science &amp; Tech
            </a>
          </li>
          
          
          
          <li class="site-nav__item">
            <a
              class="site-nav__link"
              href="/history/"
              
              >
              History
            </a>
          </li>
          
          
          
          <li class="site-nav__item">
            <a
              class="site-nav__link"
              href="/letters/"
              
              >
              Letters
            </a>
          </li>
          
          
          
          <li class="site-nav__item">
            <a
              class="site-nav__link"
              href="/reviews/"
              
              >
              Reviews
            </a>
          </li>
          
          
          
          <li class="site-nav__item site-nav__item--has-dropdown">
            <a
              class="site-nav__link"
              href="/more/"
              id="nav-more" aria-haspopup="true" aria-expanded="false"
              >
              More
            </a>
          </li>
          
        </ul>
      </div>

      
      
      
      
      
      <div class="nav-dropdown" id="dropdown-news" aria-label="News">
        
          
          <a href="/news/welcome-to-broadsheet/" class="nav-dropdown__item">
            <span class="nav-dropdown__title">Welcome to Broadsheet</span>
            <span class="nav-dropdown__desc">An introduction to Broadsheet — the open-source publication template for independent journalism.</span>
          </a>
          
          <a href="/news/" class="nav-dropdown__footer">All news →</a>
        
      </div>
      
      
      
      
      
      <div class="nav-dropdown" id="dropdown-opinion" aria-label="Opinion">
        
          
          <a href="/opinion/why-independent-publishing-matters/" class="nav-dropdown__item">
            <span class="nav-dropdown__title">Why Independent Publishing Matters</span>
            <span class="nav-dropdown__desc">The case for building your own publication platform instead of relying on third-party services.</span>
          </a>
          
          <a href="/opinion/" class="nav-dropdown__footer">All opinion →</a>
        
      </div>
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      <div class="nav-dropdown" id="dropdown-more" aria-label="More">
        
          <div class="nav-mega">
            <div class="nav-mega__col">
              <p class="nav-mega__heading">Explore</p>
              <a href="/library/" class="nav-mega__link">
                <span class="nav-mega__title">Public Domain Library</span>
                <span class="nav-mega__desc">Full texts from the freethought tradition</span>
              </a>
              <a href="/quotes/" class="nav-mega__link">
                <span class="nav-mega__title">Quotes</span>
                <span class="nav-mega__desc">Curated freethought quotes</span>
              </a>
              <a href="/videos/" class="nav-mega__link">
                <span class="nav-mega__title">Videos</span>
                <span class="nav-mega__desc">Lectures, debates, and documentaries</span>
              </a>
              <a href="/timeline/" class="nav-mega__link">
                <span class="nav-mega__title">Timeline</span>
                <span class="nav-mega__desc">2,400 years of freethought history</span>
              </a>
            </div>
            <div class="nav-mega__col">
              <p class="nav-mega__heading">Projects</p>
              <a href="/glossary/" class="nav-mega__link">
                <span class="nav-mega__title">Glossary</span>
                <span class="nav-mega__desc">Philosophical terms and definitions</span>
              </a>
              <a href="/bookshelf/" class="nav-mega__link">
                <span class="nav-mega__title">Bookshelf</span>
                <span class="nav-mega__desc">Reading recommendations</span>
              </a>
              <a href="/thought-experiments/" class="nav-mega__link">
                <span class="nav-mega__title">Thought Experiments</span>
                <span class="nav-mega__desc">Classic experiments examined</span>
              </a>
              <a href="/trials/" class="nav-mega__link">
                <span class="nav-mega__title">Trials of Thought</span>
                <span class="nav-mega__desc">Landmark trials of ideas</span>
              </a>
              <a href="/games/" class="nav-mega__link">
                <span class="nav-mega__title">Games</span>
                <span class="nav-mega__desc">Trivia, puzzles, and word games</span>
              </a>
            </div>
            <div class="nav-mega__col">
              <p class="nav-mega__heading">Community</p>
              <a href="/community/" class="nav-mega__link">
                <span class="nav-mega__title">Community Hub</span>
                <span class="nav-mega__desc">Organizations worldwide</span>
              </a>
              <a href="/events/" class="nav-mega__link">
                <span class="nav-mega__title">Events</span>
                <span class="nav-mega__desc">Conferences and meetups</span>
              </a>
              <a href="/resources/" class="nav-mega__link">
                <span class="nav-mega__title">Resources</span>
                <span class="nav-mega__desc">Education, legal, and support</span>
              </a>
              <a href="/contribute/" class="nav-mega__link">
                <span class="nav-mega__title">Contribute</span>
                <span class="nav-mega__desc">Support and participate</span>
              </a>
              <a href="/newsletter/" class="nav-mega__link">
                <span class="nav-mega__title">Newsletter</span>
                <span class="nav-mega__desc">Free, no tracking</span>
              </a>
            </div>
            <div class="nav-mega__col">
              <p class="nav-mega__heading">About</p>
              <a href="/about/" class="nav-mega__link">
                <span class="nav-mega__title">About Us</span>
                <span class="nav-mega__desc">What we are and why</span>
              </a>
              <a href="/contact/" class="nav-mega__link">
                <span class="nav-mega__title">Contact</span>
                <span class="nav-mega__desc">Get in touch</span>
              </a>
              <a href="/support/" class="nav-mega__link">
                <span class="nav-mega__title">Support</span>
                <span class="nav-mega__desc">Keep us independent</span>
              </a>
              <a href="/features/" class="nav-mega__link">
                <span class="nav-mega__title">Features</span>
                <span class="nav-mega__desc">What this site can do</span>
              </a>
              <a href="/open-source/" class="nav-mega__link">
                <span class="nav-mega__title">Open Source</span>
                <span class="nav-mega__desc">Fork our codebase</span>
              </a>
            </div>
            <div class="nav-mega__col">
              <p class="nav-mega__heading">Reader Tools</p>
              <a href="/search/" class="nav-mega__link">
                <span class="nav-mega__title">Search</span>
                <span class="nav-mega__desc">Full search page</span>
              </a>
              <a href="/start-here/" class="nav-mega__link">
                <span class="nav-mega__title">Start Here</span>
                <span class="nav-mega__desc">New to the site?</span>
              </a>
              <a href="/notes/" class="nav-mega__link">
                <span class="nav-mega__title">Notes & Highlights</span>
                <span class="nav-mega__desc">Your saved annotations</span>
              </a>
              <a href="/reading-list/" class="nav-mega__link">
                <span class="nav-mega__title">Reading List</span>
                <span class="nav-mega__desc">Saved articles</span>
              </a>
              <a href="/reader/" class="nav-mega__link">
                <span class="nav-mega__title">RSS Reader</span>
                <span class="nav-mega__desc">Freethought feeds</span>
              </a>
              <a href="/archives/" class="nav-mega__link">
                <span class="nav-mega__title">Archives</span>
                <span class="nav-mega__desc">All articles by date</span>
              </a>
            </div>
          </div>
        
      </div>
      
      
    </nav>

  </div>
</header>





<div class="search-overlay js-only" id="search-overlay" aria-hidden="true" onclick="var m=document.getElementById('search-modal'),o=this;m.classList.remove('is-open');m.setAttribute('aria-hidden','true');o.classList.remove('is-open');document.body.style.overflow='';document.getElementById('search-input').value='';document.getElementById('search-results').innerHTML='';"></div>

<div
  class="search-modal js-only"
  id="search-modal"
  role="dialog"
  aria-label="Search"
  aria-hidden="true"
  aria-modal="true">

  <div class="search-modal__header">
    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" style="flex-shrink:0;color:var(--color-ink-faint)">
      <circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/>
    </svg>
    <input
      class="search-modal__input"
      id="search-input"
      type="search"
      placeholder="Search articles, topics, authors…"
      autocomplete="off"
      autocorrect="off"
      spellcheck="false"
      aria-label="Search query"
      aria-controls="search-results"
      aria-autocomplete="list">
    <button
      class="search-modal__voice js-only"
      id="voice-search-btn"
      type="button"
      aria-label="Search by voice"
      title="Search by voice"
      hidden>
      <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z"/><path d="M19 10v2a7 7 0 0 1-14 0v-2"/><line x1="12" y1="19" x2="12" y2="23"/><line x1="8" y1="23" x2="16" y2="23"/></svg>
    </button>
    <button
      class="search-modal__close"
      id="search-close"
      type="button"
      aria-label="Close search"
      onclick="var m=document.getElementById('search-modal'),o=document.getElementById('search-overlay');m.classList.remove('is-open');m.setAttribute('aria-hidden','true');o&&o.classList.remove('is-open');document.body.style.overflow='';document.getElementById('search-input').value='';document.getElementById('search-results').innerHTML='';">
      ✕
    </button>
  </div>

  <div class="search-filters" id="search-filters" aria-label="Filter results by section">
    <button class="search-filter-btn is-active" data-filter-section="" type="button">All</button>
    
    <button class="search-filter-btn" data-filter-section="News" type="button">News</button>
    
    <button class="search-filter-btn" data-filter-section="Opinion" type="button">Opinion</button>
    
    <button class="search-filter-btn" data-filter-section="Analysis" type="button">Analysis</button>
    
    <button class="search-filter-btn" data-filter-section="Arts &amp; Culture" type="button">Arts &amp; Culture</button>
    
    <button class="search-filter-btn" data-filter-section="Science &amp; Tech" type="button">Science &amp; Tech</button>
    
    <button class="search-filter-btn" data-filter-section="History" type="button">History</button>
    
    <button class="search-filter-btn" data-filter-section="Letters" type="button">Letters</button>
    
    <button class="search-filter-btn" data-filter-section="Reviews" type="button">Reviews</button>
    
    <button class="search-filter-btn" data-filter-section="Thought Experiments" type="button">Thought Experiments</button>
    
    <button class="search-filter-btn" data-filter-section="Trials of Thought" type="button">Trials of Thought</button>
    
    <button class="search-filter-btn" data-filter-section="Glossary" type="button">Glossary</button>
    
    <button class="search-filter-btn" data-filter-section="Bookshelf" type="button">Bookshelf</button>
    
    <button class="search-filter-btn" data-filter-section="Quotes" type="button">Quotes</button>
    <button class="search-filter-btn" data-filter-section="Videos" type="button">Videos</button>
    <button class="search-filter-btn" data-filter-section="Timeline" type="button">Timeline</button>
  </div>

  <div class="search-modal__results" id="search-results" role="listbox" aria-label="Search results">
  </div>

  <div class="search-modal__footer" aria-hidden="true">
    <span><kbd>↑↓</kbd> navigate</span>
    <span><kbd>↵</kbd> open</span>
    <span><kbd>Esc</kbd> close</span>
    <span><kbd>/</kbd> open from anywhere</span>
  </div>

</div>


<div class="nav-drawer-overlay js-only" id="nav-drawer-overlay" aria-hidden="true" onclick="var d=document.getElementById('nav-drawer');d.classList.remove('is-open');this.classList.remove('is-open');d.setAttribute('aria-hidden','true');document.getElementById('nav-drawer-toggle').setAttribute('aria-expanded','false');document.body.style.overflow='';"></div>

<nav
  class="nav-drawer js-only"
  id="nav-drawer"
  aria-label="Full site navigation"
  aria-hidden="true">

  <div class="nav-drawer__header">
    <span class="nav-drawer__label">Your Publication Name</span>
    <button class="nav-drawer__close" id="nav-drawer-close" type="button" aria-label="Close navigation menu" onclick="var d=document.getElementById('nav-drawer'),o=document.getElementById('nav-drawer-overlay');d.classList.remove('is-open');o.classList.remove('is-open');d.setAttribute('aria-hidden','true');document.getElementById('nav-drawer-toggle').setAttribute('aria-expanded','false');document.body.style.overflow='';">
      <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>
    </button>
  </div>

  
  <p class="nav-drawer__section-label">Sections</p>
  <ul class="nav-drawer__list" role="list">
    
    
    <li><a class="nav-drawer__link nav-drawer__link--primary" href="/news/" >News</a></li>
    
    
    
    <li><a class="nav-drawer__link nav-drawer__link--primary" href="/opinion/" >Opinion</a></li>
    
    
    
    <li><a class="nav-drawer__link nav-drawer__link--primary" href="/analysis/" >Analysis</a></li>
    
    
    
    <li><a class="nav-drawer__link nav-drawer__link--primary" href="/arts-culture/" >Arts &amp; Culture</a></li>
    
    
    
    <li><a class="nav-drawer__link nav-drawer__link--primary" href="/science-technology/" >Science &amp; Tech</a></li>
    
    
    
    <li><a class="nav-drawer__link nav-drawer__link--primary" href="/history/" >History</a></li>
    
    
    
    <li><a class="nav-drawer__link nav-drawer__link--primary" href="/letters/" >Letters</a></li>
    
    
    
    <li><a class="nav-drawer__link nav-drawer__link--primary" href="/reviews/" >Reviews</a></li>
    
    
    
    
  </ul>

  <div class="nav-drawer__divider"></div>

  
  <p class="nav-drawer__section-label">Projects</p>
  <ul class="nav-drawer__list" role="list">
    <li><a class="nav-drawer__link" href="/library/">Public Domain Library</a></li>
    <li><a class="nav-drawer__link" href="/quotes/">Freethought Quotes</a></li>
    <li><a class="nav-drawer__link" href="/videos/">Freethought Videos</a></li>
    <li><a class="nav-drawer__link" href="/timeline/">Freethought Timeline</a></li>
    <li><a class="nav-drawer__link" href="/resources/">Freethought Resources</a></li>
    <li><a class="nav-drawer__link" href="/glossary/">Freethought Glossary</a></li>
    <li><a class="nav-drawer__link" href="/bookshelf/">Freethinker's Bookshelf</a></li>
    <li><a class="nav-drawer__link" href="/thought-experiments/">Thought Experiments</a></li>
    <li><a class="nav-drawer__link" href="/trials/">Trials of Thought</a></li>
    <li><a class="nav-drawer__link" href="/music/">Freethought Music</a></li>
    <li><a class="nav-drawer__link" href="/gallery/">Gallery</a></li>
    <li><a class="nav-drawer__link" href="/games/">Games</a></li>
  </ul>

  <div class="nav-drawer__divider"></div>

  
  <p class="nav-drawer__section-label">Community</p>
  <ul class="nav-drawer__list" role="list">
    <li><a class="nav-drawer__link" href="/community/">Community Hub</a></li>
    <li><a class="nav-drawer__link" href="/events/">Events Calendar</a></li>
    <li><a class="nav-drawer__link" href="/newsletter/">Newsletter</a></li>
    <li><a class="nav-drawer__link" href="/contribute/">Contribute</a></li>
    <li><a class="nav-drawer__link" href="/submit/">Submit</a></li>
  </ul>

  <div class="nav-drawer__divider"></div>

  
  <ul class="nav-drawer__list" role="list">
    <li><a class="nav-drawer__link nav-drawer__link--small" href="/about/">About</a></li>
    <li><a class="nav-drawer__link nav-drawer__link--small" href="/contact/">Contact</a></li>
    <li><a class="nav-drawer__link nav-drawer__link--small" href="/reader-tools/">Reader Tools</a></li>
    <li><a class="nav-drawer__link nav-drawer__link--small" href="/transparency/">Transparency</a></li>
    <li><a class="nav-drawer__link nav-drawer__link--small" href="/legal/">Legal</a></li>
  </ul>

  
  <div class="nav-drawer__toolbar">
    <a href="/notes/" title="Notes"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/><line x1="16" y1="13" x2="8" y2="13"/><line x1="16" y1="17" x2="8" y2="17"/></svg></a>
    <a href="/reading-list/" title="Reading list"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z"/></svg></a>
    <a href="/random/" title="Surprise me"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 3 21 3 21 8"/><line x1="4" y1="20" x2="21" y2="3"/><polyline points="21 16 21 21 16 21"/><line x1="15" y1="15" x2="21" y2="21"/></svg></a>
    <button type="button" title="Display settings" class="js-only" onclick="var d=document.getElementById('nav-drawer'),o=document.getElementById('nav-drawer-overlay'),t=document.getElementById('nav-drawer-toggle');if(d){d.classList.remove('is-open');d.setAttribute('aria-hidden','true');}if(o)o.classList.remove('is-open');if(t)t.setAttribute('aria-expanded','false');document.body.style.overflow='';setTimeout(function(){var p=document.getElementById('global-settings-panel');if(p)p.hidden=false;},150);">
      <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="4" y1="21" x2="4" y2="14"/><line x1="4" y1="10" x2="4" y2="3"/><line x1="12" y1="21" x2="12" y2="12"/><line x1="12" y1="8" x2="12" y2="3"/><line x1="20" y1="21" x2="20" y2="16"/><line x1="20" y1="12" x2="20" y2="3"/><line x1="1" y1="14" x2="7" y2="14"/><line x1="9" y1="8" x2="15" y2="8"/><line x1="17" y1="16" x2="23" y2="16"/></svg>
    </button>
  </div>

</nav>


    
    <main id="main-content" class="site-main">
      
<div class="container" style="padding-top: var(--space-10); padding-bottom: var(--space-20);">
  <div class="container--prose">

    <header style="margin-bottom: var(--space-8); padding-bottom: var(--space-6); border-bottom: 3px solid var(--color-ink);">
      <h1 style="font-family: var(--font-masthead); font-size: clamp(1.8rem, 5vw, 3.815rem); margin-bottom: var(--space-4);">Public API</h1>
      <p style="font-size: var(--text-lg); color: var(--color-ink-muted); font-style: italic; max-width: 55ch;">
        Every piece of content on this site is also available as JSON. Use it for integrations, mirrors, research, or to build something new.
      </p>
    </header>

    <div class="article-body">

      <h2>Endpoints</h2>

      <p>All endpoints are static JSON files regenerated on every build. No authentication required. CORS is enabled for client-side use.</p>

      <table style="width:100%;font-size:var(--text-sm);border-collapse:collapse;margin:var(--space-6) 0;">
        <thead>
          <tr style="border-bottom:2px solid var(--color-ink);text-align:left;">
            <th style="padding:var(--space-2);">Endpoint</th>
            <th style="padding:var(--space-2);">Returns</th>
          </tr>
        </thead>
        <tbody>
          <tr style="border-bottom:1px solid var(--color-rule);"><td style="padding:var(--space-2);"><a href="/api/articles.json"><code>/api/articles.json</code></a></td><td style="padding:var(--space-2);">All published articles with metadata</td></tr>
          <tr style="border-bottom:1px solid var(--color-rule);"><td style="padding:var(--space-2);"><a href="/api/sections.json"><code>/api/sections.json</code></a></td><td style="padding:var(--space-2);">Editorial sections with descriptions and article counts</td></tr>
          <tr style="border-bottom:1px solid var(--color-rule);"><td style="padding:var(--space-2);"><a href="/api/authors.json"><code>/api/authors.json</code></a></td><td style="padding:var(--space-2);">All authors with their bylines and article counts</td></tr>
          <tr style="border-bottom:1px solid var(--color-rule);"><td style="padding:var(--space-2);"><a href="/api/quotes.json"><code>/api/quotes.json</code></a></td><td style="padding:var(--space-2);">All quotes with author, source, era, and tags</td></tr>
          <tr style="border-bottom:1px solid var(--color-rule);"><td style="padding:var(--space-2);"><a href="/api/timeline.json"><code>/api/timeline.json</code></a></td><td style="padding:var(--space-2);">Historical timeline entries</td></tr>
          <tr style="border-bottom:1px solid var(--color-rule);"><td style="padding:var(--space-2);"><a href="/api/glossary.json"><code>/api/glossary.json</code></a></td><td style="padding:var(--space-2);">All glossary terms with definitions</td></tr>
          <tr style="border-bottom:1px solid var(--color-rule);"><td style="padding:var(--space-2);"><a href="/api/bookshelf.json"><code>/api/bookshelf.json</code></a></td><td style="padding:var(--space-2);">Recommended reading entries</td></tr>
          <tr style="border-bottom:1px solid var(--color-rule);"><td style="padding:var(--space-2);"><a href="/api/events.json"><code>/api/events.json</code></a></td><td style="padding:var(--space-2);">Upcoming and past events</td></tr>
          <tr style="border-bottom:1px solid var(--color-rule);"><td style="padding:var(--space-2);"><a href="/api/videos.json"><code>/api/videos.json</code></a></td><td style="padding:var(--space-2);">Video library entries</td></tr>
          <tr style="border-bottom:1px solid var(--color-rule);"><td style="padding:var(--space-2);"><a href="/api/songs.json"><code>/api/songs.json</code></a></td><td style="padding:var(--space-2);">Freethought Music song collection</td></tr>
          <tr style="border-bottom:1px solid var(--color-rule);"><td style="padding:var(--space-2);"><a href="/api/trials.json"><code>/api/trials.json</code></a></td><td style="padding:var(--space-2);">Trials of Thought entries</td></tr>
          <tr style="border-bottom:1px solid var(--color-rule);"><td style="padding:var(--space-2);"><a href="/api/thought-experiments.json"><code>/api/thought-experiments.json</code></a></td><td style="padding:var(--space-2);">Thought experiments</td></tr>
          <tr><td style="padding:var(--space-2);"><a href="/api/manifest.json"><code>/api/manifest.json</code></a></td><td style="padding:var(--space-2);">Index of all endpoints with metadata</td></tr>
        </tbody>
      </table>

      <h2>Example: Fetching recent articles</h2>

      <pre style="background:var(--color-bg-alt);padding:var(--space-4);border:1px solid var(--color-rule);overflow-x:auto;font-size:var(--text-sm);"><code>fetch('https://your-domain.com/api/articles.json')
  .then(r =&gt; r.json())
  .then(data =&gt; {
    console.log(`${data.count} articles`);
    data.articles.slice(0, 5).forEach(a =&gt; {
      console.log(`${a.title} — ${a.section}`);
    });
  });</code></pre>

      <h2>Data format</h2>

      <p>Each endpoint returns a JSON object with:</p>
      <ul>
        <li><code>generated</code> — ISO 8601 timestamp of the build</li>
        <li><code>count</code> — total items in the response</li>
        <li><code>[collection_name]</code> — array of items (e.g. <code>articles</code>, <code>quotes</code>, <code>events</code>)</li>
      </ul>

      <h2>Usage terms</h2>

      <p>The API is free to use for any purpose, commercial or non-commercial, with the following conditions:</p>
      <ul>
        <li>Content remains the property of its authors (editorial articles) or the public domain (library texts)</li>
        <li>Attribution is appreciated but not required</li>
        <li>Please be considerate with request volume — these are static files on a CDN, but high-frequency polling should use the RSS feed instead</li>
        <li>Let us know what you build — we'd love to see it</li>
      </ul>

      <h2>Feeds and sitemaps</h2>

      <ul>
        <li><a href="/feed.xml"><code>/feed.xml</code></a> — RSS feed of recent articles</li>
        <li><a href="/sitemap.xml"><code>/sitemap.xml</code></a> — XML sitemap of all pages</li>
        <li><a href="/news-sitemap.xml"><code>/news-sitemap.xml</code></a> — Google News sitemap</li>
      </ul>

    </div>
  </div>
</div>

    </main>

    
    <footer class="site-footer" role="contentinfo" data-pagefind-ignore>
  <div class="container">

    
    <div class="site-footer__grid">

      
      <div class="site-footer__brand">
        <div class="site-footer__brand-info">
          <p style="font-family: var(--font-masthead); font-size: clamp(1rem, 3vw, var(--text-xl)); color: var(--color-ink); margin-bottom: var(--space-2); display: flex; align-items: center; gap: 0.5rem; white-space: nowrap;">
            <img src="/assets/favicon.svg" alt="" aria-hidden="true" width="24" height="24">Your Publication Name
          </p>
          <p style="font-size: var(--text-sm); color: var(--color-ink-muted); max-width: 42ch; line-height: var(--leading-normal);">
            Founded 2026. Investigative. Philosophical. Adversarial to power.
          </p>
        </div>
        <div class="site-footer__brand-newsletter">
          
          





<div class="subscribe-block--footer" aria-label="Subscribe">
  <h3 class="subscribe-block__heading">Get new pieces by email</h3>
  <p class="subscribe-block__body">
    Independent journalism delivered directly. Free, always. Unsubscribe at any time.
  </p>
  <form class="subscribe-form" data-action="https://buttondown.com/api/emails/embed-subscribe/" novalidate>
    <label for="subscribe-email-footer" class="visually-hidden">Your email address</label>
    <input
      class="subscribe-form__input"
      id="subscribe-email-footer"
      type="email"
      name="email"
      placeholder="your@email.com"
      autocomplete="email"
      required>
    <button class="subscribe-form__btn" type="submit">Subscribe</button>
  </form>
  <div class="subscribe-status" role="alert" aria-live="polite"></div>
</div>



        </div>
      </div>

      
      <div>
        <p class="site-footer__heading">Sections</p>
        <ul class="site-footer__nav">
          
          
          <li><a href="/news/">News</a></li>
          
          
          
          <li><a href="/opinion/">Opinion</a></li>
          
          
          
          <li><a href="/analysis/">Analysis</a></li>
          
          
          
          <li><a href="/arts-culture/">Arts &amp; Culture</a></li>
          
          
          
          <li><a href="/science-technology/">Science &amp; Tech</a></li>
          
          
          
          <li><a href="/history/">History</a></li>
          
          
          
          <li><a href="/letters/">Letters</a></li>
          
          
          
          <li><a href="/reviews/">Reviews</a></li>
          
          
          
          
        </ul>
      </div>

      
      <div>
        <p class="site-footer__heading"><a href="/contribute/" style="color:inherit;text-decoration:none;">Contribute</a></p>
        <ul class="site-footer__nav">
          <li><a href="/contribute/" title="Guidelines for writing for us">Write for Us</a></li>
          <li><a href="/submit/" title="Pitch an article for publication">Submit an Article</a></li>
          <li><a href="/letters/submit/" title="Respond to something we published">Write a Letter</a></li>
          <li><a href="/support/" title="Help keep us independent">Support Us</a></li>
        </ul>
      </div>

      
      <div>
        <p class="site-footer__heading">Freethought Community</p>
        <ul class="site-footer__nav">
          <li><a href="/community/" title="Freethought groups worldwide">Community Directory</a></li>
          <li><a href="/events/" title="Conferences, meetups, and observances">Events Calendar</a></li>
          <li><a href="/community-guidelines/" title="Standards for respectful conversation">Community Guidelines</a></li>
          <li><a href="/newsletter/" title="New articles delivered by email">Newsletter</a></li>
          <li><a href="/reader/" title="Follow freethought publications">RSS Reader</a></li>
          <li><a href="/community/submit/" title="Suggest a group for the directory">Suggest a Group</a></li>
        </ul>
      </div>

      
      <div>
        <p class="site-footer__heading"><a href="/projects/" style="color:inherit;text-decoration:none;">Freethought Projects</a></p>
        <ul class="site-footer__nav">
          <li><a href="/music/" title="Curated playlists for reading and thinking">Freethought Music</a></li>
          <li><a href="/glossary/" title="86 terms defined clearly">Glossary of Terms</a></li>
          <li><a href="/timeline/" title="2,500 years of freethought history">Historical Timeline</a></li>
          <li><a href="/gallery/" title="Natural world photography">Photo Gallery</a></li>
          <li><a href="/library/" title="Read classic freethought texts online">Public Domain Library</a></li>
          <li><a href="/quotes/" title="Curated quotes from the freethought tradition">Quotes Collection</a></li>
          <li><a href="/bookshelf/" title="Annotated reading recommendations">Recommended Reading</a></li>
          <li><a href="/resources/" title="Education, legal, support, and tools">Resources</a></li>
          <li><a href="/thought-experiments/" title="Classic thought experiments examined">Thought Experiments</a></li>
          <li><a href="/trials/" title="Landmark trials where ideas were the defendant">Trials of Thought</a></li>
          <li><a href="/videos/" title="Lectures, debates, and documentaries">Video Library</a></li>
        </ul>
      </div>

      
      <div>
        <p class="site-footer__heading">Contribute to Our Projects</p>
        <ul class="site-footer__nav">
          <li><a href="/bookshelf/submit/" title="Recommend a book for the reading list">Recommend a Book</a></li>
          <li><a href="/music/submit/" title="Recommend a song for our playlists">Recommend a Song</a></li>
          <li><a href="/glossary/submit/" title="Suggest a term worth defining">Suggest a Glossary Term</a></li>
          <li><a href="/library/submit/" title="Suggest a public domain text for the library">Suggest a Library Text</a></li>
          <li><a href="/thought-experiments/submit/" title="Suggest a thought experiment to cover">Suggest a Thought Experiment</a></li>
          <li><a href="/trials/submit/" title="Suggest a trial where ideas were the defendant">Suggest a Trial</a></li>
          <li><a href="/events/submit/" title="Add an event to the calendar">Submit an Event</a></li>
          <li><a href="/gallery/submit/" title="Contribute a photo to the gallery">Submit a Photo</a></li>
          <li><a href="/quotes/submit/" title="Suggest a quote for the collection">Submit a Quote</a></li>
          <li><a href="/timeline/submit/" title="Suggest a pivotal moment in freethought history">Submit a Timeline Entry</a></li>
        </ul>
      </div>

      
      <div>
        <p class="site-footer__heading">Contact</p>
        <ul class="site-footer__nav">
          <li><a href="/contact/" title="General enquiries">Contact Us</a></li>
          <li><a href="/feedback/" title="Report bugs, suggest features">Send Feedback</a></li>
          <li><a href="/tips/" title="Anonymous tip submissions">Tip Line</a></li>
          <li><a href="/corrections/report/" title="Report a factual error">Report a Correction</a></li>
        </ul>
      </div>

      
      <div>
        <p class="site-footer__heading"><a href="/reader-tools/" style="color:inherit;text-decoration:none;">Reader Tools</a></p>
        <ul class="site-footer__nav">
          <li><a href="/archives/" title="Every article indexed by date">Archives</a></li>
          <li><a href="/editions/" title="Articles grouped into numbered editions">Editions</a></li>
          <li><a href="/notes/" title="Your highlights, notes, and bookmarks">Notes & Highlights</a></li>
          <li><a href="/reading-list/" title="Articles you've saved to read later">Reading List</a></li>
          <li><a href="/feed.xml" title="Subscribe in any RSS reader">RSS Feed</a></li>
          <li><a href="/api/" title="Public JSON API for developers">API</a></li>
          <li><a href="/search/" title="Full-text search across the site">Search</a></li>
          <li><a href="/start-here/" title="A curated introduction for new readers">Start Here</a></li>
          <li><a href="/your-data/" title="Export, import, or clear your data">Your Data</a></li>
        </ul>
      </div>

      
      <div>
        <p class="site-footer__heading">About</p>
        <ul class="site-footer__nav">
          <li><a href="/about/" title="What we are and why we exist">About Us</a></li>
          <li><a href="/masthead/" title="Who runs this publication">Masthead</a></li>
          <li><a href="/contributors/" title="Writers and contributors">Contributors</a></li>
          <li><a href="/ethics/" title="Our editorial standards">Editorial Ethics</a></li>
          <li><a href="/editorial/" title="Public editorial handbook">Editorial Handbook</a></li>
          <li><a href="/dashboard/" title="Content counts and recent articles">Editorial Dashboard</a></li>
          <li><a href="/editorial/board/" title="Kanban view of articles by status">Editorial Board</a></li>
          <li><a href="/templates/" title="Pre-filled markdown templates for common article types">Content Templates</a></li>
          <li><a href="/abbreviations/" title="Personal abbreviation dictionary">Abbreviations</a></li>
        </ul>
      </div>

      
      <div>
        <p class="site-footer__heading"><a href="/transparency/" style="color:inherit;text-decoration:none;">Transparency</a></p>
        <ul class="site-footer__nav">
          <li><a href="/features/" title="Complete inventory of site features">Features</a></li>
          <li><a href="/stack/" title="The technology behind every page">How It's Built</a></li>
          <li><a href="/changelog/" title="Public record of every site change">Changelog</a></li>
          <li><a href="/open-source/" title="Fork this site on GitHub">Open Source</a></li>
          <li><a href="/style-guide/" title="Brand identity, typography, colours">Style Guide</a></li>
          
        </ul>
      </div>

      
      <div>
        <p class="site-footer__heading"><a href="/legal/" style="color:inherit;text-decoration:none;">Legal</a></p>
        <ul class="site-footer__nav">
          <li><a href="/privacy/" title="What data we collect and don't collect">Privacy Policy</a></li>
          <li><a href="/terms/" title="Terms for using this site">Terms of Use</a></li>
          <li><a href="/cookies/" title="How we use cookies and browser storage">Cookies Policy</a></li>
          <li><a href="/accessibility/" title="Our WCAG 2.2 AA commitment">Accessibility</a></li>
          <li><a href="/site-map/" title="Directory of every page">Site Map</a></li>
        </ul>
      </div>

    </div>

    
    <div class="site-footer__bottom">
      <p style="font-size: var(--text-xs); color: var(--color-ink-faint);">
        &copy; 2026 Your Publication Name.
        Content is the property of its respective authors.
      </p>
    </div>

  </div>
</footer>


  </div>

  
  <script src="/assets/js/drawer.js" defer></script>
  <script src="/assets/js/smart-header.js" defer></script>
  <script src="/assets/js/search.js" defer></script>
  <script src="/assets/js/subscribe.js" defer></script>
  <script src="/assets/js/global-settings.js" defer></script>
  <script src="/assets/js/spa-nav.js" defer></script>
  <script src="https://www.youtube.com/iframe_api" defer></script>
  <script src="/assets/js/music-player.js" defer></script>
  

  
  <script>
  window.__glossaryTerms=[];
  </script>
  <script src="/assets/js/popper.min.js" defer></script>
  <script src="/assets/js/tippy.min.js" defer></script>
  <script src="/assets/js/glossary-tips.js" defer></script>

  
  

  
  <script src="/assets/js/reader-panel-migrate.js" defer></script>

  
  <script src="/assets/js/keyboard-shortcuts.js" defer></script>

  
  <script src="/assets/js/reading-progress.js" defer></script>

  
  
  <script src="https://web3forms.com/client/script.js" async defer></script>
  <script src="/assets/js/dictation.js" defer></script>
  <script>
  document.addEventListener('DOMContentLoaded',function(){
    document.querySelectorAll('.w3f').forEach(function(f){
      f.addEventListener('submit',function(){
        var btn=f.querySelector('.w3f__submit');
        if(btn){btn.disabled=true;btn.textContent='Submitting\u2026';}
      });
    });
  });
  </script>
  

  
  <script>
  (function(){
    var eb=document.getElementById('data-export-btn');
    var ib=document.getElementById('data-import-btn');
    if(eb)eb.addEventListener('click',function(){
      var d={};for(var i=0;i<localStorage.length;i++){var k=localStorage.key(i);if(k)d[k]=localStorage.getItem(k);}
      var b=new Blob([JSON.stringify(d,null,2)],{type:'application/json'});
      var u=URL.createObjectURL(b);var a=document.createElement('a');
      a.href=u;a.download='tft-backup.json';a.click();URL.revokeObjectURL(u);
    });
    if(ib)ib.addEventListener('click',function(){
      var i=document.createElement('input');i.type='file';i.accept='.json';
      i.onchange=function(){var r=new FileReader();r.onload=function(){
        try{var d=JSON.parse(r.result);Object.keys(d).forEach(function(k){localStorage.setItem(k,d[k]);});
        alert('Imported '+Object.keys(d).length+' items.');}catch(e){alert('Invalid file.');}
      };r.readAsText(i.files[0]);};i.click();
    });
  })();
  </script>

  
  <script src="/assets/js/instant.page.js" type="module" defer></script>

  
  <script>
    if ('serviceWorker' in navigator) {
      window.addEventListener('load', function () {
        navigator.serviceWorker.register('/sw.js');
      });
    }
  </script>

  
  

  
  
</body>
</html>
