Search Types

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Search Architecture Diagram</title>
<!-- Tailwind CSS for styling -->
https://cdn.tailwindcss.com
<!-- Google Fonts: Montserrat -->
<link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@400;700&display=swap" rel="stylesheet">
<!-- FontAwesome for Icons -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<style>
html, body {
  font-family: 'Montserrat', sans-serif;
  background-color: #ADD8E6;
  margin: 0;
  padding: 1rem;
  box-sizing: border-box;
}
body {
  display: flex;
  align-items: flex-start;
  justify-content: center;
  width: 100%;
}
.page-wrap {
  width: 100%;
  max-width: 900px;
  margin: 0 auto;
}

/* Custom Blue Colors for ADA Compliance */
.bg-blue-dark { background-color: #001F3F; } /* Navy - Contrast ratio 16:1 against white */
.bg-blue-light { background-color: #003366; } /* Dark Blue - Contrast ratio 11.2:1 against white */
.text-blue-highlight { color: #81D4FA; } /* Light Blue - Contrast ratio 8.7:1 against Navy */
.icon-bg { background-color: #001122; }

/* The decorative broken ring around the chevrons */
.icon-ring {
  position: absolute;
  width: 100%;
  height: 100%;
  border: 2px solid white;
  border-radius: 50%;
  border-top-color: transparent;
  border-left-color: transparent;
  transform: rotate(45deg);
}

/* Clickable panel affordance */
.panel-trigger {
  cursor: pointer;
  transition: transform 0.15s ease, box-shadow 0.15s ease, filter 0.15s ease;
}
.panel-trigger:hover {
  transform: translateY(-2px);
  filter: brightness(1.15);
}
.panel-trigger:focus-visible {
  outline: 3px solid #81D4FA;
  outline-offset: -3px;
}
.click-hint {
  display: block;
  text-align: center;
  font-size: 0.7rem;
  letter-spacing: 0.05em;
  color: #001F3F;
  opacity: 0.65;
  margin-top: 0.4rem;
}

/* Modal */
.modal-overlay {
  position: fixed;
  inset: 0;
  background: rgba(0, 8, 20, 0.72);
  display: none;
  align-items: center;
  justify-content: center;
  padding: 1.5rem;
  z-index: 50;
}
.modal-overlay.open {
  display: flex;
}
.modal-box {
  background: #ffffff;
  max-width: 32rem;
  width: 100%;
  border-radius: 0.75rem;
  overflow: hidden;
  box-shadow: 0 20px 50px rgba(0,0,0,0.35);
  animation: modalIn 0.18s ease-out;
}
@keyframes modalIn {
  from { opacity: 0; transform: scale(0.96) translateY(6px); }
  to { opacity: 1; transform: scale(1) translateY(0); }
}
.modal-header {
  background-color: #001F3F;
  color: #81D4FA;
  padding: 1.25rem 1.5rem;
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.modal-close {
  background: none;
  border: none;
  color: #81D4FA;
  font-size: 1.25rem;
  cursor: pointer;
  line-height: 1;
  padding: 0.25rem;
}
.modal-close:hover { color: #ffffff; }
.modal-body {
  padding: 1.5rem;
  color: #1f2937;
  font-size: 0.95rem;
  line-height: 1.6;
}
.modal-link {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  margin-top: 1rem;
  color: #003366;
  font-weight: 700;
  text-decoration: none;
}
.modal-link:hover { text-decoration: underline; }
</style>
</head>
<body>

<!-- Outer wrapper: 3-column grid + Hybrid box stacked vertically -->
<div class="page-wrap flex flex-col gap-4">

  <!-- Main Container: 3 Columns -->
  <div class="w-full grid grid-cols-1 md:grid-cols-3 gap-4 shadow-2xl bg-[#003366]/10 p-4 rounded-xl">

    <!-- COLUMN 1: Lexical Search -->
    <div class="relative flex flex-col h-full min-h-[260px] panel-trigger" tabindex="0" role="button"
         aria-haspopup="dialog"
         data-title="Lexical Search"
         data-body="Placeholder: describe how lexical search matches exact terms using field search, thesaurus browsing, syntax and operators, and filters across pre-indexed databases. Replace this text with your final copy."
         data-link="#">
      <!-- Top Box -->
      <div class="bg-blue-dark pt-5 px-5 pb-8 flex-1 flex items-center justify-center">
        <h2 class="text-blue-highlight font-bold text-2xl text-center leading-tight">
          Lexical<br>Search
        </h2>
      </div>
      <!-- Seam / Chevron Divider -->
      <div class="relative h-0 z-10">
        <div class="absolute left-1/2 top-0 transform -translate-x-1/2 -translate-y-1/2 w-11 h-11 icon-bg rounded-full flex items-center justify-center shadow-lg">
          <div class="icon-ring"></div>
          <i class="fa-solid fa-chevron-down text-blue-highlight text-base relative z-10"></i>
        </div>
      </div>
      <!-- Bottom Box -->
      <div class="bg-blue-light pt-8 px-5 pb-5 flex-1 flex items-center justify-center">
        <p class="text-white text-center font-normal leading-relaxed text-sm">
          Field Search, Thesaurus<br>
          Browsing, Syntax and<br>
          Operators, Filters, Pre-indexed<br>
          Databases
        </p>
      </div>
      <span class="click-hint">Click for more</span>
    </div>

    <!-- COLUMN 2: Semantic Search (Colors inverted) -->
    <div class="relative flex flex-col h-full min-h-[260px] panel-trigger" tabindex="0" role="button"
         aria-haspopup="dialog"
         data-title="Semantic Search"
         data-body="Placeholder: describe how semantic search uses Natural Language Understanding (NLU) to interpret query meaning, context, and content rather than exact keywords. Replace this text with your final copy."
         data-link="#">
      <!-- Top Box -->
      <div class="bg-blue-light pt-5 px-5 pb-8 flex-1 flex items-center justify-center">
        <p class="text-white text-center font-normal leading-relaxed text-sm">
          Natural Language<br>
          Understanding (NLU). Query<br>
          meaning, context, and<br>
          content.
        </p>
      </div>
      <!-- Seam / Chevron Divider (Pointing Up) -->
      <div class="relative h-0 z-10">
        <div class="absolute left-1/2 top-0 transform -translate-x-1/2 -translate-y-1/2 w-11 h-11 icon-bg rounded-full flex items-center justify-center shadow-lg">
          <div class="icon-ring" style="transform: rotate(-135deg);"></div>
          <i class="fa-solid fa-chevron-up text-blue-highlight text-base relative z-10"></i>
        </div>
      </div>
      <!-- Bottom Box -->
      <div class="bg-blue-dark pt-8 px-5 pb-5 flex-1 flex items-center justify-center">
        <h2 class="text-blue-highlight font-bold text-2xl text-center leading-tight">
          Semantic<br>
          <span class="text-sm">...</span><br>
          search
        </h2>
      </div>
      <span class="click-hint">Click for more</span>
    </div>

    <!-- COLUMN 3: Neural Search -->
    <div class="relative flex flex-col h-full min-h-[260px] panel-trigger" tabindex="0" role="button"
         aria-haspopup="dialog"
         data-title="Neural Search"
         data-body="Placeholder: describe how neural search harnesses an LLM to generate a response, producing a summary with sources rather than a plain results list. Replace this text with your final copy."
         data-link="#">
      <!-- Top Box -->
      <div class="bg-blue-dark pt-5 px-5 pb-8 flex-1 flex items-center justify-center">
        <h2 class="text-blue-highlight font-bold text-2xl text-center leading-tight">
          Neural<br>Search
        </h2>
      </div>
      <!-- Seam / Chevron Divider -->
      <div class="relative h-0 z-10">
        <div class="absolute left-1/2 top-0 transform -translate-x-1/2 -translate-y-1/2 w-11 h-11 icon-bg rounded-full flex items-center justify-center shadow-lg">
          <div class="icon-ring"></div>
          <i class="fa-solid fa-chevron-down text-blue-highlight text-base relative z-10"></i>
        </div>
      </div>
      <!-- Bottom Box -->
      <div class="bg-blue-light pt-8 px-5 pb-5 flex-1 flex items-center justify-center">
        <p class="text-white text-center font-normal leading-relaxed text-sm">
          Power of LLM generating the<br>
          response, a summary with<br>
          sources.
        </p>
      </div>
      <span class="click-hint">Click for more</span>
    </div>

  </div>

  <!-- HYBRID BOX: full-width box beneath the three columns -->
  <div class="relative w-full shadow-2xl bg-blue-dark p-6 rounded-xl flex items-center justify-center panel-trigger"
       tabindex="0" role="button" aria-haspopup="dialog"
       data-title="Hybrid"
       data-body="Placeholder: describe how hybrid search combines lexical, semantic, and neural techniques to balance precision with contextual understanding. Replace this text with your final copy."
       data-link="#">
    <h2 class="text-blue-highlight font-bold text-2xl text-center leading-tight">
      Hybrid
    </h2>
    <span class="click-hint">Click for more</span>
  </div>

</div>

<!-- Modal (single reusable popup) -->
<div id="modalOverlay" class="modal-overlay" role="dialog" aria-modal="true" aria-labelledby="modalTitle">
  <div class="modal-box">
    <div class="modal-header">
      <h3 id="modalTitle" class="text-xl font-bold">Title</h3>
      <button class="modal-close" id="modalClose" aria-label="Close">&times;</button>
    </div>
    <div class="modal-body">
      <p id="modalBody">Body text</p>
      <a id="modalLink" class="modal-link" href="#" target="_blank" rel="noopener">
        Learn more <i class="fa-solid fa-arrow-up-right-from-square text-xs"></i>
      </a>
    </div>
  </div>
</div>

<script>
(function () {
  const overlay = document.getElementById('modalOverlay');
  const titleEl = document.getElementById('modalTitle');
  const bodyEl = document.getElementById('modalBody');
  const linkEl = document.getElementById('modalLink');
  const closeBtn = document.getElementById('modalClose');
  let lastFocused = null;

  function openModal(trigger) {
    titleEl.textContent = trigger.dataset.title || '';
    bodyEl.textContent = trigger.dataset.body || '';
    const link = trigger.dataset.link || '#';
    linkEl.href = link;
    linkEl.style.display = link && link !== '#' ? 'inline-flex' : 'none';
    lastFocused = document.activeElement;
    overlay.classList.add('open');
    closeBtn.focus();
  }

  function closeModal() {
    overlay.classList.remove('open');
    if (lastFocused) lastFocused.focus();
  }

  document.querySelectorAll('.panel-trigger').forEach(function (el) {
    el.addEventListener('click', function () { openModal(el); });
    el.addEventListener('keydown', function (e) {
      if (e.key === 'Enter' || e.key === ' ') {
        e.preventDefault();
        openModal(el);
      }
    });
  });

  closeBtn.addEventListener('click', closeModal);
  overlay.addEventListener('click', function (e) {
    if (e.target === overlay) closeModal();
  });
  document.addEventListener('keydown', function (e) {
    if (e.key === 'Escape' && overlay.classList.contains('open')) closeModal();
  });
})();
</script>

</body>
</html>