<?php
/* ============================================================
   THEORIES OF ANYTHING — Research Corpus Browser
   index.php — main page: search + topic cards + section grid
   ============================================================
   SETUP:
     1. Drop this file in /public_html/research/
     2. Put your .md files anywhere under /public_html/research/_docs/
        (subfolders work — mirrors your local corpus folder structure)
     3. Download Parsedown.php from https://github.com/erusev/parsedown
        and place it alongside this file. view.php requires it.
     4. The _cache/ folder is created automatically on first load.
   ============================================================ */

// ---- CONFIG ------------------------------------------------
define('SITE_ROOT',  '/');      // adjust if not at domain root
define('RES_ROOT',   '/research/');
define('DOCS_PER_PAGE', 20);    // search results per page

require __DIR__ . '/_cache.php';

// ---- SEARCH ------------------------------------------------
// Score: keyword match = 3pts, title match = 2pts, tag match = 1pt.
function score_doc(array $doc, array $terms): int {
    $score = 0;
    $kw    = strtolower($doc['keywords']);
    $title = strtolower($doc['title']);
    $tags  = strtolower($doc['tags']);
    foreach ($terms as $t) {
        if (str_contains($kw,    $t)) $score += 3;
        if (str_contains($title, $t)) $score += 2;
        if (str_contains($tags,  $t)) $score += 1;
    }
    return $score;
}

// ---- SPELLCHECK / "DID YOU MEAN" ----------------------------
// Builds a vocabulary of real words from the corpus's own keywords/tags/title
// fields, then suggests the nearest known word (by edit distance) for any
// query term that matched nothing — so a typo still finds the right doc.
$SPELLCHECK_STOPWORDS = array_flip([
    'the','and','for','with','from','that','this','are','was','were','has','have','been',
    'into','your','but','not','you','all','can','its','his','her','who','why','how','did',
    'where','what','when','which','their','more','most','some','other','such','only','also',
    'than','then','there','these','those','will','would','could','should','about',
]);

function build_vocab(array $cache): array {
    global $SPELLCHECK_STOPWORDS;
    $vocab = [];
    foreach ($cache as $doc) {
        $blob = $doc['keywords'] . ' ' . $doc['tags'] . ' ' . $doc['title'];
        foreach (preg_split('/[^a-zA-Z]+/', $blob) as $w) {
            $w = strtolower($w);
            if (strlen($w) < 3 || isset($SPELLCHECK_STOPWORDS[$w])) continue;
            $vocab[$w] = true;
        }
    }
    return array_keys($vocab);
}

// Nearest vocabulary word to $term within a length-scaled edit-distance budget.
function nearest_word(string $term, array $vocab): ?string {
    $len = strlen($term);
    if ($len < 3) return null;
    $maxDist = $len <= 4 ? 1 : ($len <= 8 ? 2 : 3);
    $best = null; $bestDist = $maxDist + 1;
    foreach ($vocab as $w) {
        if (abs(strlen($w) - $len) > $maxDist) continue;
        $d = levenshtein($term, $w);
        if ($d > 0 && $d < $bestDist) { $bestDist = $d; $best = $w; }
    }
    return ($best !== null && $bestDist <= $maxDist) ? $best : null;
}

// ---- SECTION NAMES (human-readable) -----------------------
$SECTION_NAMES = [
    'A'=>'Foundations','B'=>'Beings & Entities','C'=>'Global Traditions',
    'D'=>'Sites & Artifacts','E'=>'Cataclysms & Chronology','F'=>'Lost Connections',
    'G'=>'Modern Frameworks','H'=>'Suppression & Thesis','I'=>'UAP Disclosure',
    'J'=>'Ancient Technology','K'=>'Consciousness','L'=>'Genetics & Origins',
    'M'=>'Forbidden Archaeology','N'=>'Secret Societies','O'=>'Earth Anomalies',
    'P'=>'Philosophy & Meaning','Q'=>'Cosmology & Physics','R'=>'Biology & Evolution',
    'S'=>'Future Technology','T'=>'Psychology & Social','U'=>'Art, Music & Culture',
    'V'=>'Mathematics & Information','W'=>'World Civilizations','X'=>'Medicine & Healing',
    'Y'=>'Altered States','Z'=>'Molecular Biology','ZA'=>'Physics & Quantum',
    'ZB'=>'Ecology & Biology','ZC'=>'Social Science','ZD'=>'Information & Computation',
    'ZE'=>'Ethics & Applied Philosophy','ZF'=>'Oceanography','ZG'=>'Linguistics & Communication',
    'ZH'=>'Archaeoastronomy',
];

// ---- PAGE LOGIC --------------------------------------------
$query   = trim($_GET['q'] ?? '');
$page    = max(1, (int)($_GET['p'] ?? 1));
$results = [];
$total   = 0;

$cache = get_cache();
$suggestion = null; // set when we silently corrected a typo and re-ran the search

if ($query !== '') {
    $terms = array_filter(array_map('strtolower', preg_split('/\s+/', $query)));
    foreach ($cache as $doc) {
        $s = score_doc($doc, $terms);
        if ($s > 0) $results[] = array_merge($doc, ['score' => $s]);
    }
    usort($results, fn($a,$b) => $b['score'] <=> $a['score']);
    $total = count($results);

    // No hits at all — every term was a miss. Try the nearest known word per term.
    if ($total === 0) {
        $vocab = build_vocab($cache);
        $corrected_terms = [];
        $changed = false;
        foreach ($terms as $t) {
            $near = nearest_word($t, $vocab);
            if ($near !== null) { $corrected_terms[] = $near; $changed = true; }
            else                { $corrected_terms[] = $t; }
        }
        if ($changed) {
            $corrected_results = [];
            foreach ($cache as $doc) {
                $s = score_doc($doc, $corrected_terms);
                if ($s > 0) $corrected_results[] = array_merge($doc, ['score' => $s]);
            }
            if ($corrected_results) {
                usort($corrected_results, fn($a,$b) => $b['score'] <=> $a['score']);
                $results    = $corrected_results;
                $total      = count($results);
                $suggestion = implode(' ', $corrected_terms);
            }
        }
    }

    $results = array_slice($results, ($page-1)*DOCS_PER_PAGE, DOCS_PER_PAGE);
}

// ---- RECENT DOCS (4 most recently modified — one row) ------
$recent = $cache;
usort($recent, fn($a,$b) => $b['mtime'] <=> $a['mtime']);
$recent = array_slice($recent, 0, 4);

// ---- SECTION COUNTS ----------------------------------------
$sec_counts = [];
foreach ($cache as $doc) {
    $s = $doc['section'];
    if ($s) $sec_counts[$s] = ($sec_counts[$s] ?? 0) + 1;
}
ksort($sec_counts);

// ---- TIER HELPERS ------------------------------------------
function tier_label(int $t): string {
    return ['','Verified','Credible','Speculative','Dubious'][$t] ?? '';
}
function tier_var(int $t): string {
    return ['','var(--gold)','var(--cyan)','var(--violet)','var(--stone-tier)'][$t] ?? 'var(--ink-soft)';
}

$total_docs  = count($cache);
$total_secs  = count($sec_counts);

$interdocs_count  = count(array_filter($cache, fn($d) => str_starts_with($d['rel'], '_InterDocs/')));
$connections_count = count(array_filter($cache, fn($d) => str_starts_with($d['rel'], '_Connections/')));
$theories_count   = count(array_filter($cache, fn($d) => str_starts_with($d['rel'], '_Theories/')));

// ---- HTML --------------------------------------------------
$q_esc  = htmlspecialchars($query, ENT_QUOTES);
$page_title = $query ? "Search: $q_esc — Research" : 'Research Base — Theories of Anything';
?>
<!DOCTYPE html>
<html lang="en">
<head><meta charset="utf-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><?= htmlspecialchars($page_title) ?></title>
<meta name="description" content="Search <?= $total_docs ?> research documents across <?= $total_secs ?> fields. Every claim tier-rated by evidence — keywords, titles, and metadata indexed for fast lookup.">
<link rel="icon" type="image/png" href="../images/logo-ankh.png">
<link rel="canonical" href="https://theoriesofanything.com/research/">
<meta name="robots" content="index,follow,max-image-preview:large">
<meta name="theme-color" content="#0A0A12">
<link rel="stylesheet" href="../_shared/styles.css">

<!-- Open Graph -->
<meta property="og:type"        content="website">
<meta property="og:site_name"   content="Theories of Anything">
<meta property="og:title"       content="Research Base — Theories of Anything">
<meta property="og:description" content="Search <?= number_format($total_docs) ?> research documents across <?= $total_secs ?> fields. Every claim tier-rated by evidence.">
<meta property="og:url"         content="https://theoriesofanything.com/research/">
<meta property="og:image"       content="https://theoriesofanything.com/images/ViewImage.jpg">
<!-- Twitter Card -->
<meta name="twitter:card"        content="summary_large_image">
<meta name="twitter:title"       content="Research Base — Theories of Anything">
<meta name="twitter:description" content="Search <?= number_format($total_docs) ?> research documents across <?= $total_secs ?> fields. Every claim tier-rated by evidence.">
<meta name="twitter:image"       content="https://theoriesofanything.com/images/ViewImage.jpg">
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "CollectionPage",
  "name": "Research Base — Theories of Anything",
  "url": "https://theoriesofanything.com/research/",
  "isPartOf": { "@type": "WebSite", "name": "Theories of Anything", "url": "https://theoriesofanything.com/" },
  "potentialAction": {
    "@type": "SearchAction",
    "target": { "@type": "EntryPoint", "urlTemplate": "https://theoriesofanything.com/research/?q={search_term_string}" },
    "query-input": "required name=search_term_string"
  }
}
</script>
<style>
  /* ---- SEARCH HERO ---- */
  .search-hero{padding:60px 0 40px;text-align:center}
  .search-hero h1{font-size:clamp(1.6rem,3vw,2.4rem);color:var(--gold);
                  letter-spacing:.04em;margin-bottom:8px}
  .search-hero .sub{color:var(--ink-soft);font-size:.9rem;margin-bottom:32px}
  .search-bar{display:flex;max-width:680px;margin:0 auto;
              background:var(--card);border:1px solid var(--card-line);
              border-radius:8px;overflow:hidden;
              box-shadow:0 0 40px rgba(232,184,75,.06);transition:border-color .2s}
  .search-bar:focus-within{border-color:var(--gold)}
  .search-bar input{flex:1;background:transparent;border:none;outline:none;
                    color:var(--ink);font-size:1rem;padding:16px 20px;font-family:var(--font)}
  .search-bar input::placeholder{color:var(--ink-soft)}
  .search-bar button{background:var(--gold);color:#0A0A12;font-weight:700;border:none;
                     padding:0 28px;cursor:pointer;font-size:.85rem;letter-spacing:.06em;
                     text-transform:uppercase;transition:background .2s}
  .search-bar button:hover{background:var(--amber)}
  .stat-row{display:flex;gap:24px;justify-content:center;margin-top:20px;flex-wrap:wrap}
  .stat{color:var(--ink-soft);font-size:.8rem}
  .stat strong{color:var(--ink-stone)}

  /* ---- POPULAR SEARCHES ---- */
  .popular-searches{display:flex;align-items:center;gap:8px;justify-content:center;
                    flex-wrap:wrap;margin-top:22px}
  .popular-searches .ps-label{font-family:var(--mono);font-size:11px;letter-spacing:.6px;
                              color:var(--ink-stone);text-transform:uppercase;margin-right:2px}
  .popular-searches a{font-size:12px;color:var(--ink-soft);background:var(--space-2);
                      border:1px solid var(--card-line);border-radius:14px;padding:4px 12px;
                      text-decoration:none;transition:.2s}
  .popular-searches a:hover{border-color:var(--cyan-deep);color:var(--cyan)}

  /* ---- SECTION LABEL ---- */
  .section-label{font-size:.7rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;
                 color:var(--ink-soft);margin-bottom:16px;padding-top:48px}
  .section-label span{color:var(--gold)}

  /* ---- RESULTS ---- */
  .results{padding:0 0 24px}
  .result-count{font-size:.85rem;color:var(--ink-soft);margin-bottom:20px}
  .result-count strong{color:var(--ink)}
  .rresult{display:block;text-decoration:none;color:inherit;
           background:var(--card);border:1px solid var(--card-line);border-radius:8px;
           padding:18px 20px;margin-bottom:10px;transition:border-color .2s,background .2s;
           border-left:3px solid var(--card-line)}
  .rresult:hover{border-color:var(--gold);background:rgba(232,184,75,.04)}
  .rresult-top{display:flex;align-items:center;gap:10px;margin-bottom:6px;flex-wrap:wrap}
  .doc-id{font-size:.72rem;font-weight:700;letter-spacing:.08em;font-family:ui-monospace,monospace;
          color:var(--ink-stone);overflow-wrap:anywhere}
  .tier-badge{font-size:.65rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;
              padding:2px 8px;border-radius:3px;border:1px solid currentColor}
  .rresult h3{font-size:.95rem;font-weight:600;color:var(--ink);margin-bottom:4px;line-height:1.4}
  .rresult .summary{font-size:.83rem;color:var(--ink-soft);margin-bottom:8px;
                    display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  .kw-row{display:flex;flex-wrap:wrap;gap:6px}
  .kw{font-size:.7rem;color:var(--ink-soft);background:var(--space-2);
      border:1px solid var(--card-line);border-radius:3px;padding:1px 7px}
  /* pagination */
  .pagination{display:flex;gap:8px;justify-content:center;padding:24px 0 48px}
  .page-btn{text-decoration:none;color:var(--ink-soft);background:var(--card);
            border:1px solid var(--card-line);border-radius:4px;padding:6px 14px;
            font-size:.85rem;transition:border-color .2s}
  .page-btn:hover,.page-btn.cur{border-color:var(--gold);color:var(--gold)}

  /* ---- TOPIC CARDS (recent docs) ---- */
  .cards-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:16px;
              margin-bottom:8px}
  .rcard{display:flex;flex-direction:column;text-decoration:none;color:inherit;
         background:var(--card);border:1px solid var(--card-line);border-radius:10px;
         padding:20px;transition:border-color .2s,transform .2s;border-top:3px solid var(--card-line)}
  .rcard:hover{border-color:var(--gold);transform:translateY(-2px)}
  .rcard-id{font-size:.7rem;font-weight:700;letter-spacing:.08em;
            font-family:ui-monospace,monospace;color:var(--ink-stone);margin-bottom:8px;
            overflow-wrap:anywhere}
  .rcard h3{font-size:.9rem;font-weight:600;color:var(--ink);margin-bottom:8px;line-height:1.4;
            display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  .rcard .summary{font-size:.8rem;color:var(--ink-soft);
                  display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;
                  flex:1}
  .rcard-footer{margin-top:12px;font-size:.7rem;color:var(--ink-soft);display:flex;
                justify-content:space-between;align-items:center}

  /* ---- SPECIAL COLLECTIONS GRID ---- */
  .coll-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:16px;margin-bottom:8px}
  .coll-card{display:flex;flex-direction:column;text-decoration:none;color:inherit;
             background:var(--card);border:1px solid var(--card-line);border-radius:10px;
             padding:20px;transition:border-color .2s,transform .2s;border-top:3px solid var(--card-line)}
  .coll-card:hover{transform:translateY(-2px)}
  .coll-badge{font-size:.68rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;
              font-family:ui-monospace,monospace;margin-bottom:10px}
  .coll-card h3{font-size:.95rem;font-weight:600;color:var(--ink);margin-bottom:8px;line-height:1.4}
  .coll-card .coll-desc{font-size:.8rem;color:var(--ink-soft);flex:1;line-height:1.55;margin-bottom:12px}
  .coll-footer{font-size:.7rem;color:var(--ink-soft);display:flex;justify-content:space-between;
               align-items:center;margin-top:auto}

  /* ---- SECTION GRID ---- */
  .sec-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:10px;
            margin-bottom:64px}
  .sec-tile{display:flex;flex-direction:column;text-decoration:none;color:inherit;
            background:var(--card);border:1px solid var(--card-line);border-radius:8px;
            padding:14px 16px;transition:border-color .2s}
  .sec-tile:hover{border-color:var(--gold)}
  .sec-letter{font-size:1.3rem;font-weight:800;color:var(--gold);letter-spacing:-.01em;margin-bottom:4px}
  .sec-name{font-size:.78rem;color:var(--ink);font-weight:500;line-height:1.3;margin-bottom:4px}
  .sec-count{font-size:.7rem;color:var(--ink-soft)}

  /* ---- FOOTER ---- */
  .site-footer{background:var(--stone);border-top:1px solid var(--stone-line);
               padding:40px 0;margin-top:0}
  .footer-inner{max-width:var(--maxw);margin:0 auto;padding:0 24px;
                display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:16px}
  .foot-brand{color:var(--gold);font-weight:700;font-size:.9rem}
  .foot-tag{color:var(--ink-stone);font-size:.75rem}
  .foot-links{display:flex;gap:16px}
  .foot-links a{color:var(--ink-soft);text-decoration:none;font-size:.8rem}
  .foot-links a:hover{color:var(--gold)}

  @media(max-width:600px){
    .search-bar{flex-direction:column;border-radius:8px}
    .search-bar button{padding:12px;border-radius:0 0 7px 7px}
    .stat-row{gap:12px}
  }
</style>
</head>
<body>
<canvas id="constellation"></canvas>

<!-- ==================== HEADER ==================== -->
<header class="site-header">
  <div class="wrap header-inner">
    <img class="medallion" src="../images/logo-ankh.png" alt="Theories of Anything">
    <div class="center-stack">
      <div class="wordmark">
        <h1>THEORIES OF ANYTHING</h1>
        <div class="tag">WHERE ALL FIELDS CONNECT</div>
      </div>
      <nav class="site-nav" aria-label="Primary"></nav>
    </div>
  </div>
</header>
<script src="../_shared/nav.js"></script>

<script>
(function(){
  var stack=document.querySelector('.center-stack');
  var logo=document.querySelector('.medallion');
  if(!stack||!logo) return;
  function sync(){
    if(window.matchMedia('(max-width:760px)').matches){
      stack.style.paddingLeft=''; stack.style.paddingRight='';
      return;
    }
    stack.style.paddingLeft=''; stack.style.paddingRight='';
    var gutter=logo.offsetWidth+24;
    stack.style.paddingLeft=gutter+'px';
    stack.style.paddingRight=gutter+'px';
  }
  window.addEventListener('resize',sync);
  logo.addEventListener('load',sync);
  sync();
})();
</script>

<!-- ==================== SEARCH HERO ==================== -->
<main>
<div class="wrap">

  <div class="search-hero">
    <h1>RESEARCH BASE</h1>
    <p class="sub">Search <?= number_format($total_docs) ?> documents across <?= $total_secs ?> fields — every claim tier-rated by evidence</p>
    <form class="search-bar" method="get" action=".">
      <input type="text" name="q" value="<?= $q_esc ?>"
             placeholder="Search by keyword, topic, researcher, or concept…"
             autocomplete="off" autofocus>
      <button type="submit">Search</button>
    </form>
    <div class="stat-row">
      <span class="stat"><strong><?= number_format($total_docs) ?></strong> documents</span>
      <span class="stat"><strong><?= $total_secs ?></strong> sections</span>
      <span class="stat"><strong>47,686</strong> citations</span>
      <span class="stat"><strong>34,596+</strong> keywords indexed</span>
      <span class="stat"><strong>4</strong> evidence tiers</span>
    </div>
    <?php if ($query === ''): ?>
    <div class="popular-searches">
      <span class="ps-label">popular:</span>
      <a href="?q=consciousness">consciousness</a>
      <a href="?q=younger+dryas">younger dryas</a>
      <a href="?q=g%C3%B6bekli+tepe">g&ouml;bekli tepe</a>
      <a href="?q=fine-tuning">fine-tuning</a>
      <a href="?q=uap">UAP</a>
      <a href="?q=denisovan">denisovan</a>
    </div>
    <?php endif ?>
  </div>

  <!-- ==================== RECENT DOCS CARDS ==================== -->
  <?php if (!$query || $total === 0): ?>
  <p class="section-label">RECENTLY ADDED <span>— newest documents in the corpus</span></p>
  <div class="cards-grid">
    <?php foreach ($recent as $doc):
      $tier  = (int)($doc['tier'] ?? 0);
      $color = tier_var($tier);
      $label = tier_label($tier);
    ?>
    <a class="rcard" href="/research/<?= $doc['slug'] ?>"
       style="border-top-color:<?= $color ?>">
      <?php if ($doc['doc_id'] || $label): ?>
      <div class="rcard-id">
        <?php if ($doc['doc_id']) echo htmlspecialchars($doc['doc_id']) . ($label ? '&nbsp;' : ''); ?>
        <?php if ($label): ?><span class="tier-badge" style="color:<?= $color ?>;border-color:<?= $color ?>"><?= $label ?></span><?php endif ?>
      </div>
      <?php endif ?>
      <h3><?= htmlspecialchars($doc['title']) ?></h3>
      <p class="summary"><?= htmlspecialchars($doc['summary'] ?: 'No summary available.') ?></p>
      <div class="rcard-footer">
        <span><?= htmlspecialchars($SECTION_NAMES[$doc['section']] ?? $doc['section']) ?></span>
        <span style="font-size:.65rem"><?= date('M j, Y', $doc['mtime']) ?></span>
      </div>
    </a>
    <?php endforeach ?>
  </div>
  <?php endif ?>

  <!-- ==================== SPECIAL COLLECTIONS ==================== -->
  <?php if (!$query): ?>
  <p class="section-label">SPECIAL COLLECTIONS <span>— synthesis docs, deep connections &amp; methodology</span></p>
  <div class="coll-grid">
    <a class="coll-card" href="/transparency/"
       style="border-top-color:var(--violet)">
      <div class="coll-badge" style="color:var(--violet)">TRANSPARENCY</div>
      <h3>How We Work</h3>
      <p class="coll-desc">Our research methodology, fact-checking systems, quality scores, AI partnership — and the honest questions you’re probably already asking about this project.</p>
      <div class="coll-footer">
        <span style="color:var(--violet)">Methodology · Trust · Process</span>
        <span>→</span>
      </div>
    </a>
    <a class="coll-card" href="/research/?collection=interdocs"
       style="border-top-color:var(--cyan)">
      <div class="coll-badge" style="color:var(--cyan)">INTERDOCS</div>
      <h3><?= $interdocs_count ?> Cross-Corpus Syntheses</h3>
      <p class="coll-desc">Patterns that only emerge when all 34 sections are connected. 8 thematic clusters tracing threads across ancient knowledge, consciousness, genetics, cosmology, and physics.</p>
      <div class="coll-footer">
        <span style="color:var(--cyan)"><?= $interdocs_count ?> docs · 8 clusters</span>
        <span>→</span>
      </div>
    </a>
    <a class="coll-card" href="/research/?collection=connections"
       style="border-top-color:var(--gold)">
      <div class="coll-badge" style="color:var(--gold)">CONNECTIONS</div>
      <h3>Cross-Document Connections</h3>
      <p class="coll-desc">Tracked relationships between specific claims across sections — the threads that make this a web of understanding rather than a collection of isolated facts.</p>
      <div class="coll-footer">
        <span style="color:var(--gold)">Active connection map</span>
        <span>→</span>
      </div>
    </a>
    <a class="coll-card" href="/research/?collection=theories"
       style="border-top-color:var(--amber)">
      <div class="coll-badge" style="color:var(--amber)">THEORIES</div>
      <h3><?= $theories_count ?> Working Hypotheses</h3>
      <p class="coll-desc">Synthesis threads under active investigation — held to the same evidence standards but acknowledged as unfinished. These are open questions, not conclusions.</p>
      <div class="coll-footer">
        <span style="color:var(--amber)"><?= $theories_count ?> theories · In progress</span>
        <span>→</span>
      </div>
    </a>
  </div>
  <?php endif ?>
  <!-- ==================== SEARCH RESULTS ==================== -->
  <?php if ($query !== ''): ?>
  <div class="results" id="results">
    <p class="result-count">
      <?php if ($total === 0): ?>
        No results for <strong>"<?= $q_esc ?>"</strong> — try different keywords or browse by section below.
      <?php elseif ($suggestion !== null): ?>
        No results for <strong>"<?= $q_esc ?>"</strong> — showing <strong><?= number_format($total) ?></strong> result<?= $total !== 1 ? 's' : '' ?> for <strong>"<?= htmlspecialchars($suggestion) ?>"</strong> instead
        <?php if ($total > DOCS_PER_PAGE): ?>
          — page <?= $page ?> of <?= ceil($total/DOCS_PER_PAGE) ?>
        <?php endif ?>
      <?php else: ?>
        <strong><?= number_format($total) ?></strong> result<?= $total !== 1 ? 's' : '' ?> for <strong>"<?= $q_esc ?>"</strong>
        <?php if ($total > DOCS_PER_PAGE): ?>
          — page <?= $page ?> of <?= ceil($total/DOCS_PER_PAGE) ?>
        <?php endif ?>
      <?php endif ?>
    </p>

    <?php foreach ($results as $doc):
      $tier  = (int)($doc['tier'] ?? 0);
      $color = tier_var($tier);
      $label = tier_label($tier);
      $kws   = array_slice(array_filter(array_map('trim', explode(',', $doc['keywords']))), 0, 6);
      $doc_url = '/research/' . $doc['slug'];
    ?>
    <a class="rresult" href="<?= $doc_url ?>"
       style="border-left-color:<?= $color ?>">
      <div class="rresult-top">
        <?php if ($doc['doc_id']): ?><span class="doc-id"><?= htmlspecialchars($doc['doc_id']) ?></span><?php endif ?>
        <?php if ($label): ?>
        <span class="tier-badge" style="color:<?= $color ?>;border-color:<?= $color ?>"><?= $label ?></span>
        <?php endif ?>
        <span style="font-size:.72rem;color:var(--ink-soft);margin-left:auto">
          <?= htmlspecialchars($SECTION_NAMES[$doc['section']] ?? $doc['section']) ?>
        </span>
      </div>
      <h3><?= htmlspecialchars($doc['title']) ?></h3>
      <?php if ($doc['summary']): ?>
      <p class="summary"><?= htmlspecialchars($doc['summary']) ?></p>
      <?php endif ?>
      <?php if ($kws): ?>
      <div class="kw-row">
        <?php foreach ($kws as $kw): ?>
        <span class="kw"><?= htmlspecialchars($kw) ?></span>
        <?php endforeach ?>
      </div>
      <?php endif ?>
    </a>
    <?php endforeach ?>

    <?php if ($total > DOCS_PER_PAGE):
      $pages = ceil($total / DOCS_PER_PAGE);
    ?>
    <div class="pagination">
      <?php if ($page > 1): ?>
        <a class="page-btn" href="?q=<?= urlencode($query) ?>&p=<?= $page-1 ?>#results">← Prev</a>
      <?php endif ?>
      <?php for ($i = max(1,$page-2); $i <= min($pages,$page+2); $i++): ?>
        <a class="page-btn <?= $i===$page?'cur':'' ?>" href="?q=<?= urlencode($query) ?>&p=<?= $i ?>#results"><?= $i ?></a>
      <?php endfor ?>
      <?php if ($page < $pages): ?>
        <a class="page-btn" href="?q=<?= urlencode($query) ?>&p=<?= $page+1 ?>#results">Next →</a>
      <?php endif ?>
    </div>
    <?php endif ?>
  </div>
  <?php endif ?>

  <?php
  // ---- SECTION BROWSE mode (?section=K) ----
  $section_filter = $_GET['section'] ?? '';
  if ($section_filter && isset($SECTION_NAMES[$section_filter])):
    $sec_docs = array_filter($cache, fn($d) => $d['section'] === $section_filter);
    usort($sec_docs, fn($a,$b) => strcmp($a['doc_id'], $b['doc_id']));
    // 4 most recently modified docs in this section
    $sec_recent = $sec_docs;
    usort($sec_recent, fn($a,$b) => $b['mtime'] <=> $a['mtime']);
    $sec_recent = array_slice(array_values($sec_recent), 0, 4);
  ?>
  <p class="section-label">
    <strong style="color:var(--gold)"><?= htmlspecialchars($section_filter) ?></strong>
    <span>— <?= htmlspecialchars($SECTION_NAMES[$section_filter]) ?>
    &nbsp;·&nbsp; <?= count($sec_docs) ?> documents</span>
  </p>
  <?php if (count($sec_recent) > 0): ?>
  <p class="section-label" style="padding-top:16px">RECENTLY ADDED <span>— newest in this section</span></p>
  <div class="cards-grid">
    <?php foreach ($sec_recent as $doc):
      $tier  = (int)($doc['tier'] ?? 0);
      $color = tier_var($tier);
      $label = tier_label($tier);
    ?>
    <a class="rcard" href="/research/<?= $doc['slug'] ?>"
       style="border-top-color:<?= $color ?>">
      <?php if ($doc['doc_id'] || $label): ?>
      <div class="rcard-id">
        <?php if ($doc['doc_id']) echo htmlspecialchars($doc['doc_id']) . ($label ? '&nbsp;' : ''); ?>
        <?php if ($label): ?><span class="tier-badge" style="color:<?= $color ?>;border-color:<?= $color ?>"><?= $label ?></span><?php endif ?>
      </div>
      <?php endif ?>
      <h3><?= htmlspecialchars($doc['title']) ?></h3>
      <p class="summary"><?= htmlspecialchars($doc['summary'] ?: 'No summary available.') ?></p>
      <div class="rcard-footer">
        <span><?= htmlspecialchars($SECTION_NAMES[$doc['section']] ?? $doc['section']) ?></span>
        <span style="font-size:.65rem"><?= date('M j, Y', $doc['mtime']) ?></span>
      </div>
    </a>
    <?php endforeach ?>
  </div>
  <p class="section-label" style="padding-top:24px">ALL DOCUMENTS <span>— sorted by ID</span></p>
  <?php endif ?>
  <div class="results">
    <?php foreach ($sec_docs as $doc):
      $tier  = (int)($doc['tier'] ?? 0);
      $color = tier_var($tier);
      $label = tier_label($tier);
      $kws   = array_slice(array_filter(array_map('trim', explode(',', $doc['keywords']))), 0, 5);
    ?>
    <a class="rresult" href="/research/<?= $doc['slug'] ?>"
       style="border-left-color:<?= $color ?>">
      <div class="rresult-top">
        <span class="doc-id"><?= htmlspecialchars($doc['doc_id']) ?></span>
        <?php if ($label): ?><span class="tier-badge" style="color:<?= $color ?>;border-color:<?= $color ?>"><?= $label ?></span><?php endif ?>
      </div>
      <h3><?= htmlspecialchars($doc['title']) ?></h3>
      <?php if ($doc['summary']): ?><p class="summary"><?= htmlspecialchars($doc['summary']) ?></p><?php endif ?>
      <?php if ($kws): ?>
      <div class="kw-row"><?php foreach ($kws as $kw): ?><span class="kw"><?= htmlspecialchars($kw) ?></span><?php endforeach ?></div>
      <?php endif ?>
    </a>
    <?php endforeach ?>
  </div>
  <?php endif ?>

  <?php
  // ---- COLLECTION BROWSE mode (?collection=interdocs|connections|theories) ----
  $collection_filter = strtolower(trim($_GET['collection'] ?? ''));
  $COLLECTION_DEFS = [
      'interdocs'   => ['label'=>'Cross-Corpus Syntheses',     'prefix'=>'_InterDocs/',  'color'=>'var(--cyan)',   'count'=>$interdocs_count],
      'connections' => ['label'=>'Cross-Document Connections', 'prefix'=>'_Connections/', 'color'=>'var(--gold)',   'count'=>$connections_count],
      'theories'    => ['label'=>'Working Hypotheses',         'prefix'=>'_Theories/',    'color'=>'var(--amber)',  'count'=>$theories_count],
  ];
  if ($collection_filter && isset($COLLECTION_DEFS[$collection_filter])):
      $cdef = $COLLECTION_DEFS[$collection_filter];
      $col_docs = array_values(array_filter($cache,
          fn($d) => str_starts_with($d['rel'], $cdef['prefix'])
      ));
      usort($col_docs, fn($a,$b) => strcmp($a['doc_id'] ?: $a['title'], $b['doc_id'] ?: $b['title']));
      // 4 most recently modified docs in this collection
      $col_recent = $col_docs;
      usort($col_recent, fn($a,$b) => $b['mtime'] <=> $a['mtime']);
      $col_recent = array_slice($col_recent, 0, 4);
  ?>
  <p class="section-label">
    <strong style="color:<?= $cdef['color'] ?>"><?= htmlspecialchars(strtoupper($collection_filter)) ?></strong>
    <span>— <?= htmlspecialchars($cdef['label']) ?> &nbsp;·&nbsp; <?= count($col_docs) ?: ($cdef['count'] ?? '?') ?> documents</span>
  </p>
  <?php if ($col_recent): ?>
  <p class="section-label" style="padding-top:16px">RECENTLY ADDED <span>— newest in this collection</span></p>
  <div class="cards-grid">
    <?php foreach ($col_recent as $doc):
      $tier  = (int)($doc['tier'] ?? 0);
      $color = tier_var($tier);
      $label = tier_label($tier);
    ?>
    <a class="rcard" href="/research/<?= $doc['slug'] ?>"
       style="border-top-color:<?= $cdef['color'] ?>">
      <?php if ($doc['doc_id']): ?>
      <div class="rcard-id">
        <?php echo htmlspecialchars($doc['doc_id']); ?>
        <?php if ($label): ?>&nbsp;<span class="tier-badge" style="color:<?= $color ?>;border-color:<?= $color ?>"><?= $label ?></span><?php endif ?>
      </div>
      <?php endif ?>
      <h3><?= htmlspecialchars($doc['title']) ?></h3>
      <p class="summary"><?= htmlspecialchars($doc['summary'] ?: 'No summary available.') ?></p>
      <div class="rcard-footer">
        <span style="color:<?= $cdef['color'] ?>"><?= htmlspecialchars(strtoupper($collection_filter)) ?></span>
        <span style="font-size:.65rem"><?= date('M j, Y', $doc['mtime']) ?></span>
      </div>
    </a>
    <?php endforeach ?>
  </div>
  <p class="section-label" style="padding-top:24px">ALL DOCUMENTS <span>— sorted by ID</span></p>
  <?php endif ?>
  <?php if (!$col_docs): ?>
  <p style="color:var(--ink-soft);font-size:.85rem;padding:24px 0 48px;text-align:center">
    This collection is being prepared for upload to the research base. Check back soon.<br>
    <span style="font-size:.75rem;opacity:.6">Want access now? These documents are in the local corpus — contact us via <a href="https://discord.gg/MHFUeDgvU" style="color:var(--cyan)">Discord</a>.</span>
  </p>
  <?php else: ?>
  <div class="results">
    <?php foreach ($col_docs as $doc):
      $tier  = (int)($doc['tier'] ?? 0);
      $color = tier_var($tier);
      $label = tier_label($tier);
      $kws   = array_slice(array_filter(array_map('trim', explode(',', $doc['keywords']))), 0, 5);
    ?>
    <a class="rresult" href="/research/<?= $doc['slug'] ?>"
       style="border-left-color:<?= $cdef['color'] ?>">
      <?php if ($doc['doc_id'] || $label): ?>
      <div class="rresult-top">
        <?php if ($doc['doc_id']): ?><span class="doc-id"><?= htmlspecialchars($doc['doc_id']) ?></span><?php endif ?>
        <?php if ($label): ?><span class="tier-badge" style="color:<?= $color ?>;border-color:<?= $color ?>"><?= $label ?></span><?php endif ?>
      </div>
      <?php endif ?>
      <h3><?= htmlspecialchars($doc['title']) ?></h3>
      <?php if ($doc['summary']): ?><p class="summary"><?= htmlspecialchars($doc['summary']) ?></p><?php endif ?>
      <?php if ($kws): ?>
      <div class="kw-row"><?php foreach ($kws as $kw): ?><span class="kw"><?= htmlspecialchars($kw) ?></span><?php endforeach ?></div>
      <?php endif ?>
    </a>
    <?php endforeach ?>
  </div>
  <?php endif ?>
  <?php endif ?>

  <!-- ==================== SECTION GRID ==================== -->
  <p class="section-label">BROWSE BY SECTION <span>— <?= $total_docs ?> documents across <?= $total_secs ?> fields</span></p>
  <div class="sec-grid">
    <?php foreach ($SECTION_NAMES as $letter => $name):
      $count = $sec_counts[$letter] ?? 0;
      if (!$count) continue;
    ?>
    <a class="sec-tile" href="?section=<?= urlencode($letter) ?>">
      <span class="sec-letter"><?= $letter ?></span>
      <span class="sec-name"><?= htmlspecialchars($name) ?></span>
      <span class="sec-count"><?= number_format($count) ?> doc<?= $count !== 1 ? 's' : '' ?></span>
    </a>
    <?php endforeach ?>
  </div>

</div><!-- /wrap -->
</main>

<!-- ==================== FOOTER ==================== -->
<footer class="site-footer">
  <div class="footer-inner">
    <div>
      <div class="foot-brand">Theories of Anything</div>
      <div class="foot-tag">Where All Fields Connect</div>
    </div>
    <div class="foot-links">
      <a href="<?= SITE_ROOT ?>">Home</a>
      <a href="../about.html">About</a>
      <a href="../videos.html">Videos</a>
      <a href="https://discord.gg/MHFUeDgvU" target="_blank" rel="noopener">Discord</a>
    </div>
  </div>
</footer>

<!-- ==================== CONSTELLATION JS ==================== -->
<script>
(function(){
  const c=document.getElementById('constellation'),ctx=c.getContext('2d');
  let W,H,stars=[],connections=[];
  const N=90,CONN_DIST=160,GOLD='rgba(232,184,75,',CYAN='rgba(69,214,223,';
  function resize(){W=c.width=window.innerWidth;H=c.height=window.innerHeight;init()}
  function init(){
    stars=Array.from({length:N},()=>({
      x:Math.random()*W,y:Math.random()*H,
      vx:(Math.random()-.5)*.18,vy:(Math.random()-.5)*.18,
      r:Math.random()*1.4+.4,
      color:Math.random()>.7?CYAN:GOLD
    }));
  }
  function draw(){
    ctx.clearRect(0,0,W,H);
    // connections
    for(let i=0;i<stars.length;i++){
      for(let j=i+1;j<stars.length;j++){
        const dx=stars[i].x-stars[j].x,dy=stars[i].y-stars[j].y;
        const d=Math.sqrt(dx*dx+dy*dy);
        if(d<CONN_DIST){
          const a=(1-d/CONN_DIST)*.18;
          ctx.beginPath();ctx.moveTo(stars[i].x,stars[i].y);ctx.lineTo(stars[j].x,stars[j].y);
          ctx.strokeStyle=GOLD+a+')';ctx.lineWidth=.6;ctx.stroke();
        }
      }
    }
    // stars
    stars.forEach(s=>{
      ctx.beginPath();ctx.arc(s.x,s.y,s.r,0,Math.PI*2);
      ctx.fillStyle=s.color+'0.7)';ctx.fill();
      s.x+=s.vx;s.y+=s.vy;
      if(s.x<0||s.x>W)s.vx*=-1;
      if(s.y<0||s.y>H)s.vy*=-1;
    });
    requestAnimationFrame(draw);
  }
  window.addEventListener('resize',resize);
  resize();draw();
})();
</script>
</body>
</html>