<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://dev.anandamakaranda.in/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Vaishnavi</id>
	<title>Anandamakaranda - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://dev.anandamakaranda.in/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Vaishnavi"/>
	<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/Special:Contributions/Vaishnavi"/>
	<updated>2026-06-13T11:43:51Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.44.5</generator>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.css&amp;diff=6229</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.css&amp;diff=6229"/>
		<updated>2026-06-13T10:21:18Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ═══════════════════════════════════════════════════════════════════&lt;br /&gt;
   MediaWiki:Common.css — Anandamakaranda&lt;br /&gt;
   Clean rebuild — works on Vector (desktop) + Minerva (mobile)&lt;br /&gt;
   ═══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
&lt;br /&gt;
/* ── 1. CSS VARIABLES ──────────────────────────────────────────── */&lt;br /&gt;
:root {&lt;br /&gt;
  --maroon:       #be100e;&lt;br /&gt;
  --orange:       #e65100;&lt;br /&gt;
  --light-orange: #f57c00;&lt;br /&gt;
  --dark-gray:    #555;&lt;br /&gt;
  --light-gray:   #eee;&lt;br /&gt;
  --muted-gray:   #888;&lt;br /&gt;
  --text:         #1a1a1a;&lt;br /&gt;
  --brown:        #a07040;&lt;br /&gt;
  --light-brown:  #e8d4a0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 2. FONTS ──────────────────────────────────────────────────── */&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;Adishila&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/adishila/Adishila.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: normal; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;Adishila&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/adishila/AdishilaBold.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: bold; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;AdishilaDev&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/AdishilaDev.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: normal; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;AdishilaDev&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/AdishilaDeBv.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: bold; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;AdishilaDevGuru&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/AdishilaDevGuru.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: bold; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;Noto Sans Devanagari&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/Noto_Sans_Devanagari/NotoSansDevanagari.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: normal; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Icon base ──────────────────────────────────────────────────── */&lt;br /&gt;
.gra-icon {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  width:  20px;&lt;br /&gt;
  height: 20px;&lt;br /&gt;
  background-size: contain;&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  background-position: center;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
/* comment.svg → Feedback (flag/report)  */&lt;br /&gt;
.gra-icon-feedback { background-image: url(&#039;/images/feedback.svg&#039;); }&lt;br /&gt;
/* notes.svg   → Notes                  */&lt;br /&gt;
.gra-icon-note     { background-image: url(&#039;/images/notes.svg&#039;); }&lt;br /&gt;
.gra-icon-bookmark { background-image: url(&#039;/images/bookmark.svg&#039;); }&lt;br /&gt;
.gra-icon-copy     { background-image: url(&#039;/images/copy.svg&#039;); }&lt;br /&gt;
.gra-icon-search { background-image: url(&#039;/images/search.svg&#039;); }&lt;br /&gt;
.gra-icon-dismiss { background-image: url(&#039;/images/close.svg&#039;); }&lt;br /&gt;
.gra-icon-prev { background-image: url(&#039;/images/prev.svg&#039;); }&lt;br /&gt;
.gra-icon-next { background-image: url(&#039;/images/next.svg&#039;); }&lt;br /&gt;
&lt;br /&gt;
#mw-content-text {&lt;br /&gt;
  font-family: &#039;Adishila&#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output {&lt;br /&gt;
  font-size: 22px;&lt;br /&gt;
  line-height: 1.7;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  max-width: 100%;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  margin: 0; padding: 0;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Danda marks wrap issue&lt;br /&gt;
.mw-parser-output { overflow-wrap: anywhere; }&lt;br /&gt;
&lt;br /&gt;
/* ── 4. HIDE ELEMENTS (both skins) ────────────────────────────── */&lt;br /&gt;
/* Page title */&lt;br /&gt;
h1.firstHeading, #firstHeading, .mw-page-title-main { display: none !important; }&lt;br /&gt;
/* Footer */&lt;br /&gt;
#footer, .mw-footer, .vector-footer, .vector-footer-container,&lt;br /&gt;
footer, .minerva-footer { display: none !important; }&lt;br /&gt;
/* Categories */&lt;br /&gt;
.catlinks, #catlinks, .mw-normal-catlinks, .mw-hidden-catlinks { display: none !important; }&lt;br /&gt;
/* Edit section links */&lt;br /&gt;
.mw-editsection, .mw-editsection-bracket { display: none !important; }&lt;br /&gt;
/* Site notice */&lt;br /&gt;
#siteNotice { display: none !important; }&lt;br /&gt;
/* Watchlist */&lt;br /&gt;
li#pt-watchlist, li#pt-watchlist-kbd { display: none !important; }&lt;br /&gt;
/* Appearance panel */&lt;br /&gt;
#vector-appearance, #vector-appearance-pinned-container,&lt;br /&gt;
#vector-appearance-unpinned-container, .mw-portlet-appearance,&lt;br /&gt;
#p-appearance, [aria-controls=&amp;quot;vector-appearance&amp;quot;] { display: none !important; }&lt;br /&gt;
/* Vector hamburger + sidebar */&lt;br /&gt;
#mw-sidebar-button, .vector-main-menu, .vector-main-menu-container,&lt;br /&gt;
.vector-main-menu-landmark, #vector-main-menu-dropdown { display: none !important; }&lt;br /&gt;
/* Vector search box (we use our own) */&lt;br /&gt;
#p-search, .vector-search-box, .vector-search-box-vue,&lt;br /&gt;
.vector-search-box-collapses { display: none !important; }&lt;br /&gt;
/* Vector page toolbar */&lt;br /&gt;
.vector-page-toolbar, .vector-page-toolbar-container { display: none !important; }&lt;br /&gt;
/* Vector page tools */&lt;br /&gt;
.vector-page-tools { display: none !important; }&lt;br /&gt;
/* Empty paragraphs */&lt;br /&gt;
.mw-parser-output p:empty,&lt;br /&gt;
.mw-parser-output &amp;gt; div &amp;gt; p:empty,&lt;br /&gt;
.mw-heading + p:empty,&lt;br /&gt;
.adhyaya-block + p:empty,&lt;br /&gt;
.verse-block + p:empty { display: none !important; margin: 0 !important; }&lt;br /&gt;
/* Empty divs */&lt;br /&gt;
.adhyaya-block:empty, .mw-parser-output div:empty { display: none !important; }&lt;br /&gt;
/* Cargo hidden */&lt;br /&gt;
.cargo-store-only { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 5. VECTOR HEADER (desktop only) ──────────────────────────── */&lt;br /&gt;
.vector-header-container {&lt;br /&gt;
  background: #b5451b !important;&lt;br /&gt;
  border-bottom: 1px solid rgba(255,255,255,0.12);&lt;br /&gt;
}&lt;br /&gt;
.vector-header {&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  justify-content: space-between !important;&lt;br /&gt;
  padding-left: 20px !important;&lt;br /&gt;
  padding-right: 20px !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-header-start {&lt;br /&gt;
  flex: 0 0 auto !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  gap: 12px;&lt;br /&gt;
}&lt;br /&gt;
.vector-header-end {&lt;br /&gt;
  flex: 0 0 auto !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  margin-left: auto;&lt;br /&gt;
}&lt;br /&gt;
.mw-logo { display: flex !important; align-items: center; opacity: 1 !important; }&lt;br /&gt;
.mw-logo-icon { width: 24px; height: 24px; }&lt;br /&gt;
&lt;br /&gt;
/* Site name */&lt;br /&gt;
.mw-logo-wordmark {&lt;br /&gt;
  font-size: 0 !important;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  flex-direction: column !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-logo-wordmark::before {&lt;br /&gt;
  content: &#039;Anandamakaranda&#039;;&lt;br /&gt;
  font-size: 17px;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-family: system-ui, -apple-system, sans-serif;&lt;br /&gt;
  letter-spacing: -0.01em;&lt;br /&gt;
}&lt;br /&gt;
.mw-logo-wordmark::after {&lt;br /&gt;
  content: &amp;quot;A Digital Archive of Dvaita Vedanta Literature&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  font-weight: 400;&lt;br /&gt;
  color: rgba(255,255,255,0.85);&lt;br /&gt;
  letter-spacing: 0.3px;&lt;br /&gt;
  margin-top: 1px;&lt;br /&gt;
  font-family: sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Header right links */&lt;br /&gt;
.vector-header-end &amp;gt; *:not(#p-search) { color: rgba(255,255,255,0.9) !important; }&lt;br /&gt;
.vector-user-links a { color: rgba(255,255,255,0.9) !important; }&lt;br /&gt;
&lt;br /&gt;
/* User icon white */&lt;br /&gt;
.vector-user-menu-container .vector-icon svg,&lt;br /&gt;
.vector-user-menu-container .vector-icon svg path,&lt;br /&gt;
.vector-user-menu-container .vector-icon svg circle {&lt;br /&gt;
  fill: #fff !important; stroke: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-user-links .vector-user-menu-chevron .vector-icon svg,&lt;br /&gt;
.vector-user-links .vector-user-menu-chevron .vector-icon svg path {&lt;br /&gt;
  fill: rgba(255,255,255,0.9) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* User dropdown — dark text on white card */&lt;br /&gt;
.vector-user-menu .mw-list-item a,&lt;br /&gt;
.vector-user-menu .vector-menu-content-list a,&lt;br /&gt;
#p-personal .vector-menu-content a,&lt;br /&gt;
.mw-portlet-personal .vector-menu-content a { color: #202122 !important; }&lt;br /&gt;
.vector-user-menu .mw-list-item a:hover { color: var(--light-orange) !important; }&lt;br /&gt;
&lt;br /&gt;
/* Suppress Vector sticky header clone */&lt;br /&gt;
.vector-sticky-header { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* Suppress body top padding that Vector adds */&lt;br /&gt;
.mw-body { margin-top: 0 !important; padding-top: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 6. VECTOR TOC (desktop sidebar) ──────────────────────────── */&lt;br /&gt;
.vector-toc .vector-toc-numb { display: none !important; }&lt;br /&gt;
.vector-toc .vector-toc-title {&lt;br /&gt;
  font-size: 0.72em !important; font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase; letter-spacing: 0.08em;&lt;br /&gt;
  color: var(--text) !important;&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, system-ui, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-toc .vector-toc-text {&lt;br /&gt;
  white-space: normal !important; word-break: break-word !important;&lt;br /&gt;
  overflow-wrap: anywhere !important; display: inline !important;&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, system-ui, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-toc a, .vector-toc .vector-toc-link {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, system-ui, sans-serif !important;&lt;br /&gt;
  color: var(--text) !important; text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-toc a:hover { color: var(--light-orange) !important; }&lt;br /&gt;
.vector-toc .vector-toc-list-item-active .vector-toc-link,&lt;br /&gt;
.vector-toc .vector-toc-list-item-active .vector-toc-link * {&lt;br /&gt;
  color: var(--light-orange) !important; font-weight: 700 !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-toc .cdx-button.vector-toc-toggle {&lt;br /&gt;
  background: none !important; border: none !important;&lt;br /&gt;
  box-shadow: none !important; color: var(--text) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 7. HEADINGS ───────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output h1, .mw-parser-output h2, .mw-parser-output h3, .mw-parser-output h4,&lt;br /&gt;
.mw-parser-output .mw-heading h1, .mw-parser-output .mw-heading h2,&lt;br /&gt;
.mw-parser-output .mw-heading h3 {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  border: none !important; padding: 0 !important; background: none !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output .mw-heading { border: none !important; margin: 0; padding: 0; }&lt;br /&gt;
&lt;br /&gt;
.mw-heading, .mw-heading2, .mw-heading3 { text-align:center; }&lt;br /&gt;
.mw-parser-output h2, .mw-parser-output .mw-heading2 h2 {&lt;br /&gt;
  font-size: 1.2em !important; font-weight: 500 !important;&lt;br /&gt;
  color: var(--maroon) !important; line-height: 1.8;&lt;br /&gt;
  margin: 24px 0 4px !important;&lt;br /&gt;
  border-bottom: 2px dotted var(--maroon) !important;&lt;br /&gt;
  width: 75%; font-family: &#039;AdishilaDev&#039;; text-align: center;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output h3, .mw-parser-output .mw-heading3 h3 {&lt;br /&gt;
  font-size: 1em !important; font-weight: 500 !important;&lt;br /&gt;
  color: var(--orange) !important; line-height: 1.5;&lt;br /&gt;
  margin: 24px 0 8px !important;&lt;br /&gt;
  border-bottom: 1px dotted var(--orange) !important;&lt;br /&gt;
  width: 55%; font-family: &#039;AdishilaDev&#039;; text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 8. PARAGRAPHS ─────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output p { margin: 0 0 0.35rem !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 9. DOCUMENT TITLE ─────────────────────────────────────────── */&lt;br /&gt;
.gr-doc-title {&lt;br /&gt;
  font-size: 2em; font-weight: 500; color: var(--maroon);&lt;br /&gt;
  line-height: 1.4; margin: 0 0 16px; border: none !important;&lt;br /&gt;
  text-align:center; font-family: &#039;AdishilaDev&#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 10. VERSE BLOCKS ──────────────────────────────────────────── */&lt;br /&gt;
.shloka-block { display: block; text-align: left; margin: 3px 0 0; padding-bottom: 0.5em; }&lt;br /&gt;
.shloka-line { display: block; font-style: normal; color: #333; line-height: 1.35; margin: 0; }&lt;br /&gt;
.verse-block { display: block; margin: 6px 0 0; text-align: left; }&lt;br /&gt;
.verse-block .shloka-block { text-align: left; margin: 0; }&lt;br /&gt;
.verse-block .shloka-line {&lt;br /&gt;
  display: block; font-style: italic; color: #c65;&lt;br /&gt;
  font-weight: 500; line-height: 1.35; margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.verse-block + p { display: none !important; margin: 0 !important; }&lt;br /&gt;
.mw-parser-output .verse-block,&lt;br /&gt;
.mw-parser-output .shloka-block { margin-top: 2px !important; margin-bottom: 2px !important; }&lt;br /&gt;
&lt;br /&gt;
.gr-verse-text, .verse-line, .verse-text {&lt;br /&gt;
  color: #b5451b; font-style: italic; line-height: 1.5; display: block; margin: 0.1em 0;&lt;br /&gt;
}&lt;br /&gt;
.gr-verse-type-sutra .gr-verse-text,&lt;br /&gt;
.verse-block[data-type=&amp;quot;sutra&amp;quot;] .verse-line { font-style: normal; font-weight: 600; color: #b5451b; }&lt;br /&gt;
&lt;br /&gt;
/* ── 11. UVACHA ────────────────────────────────────────────────── */&lt;br /&gt;
.uvacha-block {&lt;br /&gt;
  display: block; font-weight: bold; color: #c65;&lt;br /&gt;
  margin: 0.5rem 0 0; padding: 2px 0 2px 12px;&lt;br /&gt;
  border-left: 3px solid #c65; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
.uvacha-block + .verse-block { margin-top: 2px; }&lt;br /&gt;
.gr-uvaaca, .uvaaca {&lt;br /&gt;
  color: #b5451b; font-weight: 600; font-size: 0.92em; margin: 0.5em 0 0.2em 0; display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 12. BHASHYAM ──────────────────────────────────────────────── */&lt;br /&gt;
.bhashyam-block {&lt;br /&gt;
  display: block; font-size: 1em; line-height: 1.6; color: #555;&lt;br /&gt;
  margin: 0.25em 0 0.35em 48px; padding: 0; border: none; background: transparent;&lt;br /&gt;
}&lt;br /&gt;
.gr-bhashyam, .commentary-bhashyam {&lt;br /&gt;
  color: #222; font-style: normal; line-height: 1.75; margin: 0.3em 0 0.5em 0;&lt;br /&gt;
}&lt;br /&gt;
.gr-leading-bhashya { font-style: italic; color: #555; margin: 0.4em 0 0.5em 0; }&lt;br /&gt;
&lt;br /&gt;
/* ── 13. PADYA ─────────────────────────────────────────────────── */&lt;br /&gt;
.padya-block {&lt;br /&gt;
  display: block; font-size: 1em; line-height: 1.75; color: #c65 !important;&lt;br /&gt;
  font-style: italic; font-weight: 500; margin: 0.4em 0 0.6em 60px;&lt;br /&gt;
}&lt;br /&gt;
.gr-padapatha { font-size: 0.9em; color: #555; margin: 0.2em 0 0.3em 0.8em; }&lt;br /&gt;
&lt;br /&gt;
/* ── 14. TEEKA ─────────────────────────────────────────────────── */&lt;br /&gt;
.teeka-block {&lt;br /&gt;
  padding: 6px 10px 8px; margin: 0.3em 0; line-height: 1.6; color: #555;&lt;br /&gt;
}&lt;br /&gt;
.teeka-title {&lt;br /&gt;
  font-family: &#039;AdishilaDev&#039;;, sans-serif !important;&lt;br /&gt;
  font-size: 1.75em; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase;&lt;br /&gt;
  margin-bottom: 4px; padding-bottom: 3px;&lt;br /&gt;
}&lt;br /&gt;
.teeka-body .shloka-block {&lt;br /&gt;
  margin: 0.4em 0; padding: 0.3em 0.6em; font-family: &#039;AdishilaDev&#039;;&lt;br /&gt;
}&lt;br /&gt;
.teeka-body .shloka-line { font-style: italic; font-size: 0.97em; font-family: &#039;AdishilaDev&#039;; }&lt;br /&gt;
&lt;br /&gt;
/* ── 15. PRATEEKA / MOOLA ──────────────────────────────────────── */&lt;br /&gt;
.gr-prateeka { font-weight: bold; font-style: normal; color: #333; }&lt;br /&gt;
.gr-mulaprateeka-block {&lt;br /&gt;
  display: block; font-weight: bold; font-style: normal;&lt;br /&gt;
  text-align: center; color: #333; margin: 0.7em 0 0.3em; line-height: 1.5;&lt;br /&gt;
}&lt;br /&gt;
.gr-moola { font-weight: bold; font-style: italic; color: #c65; }&lt;br /&gt;
&lt;br /&gt;
/* ── 16. ADHYAYA ───────────────────────────────────────────────── */&lt;br /&gt;
.adhyaya-block { margin: 0 0 4px; }&lt;br /&gt;
.adhyaya-trans { font-size: 0.9em; color: #666; margin: 2px 0 0; }&lt;br /&gt;
.adhyaya-intro { margin-top: 8px; line-height: 1.75; color: #555; }&lt;br /&gt;
.introduction p { color: var(--dark-gray); font-weight: 400; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.introduction { padding-bottom: 0.5em; text-align: justify; }&lt;br /&gt;
&lt;br /&gt;
/* ── 17. NYAYA / PRASNA ────────────────────────────────────────── */&lt;br /&gt;
.nyaya-block { margin: 32px 0; padding-top: 12px; border-top: 1px solid #eee; }&lt;br /&gt;
.nyaya-title {&lt;br /&gt;
  font-size: 1em; font-weight: 500; color: var(--orange);&lt;br /&gt;
  margin-bottom: 0.4rem; border-bottom: 1px dotted var(--orange); width: 50%;&lt;br /&gt;
}&lt;br /&gt;
.nyaya-body { color: #555; line-height: 1.75; margin-top: 0.5rem; }&lt;br /&gt;
.prasna-block { margin: 32px 0; padding-top: 12px; border-top: 1px solid #eee; }&lt;br /&gt;
.prasna-title {&lt;br /&gt;
  font-size: 1em; font-weight: 500; color: var(--orange);&lt;br /&gt;
  margin-bottom: 0.4rem; border-bottom: 1px dotted var(--orange); width: 50%;&lt;br /&gt;
}&lt;br /&gt;
.prasna-question, .prasna-answer { color: #555; line-height: 1.75; margin-top: 0.5rem; }&lt;br /&gt;
.prasna-answer { margin-left: 60px; }&lt;br /&gt;
&lt;br /&gt;
/* ── 18. VYAKHYA ELEMENTS ──────────────────────────────────────── */&lt;br /&gt;
.gr-vyakhya-head, .gr-section-head {&lt;br /&gt;
  font-size: 0.9em; font-weight: 700; color: #6a3e00;&lt;br /&gt;
  margin: 0.35em 0 0.15em; font-family: inherit; border: none; padding: 0;&lt;br /&gt;
}&lt;br /&gt;
.gr-avataranika {&lt;br /&gt;
  font-style: italic; color: #444; margin: 0.2em 0 0.5em 0.5em;&lt;br /&gt;
  padding-left: 0.6em; border-left: 2px solid #c9a96e; line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
.gr-vyakhya-pada {&lt;br /&gt;
  font-size: 0.88em; color: #555; background: #fafafa;&lt;br /&gt;
  border: 1px solid #e8e0d0; border-radius: 4px; padding: 0.5em 0.8em;&lt;br /&gt;
  margin: 0.5em 0; line-height: 1.5; white-space: pre-wrap;&lt;br /&gt;
}&lt;br /&gt;
.gr-vyakhya-gadya {&lt;br /&gt;
  font-weight: bold; font-size: 0.95em; text-align: center;&lt;br /&gt;
  color: #8b1a1a; margin: 0.2em 0; line-height: 1.6; letter-spacing: 0.03em;&lt;br /&gt;
}&lt;br /&gt;
.gr-vyakhya-para { margin: 0 0 0.5em 0; line-height: 1.65; color: #444; }&lt;br /&gt;
.gr-embedded-bhashya { margin: 0.2em 0 0.2em 1em; line-height: 1.6; }&lt;br /&gt;
.gr-gadya {&lt;br /&gt;
  display: block !important; font-size: 0.96em !important; font-weight: 600 !important;&lt;br /&gt;
  font-style: normal !important; color: #555 !important; margin: 16px 0 4px !important;&lt;br /&gt;
  border-bottom: 1px solid #ddd !important; width: 60%; line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
.gr-author-note {&lt;br /&gt;
  font-style: italic; color: var(--maroon); text-align: center; font-size: 0.9em;&lt;br /&gt;
  margin: 0.8em 0 0.4em 0; border-top: 1px solid #ddd; padding-top: 0.4em; font-family: &#039;AdishilaDev&#039;&lt;br /&gt;
}&lt;br /&gt;
.gr-devatachandas { font-size: 0.82em; color: #777; margin: 0.4em 0 0.2em 0; }&lt;br /&gt;
.gr-vargikarana   { font-size: 0.82em; color: #888; margin: 0.5em 0 0.1em 0; }&lt;br /&gt;
&lt;br /&gt;
/* ── 20. BHASHYA COLLECTION ────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output .bhashya-collection { margin: 0; padding: 0; }&lt;br /&gt;
.mw-parser-output .bhashya + p:empty,&lt;br /&gt;
.mw-parser-output .verse + p:empty,&lt;br /&gt;
.mw-parser-output .bhashya-collection + p:empty,&lt;br /&gt;
.mw-parser-output .pramana + p:empty,&lt;br /&gt;
.mw-parser-output .author-note + p:empty { display: none !important; margin: 0 !important; height: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 21. VERSE ACTIONS ─────────────────────────────────────────── */&lt;br /&gt;
.verse-actions {&lt;br /&gt;
  display: flex; flex-direction: row; align-items: center;&lt;br /&gt;
  gap: 6px; margin-top: 4px; justify-content: center;&lt;br /&gt;
}&lt;br /&gt;
.verse-action-btn {&lt;br /&gt;
  display: inline-flex; align-items: center; justify-content: center;&lt;br /&gt;
  padding: 4px; border-radius: 6px; cursor: pointer; opacity: 0.75; transition: all 0.2s;&lt;br /&gt;
}&lt;br /&gt;
.verse-action-btn:hover { opacity: 1; background-color: rgba(0,0,0,0.05); }&lt;br /&gt;
.icon { display: inline-block; width: 18px; height: 18px; background-repeat: no-repeat; background-position: center; background-size: contain; }&lt;br /&gt;
.icon-copy       { background-image: url(&#039;/images/copy.svg&#039;); }&lt;br /&gt;
.icon-commentary { background-image: url(&#039;/images/commentary.svg&#039;); }&lt;br /&gt;
.copy-tooltip {&lt;br /&gt;
  position: absolute; bottom: calc(100% + 8px); left: 50%;&lt;br /&gt;
  transform: translateX(-50%) translateY(4px);&lt;br /&gt;
  white-space: nowrap; pointer-events: none; z-index: 9999;&lt;br /&gt;
  display: inline-flex; align-items: center; padding: 2px 8px; border-radius: 999px;&lt;br /&gt;
  font-size: 0.75rem; font-weight: 500; background: rgba(30,30,30,0.82); color: #fff;&lt;br /&gt;
  opacity: 0; transition: opacity 0.2s, transform 0.2s;&lt;br /&gt;
}&lt;br /&gt;
.copy-tooltip.copy-tooltip-visible { opacity: 1; transform: translateX(-50%) translateY(0); }&lt;br /&gt;
&lt;br /&gt;
/* ── 22. CODE / PRE ────────────────────────────────────────────── */&lt;br /&gt;
pre, code, .mw-code, tt, kbd {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif ;&lt;br /&gt;
  background-color: transparent !important; border: none !important; padding: 0.3em 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-collapsible, .mw-collapsible-content, blockquote, .quotebox {&lt;br /&gt;
  background-color: transparent !important; border: none !important;&lt;br /&gt;
  font-style: normal !important; padding: 0 !important; margin-left: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 23. INLINE TOC BOX (wikitext __TOC__) ─────────────────────── */&lt;br /&gt;
.toc {&lt;br /&gt;
  display: block !important; background: #fffdf5; border: 1px solid #e8c88a;&lt;br /&gt;
  border-radius: 8px; padding: 12px 16px; margin: 0 0 24px 0;&lt;br /&gt;
  width: fit-content; min-width: 220px; max-width: 420px;&lt;br /&gt;
  font-size: 0.9em; line-height: 2;&lt;br /&gt;
}&lt;br /&gt;
.toc h2, .toc .toctitle {&lt;br /&gt;
  font-size: 0.85em !important; font-weight: 600 !important; color: var(--text) !important;&lt;br /&gt;
  border: none !important; margin: 0 0 6px !important; text-transform: uppercase; letter-spacing: 0.05em;&lt;br /&gt;
}&lt;br /&gt;
.toc ul { margin: 0 !important; padding-left: 1.2em !important; list-style: none !important; }&lt;br /&gt;
.toc li { margin: 0; padding: 0; }&lt;br /&gt;
.toc a { color: var(--text) !important; text-decoration: none !important; }&lt;br /&gt;
.toc a:hover { color: var(--light-orange) !important; }&lt;br /&gt;
.toc .toclevel-1 &amp;gt; a { font-weight: 600; }&lt;br /&gt;
.tocnumber { display: none; }&lt;br /&gt;
&lt;br /&gt;
/* ── 24. DOC TEEKAS + TOC NAV ──────────────────────────────────── */&lt;br /&gt;
.gr-doc-teekas { margin-bottom: 1em; }&lt;br /&gt;
.gr-doc-teekas + p:empty { display: none !important; margin: 0 !important; height: 0 !important; }&lt;br /&gt;
.toc-main-links { display: flex; gap: 6px; padding: 5px; align-items: center; margin-bottom: 4px; }&lt;br /&gt;
.toc-main-link-item {&lt;br /&gt;
  font-size: 0.9em; color: var(--text); text-decoration: none; padding: 4px 8px;&lt;br /&gt;
  border-radius: 6px; background: rgba(0,0,0,0.05); transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.toc-main-link-item:hover { background: rgba(0,0,0,0.10) !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 25. MAIN PAGE ─────────────────────────────────────────────── */&lt;br /&gt;
body.page-Main_Page #mw-panel,&lt;br /&gt;
body.page-Main_Page .vector-sidebar-container { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
.gr-home { max-width: 1080px; margin: 0 auto; padding: 0; }&lt;br /&gt;
.gr-home-page-title {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif !important;&lt;br /&gt;
  text-align: center; font-size: 1.8em; font-weight: 500; color: #1a2e40; margin: 24px 0 32px;&lt;br /&gt;
}&lt;br /&gt;
.gr-home-grid { display: flex; flex-wrap: wrap; gap: 20px; margin-bottom: 32px; }&lt;br /&gt;
.gr-home-card {&lt;br /&gt;
  background: #fff; border: 1px solid #e8e4df; border-radius: 10px;&lt;br /&gt;
  box-shadow: 0 2px 8px rgba(0,0,0,0.07);&lt;br /&gt;
  padding: 18px 20px 20px; flex: 1 1 280px; min-width: 240px; max-width: 360px;&lt;br /&gt;
}&lt;br /&gt;
.gr-home-card-title {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif !important;&lt;br /&gt;
  font-size: 1em; font-weight: 600; color: #1a2e40; text-align: center;&lt;br /&gt;
  padding-bottom: 10px; margin-bottom: 12px; border-bottom: 1.5px solid #c0392b;&lt;br /&gt;
}&lt;br /&gt;
.gr-home-card ol { margin: 0; padding-left: 1.4em; list-style: decimal; }&lt;br /&gt;
.gr-home-card li { font-size: 0.95em; line-height: 1.85; color: #333; }&lt;br /&gt;
.gr-home-card li a { color: #c0392b; text-decoration: none; }&lt;br /&gt;
.gr-home-card li a:hover { text-decoration: underline; }&lt;br /&gt;
.gr-home-card li a.new { color: #c08080; }&lt;br /&gt;
.gr-home-note { font-size: 0.82em; color: #888; }&lt;br /&gt;
.gr-home-group-label {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif !important;&lt;br /&gt;
  font-size: 1.1em; font-weight: 600; color: #1a2e40; text-align: center;&lt;br /&gt;
  margin: 36px 0 16px; padding-bottom: 8px; border-bottom: 2px solid #c0392b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 26. TOGGLE BUTTONS ────────────────────────────────────────── */&lt;br /&gt;
.gr-home-toggle { display: flex; gap: 8px; margin: 0 0 24px; justify-content: center; }&lt;br /&gt;
.gr-toggle-btn {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  font-size: 0.88em; padding: 6px 20px; border: 1.5px solid #c0392b; border-radius: 20px;&lt;br /&gt;
  background: transparent; color: #c0392b; cursor: pointer; user-select: none; transition: background 0.15s, color 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gr-toggle-btn:hover { background: #fdf0ed; }&lt;br /&gt;
.gr-toggle-btn.gr-toggle-active { background: #c0392b; color: #fff; }&lt;br /&gt;
&lt;br /&gt;
/* ── 27. SCRIPT BAR ────────────────────────────────────────────── */&lt;br /&gt;
.gr-script-bar { margin: 0 0 20px; font-size: 0.8em; color: #888; display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }&lt;br /&gt;
.gr-script-label { font-family: system-ui, sans-serif; color: #aaa; }&lt;br /&gt;
.gr-script-btn { font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif; color: #c0392b !important; text-decoration: underline dotted !important; cursor: pointer; }&lt;br /&gt;
.gr-script-btn.active { color: #888 !important; text-decoration: none !important; cursor: default; }&lt;br /&gt;
&lt;br /&gt;
/* ── 28. MODALS ────────────────────────────────────────────────── */&lt;br /&gt;
.grantha-modal { position: fixed; inset: 0; background: rgba(0,0,0,0.35); display: flex; align-items: center; justify-content: center; z-index: 10000; }&lt;br /&gt;
.grantha-modal-box { background: white; padding: 20px; border-radius: 10px; width: 300px; }&lt;br /&gt;
.gm-title { font-weight: bold; margin-bottom: 10px; }&lt;br /&gt;
.gm-actions { display: flex; justify-content: flex-end; gap: 10px; margin-top: 12px; }&lt;br /&gt;
&lt;br /&gt;
/* ── 29. LOGIN PAGE ────────────────────────────────────────────── */&lt;br /&gt;
body.page-Special_UserLogin .vector-search-box,&lt;br /&gt;
body.page-Special_UserLogin #p-search { display: none !important; }&lt;br /&gt;
body.page-Special_UserLogin #content { max-width: 420px; margin: 40px auto !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 30. SPECIAL PAGES ─────────────────────────────────────────── */&lt;br /&gt;
body.ns-special #footer, body.ns-special .mw-footer,&lt;br /&gt;
body.ns-special .vector-footer { display: none !important; }&lt;br /&gt;
body.ns-special .vector-page-tools { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 31. MINERVA (mobile) ──────────────────────────────────────── */&lt;br /&gt;
.skin-minerva .mw-parser-output {&lt;br /&gt;
  font-size: 18px !important;&lt;br /&gt;
  line-height: 1.8 !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .mw-parser-output h2,&lt;br /&gt;
.skin-minerva .mw-parser-output .mw-heading2 h2 {&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .mw-parser-output h3,&lt;br /&gt;
.skin-minerva .mw-parser-output .mw-heading3 h3 {&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .bhashyam-block { margin-left: 16px !important; }&lt;br /&gt;
.skin-minerva .prasna-answer  { margin-left: 16px !important; }&lt;br /&gt;
.skin-minerva .padya-block    { margin-left: 16px !important; }&lt;br /&gt;
/* Home grid single column on Minerva */&lt;br /&gt;
.skin-minerva .gr-home-grid {&lt;br /&gt;
  flex-direction: column !important;&lt;br /&gt;
  flex-wrap: nowrap !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .gr-home-card {&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
  min-width: unset !important;&lt;br /&gt;
  flex: 0 0 auto !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
/* Hide things that should be hidden on mobile too */&lt;br /&gt;
.skin-minerva .catlinks,&lt;br /&gt;
.skin-minerva #catlinks { display: none !important; }&lt;br /&gt;
.skin-minerva .mw-editsection { display: none !important; }&lt;br /&gt;
/* Minerva already has its own TOC — hide our inline .toc */&lt;br /&gt;
.skin-minerva .toc { display: none !important; }&lt;br /&gt;
/* ReaderToolbar on Minerva */&lt;br /&gt;
.skin-minerva #gr-static-bar {&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  min-height: 52px !important;&lt;br /&gt;
  overflow-x: auto !important;&lt;br /&gt;
  overflow-y: hidden !important;&lt;br /&gt;
  scrollbar-width: none !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva #gr-static-bar::-webkit-scrollbar { display: none !important; }&lt;br /&gt;
.skin-minerva .gr-controls .gr-btn {&lt;br /&gt;
  height: 44px !important;&lt;br /&gt;
  min-width: 44px !important;&lt;br /&gt;
  font-size: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .gr-btn-staging { display: none !important; }&lt;br /&gt;
.skin-minerva .gr-controls .gr-sep { display: none !important; }&lt;br /&gt;
/* Minerva already shows page title — don&#039;t double-hide */&lt;br /&gt;
.skin-minerva h1.firstHeading { display: block !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 32. PRINT ─────────────────────────────────────────────────── */&lt;br /&gt;
@media print {&lt;br /&gt;
  #gr-static-bar, .gr-controls, .vector-header-container { display: none !important; }&lt;br /&gt;
  .mw-parser-output { font-size: 11pt !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 33. TYPOGRAPHY CLASSES ────────────────────────────────────── */&lt;br /&gt;
&lt;br /&gt;
/* Heading — center, maroon, AdishilaDevGuru */&lt;br /&gt;
.gr-heading {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  font-size: 1.09em;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  color: #be100e;&lt;br /&gt;
  font-family: &#039;AdishilaDevGuru&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  line-height: 1.4;&lt;br /&gt;
  margin: 0.45em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Sub-heading — center, orange, AdishilaDevGuru */&lt;br /&gt;
.gr-sub-heading {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  font-size: 0.73em;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  color: #e65100;&lt;br /&gt;
  font-family: &#039;AdishilaDevGuru&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
  margin: 0.5em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Chapter Heading — center, maroon, AdishilaDevGuru */&lt;br /&gt;
.gr-chapter-heading {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  font-size: 0.82em;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  color: #be100e;&lt;br /&gt;
  font-family: &#039;AdishilaDevGuru&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
  margin: 0.5em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* M.Veda Shloka — left, bold, maroon, AdishilaVed, 5mm indent */&lt;br /&gt;
.gr-mv-shloka {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: left;&lt;br /&gt;
  font-size: 0.82em;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  color: #be100e;&lt;br /&gt;
  font-family: &#039;AdishilaVed&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  padding-left: 0.86em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.75;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* M.Veda Gadya — justify, bold, maroon, AdishilaVed */&lt;br /&gt;
.gr-mv-gadya {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: justify;&lt;br /&gt;
  font-size: 0.82em;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  color: #be100e;&lt;br /&gt;
  font-family: &#039;AdishilaVed&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  text-indent: 1.18em;&lt;br /&gt;
  padding-left: 0.36em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.75;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* M.Shloka — left, bold, orange, AdishilaDev, 5mm indent */&lt;br /&gt;
.gr-m-shloka {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: left;&lt;br /&gt;
  font-size: 0.82em;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  color: #e65100;&lt;br /&gt;
  font-family: &#039;AdishilaDev&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  padding-left: 0.86em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.75;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* B.Shloka / TK.Shloka / TP.Shloka — left, black, AdishilaDev, 10mm indent */&lt;br /&gt;
.gr-b-shloka,&lt;br /&gt;
.gr-tp-shloka {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: left;&lt;br /&gt;
  font-size: 0.73em;&lt;br /&gt;
  font-weight: normal;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  font-family: &#039;AdishilaDev&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  padding-left: 1.73em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.75;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Reference — orange, AdishilaDev */&lt;br /&gt;
.gr-reference {&lt;br /&gt;
  color: #e65100;&lt;br /&gt;
  font-family: &#039;AdishilaDev&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Custom tag span — subtle dashed underline only */&lt;br /&gt;
.gr-custom {&lt;br /&gt;
  border-bottom: 1px dashed #b5451b;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 34. MINERVA HEADER — orange theme + sticky ────────────────── */&lt;br /&gt;
&lt;br /&gt;
/* Kill space above header */&lt;br /&gt;
.skin-minerva body { margin-top: 0 !important; padding-top: 0 !important; }&lt;br /&gt;
.skin-minerva #mw-mf-viewport,&lt;br /&gt;
.skin-minerva #mw-mf-page-center { margin-top: 0 !important; padding-top: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* Header — orange, sticky */&lt;br /&gt;
.skin-minerva header.header-container {&lt;br /&gt;
  background: #b5451b !important;&lt;br /&gt;
  position: sticky !important;&lt;br /&gt;
  top: 0 !important;&lt;br /&gt;
  z-index: 200 !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  color: #ffffff;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .minerva-header {&lt;br /&gt;
  background: #b5451b !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  min-height: 54px !important;&lt;br /&gt;
  padding: 0 12px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.minerva-icon {&lt;br /&gt;
 &lt;br /&gt;
 filter: brightness(0) saturate(100%) invert(100%) sepia(4%) saturate(1%) hue-rotate(296deg) brightness(104%) contrast(100%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Site name text */&lt;br /&gt;
.skin-minerva .branding-box { background: transparent !important; }&lt;br /&gt;
.skin-minerva .branding-box a {&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .branding-box a span {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-size: 18px !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  font-family: system-ui, -apple-system, sans-serif !important;&lt;br /&gt;
  white-space: nowrap !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hamburger + search icons — white */&lt;br /&gt;
.skin-minerva .minerva-header label,&lt;br /&gt;
.skin-minerva .minerva-header .search-toggle {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .minerva-header svg path,&lt;br /&gt;
.skin-minerva .minerva-header svg rect,&lt;br /&gt;
.skin-minerva .minerva-header svg circle {&lt;br /&gt;
  fill: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .minerva-header .mw-ui-icon:before {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  filter: brightness(10) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Reader toolbar below Minerva header */&lt;br /&gt;
.skin-minerva #gr-static-bar {&lt;br /&gt;
  position: sticky !important;&lt;br /&gt;
  top: 54px !important;&lt;br /&gt;
  z-index: 100 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 35. MINERVA — auto-expand sections ────────────────────────── */&lt;br /&gt;
.skin-minerva .collapsible-block,&lt;br /&gt;
.skin-minerva .collapsible-heading + .collapsible-block {&lt;br /&gt;
  display: block !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .mf-section-0,&lt;br /&gt;
.skin-minerva .mf-section-1,&lt;br /&gt;
.skin-minerva .mf-section-2,&lt;br /&gt;
.skin-minerva .mf-section-3,&lt;br /&gt;
.skin-minerva .mf-section-4,&lt;br /&gt;
.skin-minerva .mf-section-5,&lt;br /&gt;
.skin-minerva .mf-section-6,&lt;br /&gt;
.skin-minerva .mf-section-7,&lt;br /&gt;
.skin-minerva .mf-section-8,&lt;br /&gt;
.skin-minerva .mf-section-9 {&lt;br /&gt;
  display: block !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .section-heading {&lt;br /&gt;
  pointer-events: none !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .section-heading .indicator {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* ── Hide MediaWiki default header user/account controls (desktop) ── */&lt;br /&gt;
#pt-userpage-2,&lt;br /&gt;
#p-vector-user-menu-userpage,&lt;br /&gt;
/* Hide the right-side person-icon dropdown */&lt;br /&gt;
#vector-user-links-dropdown,&lt;br /&gt;
.vector-user-links-dropdown,&lt;br /&gt;
#p-personal-more,&lt;br /&gt;
.vector-user-menu,&lt;br /&gt;
.mw-portlet-vector-user-menu-overflow,&lt;br /&gt;
#pt-watchlist-2, #pt-watchlist {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Hide original userpage text link */&lt;br /&gt;
#p-vector-user-menu-userpage { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* Hide the right-side person-icon user menu dropdown */&lt;br /&gt;
#vector-user-links-dropdown { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Custom username dropdown ── */&lt;br /&gt;
#gr-user-dropdown {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    font-family: system-ui, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
#gr-user-trigger {&lt;br /&gt;
    display: inline-flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    gap: 6px;&lt;br /&gt;
    background: rgba(255,255,255,0.12);&lt;br /&gt;
    border: none;&lt;br /&gt;
    color: #fff;&lt;br /&gt;
    font-size: 0.9em;&lt;br /&gt;
    font-weight: 500;&lt;br /&gt;
    padding: 6px 12px;&lt;br /&gt;
    border-radius: 6px;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
#gr-user-trigger:hover { background: rgba(255,255,255,0.2); }&lt;br /&gt;
#gr-user-trigger .gr-caret { font-size: 0.7em; opacity: 0.8; }&lt;br /&gt;
&lt;br /&gt;
#gr-user-menu {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: calc(100% + 6px);&lt;br /&gt;
    right: 0;&lt;br /&gt;
    min-width: 180px;&lt;br /&gt;
    background: #fff;&lt;br /&gt;
    border: 1px solid #e0d8d2;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
    box-shadow: 0 6px 24px rgba(0,0,0,0.14);&lt;br /&gt;
    padding: 6px;&lt;br /&gt;
    z-index: 1000;&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
#gr-user-menu.gr-open { display: block; }&lt;br /&gt;
#gr-user-menu a {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    gap: 10px;&lt;br /&gt;
    padding: 10px 12px;&lt;br /&gt;
    color: #2c1810;&lt;br /&gt;
    text-decoration: none;&lt;br /&gt;
    font-size: 0.92em;&lt;br /&gt;
    border-radius: 6px;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
#gr-user-menu a:hover { background: #f7f1ed; }&lt;br /&gt;
.vector-user-links a {&lt;br /&gt;
    color: #1C1A17 !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-user-links-main  {&lt;br /&gt;
 display: none !important;&lt;br /&gt;
}&lt;br /&gt;
.gr-phone-row { margin-bottom: 12px; }&lt;br /&gt;
.gr-phone-label {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
    font-size: 0.875rem;&lt;br /&gt;
    margin-bottom: 6px;&lt;br /&gt;
}&lt;br /&gt;
.gr-phone-inputs {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    gap: 8px;&lt;br /&gt;
    align-items: stretch;&lt;br /&gt;
    height: 48px;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    font-family: &amp;quot;Noto Sans Devanagari&amp;quot;, system-ui, -apple-system, BlinkMacSystemFont, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
.gr-phone-country { width: 101px; border-radius: 12px; padding: 12px; gap: 8px; border: 1px solid #CED4DA;}&lt;br /&gt;
.gr-phone-national { flex: 1; border-radius: 12px; padding: 12px; border: 1px solid #CED4DA;}&lt;br /&gt;
&lt;br /&gt;
/* ── Country trigger button ── */&lt;br /&gt;
.gr-country-trigger {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    gap: 8px;&lt;br /&gt;
    width: 101px;&lt;br /&gt;
    border-radius: 12px;&lt;br /&gt;
    padding: 12px;&lt;br /&gt;
    border: 1px solid #CED4DA;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
    background: #fff;&lt;br /&gt;
}&lt;br /&gt;
.gr-country-trigger:hover { border-color: #72777d; }&lt;br /&gt;
.gr-trigger-flag { font-size: 1.3rem; line-height: 1; }&lt;br /&gt;
.gr-trigger-dial { font-size: 0.9rem; color: #54595d; }&lt;br /&gt;
.gr-trigger-caret { font-size: 0.7rem; color: #54595d; }&lt;br /&gt;
&lt;br /&gt;
/* ── Dropdown ── */&lt;br /&gt;
.gr-country-dropdown {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: calc(100% + 4px); left: 0;&lt;br /&gt;
    z-index: 9999;&lt;br /&gt;
    width: 280px;&lt;br /&gt;
    background: #fff;&lt;br /&gt;
    border: 1px solid #a2a9b1;&lt;br /&gt;
    border-radius: 4px;&lt;br /&gt;
    box-shadow: 0 4px 16px rgba(0,0,0,0.12);&lt;br /&gt;
}&lt;br /&gt;
.gr-country-search {&lt;br /&gt;
    width: 100%; box-sizing: border-box;&lt;br /&gt;
    padding: 8px 12px;&lt;br /&gt;
    border: none; border-bottom: 1px solid #eee;&lt;br /&gt;
    font-size: 0.9rem; outline: none;&lt;br /&gt;
}&lt;br /&gt;
.gr-country-list { max-height: 240px; overflow-y: auto; }&lt;br /&gt;
.gr-country-option {&lt;br /&gt;
    display: flex; align-items: center; gap: 8px;&lt;br /&gt;
    padding: 8px 12px; cursor: pointer; font-size: 0.9rem;&lt;br /&gt;
}&lt;br /&gt;
.gr-country-option:hover { background: #f8f9fa; }&lt;br /&gt;
.gr-country-flag { font-size: 1.2rem; flex-shrink: 0; }&lt;br /&gt;
.gr-country-name { flex: 1; color: #202122; }&lt;br /&gt;
.gr-country-dial { color: #54595d; font-size: 0.85rem; }&lt;br /&gt;
&lt;br /&gt;
.gr-phone-national:focus {&lt;br /&gt;
    outline: none; border-color: #4A433A;&lt;br /&gt;
}&lt;br /&gt;
/* Search Results Bar styles */&lt;br /&gt;
.gr-search-hl-mobile {&lt;br /&gt;
    position: fixed;&lt;br /&gt;
    top: 105px;&lt;br /&gt;
    left: 0px;&lt;br /&gt;
    right: 0px;&lt;br /&gt;
    z-index: 10200;&lt;br /&gt;
    background: rgb(181, 69, 27);&lt;br /&gt;
    color: rgb(255, 255, 255);&lt;br /&gt;
    padding: 0px;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: stretch;&lt;br /&gt;
    font-family: &amp;quot;Noto Sans Devanagari&amp;quot;, system-ui, sans-serif;&lt;br /&gt;
    box-shadow: 0 3px 14px rgba(0, 0, 0, 0.08) !important;&lt;br /&gt;
    height: 56px;&lt;br /&gt;
}&lt;br /&gt;
.gr-search-hl-mobile .gr-search-bar-btn { &lt;br /&gt;
  height: 48px;&lt;br /&gt;
  width: 48px;&lt;br /&gt;
  border: none;&lt;br /&gt;
  background: transparent;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  position: relative;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Mobile.css&amp;diff=6228</id>
		<title>MediaWiki:Mobile.css</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Mobile.css&amp;diff=6228"/>
		<updated>2026-06-13T10:19:59Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ================================================================&lt;br /&gt;
   MediaWiki:Mobile.css&lt;br /&gt;
   Loaded only on Minerva (mobile skin).&lt;br /&gt;
   ================================================================ */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ── 1. AUTO-ZOOM PREVENTION ─────────────────────────────────────&lt;br /&gt;
   iOS and Android zoom the viewport when a focused input has&lt;br /&gt;
   font-size &amp;lt; 16px. Every input on the site must be &amp;gt;= 16px.&lt;br /&gt;
   ──────────────────────────────────────────────────────────────── */&lt;br /&gt;
&lt;br /&gt;
/* Reader toolbar search input */&lt;br /&gt;
#gr-search-panel input {&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* New document dialog inputs */&lt;br /&gt;
#gr-newdoc-overlay input,&lt;br /&gt;
#gr-newdoc-overlay select,&lt;br /&gt;
#gr-newdoc-overlay textarea {&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Annotation composer inputs (gr_annotations gadget) */&lt;br /&gt;
.gra-composer-input,&lt;br /&gt;
.gra-fb-select,&lt;br /&gt;
#gra-nt-input,&lt;br /&gt;
#gra-bm-input,&lt;br /&gt;
#gra-fb-text,&lt;br /&gt;
#gra-fb-email {&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ── 2. LONG-PRESS CONTEXT MENU SUPPRESSION ──────────────────────&lt;br /&gt;
   -webkit-touch-callout: none  → stops iOS &amp;quot;Copy / Look Up / Share&amp;quot;&lt;br /&gt;
                                   popup on long press of buttons&lt;br /&gt;
   user-select: none            → prevents text selection on button labels&lt;br /&gt;
   touch-action: manipulation   → removes 300ms tap delay and prevents&lt;br /&gt;
                                   context menu on long press (iOS + Android)&lt;br /&gt;
   ──────────────────────────────────────────────────────────────── */&lt;br /&gt;
&lt;br /&gt;
/* Sanskrit keyboard keys */&lt;br /&gt;
.gr-kb-key,&lt;br /&gt;
.gr-kb-key-iast,&lt;br /&gt;
.gr-kb-action,&lt;br /&gt;
.gr-kb {&lt;br /&gt;
  -webkit-touch-callout: none;&lt;br /&gt;
  user-select: none;&lt;br /&gt;
  touch-action: manipulation;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Annotation FAB buttons and mobile action bar */&lt;br /&gt;
.gra-mob-btn,&lt;br /&gt;
.gra-fab-btn,&lt;br /&gt;
#gra-toggle,&lt;br /&gt;
#gra-mob-feedback,&lt;br /&gt;
#gra-mob-note,&lt;br /&gt;
#gra-mob-bookmark,&lt;br /&gt;
#gra-mob-dismiss {&lt;br /&gt;
  -webkit-touch-callout: none;&lt;br /&gt;
  user-select: none;&lt;br /&gt;
  touch-action: manipulation;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Reader toolbar buttons */&lt;br /&gt;
#gr-static-bar .gr-btn,&lt;br /&gt;
#gr-static-bar .gr-icon-btn {&lt;br /&gt;
  -webkit-touch-callout: none;&lt;br /&gt;
  user-select: none;&lt;br /&gt;
  touch-action: manipulation;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* siteNav FAB buttons */&lt;br /&gt;
#se-docnav-btn,&lt;br /&gt;
#se-scrolltop {&lt;br /&gt;
  -webkit-touch-callout: none;&lt;br /&gt;
  user-select: none;&lt;br /&gt;
  touch-action: manipulation;&lt;br /&gt;
}&lt;br /&gt;
Template style fixes for Mobile&lt;br /&gt;
.mw-parser-output h2, .mw-parser-output .mw-heading2 h2 {&lt;br /&gt;
  margin-top: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Spacing fixes for headings */&lt;br /&gt;
.skin-minerva .mw-parser-output h2,&lt;br /&gt;
.skin-minerva .mw-parser-output .mw-heading2 h2,&lt;br /&gt;
.skin-minerva .mw-parser-output .mw-heading2 {&lt;br /&gt;
    margin-top: 8px !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .mw-parser-output .mw-heading2 + p,&lt;br /&gt;
.skin-minerva .mw-parser-output h2 + p {&lt;br /&gt;
    margin-top: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Also reduce Minerva&#039;s paragraph bottom margin inside content */&lt;br /&gt;
.skin-minerva .mw-parser-output p {&lt;br /&gt;
    padding-bottom: 0.25em !important;&lt;br /&gt;
    margin: 0 0 0.25em 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .section-heading,&lt;br /&gt;
.skin-minerva .collapsible-heading {&lt;br /&gt;
    margin: 0 !important;&lt;br /&gt;
    padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.page-Special_UserLogin .navigation-drawer,&lt;br /&gt;
.page-Special_UserLogin .header-container .toggle-list__checkbox,&lt;br /&gt;
.page-Special_UserLogin #mw-mf-main-menu-button,&lt;br /&gt;
.page-Special_CreateAccount .navigation-drawer,&lt;br /&gt;
.page-Special_CreateAccount #mw-mf-main-menu-button&lt;br /&gt;
.mw-special-Userlogin .page-Special_UserLogin .header-container .minerva-icon {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;br /&gt;
.page-Special_UserLogin #mw-mf-main-menu-button,&lt;br /&gt;
.mw-special-Userlogin #mw-mf-main-menu-button {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.js&amp;diff=6227</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.js&amp;diff=6227"/>
		<updated>2026-06-13T10:17:42Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* MediaWiki:Common.js — grantha.io  (v7) */&lt;br /&gt;
&lt;br /&gt;
(function () {&lt;br /&gt;
&lt;br /&gt;
    var LS_SCRIPT_KEY = &#039;grantha_reader_script&#039;;&lt;br /&gt;
    var currentScript = &#039;deva&#039;;&lt;br /&gt;
&lt;br /&gt;
    function devanagariToIAST(text) {&lt;br /&gt;
        var CONSONANTS = {&lt;br /&gt;
            &#039;क&#039;: &#039;k&#039;, &#039;ख&#039;: &#039;kh&#039;, &#039;ग&#039;: &#039;g&#039;, &#039;घ&#039;: &#039;gh&#039;, &#039;ङ&#039;: &#039;ṅ&#039;,&lt;br /&gt;
            &#039;च&#039;: &#039;c&#039;, &#039;छ&#039;: &#039;ch&#039;, &#039;ज&#039;: &#039;j&#039;, &#039;झ&#039;: &#039;jh&#039;, &#039;ञ&#039;: &#039;ñ&#039;,&lt;br /&gt;
            &#039;ट&#039;: &#039;ṭ&#039;, &#039;ठ&#039;: &#039;ṭh&#039;, &#039;ड&#039;: &#039;ḍ&#039;, &#039;ढ&#039;: &#039;ḍh&#039;, &#039;ण&#039;: &#039;ṇ&#039;,&lt;br /&gt;
            &#039;त&#039;: &#039;t&#039;, &#039;थ&#039;: &#039;th&#039;, &#039;द&#039;: &#039;d&#039;, &#039;ध&#039;: &#039;dh&#039;, &#039;न&#039;: &#039;n&#039;,&lt;br /&gt;
            &#039;प&#039;: &#039;p&#039;, &#039;फ&#039;: &#039;ph&#039;, &#039;ब&#039;: &#039;b&#039;, &#039;भ&#039;: &#039;bh&#039;, &#039;म&#039;: &#039;m&#039;,&lt;br /&gt;
            &#039;य&#039;: &#039;y&#039;, &#039;र&#039;: &#039;r&#039;, &#039;ल&#039;: &#039;l&#039;, &#039;ळ&#039;: &#039;ḷ&#039;, &#039;व&#039;: &#039;v&#039;,&lt;br /&gt;
            &#039;श&#039;: &#039;ś&#039;, &#039;ष&#039;: &#039;ṣ&#039;, &#039;स&#039;: &#039;s&#039;, &#039;ह&#039;: &#039;h&#039;&lt;br /&gt;
        };&lt;br /&gt;
        var DIACRITICS = {&lt;br /&gt;
            &#039;ा&#039;: &#039;ā&#039;, &#039;ि&#039;: &#039;i&#039;, &#039;ी&#039;: &#039;ī&#039;, &#039;ु&#039;: &#039;u&#039;, &#039;ू&#039;: &#039;ū&#039;,&lt;br /&gt;
            &#039;ृ&#039;: &#039;ṛ&#039;, &#039;ॄ&#039;: &#039;ṝ&#039;, &#039;े&#039;: &#039;e&#039;, &#039;ै&#039;: &#039;ai&#039;, &#039;ो&#039;: &#039;o&#039;, &#039;ौ&#039;: &#039;au&#039;&lt;br /&gt;
        };&lt;br /&gt;
        var VOWELS = {&lt;br /&gt;
            &#039;अ&#039;: &#039;a&#039;, &#039;आ&#039;: &#039;ā&#039;, &#039;इ&#039;: &#039;i&#039;, &#039;ई&#039;: &#039;ī&#039;, &#039;उ&#039;: &#039;u&#039;, &#039;ऊ&#039;: &#039;ū&#039;,&lt;br /&gt;
            &#039;ऋ&#039;: &#039;ṛ&#039;, &#039;ॠ&#039;: &#039;ṝ&#039;, &#039;ए&#039;: &#039;e&#039;, &#039;ऐ&#039;: &#039;ai&#039;, &#039;ओ&#039;: &#039;o&#039;, &#039;औ&#039;: &#039;au&#039;, &#039;ऽ&#039;: &amp;quot;&#039;&amp;quot;&lt;br /&gt;
        };&lt;br /&gt;
        var MISC = {&lt;br /&gt;
            &#039;ं&#039;: &#039;ṃ&#039;, &#039;ः&#039;: &#039;ḥ&#039;, &#039;ँ&#039;: &#039;m̐&#039;, &#039;ॐ&#039;: &#039;oṃ&#039;,&lt;br /&gt;
            &#039;०&#039;: &#039;0&#039;, &#039;१&#039;: &#039;1&#039;, &#039;२&#039;: &#039;2&#039;, &#039;३&#039;: &#039;3&#039;, &#039;४&#039;: &#039;4&#039;,&lt;br /&gt;
            &#039;५&#039;: &#039;5&#039;, &#039;६&#039;: &#039;6&#039;, &#039;७&#039;: &#039;7&#039;, &#039;८&#039;: &#039;8&#039;, &#039;९&#039;: &#039;9&#039;&lt;br /&gt;
        };&lt;br /&gt;
        var HALANTA = &#039;्&#039;;&lt;br /&gt;
        var chars = Array.from(text);&lt;br /&gt;
        var result = &#039;&#039;;&lt;br /&gt;
        var i = 0;&lt;br /&gt;
        while (i &amp;lt; chars.length) {&lt;br /&gt;
            var ch = chars[i];&lt;br /&gt;
            var next = chars[i + 1];&lt;br /&gt;
            if (CONSONANTS[ch]) {&lt;br /&gt;
                var base = CONSONANTS[ch];&lt;br /&gt;
                if (next === HALANTA) { result += base; i += 2; }&lt;br /&gt;
                else if (DIACRITICS[next]) { result += base + DIACRITICS[next]; i += 2; }&lt;br /&gt;
                else if (next === &#039;ं&#039; || next === &#039;ः&#039;) { result += base + &#039;a&#039; + MISC[next]; i += 2; }&lt;br /&gt;
                else { result += base + &#039;a&#039;; i++; }&lt;br /&gt;
            } else if (VOWELS[ch]) { result += VOWELS[ch]; i++; }&lt;br /&gt;
            else if (DIACRITICS[ch]) { result += DIACRITICS[ch]; i++; }&lt;br /&gt;
            else if (MISC[ch]) { result += MISC[ch]; i++; }&lt;br /&gt;
            else { result += ch; i++; }&lt;br /&gt;
        }&lt;br /&gt;
        return result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var SCRIPT_MAP = {&lt;br /&gt;
        kn: {&lt;br /&gt;
            &#039;अ&#039;: &#039;ಅ&#039;, &#039;आ&#039;: &#039;ಆ&#039;, &#039;इ&#039;: &#039;ಇ&#039;, &#039;ई&#039;: &#039;ಈ&#039;, &#039;उ&#039;: &#039;ಉ&#039;, &#039;ऊ&#039;: &#039;ಊ&#039;, &#039;ऋ&#039;: &#039;ಋ&#039;,&lt;br /&gt;
            &#039;ए&#039;: &#039;ಏ&#039;, &#039;ऐ&#039;: &#039;ಐ&#039;, &#039;ओ&#039;: &#039;ಓ&#039;, &#039;औ&#039;: &#039;ಔ&#039;, &#039;ऽ&#039;: &#039;ಽ&#039;,&lt;br /&gt;
            &#039;क&#039;: &#039;ಕ&#039;, &#039;ख&#039;: &#039;ಖ&#039;, &#039;ग&#039;: &#039;ಗ&#039;, &#039;घ&#039;: &#039;ಘ&#039;, &#039;ङ&#039;: &#039;ಙ&#039;,&lt;br /&gt;
            &#039;च&#039;: &#039;ಚ&#039;, &#039;छ&#039;: &#039;ಛ&#039;, &#039;ज&#039;: &#039;ಜ&#039;, &#039;झ&#039;: &#039;ಝ&#039;, &#039;ञ&#039;: &#039;ಞ&#039;,&lt;br /&gt;
            &#039;ट&#039;: &#039;ಟ&#039;, &#039;ठ&#039;: &#039;ಠ&#039;, &#039;ड&#039;: &#039;ಡ&#039;, &#039;ढ&#039;: &#039;ಢ&#039;, &#039;ण&#039;: &#039;ಣ&#039;,&lt;br /&gt;
            &#039;त&#039;: &#039;ತ&#039;, &#039;थ&#039;: &#039;ಥ&#039;, &#039;द&#039;: &#039;ದ&#039;, &#039;ध&#039;: &#039;ಧ&#039;, &#039;न&#039;: &#039;ನ&#039;,&lt;br /&gt;
            &#039;प&#039;: &#039;ಪ&#039;, &#039;फ&#039;: &#039;ಫ&#039;, &#039;ब&#039;: &#039;ಬ&#039;, &#039;भ&#039;: &#039;ಭ&#039;, &#039;म&#039;: &#039;ಮ&#039;,&lt;br /&gt;
            &#039;य&#039;: &#039;ಯ&#039;, &#039;र&#039;: &#039;ರ&#039;, &#039;ल&#039;: &#039;ಲ&#039;, &#039;व&#039;: &#039;ವ&#039;,&lt;br /&gt;
            &#039;श&#039;: &#039;ಶ&#039;, &#039;ष&#039;: &#039;ಷ&#039;, &#039;स&#039;: &#039;ಸ&#039;, &#039;ह&#039;: &#039;ಹ&#039;,&lt;br /&gt;
            &#039;ा&#039;: &#039;ಾ&#039;, &#039;ि&#039;: &#039;ಿ&#039;, &#039;ी&#039;: &#039;ೀ&#039;, &#039;ु&#039;: &#039;ು&#039;, &#039;ू&#039;: &#039;ೂ&#039;,&lt;br /&gt;
            &#039;ृ&#039;: &#039;ೃ&#039;, &#039;े&#039;: &#039;ೇ&#039;, &#039;ै&#039;: &#039;ೈ&#039;, &#039;ो&#039;: &#039;ೋ&#039;, &#039;ौ&#039;: &#039;ೌ&#039;,&lt;br /&gt;
            &#039;ं&#039;: &#039;ಂ&#039;, &#039;ः&#039;: &#039;ಃ&#039;, &#039;्&#039;: &#039;್&#039;,&lt;br /&gt;
            &#039;०&#039;: &#039;೦&#039;, &#039;१&#039;: &#039;೧&#039;, &#039;२&#039;: &#039;೨&#039;, &#039;३&#039;: &#039;೩&#039;, &#039;४&#039;: &#039;೪&#039;,&lt;br /&gt;
            &#039;५&#039;: &#039;೫&#039;, &#039;६&#039;: &#039;೬&#039;, &#039;७&#039;: &#039;೭&#039;, &#039;८&#039;: &#039;೮&#039;, &#039;९&#039;: &#039;೯&#039;&lt;br /&gt;
        },&lt;br /&gt;
        ta: {&lt;br /&gt;
            &#039;अ&#039;: &#039;அ&#039;, &#039;आ&#039;: &#039;ஆ&#039;, &#039;इ&#039;: &#039;இ&#039;, &#039;ई&#039;: &#039;ஈ&#039;, &#039;उ&#039;: &#039;உ&#039;, &#039;ऊ&#039;: &#039;ஊ&#039;,&lt;br /&gt;
            &#039;ऋ&#039;: &#039;ரு&#039;, &#039;ॠ&#039;: &#039;ரூ&#039;,&lt;br /&gt;
            &#039;ए&#039;: &#039;ஏ&#039;, &#039;ऐ&#039;: &#039;ஐ&#039;, &#039;ओ&#039;: &#039;ஓ&#039;, &#039;औ&#039;: &#039;ஔ&#039;,&lt;br /&gt;
            &#039;क&#039;: &#039;க&#039;, &#039;ख&#039;: &#039;க&#039;, &#039;ग&#039;: &#039;க&#039;, &#039;घ&#039;: &#039;க&#039;, &#039;ङ&#039;: &#039;ங&#039;,&lt;br /&gt;
            &#039;च&#039;: &#039;ச&#039;, &#039;छ&#039;: &#039;ச&#039;, &#039;ज&#039;: &#039;ஜ&#039;, &#039;झ&#039;: &#039;ஜ&#039;, &#039;ञ&#039;: &#039;ஞ&#039;,&lt;br /&gt;
            &#039;ட&#039;: &#039;ட&#039;, &#039;ठ&#039;: &#039;ட&#039;, &#039;ड&#039;: &#039;ட&#039;, &#039;ढ&#039;: &#039;ட&#039;, &#039;ண&#039;: &#039;ண&#039;,&lt;br /&gt;
            &#039;त&#039;: &#039;த&#039;, &#039;थ&#039;: &#039;த&#039;, &#039;द&#039;: &#039;த&#039;, &#039;ध&#039;: &#039;த&#039;, &#039;न&#039;: &#039;ந&#039;,&lt;br /&gt;
            &#039;प&#039;: &#039;ப&#039;, &#039;फ&#039;: &#039;ப&#039;, &#039;ब&#039;: &#039;ப&#039;, &#039;भ&#039;: &#039;ப&#039;, &#039;म&#039;: &#039;ம&#039;,&lt;br /&gt;
            &#039;य&#039;: &#039;ய&#039;, &#039;र&#039;: &#039;ர&#039;, &#039;ल&#039;: &#039;ல&#039;, &#039;ळ&#039;: &#039;ழ&#039;, &#039;व&#039;: &#039;வ&#039;,&lt;br /&gt;
            &#039;श&#039;: &#039;ஶ&#039;, &#039;ष&#039;: &#039;ஷ&#039;, &#039;स&#039;: &#039;ஸ&#039;, &#039;ह&#039;: &#039;ஹ&#039;,&lt;br /&gt;
            &#039;ा&#039;: &#039;ா&#039;, &#039;ि&#039;: &#039;ி&#039;, &#039;ी&#039;: &#039;ீ&#039;, &#039;ु&#039;: &#039;ு&#039;, &#039;ू&#039;: &#039;ூ&#039;,&lt;br /&gt;
            &#039;ृ&#039;: &#039;ு&#039;, &#039;ॄ&#039;: &#039;ூ&#039;,&lt;br /&gt;
            &#039;े&#039;: &#039;ே&#039;, &#039;ை&#039;: &#039;ை&#039;, &#039;ो&#039;: &#039;ோ&#039;, &#039;ौ&#039;: &#039;ௌ&#039;,&lt;br /&gt;
            &#039;ं&#039;: &#039;ம்&#039;, &#039;ः&#039;: &#039;:&#039;, &#039;ँ&#039;: &#039;ம்&#039;, &#039;्&#039;: &#039;்&#039;, &#039;ॐ&#039;: &#039;ௐ&#039;, &#039;ऽ&#039;: &#039;ௗ&#039;,&lt;br /&gt;
            &#039;०&#039;: &#039;0&#039;, &#039;१&#039;: &#039;1&#039;, &#039;२&#039;: &#039;2&#039;, &#039;३&#039;: &#039;3&#039;, &#039;४&#039;: &#039;4&#039;,&lt;br /&gt;
            &#039;५&#039;: &#039;5&#039;, &#039;६&#039;: &#039;6&#039;, &#039;७&#039;: &#039;7&#039;, &#039;८&#039;: &#039;8&#039;, &#039;९&#039;: &#039;9&#039;&lt;br /&gt;
        }&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    var PRE = [&lt;br /&gt;
        [/ङ्क/g, &#039;ंक&#039;], [/ङ्ख/g, &#039;ंख&#039;], [/ङ्ग/g, &#039;ंग&#039;], [/ङ्घ/g, &#039;ंघ&#039;],&lt;br /&gt;
        [/ञ्च/g, &#039;ंच&#039;], [/ञ्ज/g, &#039;ंज&#039;], [/ण्ट/g, &#039;ंट&#039;], [/ण्ड/g, &#039;ंड&#039;],&lt;br /&gt;
        [/न्त/g, &#039;ंत&#039;], [/न्द/g, &#039;ंद&#039;], [/म्ब/g, &#039;ंब&#039;], [/म्भ/g, &#039;ंभ&#039;]&lt;br /&gt;
    ];&lt;br /&gt;
&lt;br /&gt;
    function transliterateText(text, script) {&lt;br /&gt;
        if (script === &#039;en&#039;) return devanagariToIAST(text);&lt;br /&gt;
        var map = SCRIPT_MAP[script];&lt;br /&gt;
        if (!map) return text;&lt;br /&gt;
        var t = text;&lt;br /&gt;
        PRE.forEach(function (p) { t = t.replace(p[0], p[1]); });&lt;br /&gt;
        return Array.from(t).map(function (ch) {&lt;br /&gt;
            return map[ch] !== undefined ? map[ch] : ch;&lt;br /&gt;
        }).join(&#039;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var translatableSpans = [];&lt;br /&gt;
&lt;br /&gt;
    function tagTextNodes() {&lt;br /&gt;
        var content = document.querySelector(&#039;.mw-parser-output&#039;);&lt;br /&gt;
        if (content) {&lt;br /&gt;
            var walker = document.createTreeWalker(content, NodeFilter.SHOW_TEXT);&lt;br /&gt;
            var nodes = [];&lt;br /&gt;
            while (walker.nextNode()) nodes.push(walker.currentNode);&lt;br /&gt;
            nodes.forEach(function (node) {&lt;br /&gt;
                var p = node.parentNode;&lt;br /&gt;
                if (!p) return;&lt;br /&gt;
                if (p.hasAttribute &amp;amp;&amp;amp; p.hasAttribute(&#039;data-deva&#039;)) return;&lt;br /&gt;
                if (p.closest) {&lt;br /&gt;
                    if (p.closest(&#039;.gr-controls&#039;)) return;&lt;br /&gt;
                    if (p.closest(&#039;.mw-editsection&#039;)) return;&lt;br /&gt;
                }&lt;br /&gt;
                var orig = node.textContent;&lt;br /&gt;
                if (!orig.trim()) return;&lt;br /&gt;
                var span = document.createElement(&#039;span&#039;);&lt;br /&gt;
                span.setAttribute(&#039;data-deva&#039;, orig);&lt;br /&gt;
                span.textContent = orig;&lt;br /&gt;
                p.replaceChild(span, node);&lt;br /&gt;
                translatableSpans.push(span);&lt;br /&gt;
            });&lt;br /&gt;
        }&lt;br /&gt;
        document.querySelectorAll(&#039;.vector-toc .vector-toc-text&#039;).forEach(function (span) {&lt;br /&gt;
            if (span.hasAttribute(&#039;data-deva&#039;)) return;&lt;br /&gt;
            var orig = span.textContent;&lt;br /&gt;
            if (!orig.trim()) return;&lt;br /&gt;
            span.setAttribute(&#039;data-deva&#039;, orig);&lt;br /&gt;
            translatableSpans.push(span);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function applyScript(script) {&lt;br /&gt;
        currentScript = script;&lt;br /&gt;
        translatableSpans.forEach(function (span) {&lt;br /&gt;
            if (!span.parentNode) return;&lt;br /&gt;
            var orig = span.getAttribute(&#039;data-deva&#039;);&lt;br /&gt;
            if (!orig) return;&lt;br /&gt;
            span.textContent = (script === &#039;deva&#039;)&lt;br /&gt;
                ? orig&lt;br /&gt;
                : transliterateText(orig, script);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function _isNoTocPage() {&lt;br /&gt;
        var pn = (window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get(&#039;wgPageName&#039;)) || &#039;&#039;;&lt;br /&gt;
        return pn === &#039;Main_Page&#039; || /^[A-Za-z0-9_]+:About$/.test(pn);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function renameTocTitle() {&lt;br /&gt;
        if (_isNoTocPage()) return;&lt;br /&gt;
        var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
        if (!toc) return;&lt;br /&gt;
        var titleEl = toc.querySelector(&#039;.vector-toc-title&#039;) || toc.querySelector(&#039;.vector-pinnable-header-label&#039;);&lt;br /&gt;
        if (!titleEl) return;&lt;br /&gt;
        var LABEL = &#039;विषयसूची&#039;;&lt;br /&gt;
        var span = titleEl.querySelector(&#039;.gr-toc-title&#039;);&lt;br /&gt;
        if (!span) {&lt;br /&gt;
            titleEl.innerHTML = &#039;&#039;;&lt;br /&gt;
            span = document.createElement(&#039;span&#039;);&lt;br /&gt;
            span.className = &#039;gr-toc-title&#039;;&lt;br /&gt;
            span.setAttribute(&#039;data-deva&#039;, LABEL);&lt;br /&gt;
            titleEl.appendChild(span);&lt;br /&gt;
            translatableSpans.push(span);&lt;br /&gt;
        }&lt;br /&gt;
        span.textContent = currentScript === &#039;deva&#039; ? LABEL : transliterateText(LABEL, currentScript);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function removeTocBeginning() {&lt;br /&gt;
        if (_isNoTocPage()) return;&lt;br /&gt;
        var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
        if (!toc) return;&lt;br /&gt;
        var el = toc.querySelector(&#039;#vector-toc-beginning&#039;);&lt;br /&gt;
        if (!el) {&lt;br /&gt;
            var items = toc.querySelectorAll(&#039;.vector-toc-list-item&#039;);&lt;br /&gt;
            for (var i = 0; i &amp;lt; items.length; i++) {&lt;br /&gt;
                var a = items[i].querySelector(&#039;a&#039;);&lt;br /&gt;
                if (a) {&lt;br /&gt;
                    var href = a.getAttribute(&#039;href&#039;) || &#039;&#039;;&lt;br /&gt;
                    if (href.indexOf(&#039;#&#039;) === -1) { el = items[i]; break; }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        if (el &amp;amp;&amp;amp; el.parentNode) el.parentNode.removeChild(el);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function expandTocSections() {&lt;br /&gt;
        if (_isNoTocPage()) return;&lt;br /&gt;
        var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
        if (!toc) return;&lt;br /&gt;
        toc.querySelectorAll(&#039;.vector-toc-list-item-collapsed&#039;).forEach(function (li) {&lt;br /&gt;
            li.classList.remove(&#039;vector-toc-list-item-collapsed&#039;);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function injectTocDocNav() {&lt;br /&gt;
        if (_isNoTocPage()) return;&lt;br /&gt;
        var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
        if (!toc) return;&lt;br /&gt;
        if (document.getElementById(&#039;gr-toc-doc-nav&#039;)) return;&lt;br /&gt;
        var artPath = (window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get(&#039;wgArticlePath&#039;)) || &#039;/wiki/$1&#039;;&lt;br /&gt;
        var pageTitle = (window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get(&#039;wgPageName&#039;)) || &#039;&#039;;&lt;br /&gt;
        var teekaPage = document.querySelector(&#039;.gr-teeka-page&#039;);&lt;br /&gt;
        var primarySlug = teekaPage ? (teekaPage.getAttribute(&#039;data-primary&#039;) || &#039;&#039;) : &#039;&#039;;&lt;br /&gt;
        if (!primarySlug) { primarySlug = pageTitle.split(&#039;/&#039;)[0]; }&lt;br /&gt;
        if (!primarySlug) return;&lt;br /&gt;
        function wikiUrl(slug) {&lt;br /&gt;
            if (window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl) return mw.util.getUrl(slug);&lt;br /&gt;
            return artPath.replace(&#039;$1&#039;, encodeURIComponent(slug).replace(/%2F/g, &#039;/&#039;));&lt;br /&gt;
        }&lt;br /&gt;
        var docTitleEl = document.querySelector(&#039;.gr-doc-title&#039;);&lt;br /&gt;
        var hasMoolaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute(&#039;data-has-moola&#039;) === &#039;1&#039;;&lt;br /&gt;
        var hasUllekhaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute(&#039;data-has-ullekha&#039;) === &#039;1&#039;;&lt;br /&gt;
        var showMoolaPage = !teekaPage &amp;amp;&amp;amp; hasMoolaPage;&lt;br /&gt;
        var showMoolaBack = !!teekaPage;&lt;br /&gt;
        var showUllekha = hasUllekhaPage || !!teekaPage;&lt;br /&gt;
        if (!showMoolaPage &amp;amp;&amp;amp; !showMoolaBack &amp;amp;&amp;amp; !showUllekha) return;&lt;br /&gt;
        var nav = document.createElement(&#039;div&#039;);&lt;br /&gt;
        nav.id = &#039;gr-toc-doc-nav&#039;;&lt;br /&gt;
        nav.setAttribute(&#039;class&#039;, &#039;toc-main-links&#039;);&lt;br /&gt;
        function makeBtn(href, label) {&lt;br /&gt;
            var a = document.createElement(&#039;a&#039;);&lt;br /&gt;
            a.href = href;&lt;br /&gt;
            a.setAttribute(&#039;class&#039;, &#039;toc-main-link-item&#039;);&lt;br /&gt;
            var lspan = document.createElement(&#039;span&#039;);&lt;br /&gt;
            lspan.setAttribute(&#039;data-deva&#039;, label);&lt;br /&gt;
            lspan.textContent = (currentScript &amp;amp;&amp;amp; currentScript !== &#039;deva&#039;) ? transliterateText(label, currentScript) : label;&lt;br /&gt;
            translatableSpans.push(lspan);&lt;br /&gt;
            a.appendChild(lspan);&lt;br /&gt;
            a.addEventListener(&#039;mouseover&#039;, function () { this.style.opacity = &#039;0.72&#039;; });&lt;br /&gt;
            a.addEventListener(&#039;mouseout&#039;, function () { this.style.opacity = &#039;1&#039;; });&lt;br /&gt;
            return a;&lt;br /&gt;
        }&lt;br /&gt;
        if (showMoolaPage) nav.appendChild(makeBtn(wikiUrl(primarySlug + &#039;/Moola&#039;), &#039;मूलम्&#039;));&lt;br /&gt;
        if (showMoolaBack) nav.appendChild(makeBtn(wikiUrl(primarySlug), &#039;मूल&#039;));&lt;br /&gt;
        if (showUllekha) nav.appendChild(makeBtn(wikiUrl(primarySlug + &#039;/Ullekha&#039;), &#039;उल्लेख&#039;));&lt;br /&gt;
        var tocContents = toc.querySelector(&#039;.vector-toc-contents&#039;);&lt;br /&gt;
        if (tocContents) toc.insertBefore(nav, tocContents);&lt;br /&gt;
        else toc.appendChild(nav);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var _headingObserver = null;&lt;br /&gt;
&lt;br /&gt;
    function attachHeadingObserver() {&lt;br /&gt;
        if (_isNoTocPage()) return;&lt;br /&gt;
        if (_headingObserver) return;&lt;br /&gt;
        if (!window.IntersectionObserver) return;&lt;br /&gt;
        var ACTIVE_COLOR = &#039;#f57c00&#039;;&lt;br /&gt;
        var _activeId = null;&lt;br /&gt;
        var content = document.querySelector(&#039;.mw-parser-output&#039;);&lt;br /&gt;
        if (!content) return;&lt;br /&gt;
        var headings = Array.from(content.querySelectorAll(&#039;h1[id],h2[id],h3[id],h4[id],h5[id],h6[id]&#039;));&lt;br /&gt;
        if (!headings.length) return;&lt;br /&gt;
        var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
        if (!toc) return;&lt;br /&gt;
        function getTocLink(id) { return toc.querySelector(&#039;a[href=&amp;quot;#&#039; + CSS.escape(id) + &#039;&amp;quot;]&#039;); }&lt;br /&gt;
        function getTocLi(id) { var a = getTocLink(id); return a ? a.closest(&#039;.vector-toc-list-item&#039;) : null; }&lt;br /&gt;
        function clearActive() {&lt;br /&gt;
            toc.querySelectorAll(&#039;.vector-toc-list-item&#039;).forEach(function (li) {&lt;br /&gt;
                li.classList.remove(&#039;vector-toc-list-item-active&#039;);&lt;br /&gt;
                var lnk = li.querySelector(&#039;.vector-toc-link&#039;);&lt;br /&gt;
                if (!lnk) return;&lt;br /&gt;
                lnk.style.removeProperty(&#039;color&#039;);&lt;br /&gt;
                lnk.style.setProperty(&#039;font-weight&#039;, &#039;400&#039;, &#039;important&#039;);&lt;br /&gt;
                lnk.querySelectorAll(&#039;*&#039;).forEach(function (el) { el.style.removeProperty(&#039;color&#039;); el.style.setProperty(&#039;font-weight&#039;, &#039;400&#039;, &#039;important&#039;); });&lt;br /&gt;
            });&lt;br /&gt;
        }&lt;br /&gt;
        function setActive(id) {&lt;br /&gt;
            if (_activeId === id) return;&lt;br /&gt;
            _activeId = id;&lt;br /&gt;
            clearActive();&lt;br /&gt;
            if (!id) return;&lt;br /&gt;
            var li = getTocLi(id);&lt;br /&gt;
            if (!li) return;&lt;br /&gt;
            li.classList.add(&#039;vector-toc-list-item-active&#039;);&lt;br /&gt;
            var hasActiveChild = !!li.querySelector(&#039;.vector-toc-list-item .vector-toc-list-item-active&#039;);&lt;br /&gt;
            if (!hasActiveChild) {&lt;br /&gt;
                var lnk = li.querySelector(&#039;.vector-toc-link&#039;);&lt;br /&gt;
                if (lnk) {&lt;br /&gt;
                    lnk.style.setProperty(&#039;color&#039;, ACTIVE_COLOR, &#039;important&#039;);&lt;br /&gt;
                    lnk.style.setProperty(&#039;font-weight&#039;, &#039;700&#039;, &#039;important&#039;);&lt;br /&gt;
                    lnk.querySelectorAll(&#039;*&#039;).forEach(function (el) { el.style.setProperty(&#039;color&#039;, ACTIVE_COLOR, &#039;important&#039;); el.style.setProperty(&#039;font-weight&#039;, &#039;700&#039;, &#039;important&#039;); });&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            var anc = li.parentNode;&lt;br /&gt;
            while (anc &amp;amp;&amp;amp; anc !== toc) {&lt;br /&gt;
                if (anc.classList) anc.classList.remove(&#039;vector-toc-list-item-collapsed&#039;);&lt;br /&gt;
                if (anc.tagName === &#039;UL&#039; || anc.tagName === &#039;LI&#039;) anc.style.removeProperty(&#039;display&#039;);&lt;br /&gt;
                anc = anc.parentNode;&lt;br /&gt;
            }&lt;br /&gt;
            var sticky = document.querySelector(&#039;.vector-sticky-pinned-container&#039;);&lt;br /&gt;
            var scrollEl = sticky || toc;&lt;br /&gt;
            if (scrollEl.scrollHeight &amp;gt; scrollEl.clientHeight) {&lt;br /&gt;
                var lr = li.getBoundingClientRect();&lt;br /&gt;
                var cr = scrollEl.getBoundingClientRect();&lt;br /&gt;
                if (lr.top &amp;lt; cr.top + 8 || lr.bottom &amp;gt; cr.bottom - 8) {&lt;br /&gt;
                    scrollEl.scrollTop += lr.top - cr.top - scrollEl.clientHeight / 2 + li.offsetHeight / 2;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        var _visible = new Set();&lt;br /&gt;
        _headingObserver = new IntersectionObserver(function (entries) {&lt;br /&gt;
            entries.forEach(function (entry) {&lt;br /&gt;
                if (entry.isIntersecting) _visible.add(entry.target.id);&lt;br /&gt;
                else _visible.delete(entry.target.id);&lt;br /&gt;
            });&lt;br /&gt;
            var topId = null, topY = Infinity;&lt;br /&gt;
            _visible.forEach(function (id) {&lt;br /&gt;
                var el = document.getElementById(id);&lt;br /&gt;
                if (el) { var y = el.getBoundingClientRect().top; if (y &amp;gt;= 0 &amp;amp;&amp;amp; y &amp;lt; topY) { topY = y; topId = id; } }&lt;br /&gt;
            });&lt;br /&gt;
            if (!topId) {&lt;br /&gt;
                var bestY = -Infinity;&lt;br /&gt;
                headings.forEach(function (h) { var y = h.getBoundingClientRect().top; if (y &amp;lt; 0 &amp;amp;&amp;amp; y &amp;gt; bestY) { bestY = y; topId = h.id; } });&lt;br /&gt;
            }&lt;br /&gt;
            setActive(topId || null);&lt;br /&gt;
        }, { rootMargin: &#039;-60px 0px -65% 0px&#039;, threshold: 0 });&lt;br /&gt;
        headings.forEach(function (h) { _headingObserver.observe(h); });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function setupToc() {&lt;br /&gt;
        if (_isNoTocPage()) return;&lt;br /&gt;
        var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
        if (!toc) return;&lt;br /&gt;
        removeTocBeginning();&lt;br /&gt;
        renameTocTitle();&lt;br /&gt;
        expandTocSections();&lt;br /&gt;
        injectTocDocNav();&lt;br /&gt;
        attachHeadingObserver();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function init() {&lt;br /&gt;
        var HIDE_IDS = [&#039;vector-appearance&#039;, &#039;vector-appearance-pinned-container&#039;, &#039;vector-appearance-unpinned-container&#039;];&lt;br /&gt;
        function removeHiddenEls() {&lt;br /&gt;
            HIDE_IDS.forEach(function (id) { var el = document.getElementById(id); if (el &amp;amp;&amp;amp; el.parentNode) el.parentNode.removeChild(el); });&lt;br /&gt;
            var pt = document.getElementById(&#039;vector-page-tools&#039;) || document.querySelector(&#039;.vector-page-tools-pinned-container&#039;);&lt;br /&gt;
            if (pt) pt.querySelectorAll(&#039;[aria-controls=&amp;quot;vector-appearance&amp;quot;]&#039;).forEach(function (el) { if (el.parentNode) el.parentNode.removeChild(el); });&lt;br /&gt;
        }&lt;br /&gt;
        removeHiddenEls();&lt;br /&gt;
        (function detectTeekaMode() {&lt;br /&gt;
            var tp = document.querySelector(&#039;.gr-teeka-page&#039;);&lt;br /&gt;
            if (!tp) return;&lt;br /&gt;
            var primary = tp.getAttribute(&#039;data-primary&#039;) || &#039;&#039;;&lt;br /&gt;
            var artPath = (window.mw &amp;amp;&amp;amp; mw.config.get(&#039;wgArticlePath&#039;)) || &#039;/wiki/$1&#039;;&lt;br /&gt;
            var mainUrl = artPath.replace(&#039;$1&#039;, primary);&lt;br /&gt;
            var refParam = window.location.search.match(/[?&amp;amp;]ref=([01])/);&lt;br /&gt;
            if (refParam) { document.body.classList.add(refParam[1] === &#039;1&#039; ? &#039;gr-ref-mode&#039; : &#039;gr-standalone&#039;); return; }&lt;br /&gt;
            var ref = document.referrer || &#039;&#039;;&lt;br /&gt;
            document.body.classList.add((ref &amp;amp;&amp;amp; primary &amp;amp;&amp;amp; ref.indexOf(mainUrl) !== -1) ? &#039;gr-ref-mode&#039; : &#039;gr-standalone&#039;);&lt;br /&gt;
        }());&lt;br /&gt;
        if (window.MutationObserver) {&lt;br /&gt;
            var hideObs = new MutationObserver(function (mutations) {&lt;br /&gt;
                var dirty = false;&lt;br /&gt;
                mutations.forEach(function (m) { if (m.addedNodes.length) dirty = true; });&lt;br /&gt;
                if (dirty) removeHiddenEls();&lt;br /&gt;
            });&lt;br /&gt;
            hideObs.observe(document.body, { childList: true, subtree: false });&lt;br /&gt;
            setTimeout(function () { hideObs.disconnect(); }, 6000);&lt;br /&gt;
        }&lt;br /&gt;
        var content = document.querySelector(&#039;.mw-parser-output&#039;);&lt;br /&gt;
        var alreadyTagged = content &amp;amp;&amp;amp; content.querySelector(&#039;[data-deva]&#039;);&lt;br /&gt;
        if (!alreadyTagged) { translatableSpans = []; tagTextNodes(); }&lt;br /&gt;
        else {&lt;br /&gt;
            document.querySelectorAll(&#039;.vector-toc .vector-toc-text:not([data-deva])&#039;).forEach(function (span) {&lt;br /&gt;
                var orig = span.textContent; if (!orig.trim()) return;&lt;br /&gt;
                span.setAttribute(&#039;data-deva&#039;, orig); translatableSpans.push(span);&lt;br /&gt;
            });&lt;br /&gt;
        }&lt;br /&gt;
        var saved = (function () { try { return localStorage.getItem(LS_SCRIPT_KEY); } catch (e) { return null; } }());&lt;br /&gt;
        if (saved &amp;amp;&amp;amp; saved !== &#039;deva&#039;) { applyScript(saved); } else { currentScript = &#039;deva&#039;; }&lt;br /&gt;
        setTimeout(setupToc, 200);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    window.addEventListener(&#039;gr-script-change&#039;, function (e) {&lt;br /&gt;
        var script = e &amp;amp;&amp;amp; e.detail &amp;amp;&amp;amp; e.detail.script;&lt;br /&gt;
        if (script) applyScript(script);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    window.addEventListener(&#039;gr-new-content&#039;, function (e) {&lt;br /&gt;
        var container = e &amp;amp;&amp;amp; e.detail &amp;amp;&amp;amp; e.detail.container;&lt;br /&gt;
        if (!container) return;&lt;br /&gt;
        var walker = document.createTreeWalker(container, NodeFilter.SHOW_TEXT);&lt;br /&gt;
        var nodes = [];&lt;br /&gt;
        while (walker.nextNode()) nodes.push(walker.currentNode);&lt;br /&gt;
        nodes.forEach(function (node) {&lt;br /&gt;
            var p = node.parentNode;&lt;br /&gt;
            if (!p || (p.hasAttribute &amp;amp;&amp;amp; p.hasAttribute(&#039;data-deva&#039;))) return;&lt;br /&gt;
            var orig = node.textContent;&lt;br /&gt;
            if (!orig.trim()) return;&lt;br /&gt;
            var span = document.createElement(&#039;span&#039;);&lt;br /&gt;
            span.setAttribute(&#039;data-deva&#039;, orig);&lt;br /&gt;
            span.textContent = currentScript !== &#039;deva&#039; ? transliterateText(orig, currentScript) : orig;&lt;br /&gt;
            p.replaceChild(span, node);&lt;br /&gt;
            translatableSpans.push(span);&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    try {&lt;br /&gt;
        var _grBC = new BroadcastChannel(&#039;gr-script&#039;);&lt;br /&gt;
        _grBC.onmessage = function (e) {&lt;br /&gt;
            var script = e &amp;amp;&amp;amp; e.data &amp;amp;&amp;amp; e.data.script;&lt;br /&gt;
            if (script) { currentScript = script; var sel = document.querySelector(&#039;.gr-script-sel&#039;); if (sel) sel.value = script; applyScript(script); }&lt;br /&gt;
        };&lt;br /&gt;
    } catch (e) { }&lt;br /&gt;
&lt;br /&gt;
    if (window.mw) {&lt;br /&gt;
        mw.hook(&#039;wikipage.content&#039;).add(function () {&lt;br /&gt;
            setTimeout(function () {&lt;br /&gt;
                var content = document.querySelector(&#039;.mw-parser-output&#039;);&lt;br /&gt;
                var alreadyTagged = content &amp;amp;&amp;amp; content.querySelector(&#039;[data-deva]&#039;);&lt;br /&gt;
                if (!alreadyTagged) { translatableSpans = []; tagTextNodes(); }&lt;br /&gt;
                else {&lt;br /&gt;
                    document.querySelectorAll(&#039;.vector-toc .vector-toc-text:not([data-deva])&#039;).forEach(function (span) {&lt;br /&gt;
                        var orig = span.textContent; if (!orig.trim()) return;&lt;br /&gt;
                        span.setAttribute(&#039;data-deva&#039;, orig); translatableSpans.push(span);&lt;br /&gt;
                    });&lt;br /&gt;
                }&lt;br /&gt;
                if (currentScript !== &#039;deva&#039;) applyScript(currentScript);&lt;br /&gt;
                setupToc();&lt;br /&gt;
            }, 150);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) { document.addEventListener(&#039;DOMContentLoaded&#039;, init); }&lt;br /&gt;
    else { init(); }&lt;br /&gt;
&lt;br /&gt;
}());   /* ← end of main IIFE */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Inject &amp;quot;Help&amp;quot; and &amp;quot;About&amp;quot; links into the header ─────────────────&lt;br /&gt;
(function () {&lt;br /&gt;
    function wikiHref(title) {&lt;br /&gt;
        if (window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl) return mw.util.getUrl(title);&lt;br /&gt;
        var ap = (window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get(&#039;wgArticlePath&#039;)) || &#039;/wiki/$1&#039;;&lt;br /&gt;
        return ap.replace(&#039;$1&#039;, title);&lt;br /&gt;
    }&lt;br /&gt;
    var linkStyle = [&#039;color:rgba(255,255,255,0.88)&#039;, &#039;font-size:0.88em&#039;, &#039;font-family:system-ui,sans-serif&#039;, &#039;font-weight:500&#039;, &#039;text-decoration:none&#039;, &#039;padding:4px 10px&#039;, &#039;border-radius:4px&#039;, &#039;margin-right:4px&#039;, &#039;transition:color 0.15s,background 0.15s&#039;, &#039;white-space:nowrap&#039;].join(&#039;;&#039;);&lt;br /&gt;
    function makeHeaderLink(id, href, label) {&lt;br /&gt;
        var a = document.createElement(&#039;a&#039;);&lt;br /&gt;
        a.id = id; a.href = href; a.textContent = label; a.style.cssText = linkStyle;&lt;br /&gt;
        a.addEventListener(&#039;mouseover&#039;, function () { this.style.color = &#039;#fff&#039;; this.style.background = &#039;rgba(255,255,255,0.12)&#039;; });&lt;br /&gt;
        a.addEventListener(&#039;mouseout&#039;, function () { this.style.color = &#039;rgba(255,255,255,0.88)&#039;; this.style.background = &#039;transparent&#039;; });&lt;br /&gt;
        return a;&lt;br /&gt;
    }&lt;br /&gt;
    function injectHeaderLinks() {&lt;br /&gt;
        if (document.getElementById(&#039;gr-about-link&#039;)) return;&lt;br /&gt;
        var headerEnd = document.querySelector(&#039;.vector-header-end&#039;) || document.querySelector(&#039;#vector-user-links&#039;) || document.querySelector(&#039;.mw-header&#039;);&lt;br /&gt;
        if (!headerEnd) return;&lt;br /&gt;
        var helpLink = makeHeaderLink(&#039;gr-help-link&#039;, wikiHref(&#039;My_wiki:Help&#039;), &#039;Help&#039;);&lt;br /&gt;
        var aboutLink = makeHeaderLink(&#039;gr-about-link&#039;, wikiHref(&#039;My_wiki:About&#039;), &#039;About&#039;);&lt;br /&gt;
&lt;br /&gt;
        var userName = window.mw ? mw.config.get(&#039;wgUserName&#039;) : null;&lt;br /&gt;
        var isAnon = !userName || (window.mw &amp;amp;&amp;amp; mw.config.get(&#039;wgUserId&#039;) === null);&lt;br /&gt;
&lt;br /&gt;
        // Build the trailing auth element (Login link for anon, dropdown for logged-in)&lt;br /&gt;
        var authEl = null;&lt;br /&gt;
        if (isAnon) {&lt;br /&gt;
            if (!document.getElementById(&#039;gr-header-login&#039;)) {&lt;br /&gt;
                authEl = makeHeaderLink(&#039;gr-header-login&#039;, wikiHref(&#039;Special:UserLogin&#039;), &#039;Login&#039;);&lt;br /&gt;
            }&lt;br /&gt;
        } else if (!document.getElementById(&#039;gr-header-user&#039;)) {&lt;br /&gt;
            authEl = buildHeaderUserDropdown(userName);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var ul = document.querySelector(&#039;.vector-user-links&#039;) || document.querySelector(&#039;#pt-userpage&#039;);&lt;br /&gt;
        if (ul &amp;amp;&amp;amp; ul.parentNode === headerEnd) {&lt;br /&gt;
            if (authEl) headerEnd.insertBefore(authEl, ul);&lt;br /&gt;
            headerEnd.insertBefore(aboutLink, authEl || ul);&lt;br /&gt;
            headerEnd.insertBefore(helpLink, aboutLink);&lt;br /&gt;
        } else {&lt;br /&gt;
            headerEnd.appendChild(helpLink);&lt;br /&gt;
            headerEnd.appendChild(aboutLink);&lt;br /&gt;
            if (authEl) headerEnd.appendChild(authEl);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function buildHeaderUserDropdown(userName) {&lt;br /&gt;
        var wrap = document.createElement(&#039;div&#039;);&lt;br /&gt;
        wrap.id = &#039;gr-header-user&#039;;&lt;br /&gt;
        wrap.style.cssText = &#039;position:relative;display:inline-block;margin-right:4px;&#039;;&lt;br /&gt;
&lt;br /&gt;
        var trigger = document.createElement(&#039;button&#039;);&lt;br /&gt;
        trigger.id = &#039;gr-header-user-trigger&#039;;&lt;br /&gt;
        trigger.type = &#039;button&#039;;&lt;br /&gt;
        trigger.setAttribute(&#039;aria-haspopup&#039;, &#039;true&#039;);&lt;br /&gt;
        trigger.setAttribute(&#039;aria-expanded&#039;, &#039;false&#039;);&lt;br /&gt;
        trigger.style.cssText = [&lt;br /&gt;
            &#039;display:inline-flex&#039;, &#039;align-items:center&#039;, &#039;gap:5px&#039;,&lt;br /&gt;
            &#039;color:rgba(255,255,255,0.88)&#039;, &#039;font-size:0.88em&#039;,&lt;br /&gt;
            &#039;font-family:system-ui,sans-serif&#039;, &#039;font-weight:500&#039;,&lt;br /&gt;
            &#039;background:transparent&#039;, &#039;border:none&#039;, &#039;cursor:pointer&#039;,&lt;br /&gt;
            &#039;padding:4px 10px&#039;, &#039;border-radius:4px&#039;, &#039;white-space:nowrap&#039;,&lt;br /&gt;
            &#039;transition:color 0.15s,background 0.15s&#039;&lt;br /&gt;
        ].join(&#039;;&#039;);&lt;br /&gt;
        trigger.innerHTML =&lt;br /&gt;
            &#039;&amp;lt;span&amp;gt;&#039; + userName.replace(/&amp;lt;/g, &#039;&amp;amp;lt;&#039;) + &#039;&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
            &#039;&amp;lt;span id=&amp;quot;gr-header-caret&amp;quot; style=&amp;quot;font-size:0.8em;transition:transform 0.2s;&amp;quot;&amp;gt;\u25be&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
        trigger.addEventListener(&#039;mouseover&#039;, function () { this.style.color = &#039;#fff&#039;; this.style.background = &#039;rgba(255,255,255,0.12)&#039;; });&lt;br /&gt;
        trigger.addEventListener(&#039;mouseout&#039;, function () { if (menu.style.display === &#039;none&#039;) { this.style.color = &#039;rgba(255,255,255,0.88)&#039;; this.style.background = &#039;transparent&#039;; } });&lt;br /&gt;
&lt;br /&gt;
        var menu = document.createElement(&#039;div&#039;);&lt;br /&gt;
        menu.id = &#039;gr-header-user-menu&#039;;&lt;br /&gt;
        menu.setAttribute(&#039;role&#039;, &#039;menu&#039;);&lt;br /&gt;
        menu.style.cssText = [&lt;br /&gt;
            &#039;display:none&#039;, &#039;position:absolute&#039;, &#039;top:100%&#039;, &#039;right:0&#039;, &#039;margin-top:4px&#039;,&lt;br /&gt;
            &#039;min-width:150px&#039;, &#039;background:#fff&#039;, &#039;border-radius:6px&#039;,&lt;br /&gt;
            &#039;box-shadow:0 4px 16px rgba(0,0,0,0.18)&#039;, &#039;overflow:hidden&#039;, &#039;z-index:1000&#039;&lt;br /&gt;
        ].join(&#039;;&#039;);&lt;br /&gt;
&lt;br /&gt;
        var itemStyle = &#039;display:block;padding:10px 16px;font-size:0.9em;color:#2c1810;text-decoration:none;font-family:system-ui,sans-serif;background:#fff;&#039;;&lt;br /&gt;
        function makeMenuItem(href, label, id) {&lt;br /&gt;
            var a = document.createElement(&#039;a&#039;);&lt;br /&gt;
            a.href = href; a.setAttribute(&#039;role&#039;, &#039;menuitem&#039;);&lt;br /&gt;
            a.textContent = label; a.style.cssText = itemStyle;&lt;br /&gt;
            if (id) a.id = id;&lt;br /&gt;
            a.addEventListener(&#039;mouseover&#039;, function () { this.style.background = &#039;#f5efe9&#039;; });&lt;br /&gt;
            a.addEventListener(&#039;mouseout&#039;, function () { this.style.background = &#039;#fff&#039;; });&lt;br /&gt;
            return a;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        menu.appendChild(makeMenuItem(wikiHref(&#039;Special:Profile&#039;), &#039;Profile&#039;));&lt;br /&gt;
        menu.appendChild(makeMenuItem(&#039;#&#039;, &#039;Log out&#039;, &#039;gr-header-logout&#039;));&lt;br /&gt;
&lt;br /&gt;
        function setOpen(open) {&lt;br /&gt;
            menu.style.display = open ? &#039;block&#039; : &#039;none&#039;;&lt;br /&gt;
            trigger.setAttribute(&#039;aria-expanded&#039;, open ? &#039;true&#039; : &#039;false&#039;);&lt;br /&gt;
            var caret = document.getElementById(&#039;gr-header-caret&#039;);&lt;br /&gt;
            if (caret) caret.style.transform = open ? &#039;rotate(180deg)&#039; : &#039;&#039;;&lt;br /&gt;
            if (open) { trigger.style.color = &#039;#fff&#039;; trigger.style.background = &#039;rgba(255,255,255,0.12)&#039;; }&lt;br /&gt;
            else { trigger.style.color = &#039;rgba(255,255,255,0.88)&#039;; trigger.style.background = &#039;transparent&#039;; }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        trigger.addEventListener(&#039;click&#039;, function (e) {&lt;br /&gt;
            e.stopPropagation();&lt;br /&gt;
            setOpen(menu.style.display === &#039;none&#039;);&lt;br /&gt;
        });&lt;br /&gt;
        document.addEventListener(&#039;click&#039;, function (e) {&lt;br /&gt;
            if (!wrap.contains(e.target)) setOpen(false);&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        // Logout: POST with CSRF token (same approach as the desktop dropdown)&lt;br /&gt;
        menu.querySelector(&#039;#gr-header-logout&#039;).addEventListener(&#039;click&#039;, function (e) {&lt;br /&gt;
            e.preventDefault();&lt;br /&gt;
            if (window.mw &amp;amp;&amp;amp; mw.user &amp;amp;&amp;amp; mw.user.tokens) {&lt;br /&gt;
                var t = mw.user.tokens.get(&#039;csrfToken&#039;);&lt;br /&gt;
                if (t) {&lt;br /&gt;
                    var script = (mw.util &amp;amp;&amp;amp; mw.util.wikiScript) ? mw.util.wikiScript() : &#039;/index.php&#039;;&lt;br /&gt;
                    var form = document.createElement(&#039;form&#039;);&lt;br /&gt;
                    form.method = &#039;post&#039;;&lt;br /&gt;
                    form.action = script + &#039;?title=Special:UserLogout&#039;;&lt;br /&gt;
                    form.style.display = &#039;none&#039;;&lt;br /&gt;
                    form.innerHTML =&lt;br /&gt;
                        &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;wpEditToken&amp;quot; value=&amp;quot;&#039; + String(t).replace(/&amp;quot;/g, &#039;&amp;amp;quot;&#039;) + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
                        &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;title&amp;quot; value=&amp;quot;Special:UserLogout&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
                        &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;returnto&amp;quot; value=&amp;quot;Main Page&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
                    document.body.appendChild(form);&lt;br /&gt;
                    form.submit();&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            if (window.mw &amp;amp;&amp;amp; mw.Api) {&lt;br /&gt;
                new mw.Api().postWithToken(&#039;csrf&#039;, { action: &#039;logout&#039; })&lt;br /&gt;
                    .done(function () { location.href = &#039;/Main_Page&#039;; })&lt;br /&gt;
                    .fail(function () { location.href = &#039;/index.php?title=Special:UserLogout&#039;; });&lt;br /&gt;
            } else {&lt;br /&gt;
                location.href = &#039;/index.php?title=Special:UserLogout&#039;;&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        wrap.appendChild(trigger);&lt;br /&gt;
        wrap.appendChild(menu);&lt;br /&gt;
        return wrap;&lt;br /&gt;
    }&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) document.addEventListener(&#039;DOMContentLoaded&#039;, injectHeaderLinks);&lt;br /&gt;
    else injectHeaderLinks();&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Main page: by-Grantha / by-Author toggle ──────────────────────&lt;br /&gt;
(function () {&lt;br /&gt;
    function grHomeView(v) {&lt;br /&gt;
        var gView = document.getElementById(&#039;gr-view-grantha&#039;);&lt;br /&gt;
        var aView = document.getElementById(&#039;gr-view-author&#039;);&lt;br /&gt;
        var gBtn = document.getElementById(&#039;gr-toggle-grantha&#039;);&lt;br /&gt;
        var aBtn = document.getElementById(&#039;gr-toggle-author&#039;);&lt;br /&gt;
        if (!gView || !aView || !gBtn || !aBtn) return;&lt;br /&gt;
        gView.style.display = (v === &#039;grantha&#039;) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
        aView.style.display = (v === &#039;author&#039;) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
        gBtn.className = &#039;gr-toggle-btn&#039; + (v === &#039;grantha&#039; ? &#039; gr-toggle-active&#039; : &#039;&#039;);&lt;br /&gt;
        aBtn.className = &#039;gr-toggle-btn&#039; + (v === &#039;author&#039; ? &#039; gr-toggle-active&#039; : &#039;&#039;);&lt;br /&gt;
        try { localStorage.setItem(&#039;gr_home_view&#039;, v); } catch (e) { }&lt;br /&gt;
    }&lt;br /&gt;
    function initHomeToggle() {&lt;br /&gt;
        var gBtn = document.getElementById(&#039;gr-toggle-grantha&#039;);&lt;br /&gt;
        var aBtn = document.getElementById(&#039;gr-toggle-author&#039;);&lt;br /&gt;
        if (!gBtn || !aBtn) return;&lt;br /&gt;
        gBtn.addEventListener(&#039;click&#039;, function () { grHomeView(&#039;grantha&#039;); });&lt;br /&gt;
        aBtn.addEventListener(&#039;click&#039;, function () { grHomeView(&#039;author&#039;); });&lt;br /&gt;
        [gBtn, aBtn].forEach(function (btn) { btn.addEventListener(&#039;keydown&#039;, function (e) { if (e.key === &#039;Enter&#039; || e.key === &#039; &#039;) btn.click(); }); });&lt;br /&gt;
        var saved; try { saved = localStorage.getItem(&#039;gr_home_view&#039;); } catch (e) { }&lt;br /&gt;
        if (saved === &#039;author&#039;) grHomeView(&#039;author&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) document.addEventListener(&#039;DOMContentLoaded&#039;, initHomeToggle);&lt;br /&gt;
    else initHomeToggle();&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Ullekha reference link handler ─────────────────────────────────&lt;br /&gt;
(function () {&lt;br /&gt;
    function highlightOnArrival() {&lt;br /&gt;
        var search = window.location.search;&lt;br /&gt;
        if (!search) return;&lt;br /&gt;
        var m = search.match(/[?&amp;amp;]hlUllekha=([^&amp;amp;]+)/);&lt;br /&gt;
        if (!m) return;&lt;br /&gt;
        var needle;&lt;br /&gt;
        try { needle = decodeURIComponent(m[1]); } catch (e) { return; }&lt;br /&gt;
        if (!needle || needle.length &amp;lt; 4) return;&lt;br /&gt;
        function doHighlight() {&lt;br /&gt;
            var content = document.querySelector(&#039;.mw-parser-output&#039;);&lt;br /&gt;
            if (!content) return;&lt;br /&gt;
            var snippet = needle.slice(0, 40);&lt;br /&gt;
            var found = false;&lt;br /&gt;
            var spans = content.querySelectorAll(&#039;[data-deva]&#039;);&lt;br /&gt;
            for (var i = 0; i &amp;lt; spans.length &amp;amp;&amp;amp; !found; i++) {&lt;br /&gt;
                var spanEl = spans[i];&lt;br /&gt;
                var orig = spanEl.getAttribute(&#039;data-deva&#039;) || &#039;&#039;;&lt;br /&gt;
                if (orig.indexOf(snippet) === -1) continue;&lt;br /&gt;
                var idx = orig.indexOf(snippet);&lt;br /&gt;
                var hlText = orig.slice(idx, Math.min(idx + needle.length, orig.length));&lt;br /&gt;
                var mark = document.createElement(&#039;mark&#039;);&lt;br /&gt;
                mark.className = &#039;gr-ullekha-highlight&#039;;&lt;br /&gt;
                mark.style.cssText = &#039;background:#fff176;border-radius:2px;padding:0 2px;&#039;;&lt;br /&gt;
                mark.textContent = hlText;&lt;br /&gt;
                var parent = spanEl.parentNode;&lt;br /&gt;
                if (!parent) continue;&lt;br /&gt;
                var before = document.createTextNode(orig.slice(0, idx));&lt;br /&gt;
                var after = document.createTextNode(orig.slice(idx + hlText.length));&lt;br /&gt;
                parent.insertBefore(before, spanEl); parent.insertBefore(mark, spanEl); parent.insertBefore(after, spanEl); parent.removeChild(spanEl);&lt;br /&gt;
                setTimeout(function () { mark.scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; }); }, 100);&lt;br /&gt;
                found = true;&lt;br /&gt;
            }&lt;br /&gt;
            if (!found) {&lt;br /&gt;
                var walker = document.createTreeWalker(content, NodeFilter.SHOW_TEXT);&lt;br /&gt;
                while (walker.nextNode() &amp;amp;&amp;amp; !found) {&lt;br /&gt;
                    var node = walker.currentNode;&lt;br /&gt;
                    var txt = node.textContent || &#039;&#039;;&lt;br /&gt;
                    if (txt.indexOf(snippet) === -1) continue;&lt;br /&gt;
                    var idx2 = txt.indexOf(snippet);&lt;br /&gt;
                    var mark2 = document.createElement(&#039;mark&#039;);&lt;br /&gt;
                    mark2.className = &#039;gr-ullekha-highlight&#039;;&lt;br /&gt;
                    mark2.style.cssText = &#039;background:#fff176;border-radius:2px;padding:0 2px;&#039;;&lt;br /&gt;
                    mark2.textContent = txt.slice(idx2, Math.min(idx2 + needle.length, txt.length));&lt;br /&gt;
                    var p = node.parentNode;&lt;br /&gt;
                    p.insertBefore(document.createTextNode(txt.slice(0, idx2)), node);&lt;br /&gt;
                    p.insertBefore(mark2, node);&lt;br /&gt;
                    p.insertBefore(document.createTextNode(txt.slice(idx2 + mark2.textContent.length)), node);&lt;br /&gt;
                    p.removeChild(node);&lt;br /&gt;
                    setTimeout(function () { mark2.scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; }); }, 100);&lt;br /&gt;
                    found = true;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        doHighlight();&lt;br /&gt;
    }&lt;br /&gt;
    function wireUllekhaLinks() {&lt;br /&gt;
        document.querySelectorAll(&#039;.gr-ullekha-ref-link&#039;).forEach(function (wrap) {&lt;br /&gt;
            var anchor = wrap.getAttribute(&#039;data-anchor&#039;) || &#039;&#039;;&lt;br /&gt;
            var hl = wrap.getAttribute(&#039;data-hl&#039;) || &#039;&#039;;&lt;br /&gt;
            var a = wrap.querySelector(&#039;a&#039;);&lt;br /&gt;
            if (!a) return;&lt;br /&gt;
            var base = a.href.split(&#039;#&#039;)[0];&lt;br /&gt;
            var encoded = encodeURIComponent(hl);&lt;br /&gt;
            a.href = base + (hl ? &#039;?hlUllekha=&#039; + encoded : &#039;&#039;) + (anchor ? &#039;#&#039; + anchor : &#039;&#039;);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) { document.addEventListener(&#039;DOMContentLoaded&#039;, function () { highlightOnArrival(); wireUllekhaLinks(); }); }&lt;br /&gt;
    else { highlightOnArrival(); wireUllekhaLinks(); }&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
/* ── Search result highlight ──────────────────────────────────── */&lt;br /&gt;
/* EXACT REPLACEMENT for the search highlight IIFE in MediaWiki:Common.js.&lt;br /&gt;
 * Only changes from the original working version:&lt;br /&gt;
 *  - Mobile bar: full-width terracotta bottom bar instead of floating pill&lt;br /&gt;
 *  - showDismissBar: guard added (if !count return) to prevent empty bar&lt;br /&gt;
 * Everything else (storeQueryForLink, applyHighlight, wrapMatches) is&lt;br /&gt;
 * identical to the version that was working.&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
&lt;br /&gt;
    function storeQueryForLink(url, query) {&lt;br /&gt;
        try {&lt;br /&gt;
            var a = document.createElement(&#039;a&#039;);&lt;br /&gt;
            a.href = url;&lt;br /&gt;
            sessionStorage.setItem(&#039;gr_search_hl&#039;, JSON.stringify({&lt;br /&gt;
                query: query,&lt;br /&gt;
                pathname: a.pathname&lt;br /&gt;
            }));&lt;br /&gt;
        } catch (e) { }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function applyHighlight() {&lt;br /&gt;
        var stored;&lt;br /&gt;
        try {&lt;br /&gt;
            stored = JSON.parse(sessionStorage.getItem(&#039;gr_search_hl&#039;) || &#039;null&#039;);&lt;br /&gt;
        } catch (e) { return; }&lt;br /&gt;
        if (!stored || !stored.query) return;&lt;br /&gt;
&lt;br /&gt;
        var currentPath = window.location.pathname;&lt;br /&gt;
        var storedPath = stored.pathname || &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
        function normPath(p) { return decodeURIComponent(p).replace(/\/+$/, &#039;&#039;); }&lt;br /&gt;
        if (storedPath &amp;amp;&amp;amp; normPath(storedPath) !== normPath(currentPath)) {&lt;br /&gt;
            try { sessionStorage.removeItem(&#039;gr_search_hl&#039;); } catch (e) { }&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var query = stored.query.trim();&lt;br /&gt;
        if (!query) return;&lt;br /&gt;
&lt;br /&gt;
        try { sessionStorage.removeItem(&#039;gr_search_hl&#039;); } catch (e) { }&lt;br /&gt;
&lt;br /&gt;
        var delays = [0, 200, 600];&lt;br /&gt;
        delays.forEach(function (ms) {&lt;br /&gt;
            setTimeout(function () {&lt;br /&gt;
                if (document.querySelector(&#039;.gr-search-hl&#039;)) return;&lt;br /&gt;
                highlightText(query);&lt;br /&gt;
            }, ms);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function highlightText(query) {&lt;br /&gt;
        var content = document.querySelector(&#039;#mw-content-text .mw-parser-output&#039;);&lt;br /&gt;
        if (!content) return;&lt;br /&gt;
&lt;br /&gt;
        var raw = query.replace(/^&amp;quot;|&amp;quot;$/g, &#039;&#039;).trim();&lt;br /&gt;
        if (!raw) return;&lt;br /&gt;
&lt;br /&gt;
        var patterns = [];&lt;br /&gt;
        patterns.push(escapeRegex(raw));&lt;br /&gt;
        raw.split(/\s+/).forEach(function (w) {&lt;br /&gt;
            if (w.length &amp;gt;= 2) patterns.push(escapeRegex(w));&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        var matched = false;&lt;br /&gt;
        for (var pi = 0; pi &amp;lt; patterns.length; pi++) {&lt;br /&gt;
            var re;&lt;br /&gt;
            try { re = new RegExp(&#039;(&#039; + patterns[pi] + &#039;)&#039;, &#039;gi&#039;); }&lt;br /&gt;
            catch (e) { continue; }&lt;br /&gt;
            var count = wrapMatches(content, re);&lt;br /&gt;
            if (count &amp;gt; 0) { matched = true; break; }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if (!matched) return;&lt;br /&gt;
&lt;br /&gt;
        var first = document.querySelector(&#039;.gr-search-hl&#039;);&lt;br /&gt;
        if (first) {&lt;br /&gt;
            first.scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; });&lt;br /&gt;
            first.classList.add(&#039;gr-search-hl-pulse&#039;);&lt;br /&gt;
            setTimeout(function () { first.classList.remove(&#039;gr-search-hl-pulse&#039;); }, 2000);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        showDismissBar(query);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function escapeRegex(s) {&lt;br /&gt;
        return s.replace(/[.*+?^${}()|[\]\\]/g, &#039;\\$&amp;amp;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function wrapMatches(root, re) {&lt;br /&gt;
        var count = 0;&lt;br /&gt;
        var walker = document.createTreeWalker(&lt;br /&gt;
            root, NodeFilter.SHOW_TEXT, {&lt;br /&gt;
            acceptNode: function (node) {&lt;br /&gt;
                var p = node.parentElement;&lt;br /&gt;
                if (!p) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
                var tag = p.tagName.toUpperCase();&lt;br /&gt;
                if (tag === &#039;SCRIPT&#039; || tag === &#039;STYLE&#039; || tag === &#039;NOSCRIPT&#039;) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
                if (p.classList.contains(&#039;gr-search-hl&#039;)) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
                return NodeFilter.FILTER_ACCEPT;&lt;br /&gt;
            }&lt;br /&gt;
        }, false&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
        var nodes = [];&lt;br /&gt;
        var node;&lt;br /&gt;
        while ((node = walker.nextNode())) nodes.push(node);&lt;br /&gt;
&lt;br /&gt;
        nodes.forEach(function (textNode) {&lt;br /&gt;
            var val = textNode.nodeValue;&lt;br /&gt;
            if (!re.test(val)) return;&lt;br /&gt;
            re.lastIndex = 0;&lt;br /&gt;
&lt;br /&gt;
            var frag = document.createDocumentFragment();&lt;br /&gt;
            var last = 0;&lt;br /&gt;
            var m;&lt;br /&gt;
            while ((m = re.exec(val)) !== null) {&lt;br /&gt;
                if (m.index &amp;gt; last) {&lt;br /&gt;
                    frag.appendChild(document.createTextNode(val.slice(last, m.index)));&lt;br /&gt;
                }&lt;br /&gt;
                var span = document.createElement(&#039;span&#039;);&lt;br /&gt;
                span.className = &#039;gr-search-hl&#039;;&lt;br /&gt;
                span.textContent = m[0];&lt;br /&gt;
                frag.appendChild(span);&lt;br /&gt;
                last = m.index + m[0].length;&lt;br /&gt;
                count++;&lt;br /&gt;
            }&lt;br /&gt;
            if (last &amp;lt; val.length) {&lt;br /&gt;
                frag.appendChild(document.createTextNode(val.slice(last)));&lt;br /&gt;
            }&lt;br /&gt;
            textNode.parentNode.replaceChild(frag, textNode);&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        return count;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function showDismissBar(query) {&lt;br /&gt;
        var existing = document.getElementById(&#039;gr-hl-bar&#039;);&lt;br /&gt;
        if (existing) existing.remove();&lt;br /&gt;
&lt;br /&gt;
        var count = document.querySelectorAll(&#039;.gr-search-hl&#039;).length;&lt;br /&gt;
        if (!count) return;&lt;br /&gt;
&lt;br /&gt;
        var isMob = window.innerWidth &amp;lt; 768 || !!document.getElementById(&#039;mw-mf-viewport&#039;);&lt;br /&gt;
        var bar = document.createElement(&#039;div&#039;);&lt;br /&gt;
        bar.id = &#039;gr-hl-bar&#039;;&lt;br /&gt;
&lt;br /&gt;
        if (isMob) {&lt;br /&gt;
            bar.className = &#039;gr-search-hl-mobile&#039;;&lt;br /&gt;
&lt;br /&gt;
            bar.innerHTML =&lt;br /&gt;
                &#039;&amp;lt;button id=&amp;quot;gr-hl-results&amp;quot; class=&amp;quot;gr-search-bar-btn&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;span class=&amp;quot;gra-icon gra-icon-search&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;span&amp;gt;&#039; + count + &#039; match&#039; + (count === 1 ? &#039;&#039; : &#039;es&#039;) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;button id=&amp;quot;gr-hl-prev&amp;quot; class=&amp;quot;gr-search-bar-btn&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;span class=&amp;quot;gra-icon gra-icon-prev&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039; + +&lt;br /&gt;
                &#039;&amp;lt;span&amp;gt;Prev&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;button id=&amp;quot;gr-hl-next&amp;quot; class=&amp;quot;gr-search-bar-btn&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;span class=&amp;quot;gr-icon gr-icon-next&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039; + +&lt;br /&gt;
                &#039;&amp;lt;span&amp;gt;Next&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;button id=&amp;quot;gr-hl-dismiss&amp;quot; class=&amp;quot;gr-search-bar-btn&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;span class=&amp;quot;gra-icon gra-icon-dismiss&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039; + +&lt;br /&gt;
                &#039;&amp;lt;span&amp;gt;Close&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
        } else {&lt;br /&gt;
            bar.style.cssText = [&lt;br /&gt;
                &#039;position:fixed&#039;, &#039;bottom:0&#039;, &#039;left:0&#039;, &#039;right:0&#039;, &#039;z-index:10200&#039;,&lt;br /&gt;
                &#039;background:#b5451b&#039;, &#039;color:#fff&#039;, &#039;padding:10px 16px&#039;,&lt;br /&gt;
                &#039;display:flex&#039;, &#039;align-items:center&#039;, &#039;justify-content:space-between&#039;,&lt;br /&gt;
                &#039;font-family:system-ui,sans-serif&#039;, &#039;font-size:14px&#039;,&lt;br /&gt;
                &#039;box-shadow:0 -2px 8px rgba(0,0,0,0.2)&#039;&lt;br /&gt;
            ].join(&#039;;&#039;);&lt;br /&gt;
&lt;br /&gt;
            var nav = document.createElement(&#039;div&#039;);&lt;br /&gt;
            nav.style.cssText = &#039;display:flex;align-items:center;gap:12px;&#039;;&lt;br /&gt;
            nav.innerHTML =&lt;br /&gt;
                &#039;&amp;lt;span&amp;gt;🔍 &amp;lt;strong&amp;gt;&#039; + escHtml(query) + &#039;&amp;lt;/strong&amp;gt; — &#039; + count + &#039; match&#039; + (count === 1 ? &#039;&#039; : &#039;es&#039;) + &#039;&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;button id=&amp;quot;gr-hl-prev&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;↑ Prev&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;button id=&amp;quot;gr-hl-next&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;↓ Next&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;button id=&amp;quot;gr-hl-results&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;← Results&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
            bar.appendChild(nav);&lt;br /&gt;
&lt;br /&gt;
            var db = document.createElement(&#039;button&#039;);&lt;br /&gt;
            db.id = &#039;gr-hl-dismiss&#039;; db.textContent = &#039;✕ Close&#039;;&lt;br /&gt;
            db.style.cssText = &#039;background:rgba(255,255,255,0.15);border:none;color:#fff;padding:4px 12px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&#039;;&lt;br /&gt;
            bar.appendChild(db);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        document.body.appendChild(bar);&lt;br /&gt;
&lt;br /&gt;
        var hlEls = Array.from(document.querySelectorAll(&#039;.gr-search-hl&#039;));&lt;br /&gt;
        var current = 0;&lt;br /&gt;
&lt;br /&gt;
        function goTo(idx) {&lt;br /&gt;
            hlEls.forEach(function (el) { el.classList.remove(&#039;gr-search-hl-current&#039;); });&lt;br /&gt;
            current = ((idx % hlEls.length) + hlEls.length) % hlEls.length;&lt;br /&gt;
            hlEls[current].classList.add(&#039;gr-search-hl-current&#039;);&lt;br /&gt;
            hlEls[current].scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; });&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function dismiss() { clearHighlights(); bar.remove(); }&lt;br /&gt;
&lt;br /&gt;
        var nb = document.getElementById(&#039;gr-hl-next&#039;);&lt;br /&gt;
        var pb = document.getElementById(&#039;gr-hl-prev&#039;);&lt;br /&gt;
        var rb = document.getElementById(&#039;gr-hl-results&#039;);&lt;br /&gt;
        var db2 = document.getElementById(&#039;gr-hl-dismiss&#039;);&lt;br /&gt;
        if (nb) nb.onclick = function () { goTo(current + 1); };&lt;br /&gt;
        if (pb) pb.onclick = function () { goTo(current - 1); };&lt;br /&gt;
        if (db2) db2.onclick = dismiss;&lt;br /&gt;
        if (rb) rb.onclick = function () {&lt;br /&gt;
            bar.remove(); clearHighlights();&lt;br /&gt;
            if (window.showSearchDialog) window.showSearchDialog(query);&lt;br /&gt;
        };&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function clearHighlights() {&lt;br /&gt;
        document.querySelectorAll(&#039;.gr-search-hl&#039;).forEach(function (span) {&lt;br /&gt;
            var p = span.parentNode; if (!p) return;&lt;br /&gt;
            while (span.firstChild) p.insertBefore(span.firstChild, span);&lt;br /&gt;
            p.removeChild(span);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function escHtml(s) {&lt;br /&gt;
        return String(s).replace(/&amp;amp;/g, &#039;&amp;amp;amp;&#039;).replace(/&amp;lt;/g, &#039;&amp;amp;lt;&#039;).replace(/&amp;gt;/g, &#039;&amp;amp;gt;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function injectHighlightCSS() {&lt;br /&gt;
        if (document.getElementById(&#039;gr-hl-css&#039;)) return;&lt;br /&gt;
        var s = document.createElement(&#039;style&#039;);&lt;br /&gt;
        s.id = &#039;gr-hl-css&#039;;&lt;br /&gt;
        s.textContent = [&lt;br /&gt;
            &#039;.gr-search-hl{background:#fff176;color:#1a1a1a;border-radius:2px;padding:0 1px;box-shadow:0 0 0 1px rgba(181,69,27,0.25);}&#039;,&lt;br /&gt;
            &#039;.gr-search-hl-current{background:#ffb300!important;box-shadow:0 0 0 2px #b5451b!important;}&#039;,&lt;br /&gt;
            &#039;@keyframes gr-hl-pulse{0%{background:#ffb300;}50%{background:#fff176;}100%{background:#fff176;}}&#039;,&lt;br /&gt;
            &#039;.gr-search-hl-pulse{animation:gr-hl-pulse 1.2s ease 2;}&#039;,&lt;br /&gt;
        ].join(&#039;&#039;);&lt;br /&gt;
        document.head.appendChild(s);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    injectHighlightCSS();&lt;br /&gt;
&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) {&lt;br /&gt;
        document.addEventListener(&#039;DOMContentLoaded&#039;, applyHighlight);&lt;br /&gt;
    } else {&lt;br /&gt;
        applyHighlight();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (window.mw) {&lt;br /&gt;
        mw.hook(&#039;wikipage.content&#039;).add(function () {&lt;br /&gt;
            setTimeout(applyHighlight, 100);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    window.grStoreSearchHL = storeQueryForLink;&lt;br /&gt;
&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
/* ═══════════════════════════════════════════════════════════════&lt;br /&gt;
   Mobile addon — only runs on Minerva (mobile) skin&lt;br /&gt;
   ═══════════════════════════════════════════════════════════════ */&lt;br /&gt;
(function () {&lt;br /&gt;
    if (!document.body.classList.contains(&#039;skin-minerva&#039;)) return;&lt;br /&gt;
    function injectCSS() {&lt;br /&gt;
        if (document.getElementById(&#039;gr-mob-css&#039;)) return;&lt;br /&gt;
        var s = document.createElement(&#039;style&#039;);&lt;br /&gt;
        s.id = &#039;gr-mob-css&#039;;&lt;br /&gt;
        s.textContent =&lt;br /&gt;
            &#039;body,#mw-mf-viewport,#mw-mf-page-center{padding-top:0!important;margin-top:0!important;}&#039; +&lt;br /&gt;
            &#039;html,body,#mw-mf-viewport,#mw-mf-page-center{overflow-x:hidden!important;max-width:100vw!important;}&#039; +&lt;br /&gt;
            &#039;header.header-container{background:#b5451b!important;position:sticky!important;top:0!important;z-index:300!important;}&#039; +&lt;br /&gt;
            &#039;.minerva-header{background:#b5451b!important;min-height:54px!important;}&#039; +&lt;br /&gt;
            &#039;.minerva-header .search-toggle,.minerva-header .minerva-user-notifications{display:none!important;}&#039; +&lt;br /&gt;
            &#039;.branding-box a{display:flex!important;align-items:center!important;text-decoration:none!important;max-width:calc(100vw - 80px)!important;}&#039; +&lt;br /&gt;
            &#039;.branding-box a::before{content:&amp;quot;&amp;quot;;display:block;width:30px;height:30px;flex-shrink:0;background:url(&amp;quot;/favicon.png&amp;quot;) center/contain no-repeat;margin-right:8px;}&#039; +&lt;br /&gt;
            &#039;.branding-box a span{color:#fff!important;font-size:16px!important;font-weight:700!important;font-family:system-ui,sans-serif!important;line-height:1.2!important;flex:1 1 auto!important;min-width:0!important;}&#039; +&lt;br /&gt;
            &#039;.minerva-header svg path,.minerva-header svg rect,.minerva-header svg circle{fill:#fff!important;}&#039; +&lt;br /&gt;
            &#039;.minerva-header label{color:#fff!important;}&#039; +&lt;br /&gt;
            &#039;.minerva-tabs,.mw-portlet-associated-pages,.page-actions-menu,#page-secondary-actions,.last-modified-bar,.minerva-anon-talk-link{display:none!important;}&#039; +&lt;br /&gt;
            &#039;#gr-mob-menu-items{display:block!important;}&#039; +&lt;br /&gt;
            &#039;.mw-footer.minerva-footer,.footer-places,.footer-info,.minerva-footer-logo,#footer-places-about,#footer-places-disclaimers,#footer-places-privacy{display:none!important;}&#039; +&lt;br /&gt;
            &#039;#gr-static-bar{position:sticky!important;top:54px!important;z-index:200!important;}&#039; +&lt;br /&gt;
            &#039;.mf-section-0,.mf-section-1,.mf-section-2,.mf-section-3,.mf-section-4,.mf-section-5,.mf-section-6,.mf-section-7,.mf-section-8,.mf-section-9,.mf-section-10{display:block!important;visibility:visible!important;}&#039; +&lt;br /&gt;
            &#039;.collapsible-block{display:block!important;}&#039; +&lt;br /&gt;
            &#039;.section-heading .indicator,.collapsible-heading .indicator{display:none!important;}&#039; +&lt;br /&gt;
            &#039;.section-heading,.collapsible-heading{pointer-events:none!important;}&#039; +&lt;br /&gt;
            &#039;.gr-home-grid{flex-direction:column!important;flex-wrap:nowrap!important;gap:12px!important;width:100%!important;}&#039; +&lt;br /&gt;
            &#039;.gr-home-card{width:100%!important;max-width:100%!important;min-width:unset!important;box-sizing:border-box!important;flex:none!important;}&#039; +&lt;br /&gt;
            &#039;.gr-home-toggle{flex-wrap:wrap!important;}&#039; +&lt;br /&gt;
            &#039;.mw-parser-output{font-size:18px!important;line-height:1.8!important;}&#039; +&lt;br /&gt;
            &#039;.mw-parser-output h2,.mw-parser-output h3{width:100%!important;}&#039; +&lt;br /&gt;
            &#039;.bhashyam-block{margin-left:8px!important;}&#039; +&lt;br /&gt;
            &#039;#footer,.mw-footer,.catlinks,#catlinks{display:none!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-panel{position:fixed!important;top:0!important;left:0!important;bottom:0!important;width:82vw!important;max-width:340px!important;background:#fff!important;z-index:10400!important;box-shadow:4px 0 28px rgba(0,0,0,0.22)!important;overflow-y:auto!important;padding:0 0 40px!important;transform:translateX(-110%)!important;transition:transform 0.26s cubic-bezier(0.4,0,0.2,1)!important;display:block!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-panel.open{transform:translateX(0)!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-backdrop{display:none!important;position:fixed!important;inset:0!important;background:rgba(0,0,0,0.4)!important;z-index:10399!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-backdrop.open{display:block!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-header{position:sticky!important;top:0!important;background:#fff!important;display:flex!important;align-items:center!important;justify-content:space-between!important;padding:16px 16px 12px!important;border-bottom:1px solid #f0ebe6!important;z-index:1!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-title{font-size:13px!important;font-weight:700!important;text-transform:uppercase!important;letter-spacing:0.08em!important;color:#b5451b!important;font-family:system-ui,sans-serif!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-close{background:none!important;border:none!important;font-size:22px!important;color:#999!important;cursor:pointer!important;padding:4px 8px!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-body{padding:12px 16px!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-body a{display:block!important;font-size:16px!important;line-height:1.6!important;color:#2c1810!important;text-decoration:none!important;padding:8px 0!important;border-bottom:1px solid #f5f0ed!important;}&#039;;&lt;br /&gt;
        document.head.appendChild(s);&lt;br /&gt;
    }&lt;br /&gt;
    function expandSections() {&lt;br /&gt;
        document.querySelectorAll(&#039;[class*=&amp;quot;mf-section-&amp;quot;], .collapsible-block&#039;).forEach(function (el) { el.removeAttribute(&#039;hidden&#039;); el.style.setProperty(&#039;display&#039;, &#039;block&#039;, &#039;important&#039;); el.style.setProperty(&#039;visibility&#039;, &#039;visible&#039;, &#039;important&#039;); el.removeAttribute(&#039;aria-hidden&#039;); });&lt;br /&gt;
        document.querySelectorAll(&#039;.section-heading, .collapsible-heading&#039;).forEach(function (el) { el.setAttribute(&#039;aria-expanded&#039;, &#039;true&#039;); el.style.setProperty(&#039;pointer-events&#039;, &#039;none&#039;, &#039;important&#039;); });&lt;br /&gt;
    }&lt;br /&gt;
    function watchSections() {&lt;br /&gt;
        var t = null;&lt;br /&gt;
        var obs = new MutationObserver(function (ms) { if (ms.some(function (m) { return m.attributeName === &#039;hidden&#039;; })) { clearTimeout(t); t = setTimeout(expandSections, 30); } });&lt;br /&gt;
        obs.observe(document.querySelector(&#039;#mw-content-text&#039;) || document.body, { subtree: true, attributes: true, attributeFilter: [&#039;hidden&#039;, &#039;aria-hidden&#039;] });&lt;br /&gt;
    }&lt;br /&gt;
    function watchBodyPadding() {&lt;br /&gt;
        new MutationObserver(function () { if (document.body.style.paddingTop &amp;amp;&amp;amp; document.body.style.paddingTop !== &#039;0px&#039;) document.body.style.paddingTop = &#039;&#039;; }).observe(document.body, { attributes: true, attributeFilter: [&#039;style&#039;] });&lt;br /&gt;
    }&lt;br /&gt;
    function injectMenuLinks() {&lt;br /&gt;
        if (document.getElementById(&#039;gr-mob-menu-items&#039;)) return;&lt;br /&gt;
        var navDrawer = document.querySelector(&#039;.navigation-drawer&#039;);&lt;br /&gt;
        if (!navDrawer) return;&lt;br /&gt;
        var wrap = document.createElement(&#039;div&#039;); wrap.id = &#039;gr-mob-menu-items&#039;; wrap.style.cssText = &#039;width:100%;background:#fff;margin-top:8px;&#039;;&lt;br /&gt;
        var itemStyle = &#039;display:flex;align-items:center;gap:14px;padding:15px 20px;font-size:16px;color:#2c1810;text-decoration:none;font-family:system-ui,sans-serif;border-bottom:1px solid #f0ebe6;background:#fff;&#039;;&lt;br /&gt;
        function makeItem(href, label) { var a = document.createElement(&#039;a&#039;); a.href = href; a.style.cssText = itemStyle; a.innerHTML = &#039;&amp;lt;span&amp;gt;&#039; + label + &#039;&amp;lt;/span&amp;gt;&#039;; return a; }&lt;br /&gt;
        wrap.appendChild(makeItem(&#039;/Main_Page&#039;, &#039;Home&#039;));&lt;br /&gt;
        wrap.appendChild(makeItem(&#039;/My_wiki:Help&#039;, &#039;Help&#039;));&lt;br /&gt;
        wrap.appendChild(makeItem(&#039;/My_wiki:About&#039;, &#039;About&#039;));&lt;br /&gt;
        var userName = window.mw ? mw.config.get(&#039;wgUserName&#039;) : null;&lt;br /&gt;
        if (userName) {&lt;br /&gt;
            wrap.appendChild(makeItem((window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl) ? mw.util.getUrl(&#039;Special:Profile&#039;) : &#039;/Special:Profile&#039;, &#039;Profile&#039;));&lt;br /&gt;
            var la = document.querySelector(&#039;a[href*=&amp;quot;action=logout&amp;quot;]&#039;);&lt;br /&gt;
            wrap.appendChild(makeItem(la ? la.href : &#039;/index.php?title=Special:UserLogout&#039;, &#039;Log out&#039;));&lt;br /&gt;
        }&lt;br /&gt;
        else wrap.appendChild(makeItem(&#039;/index.php?title=Special:UserLogin&#039;, &#039;Log in&#039;));&lt;br /&gt;
        var pageLeft = document.getElementById(&#039;mw-mf-page-left&#039;);&lt;br /&gt;
        if (pageLeft) { while (pageLeft.firstChild) pageLeft.removeChild(pageLeft.firstChild); pageLeft.style.removeProperty(&#039;display&#039;); pageLeft.appendChild(wrap); }&lt;br /&gt;
        else navDrawer.appendChild(wrap);&lt;br /&gt;
    }&lt;br /&gt;
    var _tocDone = false;&lt;br /&gt;
    function initToc() {&lt;br /&gt;
        if (_tocDone) return;&lt;br /&gt;
        var tocList = document.querySelector(&#039;.vector-toc-contents, .vector-toc .vector-toc-list&#039;);&lt;br /&gt;
        if (!tocList || !tocList.querySelector(&#039;li&#039;)) return;&lt;br /&gt;
        _tocDone = true;&lt;br /&gt;
        var bd = document.createElement(&#039;div&#039;); bd.className = &#039;gr-mob-toc-backdrop&#039;; document.body.appendChild(bd);&lt;br /&gt;
        var panel = document.createElement(&#039;div&#039;); panel.className = &#039;gr-mob-toc-panel&#039;;&lt;br /&gt;
        var hdr = document.createElement(&#039;div&#039;); hdr.className = &#039;gr-mob-toc-header&#039;;&lt;br /&gt;
        var ttl = document.createElement(&#039;div&#039;); ttl.className = &#039;gr-mob-toc-title&#039;; ttl.textContent = &#039;विषयसूची&#039;;&lt;br /&gt;
        var cls = document.createElement(&#039;button&#039;); cls.className = &#039;gr-mob-toc-close&#039;; cls.textContent = &#039;✕&#039;;&lt;br /&gt;
        hdr.appendChild(ttl); hdr.appendChild(cls); panel.appendChild(hdr);&lt;br /&gt;
        var body = document.createElement(&#039;div&#039;); body.className = &#039;gr-mob-toc-body&#039;; body.appendChild(tocList.cloneNode(true)); panel.appendChild(body); document.body.appendChild(panel);&lt;br /&gt;
        var btn = document.createElement(&#039;button&#039;); btn.id = &#039;gr-mob-toc-btn&#039;; btn.innerHTML = &#039;☰ &amp;amp;nbsp;Contents&#039;;&lt;br /&gt;
        btn.style.cssText = &#039;position:fixed;bottom:148px;left:16px;z-index:9100;background:#fff;border:1.5px solid #b5451b;border-radius:24px;padding:10px 16px;font-size:15px;font-family:system-ui,sans-serif;color:#b5451b;font-weight:600;box-shadow:0 3px 14px rgba(0,0,0,0.15);cursor:pointer;&#039;;&lt;br /&gt;
        document.body.appendChild(btn);&lt;br /&gt;
        function open() { panel.classList.add(&#039;open&#039;); bd.classList.add(&#039;open&#039;); document.body.style.overflow = &#039;hidden&#039;; }&lt;br /&gt;
        function close() { panel.classList.remove(&#039;open&#039;); bd.classList.remove(&#039;open&#039;); document.body.style.overflow = &#039;&#039;; }&lt;br /&gt;
        btn.onclick = open; cls.onclick = close; bd.onclick = close;&lt;br /&gt;
        body.querySelectorAll(&#039;a&#039;).forEach(function (a) { a.onclick = close; });&lt;br /&gt;
    }&lt;br /&gt;
    function injectMoolaUllekhaLinks() {&lt;br /&gt;
        if (document.getElementById(&#039;gr-mob-doc-nav&#039;)) return;&lt;br /&gt;
        var pageName = (window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get(&#039;wgPageName&#039;)) || &#039;&#039;;&lt;br /&gt;
        if (pageName === &#039;Main_Page&#039; || !pageName) return;&lt;br /&gt;
        function wikiUrl(slug) { if (window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl) return mw.util.getUrl(slug); return ((window.mw &amp;amp;&amp;amp; mw.config.get(&#039;wgArticlePath&#039;)) || &#039;/wiki/$1&#039;).replace(&#039;$1&#039;, encodeURIComponent(slug).replace(/%2F/g, &#039;/&#039;)); }&lt;br /&gt;
        var teekaPage = document.querySelector(&#039;.gr-teeka-page&#039;);&lt;br /&gt;
        var primarySlug = teekaPage ? (teekaPage.getAttribute(&#039;data-primary&#039;) || pageName.split(&#039;/&#039;)[0]) : pageName.split(&#039;/&#039;)[0];&lt;br /&gt;
        var docTitleEl = document.querySelector(&#039;.gr-doc-title&#039;);&lt;br /&gt;
        var hasMoolaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute(&#039;data-has-moola&#039;) === &#039;1&#039;;&lt;br /&gt;
        var hasUllekhaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute(&#039;data-has-ullekha&#039;) === &#039;1&#039;;&lt;br /&gt;
        var showMoolam = !!teekaPage || hasMoolaPage, showUllekha = hasUllekhaPage || !!teekaPage;&lt;br /&gt;
        if (!showMoolam &amp;amp;&amp;amp; !showUllekha) return;&lt;br /&gt;
        var nav = document.createElement(&#039;div&#039;); nav.id = &#039;gr-mob-doc-nav&#039;;&lt;br /&gt;
        nav.style.cssText = &#039;display:flex;gap:10px;padding:10px 16px 8px;background:#fdf8f5;border-bottom:1px solid #f0e0d6;font-family:system-ui,sans-serif;&#039;;&lt;br /&gt;
        function makeLink(href, label) { var a = document.createElement(&#039;a&#039;); a.href = href; a.textContent = label; a.style.cssText = &#039;display:inline-flex;align-items:center;padding:5px 16px;border-radius:20px;background:#fff;border:1.5px solid #e8cfc4;color:#b5451b;font-size:14px;font-weight:600;text-decoration:none;&#039;; return a; }&lt;br /&gt;
        if (teekaPage) nav.appendChild(makeLink(wikiUrl(primarySlug), &#039;मूल&#039;));&lt;br /&gt;
        else if (hasMoolaPage) nav.appendChild(makeLink(wikiUrl(primarySlug + &#039;/Moola&#039;), &#039;मूलम्&#039;));&lt;br /&gt;
        if (showUllekha) nav.appendChild(makeLink(wikiUrl(primarySlug + &#039;/Ullekha&#039;), &#039;उल्लेख&#039;));&lt;br /&gt;
        var h1 = document.getElementById(&#039;firstHeading&#039;) || document.querySelector(&#039;.page-heading, h1.firstHeading, .mw-first-heading&#039;);&lt;br /&gt;
        if (h1 &amp;amp;&amp;amp; h1.parentNode) h1.parentNode.insertBefore(nav, h1.nextSibling);&lt;br /&gt;
        else { var ct = document.getElementById(&#039;mw-content-text&#039;); if (ct) ct.insertBefore(nav, ct.firstChild); }&lt;br /&gt;
    }&lt;br /&gt;
    injectCSS(); watchBodyPadding();&lt;br /&gt;
    function boot() { expandSections(); watchSections(); injectMenuLinks(); injectMoolaUllekhaLinks();[100, 400, 900, 1800].forEach(function (ms) { setTimeout(expandSections, ms); }); setTimeout(initToc, 700); }&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) document.addEventListener(&#039;DOMContentLoaded&#039;, boot);&lt;br /&gt;
    else boot();&lt;br /&gt;
    if (window.mw) mw.hook(&#039;wikipage.content&#039;).add(function () { setTimeout(function () { expandSections(); injectMenuLinks(); injectMoolaUllekhaLinks(); initToc(); }, 300); });&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(function () {&lt;br /&gt;
    &#039;use strict&#039;;&lt;br /&gt;
    mw.hook(&#039;wikipage.content&#039;).add(function () {&lt;br /&gt;
        setTimeout(function () {&lt;br /&gt;
            var blocks = document.querySelectorAll(&#039;.collapsible-block, .toggle-list&#039;);&lt;br /&gt;
            Array.prototype.forEach.call(blocks, function (el) { if (!el.parentNode) { try { el.remove(); } catch (e) { } } });&lt;br /&gt;
        }, 0);&lt;br /&gt;
    });&lt;br /&gt;
    if (mw.config.get(&#039;wgPageName&#039;) !== &#039;Main_Page&#039;) return;&lt;br /&gt;
    mw.loader.using(&#039;mediawiki.util&#039;).done(function () {&lt;br /&gt;
        $(function () { applyHomeToggleOffset(); window.addEventListener(&#039;resize&#039;, applyHomeToggleOffset, { passive: true }); setTimeout(applyHomeToggleOffset, 300); setTimeout(applyHomeToggleOffset, 800); });&lt;br /&gt;
    });&lt;br /&gt;
    function applyHomeToggleOffset() {&lt;br /&gt;
        var bar = document.getElementById(&#039;gr-static-bar&#039;); if (!bar) return;&lt;br /&gt;
        var barBottom = Math.round(bar.getBoundingClientRect().bottom);&lt;br /&gt;
        [document.getElementById(&#039;gr-home&#039;), document.getElementById(&#039;gr-home-toggle&#039;), document.querySelector(&#039;#mw-content-text .mw-parser-output &amp;gt; .gr-home, #mw-content-text .mw-parser-output &amp;gt; *:first-child&#039;)].forEach(function (el) { if (el) el.style.scrollMarginTop = (barBottom + 4) + &#039;px&#039;; });&lt;br /&gt;
        var isMob = window.innerWidth &amp;lt; 768 || !!document.getElementById(&#039;mw-mf-viewport&#039;);&lt;br /&gt;
        if (isMob) { var toggleEl = document.getElementById(&#039;gr-home-toggle&#039;); if (toggleEl) { var tr = toggleEl.getBoundingClientRect(); if (tr.top &amp;lt; barBottom) { var cp = parseInt(window.getComputedStyle(document.body).paddingTop, 10) || 0; document.body.style.paddingTop = (cp + (barBottom - tr.top) + 4) + &#039;px&#039;; } } }&lt;br /&gt;
    }&lt;br /&gt;
    $(function () {&lt;br /&gt;
        var $toggle = $(&#039;#gr-home-toggle&#039;), $viewG = $(&#039;#gr-view-grantha&#039;), $viewA = $(&#039;#gr-view-author&#039;), $btnG = $(&#039;#gr-toggle-grantha&#039;), $btnA = $(&#039;#gr-toggle-author&#039;);&lt;br /&gt;
        if (!$toggle.length || !$viewG.length || !$viewA.length) return; if ($toggle.data(&#039;gr-wired&#039;)) return; $toggle.data(&#039;gr-wired&#039;, true);&lt;br /&gt;
        function showView(which) { if (which === &#039;grantha&#039;) { $viewG.show(); $viewA.hide(); $btnG.addClass(&#039;gr-toggle-active&#039;); $btnA.removeClass(&#039;gr-toggle-active&#039;); } else { $viewA.show(); $viewG.hide(); $btnA.addClass(&#039;gr-toggle-active&#039;); $btnG.removeClass(&#039;gr-toggle-active&#039;); } try { localStorage.setItem(&#039;grantha_home_tab&#039;, which); } catch (e) { } }&lt;br /&gt;
        $btnG.on(&#039;click keydown&#039;, function (e) { if (e.type === &#039;keydown&#039; &amp;amp;&amp;amp; e.key !== &#039;Enter&#039; &amp;amp;&amp;amp; e.key !== &#039; &#039;) return; showView(&#039;grantha&#039;); });&lt;br /&gt;
        $btnA.on(&#039;click keydown&#039;, function (e) { if (e.type === &#039;keydown&#039; &amp;amp;&amp;amp; e.key !== &#039;Enter&#039; &amp;amp;&amp;amp; e.key !== &#039; &#039;) return; showView(&#039;author&#039;); });&lt;br /&gt;
        try { var saved = localStorage.getItem(&#039;grantha_home_tab&#039;); if (saved === &#039;author&#039;) showView(&#039;author&#039;); else showView(&#039;grantha&#039;); } catch (e) { showView(&#039;grantha&#039;); }&lt;br /&gt;
    });&lt;br /&gt;
}());&lt;br /&gt;
// ── Replace MediaWiki user links with a single username dropdown (Profile + Logout) ──&lt;br /&gt;
(function () {&lt;br /&gt;
    function wikiHref(title) {&lt;br /&gt;
        if (window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl) return mw.util.getUrl(title);&lt;br /&gt;
        var ap = (window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get(&#039;wgArticlePath&#039;)) || &#039;/wiki/$1&#039;;&lt;br /&gt;
        return ap.replace(&#039;$1&#039;, title);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function buildLogoutForm(token) {&lt;br /&gt;
        token = token || &#039;&#039;;&lt;br /&gt;
        var esc = String(token).replace(/&amp;quot;/g, &#039;&amp;amp;quot;&#039;);&lt;br /&gt;
        var script = (window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.wikiScript) ? mw.util.wikiScript() : &#039;/index.php&#039;;&lt;br /&gt;
        var form = document.createElement(&#039;form&#039;);&lt;br /&gt;
        form.method = &#039;post&#039;;&lt;br /&gt;
        form.action = script + &#039;?title=Special:UserLogout&#039;;&lt;br /&gt;
        form.style.display = &#039;none&#039;;&lt;br /&gt;
        form.innerHTML =&lt;br /&gt;
            &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;wpEditToken&amp;quot; value=&amp;quot;&#039; + esc + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
            &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;title&amp;quot; value=&amp;quot;Special:UserLogout&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
            &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;returnto&amp;quot; value=&amp;quot;Main Page&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
        document.body.appendChild(form);&lt;br /&gt;
        return form;&lt;br /&gt;
    }&lt;br /&gt;
}());&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.css&amp;diff=6226</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.css&amp;diff=6226"/>
		<updated>2026-06-13T10:17:27Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ═══════════════════════════════════════════════════════════════════&lt;br /&gt;
   MediaWiki:Common.css — Anandamakaranda&lt;br /&gt;
   Clean rebuild — works on Vector (desktop) + Minerva (mobile)&lt;br /&gt;
   ═══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
&lt;br /&gt;
/* ── 1. CSS VARIABLES ──────────────────────────────────────────── */&lt;br /&gt;
:root {&lt;br /&gt;
  --maroon:       #be100e;&lt;br /&gt;
  --orange:       #e65100;&lt;br /&gt;
  --light-orange: #f57c00;&lt;br /&gt;
  --dark-gray:    #555;&lt;br /&gt;
  --light-gray:   #eee;&lt;br /&gt;
  --muted-gray:   #888;&lt;br /&gt;
  --text:         #1a1a1a;&lt;br /&gt;
  --brown:        #a07040;&lt;br /&gt;
  --light-brown:  #e8d4a0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 2. FONTS ──────────────────────────────────────────────────── */&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;Adishila&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/adishila/Adishila.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: normal; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;Adishila&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/adishila/AdishilaBold.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: bold; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;AdishilaDev&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/AdishilaDev.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: normal; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;AdishilaDev&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/AdishilaDeBv.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: bold; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;AdishilaDevGuru&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/AdishilaDevGuru.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: bold; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;Noto Sans Devanagari&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/Noto_Sans_Devanagari/NotoSansDevanagari.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: normal; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Icon base ──────────────────────────────────────────────────── */&lt;br /&gt;
.gra-icon {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  width:  20px;&lt;br /&gt;
  height: 20px;&lt;br /&gt;
  background-size: contain;&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  background-position: center;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
/* comment.svg → Feedback (flag/report)  */&lt;br /&gt;
.gra-icon-feedback { background-image: url(&#039;/images/feedback.svg&#039;); }&lt;br /&gt;
/* notes.svg   → Notes                  */&lt;br /&gt;
.gra-icon-note     { background-image: url(&#039;/images/notes.svg&#039;); }&lt;br /&gt;
.gra-icon-bookmark { background-image: url(&#039;/images/bookmark.svg&#039;); }&lt;br /&gt;
.gra-icon-copy     { background-image: url(&#039;/images/copy.svg&#039;); }&lt;br /&gt;
.gra-icon-search { background-image: url(&#039;/images/search.svg&#039;); }&lt;br /&gt;
.gra-icon-dismiss { background-image: url(&#039;/images/close.svg&#039;); }&lt;br /&gt;
.gra-icon-prev { background-image: url(&#039;/images/prev.svg&#039;); }&lt;br /&gt;
.gra-icon-next { background-image: url(&#039;/images/next.svg&#039;); }&lt;br /&gt;
&lt;br /&gt;
#mw-content-text {&lt;br /&gt;
  font-family: &#039;Adishila&#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output {&lt;br /&gt;
  font-size: 22px;&lt;br /&gt;
  line-height: 1.7;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  max-width: 100%;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  margin: 0; padding: 0;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Danda marks wrap issue&lt;br /&gt;
.mw-parser-output { overflow-wrap: anywhere; }&lt;br /&gt;
&lt;br /&gt;
/* ── 4. HIDE ELEMENTS (both skins) ────────────────────────────── */&lt;br /&gt;
/* Page title */&lt;br /&gt;
h1.firstHeading, #firstHeading, .mw-page-title-main { display: none !important; }&lt;br /&gt;
/* Footer */&lt;br /&gt;
#footer, .mw-footer, .vector-footer, .vector-footer-container,&lt;br /&gt;
footer, .minerva-footer { display: none !important; }&lt;br /&gt;
/* Categories */&lt;br /&gt;
.catlinks, #catlinks, .mw-normal-catlinks, .mw-hidden-catlinks { display: none !important; }&lt;br /&gt;
/* Edit section links */&lt;br /&gt;
.mw-editsection, .mw-editsection-bracket { display: none !important; }&lt;br /&gt;
/* Site notice */&lt;br /&gt;
#siteNotice { display: none !important; }&lt;br /&gt;
/* Watchlist */&lt;br /&gt;
li#pt-watchlist, li#pt-watchlist-kbd { display: none !important; }&lt;br /&gt;
/* Appearance panel */&lt;br /&gt;
#vector-appearance, #vector-appearance-pinned-container,&lt;br /&gt;
#vector-appearance-unpinned-container, .mw-portlet-appearance,&lt;br /&gt;
#p-appearance, [aria-controls=&amp;quot;vector-appearance&amp;quot;] { display: none !important; }&lt;br /&gt;
/* Vector hamburger + sidebar */&lt;br /&gt;
#mw-sidebar-button, .vector-main-menu, .vector-main-menu-container,&lt;br /&gt;
.vector-main-menu-landmark, #vector-main-menu-dropdown { display: none !important; }&lt;br /&gt;
/* Vector search box (we use our own) */&lt;br /&gt;
#p-search, .vector-search-box, .vector-search-box-vue,&lt;br /&gt;
.vector-search-box-collapses { display: none !important; }&lt;br /&gt;
/* Vector page toolbar */&lt;br /&gt;
.vector-page-toolbar, .vector-page-toolbar-container { display: none !important; }&lt;br /&gt;
/* Vector page tools */&lt;br /&gt;
.vector-page-tools { display: none !important; }&lt;br /&gt;
/* Empty paragraphs */&lt;br /&gt;
.mw-parser-output p:empty,&lt;br /&gt;
.mw-parser-output &amp;gt; div &amp;gt; p:empty,&lt;br /&gt;
.mw-heading + p:empty,&lt;br /&gt;
.adhyaya-block + p:empty,&lt;br /&gt;
.verse-block + p:empty { display: none !important; margin: 0 !important; }&lt;br /&gt;
/* Empty divs */&lt;br /&gt;
.adhyaya-block:empty, .mw-parser-output div:empty { display: none !important; }&lt;br /&gt;
/* Cargo hidden */&lt;br /&gt;
.cargo-store-only { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 5. VECTOR HEADER (desktop only) ──────────────────────────── */&lt;br /&gt;
.vector-header-container {&lt;br /&gt;
  background: #b5451b !important;&lt;br /&gt;
  border-bottom: 1px solid rgba(255,255,255,0.12);&lt;br /&gt;
}&lt;br /&gt;
.vector-header {&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  justify-content: space-between !important;&lt;br /&gt;
  padding-left: 20px !important;&lt;br /&gt;
  padding-right: 20px !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-header-start {&lt;br /&gt;
  flex: 0 0 auto !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  gap: 12px;&lt;br /&gt;
}&lt;br /&gt;
.vector-header-end {&lt;br /&gt;
  flex: 0 0 auto !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  margin-left: auto;&lt;br /&gt;
}&lt;br /&gt;
.mw-logo { display: flex !important; align-items: center; opacity: 1 !important; }&lt;br /&gt;
.mw-logo-icon { width: 24px; height: 24px; }&lt;br /&gt;
&lt;br /&gt;
/* Site name */&lt;br /&gt;
.mw-logo-wordmark {&lt;br /&gt;
  font-size: 0 !important;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  flex-direction: column !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-logo-wordmark::before {&lt;br /&gt;
  content: &#039;Anandamakaranda&#039;;&lt;br /&gt;
  font-size: 17px;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-family: system-ui, -apple-system, sans-serif;&lt;br /&gt;
  letter-spacing: -0.01em;&lt;br /&gt;
}&lt;br /&gt;
.mw-logo-wordmark::after {&lt;br /&gt;
  content: &amp;quot;A Digital Archive of Dvaita Vedanta Literature&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  font-weight: 400;&lt;br /&gt;
  color: rgba(255,255,255,0.85);&lt;br /&gt;
  letter-spacing: 0.3px;&lt;br /&gt;
  margin-top: 1px;&lt;br /&gt;
  font-family: sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Header right links */&lt;br /&gt;
.vector-header-end &amp;gt; *:not(#p-search) { color: rgba(255,255,255,0.9) !important; }&lt;br /&gt;
.vector-user-links a { color: rgba(255,255,255,0.9) !important; }&lt;br /&gt;
&lt;br /&gt;
/* User icon white */&lt;br /&gt;
.vector-user-menu-container .vector-icon svg,&lt;br /&gt;
.vector-user-menu-container .vector-icon svg path,&lt;br /&gt;
.vector-user-menu-container .vector-icon svg circle {&lt;br /&gt;
  fill: #fff !important; stroke: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-user-links .vector-user-menu-chevron .vector-icon svg,&lt;br /&gt;
.vector-user-links .vector-user-menu-chevron .vector-icon svg path {&lt;br /&gt;
  fill: rgba(255,255,255,0.9) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* User dropdown — dark text on white card */&lt;br /&gt;
.vector-user-menu .mw-list-item a,&lt;br /&gt;
.vector-user-menu .vector-menu-content-list a,&lt;br /&gt;
#p-personal .vector-menu-content a,&lt;br /&gt;
.mw-portlet-personal .vector-menu-content a { color: #202122 !important; }&lt;br /&gt;
.vector-user-menu .mw-list-item a:hover { color: var(--light-orange) !important; }&lt;br /&gt;
&lt;br /&gt;
/* Suppress Vector sticky header clone */&lt;br /&gt;
.vector-sticky-header { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* Suppress body top padding that Vector adds */&lt;br /&gt;
.mw-body { margin-top: 0 !important; padding-top: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 6. VECTOR TOC (desktop sidebar) ──────────────────────────── */&lt;br /&gt;
.vector-toc .vector-toc-numb { display: none !important; }&lt;br /&gt;
.vector-toc .vector-toc-title {&lt;br /&gt;
  font-size: 0.72em !important; font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase; letter-spacing: 0.08em;&lt;br /&gt;
  color: var(--text) !important;&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, system-ui, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-toc .vector-toc-text {&lt;br /&gt;
  white-space: normal !important; word-break: break-word !important;&lt;br /&gt;
  overflow-wrap: anywhere !important; display: inline !important;&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, system-ui, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-toc a, .vector-toc .vector-toc-link {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, system-ui, sans-serif !important;&lt;br /&gt;
  color: var(--text) !important; text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-toc a:hover { color: var(--light-orange) !important; }&lt;br /&gt;
.vector-toc .vector-toc-list-item-active .vector-toc-link,&lt;br /&gt;
.vector-toc .vector-toc-list-item-active .vector-toc-link * {&lt;br /&gt;
  color: var(--light-orange) !important; font-weight: 700 !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-toc .cdx-button.vector-toc-toggle {&lt;br /&gt;
  background: none !important; border: none !important;&lt;br /&gt;
  box-shadow: none !important; color: var(--text) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 7. HEADINGS ───────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output h1, .mw-parser-output h2, .mw-parser-output h3, .mw-parser-output h4,&lt;br /&gt;
.mw-parser-output .mw-heading h1, .mw-parser-output .mw-heading h2,&lt;br /&gt;
.mw-parser-output .mw-heading h3 {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  border: none !important; padding: 0 !important; background: none !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output .mw-heading { border: none !important; margin: 0; padding: 0; }&lt;br /&gt;
&lt;br /&gt;
.mw-heading, .mw-heading2, .mw-heading3 { text-align:center; }&lt;br /&gt;
.mw-parser-output h2, .mw-parser-output .mw-heading2 h2 {&lt;br /&gt;
  font-size: 1.2em !important; font-weight: 500 !important;&lt;br /&gt;
  color: var(--maroon) !important; line-height: 1.8;&lt;br /&gt;
  margin: 24px 0 4px !important;&lt;br /&gt;
  border-bottom: 2px dotted var(--maroon) !important;&lt;br /&gt;
  width: 75%; font-family: &#039;AdishilaDev&#039;; text-align: center;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output h3, .mw-parser-output .mw-heading3 h3 {&lt;br /&gt;
  font-size: 1em !important; font-weight: 500 !important;&lt;br /&gt;
  color: var(--orange) !important; line-height: 1.5;&lt;br /&gt;
  margin: 24px 0 8px !important;&lt;br /&gt;
  border-bottom: 1px dotted var(--orange) !important;&lt;br /&gt;
  width: 55%; font-family: &#039;AdishilaDev&#039;; text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 8. PARAGRAPHS ─────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output p { margin: 0 0 0.35rem !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 9. DOCUMENT TITLE ─────────────────────────────────────────── */&lt;br /&gt;
.gr-doc-title {&lt;br /&gt;
  font-size: 2em; font-weight: 500; color: var(--maroon);&lt;br /&gt;
  line-height: 1.4; margin: 0 0 16px; border: none !important;&lt;br /&gt;
  text-align:center; font-family: &#039;AdishilaDev&#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 10. VERSE BLOCKS ──────────────────────────────────────────── */&lt;br /&gt;
.shloka-block { display: block; text-align: left; margin: 3px 0 0; padding-bottom: 0.5em; }&lt;br /&gt;
.shloka-line { display: block; font-style: normal; color: #333; line-height: 1.35; margin: 0; }&lt;br /&gt;
.verse-block { display: block; margin: 6px 0 0; text-align: left; }&lt;br /&gt;
.verse-block .shloka-block { text-align: left; margin: 0; }&lt;br /&gt;
.verse-block .shloka-line {&lt;br /&gt;
  display: block; font-style: italic; color: #c65;&lt;br /&gt;
  font-weight: 500; line-height: 1.35; margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.verse-block + p { display: none !important; margin: 0 !important; }&lt;br /&gt;
.mw-parser-output .verse-block,&lt;br /&gt;
.mw-parser-output .shloka-block { margin-top: 2px !important; margin-bottom: 2px !important; }&lt;br /&gt;
&lt;br /&gt;
.gr-verse-text, .verse-line, .verse-text {&lt;br /&gt;
  color: #b5451b; font-style: italic; line-height: 1.5; display: block; margin: 0.1em 0;&lt;br /&gt;
}&lt;br /&gt;
.gr-verse-type-sutra .gr-verse-text,&lt;br /&gt;
.verse-block[data-type=&amp;quot;sutra&amp;quot;] .verse-line { font-style: normal; font-weight: 600; color: #b5451b; }&lt;br /&gt;
&lt;br /&gt;
/* ── 11. UVACHA ────────────────────────────────────────────────── */&lt;br /&gt;
.uvacha-block {&lt;br /&gt;
  display: block; font-weight: bold; color: #c65;&lt;br /&gt;
  margin: 0.5rem 0 0; padding: 2px 0 2px 12px;&lt;br /&gt;
  border-left: 3px solid #c65; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
.uvacha-block + .verse-block { margin-top: 2px; }&lt;br /&gt;
.gr-uvaaca, .uvaaca {&lt;br /&gt;
  color: #b5451b; font-weight: 600; font-size: 0.92em; margin: 0.5em 0 0.2em 0; display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 12. BHASHYAM ──────────────────────────────────────────────── */&lt;br /&gt;
.bhashyam-block {&lt;br /&gt;
  display: block; font-size: 1em; line-height: 1.6; color: #555;&lt;br /&gt;
  margin: 0.25em 0 0.35em 48px; padding: 0; border: none; background: transparent;&lt;br /&gt;
}&lt;br /&gt;
.gr-bhashyam, .commentary-bhashyam {&lt;br /&gt;
  color: #222; font-style: normal; line-height: 1.75; margin: 0.3em 0 0.5em 0;&lt;br /&gt;
}&lt;br /&gt;
.gr-leading-bhashya { font-style: italic; color: #555; margin: 0.4em 0 0.5em 0; }&lt;br /&gt;
&lt;br /&gt;
/* ── 13. PADYA ─────────────────────────────────────────────────── */&lt;br /&gt;
.padya-block {&lt;br /&gt;
  display: block; font-size: 1em; line-height: 1.75; color: #c65 !important;&lt;br /&gt;
  font-style: italic; font-weight: 500; margin: 0.4em 0 0.6em 60px;&lt;br /&gt;
}&lt;br /&gt;
.gr-padapatha { font-size: 0.9em; color: #555; margin: 0.2em 0 0.3em 0.8em; }&lt;br /&gt;
&lt;br /&gt;
/* ── 14. TEEKA ─────────────────────────────────────────────────── */&lt;br /&gt;
.teeka-block {&lt;br /&gt;
  padding: 6px 10px 8px; margin: 0.3em 0; line-height: 1.6; color: #555;&lt;br /&gt;
}&lt;br /&gt;
.teeka-title {&lt;br /&gt;
  font-family: &#039;AdishilaDev&#039;;, sans-serif !important;&lt;br /&gt;
  font-size: 1.75em; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase;&lt;br /&gt;
  margin-bottom: 4px; padding-bottom: 3px;&lt;br /&gt;
}&lt;br /&gt;
.teeka-body .shloka-block {&lt;br /&gt;
  margin: 0.4em 0; padding: 0.3em 0.6em; font-family: &#039;AdishilaDev&#039;;&lt;br /&gt;
}&lt;br /&gt;
.teeka-body .shloka-line { font-style: italic; font-size: 0.97em; font-family: &#039;AdishilaDev&#039;; }&lt;br /&gt;
&lt;br /&gt;
/* ── 15. PRATEEKA / MOOLA ──────────────────────────────────────── */&lt;br /&gt;
.gr-prateeka { font-weight: bold; font-style: normal; color: #333; }&lt;br /&gt;
.gr-mulaprateeka-block {&lt;br /&gt;
  display: block; font-weight: bold; font-style: normal;&lt;br /&gt;
  text-align: center; color: #333; margin: 0.7em 0 0.3em; line-height: 1.5;&lt;br /&gt;
}&lt;br /&gt;
.gr-moola { font-weight: bold; font-style: italic; color: #c65; }&lt;br /&gt;
&lt;br /&gt;
/* ── 16. ADHYAYA ───────────────────────────────────────────────── */&lt;br /&gt;
.adhyaya-block { margin: 0 0 4px; }&lt;br /&gt;
.adhyaya-trans { font-size: 0.9em; color: #666; margin: 2px 0 0; }&lt;br /&gt;
.adhyaya-intro { margin-top: 8px; line-height: 1.75; color: #555; }&lt;br /&gt;
.introduction p { color: var(--dark-gray); font-weight: 400; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.introduction { padding-bottom: 0.5em; text-align: justify; }&lt;br /&gt;
&lt;br /&gt;
/* ── 17. NYAYA / PRASNA ────────────────────────────────────────── */&lt;br /&gt;
.nyaya-block { margin: 32px 0; padding-top: 12px; border-top: 1px solid #eee; }&lt;br /&gt;
.nyaya-title {&lt;br /&gt;
  font-size: 1em; font-weight: 500; color: var(--orange);&lt;br /&gt;
  margin-bottom: 0.4rem; border-bottom: 1px dotted var(--orange); width: 50%;&lt;br /&gt;
}&lt;br /&gt;
.nyaya-body { color: #555; line-height: 1.75; margin-top: 0.5rem; }&lt;br /&gt;
.prasna-block { margin: 32px 0; padding-top: 12px; border-top: 1px solid #eee; }&lt;br /&gt;
.prasna-title {&lt;br /&gt;
  font-size: 1em; font-weight: 500; color: var(--orange);&lt;br /&gt;
  margin-bottom: 0.4rem; border-bottom: 1px dotted var(--orange); width: 50%;&lt;br /&gt;
}&lt;br /&gt;
.prasna-question, .prasna-answer { color: #555; line-height: 1.75; margin-top: 0.5rem; }&lt;br /&gt;
.prasna-answer { margin-left: 60px; }&lt;br /&gt;
&lt;br /&gt;
/* ── 18. VYAKHYA ELEMENTS ──────────────────────────────────────── */&lt;br /&gt;
.gr-vyakhya-head, .gr-section-head {&lt;br /&gt;
  font-size: 0.9em; font-weight: 700; color: #6a3e00;&lt;br /&gt;
  margin: 0.35em 0 0.15em; font-family: inherit; border: none; padding: 0;&lt;br /&gt;
}&lt;br /&gt;
.gr-avataranika {&lt;br /&gt;
  font-style: italic; color: #444; margin: 0.2em 0 0.5em 0.5em;&lt;br /&gt;
  padding-left: 0.6em; border-left: 2px solid #c9a96e; line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
.gr-vyakhya-pada {&lt;br /&gt;
  font-size: 0.88em; color: #555; background: #fafafa;&lt;br /&gt;
  border: 1px solid #e8e0d0; border-radius: 4px; padding: 0.5em 0.8em;&lt;br /&gt;
  margin: 0.5em 0; line-height: 1.5; white-space: pre-wrap;&lt;br /&gt;
}&lt;br /&gt;
.gr-vyakhya-gadya {&lt;br /&gt;
  font-weight: bold; font-size: 0.95em; text-align: center;&lt;br /&gt;
  color: #8b1a1a; margin: 0.2em 0; line-height: 1.6; letter-spacing: 0.03em;&lt;br /&gt;
}&lt;br /&gt;
.gr-vyakhya-para { margin: 0 0 0.5em 0; line-height: 1.65; color: #444; }&lt;br /&gt;
.gr-embedded-bhashya { margin: 0.2em 0 0.2em 1em; line-height: 1.6; }&lt;br /&gt;
.gr-gadya {&lt;br /&gt;
  display: block !important; font-size: 0.96em !important; font-weight: 600 !important;&lt;br /&gt;
  font-style: normal !important; color: #555 !important; margin: 16px 0 4px !important;&lt;br /&gt;
  border-bottom: 1px solid #ddd !important; width: 60%; line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
.gr-author-note {&lt;br /&gt;
  font-style: italic; color: var(--maroon); text-align: center; font-size: 0.9em;&lt;br /&gt;
  margin: 0.8em 0 0.4em 0; border-top: 1px solid #ddd; padding-top: 0.4em; font-family: &#039;AdishilaDev&#039;&lt;br /&gt;
}&lt;br /&gt;
.gr-devatachandas { font-size: 0.82em; color: #777; margin: 0.4em 0 0.2em 0; }&lt;br /&gt;
.gr-vargikarana   { font-size: 0.82em; color: #888; margin: 0.5em 0 0.1em 0; }&lt;br /&gt;
&lt;br /&gt;
/* ── 20. BHASHYA COLLECTION ────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output .bhashya-collection { margin: 0; padding: 0; }&lt;br /&gt;
.mw-parser-output .bhashya + p:empty,&lt;br /&gt;
.mw-parser-output .verse + p:empty,&lt;br /&gt;
.mw-parser-output .bhashya-collection + p:empty,&lt;br /&gt;
.mw-parser-output .pramana + p:empty,&lt;br /&gt;
.mw-parser-output .author-note + p:empty { display: none !important; margin: 0 !important; height: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 21. VERSE ACTIONS ─────────────────────────────────────────── */&lt;br /&gt;
.verse-actions {&lt;br /&gt;
  display: flex; flex-direction: row; align-items: center;&lt;br /&gt;
  gap: 6px; margin-top: 4px; justify-content: center;&lt;br /&gt;
}&lt;br /&gt;
.verse-action-btn {&lt;br /&gt;
  display: inline-flex; align-items: center; justify-content: center;&lt;br /&gt;
  padding: 4px; border-radius: 6px; cursor: pointer; opacity: 0.75; transition: all 0.2s;&lt;br /&gt;
}&lt;br /&gt;
.verse-action-btn:hover { opacity: 1; background-color: rgba(0,0,0,0.05); }&lt;br /&gt;
.icon { display: inline-block; width: 18px; height: 18px; background-repeat: no-repeat; background-position: center; background-size: contain; }&lt;br /&gt;
.icon-copy       { background-image: url(&#039;/images/copy.svg&#039;); }&lt;br /&gt;
.icon-commentary { background-image: url(&#039;/images/commentary.svg&#039;); }&lt;br /&gt;
.copy-tooltip {&lt;br /&gt;
  position: absolute; bottom: calc(100% + 8px); left: 50%;&lt;br /&gt;
  transform: translateX(-50%) translateY(4px);&lt;br /&gt;
  white-space: nowrap; pointer-events: none; z-index: 9999;&lt;br /&gt;
  display: inline-flex; align-items: center; padding: 2px 8px; border-radius: 999px;&lt;br /&gt;
  font-size: 0.75rem; font-weight: 500; background: rgba(30,30,30,0.82); color: #fff;&lt;br /&gt;
  opacity: 0; transition: opacity 0.2s, transform 0.2s;&lt;br /&gt;
}&lt;br /&gt;
.copy-tooltip.copy-tooltip-visible { opacity: 1; transform: translateX(-50%) translateY(0); }&lt;br /&gt;
&lt;br /&gt;
/* ── 22. CODE / PRE ────────────────────────────────────────────── */&lt;br /&gt;
pre, code, .mw-code, tt, kbd {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif ;&lt;br /&gt;
  background-color: transparent !important; border: none !important; padding: 0.3em 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-collapsible, .mw-collapsible-content, blockquote, .quotebox {&lt;br /&gt;
  background-color: transparent !important; border: none !important;&lt;br /&gt;
  font-style: normal !important; padding: 0 !important; margin-left: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 23. INLINE TOC BOX (wikitext __TOC__) ─────────────────────── */&lt;br /&gt;
.toc {&lt;br /&gt;
  display: block !important; background: #fffdf5; border: 1px solid #e8c88a;&lt;br /&gt;
  border-radius: 8px; padding: 12px 16px; margin: 0 0 24px 0;&lt;br /&gt;
  width: fit-content; min-width: 220px; max-width: 420px;&lt;br /&gt;
  font-size: 0.9em; line-height: 2;&lt;br /&gt;
}&lt;br /&gt;
.toc h2, .toc .toctitle {&lt;br /&gt;
  font-size: 0.85em !important; font-weight: 600 !important; color: var(--text) !important;&lt;br /&gt;
  border: none !important; margin: 0 0 6px !important; text-transform: uppercase; letter-spacing: 0.05em;&lt;br /&gt;
}&lt;br /&gt;
.toc ul { margin: 0 !important; padding-left: 1.2em !important; list-style: none !important; }&lt;br /&gt;
.toc li { margin: 0; padding: 0; }&lt;br /&gt;
.toc a { color: var(--text) !important; text-decoration: none !important; }&lt;br /&gt;
.toc a:hover { color: var(--light-orange) !important; }&lt;br /&gt;
.toc .toclevel-1 &amp;gt; a { font-weight: 600; }&lt;br /&gt;
.tocnumber { display: none; }&lt;br /&gt;
&lt;br /&gt;
/* ── 24. DOC TEEKAS + TOC NAV ──────────────────────────────────── */&lt;br /&gt;
.gr-doc-teekas { margin-bottom: 1em; }&lt;br /&gt;
.gr-doc-teekas + p:empty { display: none !important; margin: 0 !important; height: 0 !important; }&lt;br /&gt;
.toc-main-links { display: flex; gap: 6px; padding: 5px; align-items: center; margin-bottom: 4px; }&lt;br /&gt;
.toc-main-link-item {&lt;br /&gt;
  font-size: 0.9em; color: var(--text); text-decoration: none; padding: 4px 8px;&lt;br /&gt;
  border-radius: 6px; background: rgba(0,0,0,0.05); transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.toc-main-link-item:hover { background: rgba(0,0,0,0.10) !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 25. MAIN PAGE ─────────────────────────────────────────────── */&lt;br /&gt;
body.page-Main_Page #mw-panel,&lt;br /&gt;
body.page-Main_Page .vector-sidebar-container { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
.gr-home { max-width: 1080px; margin: 0 auto; padding: 0; }&lt;br /&gt;
.gr-home-page-title {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif !important;&lt;br /&gt;
  text-align: center; font-size: 1.8em; font-weight: 500; color: #1a2e40; margin: 24px 0 32px;&lt;br /&gt;
}&lt;br /&gt;
.gr-home-grid { display: flex; flex-wrap: wrap; gap: 20px; margin-bottom: 32px; }&lt;br /&gt;
.gr-home-card {&lt;br /&gt;
  background: #fff; border: 1px solid #e8e4df; border-radius: 10px;&lt;br /&gt;
  box-shadow: 0 2px 8px rgba(0,0,0,0.07);&lt;br /&gt;
  padding: 18px 20px 20px; flex: 1 1 280px; min-width: 240px; max-width: 360px;&lt;br /&gt;
}&lt;br /&gt;
.gr-home-card-title {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif !important;&lt;br /&gt;
  font-size: 1em; font-weight: 600; color: #1a2e40; text-align: center;&lt;br /&gt;
  padding-bottom: 10px; margin-bottom: 12px; border-bottom: 1.5px solid #c0392b;&lt;br /&gt;
}&lt;br /&gt;
.gr-home-card ol { margin: 0; padding-left: 1.4em; list-style: decimal; }&lt;br /&gt;
.gr-home-card li { font-size: 0.95em; line-height: 1.85; color: #333; }&lt;br /&gt;
.gr-home-card li a { color: #c0392b; text-decoration: none; }&lt;br /&gt;
.gr-home-card li a:hover { text-decoration: underline; }&lt;br /&gt;
.gr-home-card li a.new { color: #c08080; }&lt;br /&gt;
.gr-home-note { font-size: 0.82em; color: #888; }&lt;br /&gt;
.gr-home-group-label {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif !important;&lt;br /&gt;
  font-size: 1.1em; font-weight: 600; color: #1a2e40; text-align: center;&lt;br /&gt;
  margin: 36px 0 16px; padding-bottom: 8px; border-bottom: 2px solid #c0392b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 26. TOGGLE BUTTONS ────────────────────────────────────────── */&lt;br /&gt;
.gr-home-toggle { display: flex; gap: 8px; margin: 0 0 24px; justify-content: center; }&lt;br /&gt;
.gr-toggle-btn {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  font-size: 0.88em; padding: 6px 20px; border: 1.5px solid #c0392b; border-radius: 20px;&lt;br /&gt;
  background: transparent; color: #c0392b; cursor: pointer; user-select: none; transition: background 0.15s, color 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gr-toggle-btn:hover { background: #fdf0ed; }&lt;br /&gt;
.gr-toggle-btn.gr-toggle-active { background: #c0392b; color: #fff; }&lt;br /&gt;
&lt;br /&gt;
/* ── 27. SCRIPT BAR ────────────────────────────────────────────── */&lt;br /&gt;
.gr-script-bar { margin: 0 0 20px; font-size: 0.8em; color: #888; display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }&lt;br /&gt;
.gr-script-label { font-family: system-ui, sans-serif; color: #aaa; }&lt;br /&gt;
.gr-script-btn { font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif; color: #c0392b !important; text-decoration: underline dotted !important; cursor: pointer; }&lt;br /&gt;
.gr-script-btn.active { color: #888 !important; text-decoration: none !important; cursor: default; }&lt;br /&gt;
&lt;br /&gt;
/* ── 28. MODALS ────────────────────────────────────────────────── */&lt;br /&gt;
.grantha-modal { position: fixed; inset: 0; background: rgba(0,0,0,0.35); display: flex; align-items: center; justify-content: center; z-index: 10000; }&lt;br /&gt;
.grantha-modal-box { background: white; padding: 20px; border-radius: 10px; width: 300px; }&lt;br /&gt;
.gm-title { font-weight: bold; margin-bottom: 10px; }&lt;br /&gt;
.gm-actions { display: flex; justify-content: flex-end; gap: 10px; margin-top: 12px; }&lt;br /&gt;
&lt;br /&gt;
/* ── 29. LOGIN PAGE ────────────────────────────────────────────── */&lt;br /&gt;
body.page-Special_UserLogin .vector-search-box,&lt;br /&gt;
body.page-Special_UserLogin #p-search { display: none !important; }&lt;br /&gt;
body.page-Special_UserLogin #content { max-width: 420px; margin: 40px auto !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 30. SPECIAL PAGES ─────────────────────────────────────────── */&lt;br /&gt;
body.ns-special #footer, body.ns-special .mw-footer,&lt;br /&gt;
body.ns-special .vector-footer { display: none !important; }&lt;br /&gt;
body.ns-special .vector-page-tools { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 31. MINERVA (mobile) ──────────────────────────────────────── */&lt;br /&gt;
.skin-minerva .mw-parser-output {&lt;br /&gt;
  font-size: 18px !important;&lt;br /&gt;
  line-height: 1.8 !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .mw-parser-output h2,&lt;br /&gt;
.skin-minerva .mw-parser-output .mw-heading2 h2 {&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .mw-parser-output h3,&lt;br /&gt;
.skin-minerva .mw-parser-output .mw-heading3 h3 {&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .bhashyam-block { margin-left: 16px !important; }&lt;br /&gt;
.skin-minerva .prasna-answer  { margin-left: 16px !important; }&lt;br /&gt;
.skin-minerva .padya-block    { margin-left: 16px !important; }&lt;br /&gt;
/* Home grid single column on Minerva */&lt;br /&gt;
.skin-minerva .gr-home-grid {&lt;br /&gt;
  flex-direction: column !important;&lt;br /&gt;
  flex-wrap: nowrap !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .gr-home-card {&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
  min-width: unset !important;&lt;br /&gt;
  flex: 0 0 auto !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
/* Hide things that should be hidden on mobile too */&lt;br /&gt;
.skin-minerva .catlinks,&lt;br /&gt;
.skin-minerva #catlinks { display: none !important; }&lt;br /&gt;
.skin-minerva .mw-editsection { display: none !important; }&lt;br /&gt;
/* Minerva already has its own TOC — hide our inline .toc */&lt;br /&gt;
.skin-minerva .toc { display: none !important; }&lt;br /&gt;
/* ReaderToolbar on Minerva */&lt;br /&gt;
.skin-minerva #gr-static-bar {&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  min-height: 52px !important;&lt;br /&gt;
  overflow-x: auto !important;&lt;br /&gt;
  overflow-y: hidden !important;&lt;br /&gt;
  scrollbar-width: none !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva #gr-static-bar::-webkit-scrollbar { display: none !important; }&lt;br /&gt;
.skin-minerva .gr-controls .gr-btn {&lt;br /&gt;
  height: 44px !important;&lt;br /&gt;
  min-width: 44px !important;&lt;br /&gt;
  font-size: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .gr-btn-staging { display: none !important; }&lt;br /&gt;
.skin-minerva .gr-controls .gr-sep { display: none !important; }&lt;br /&gt;
/* Minerva already shows page title — don&#039;t double-hide */&lt;br /&gt;
.skin-minerva h1.firstHeading { display: block !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 32. PRINT ─────────────────────────────────────────────────── */&lt;br /&gt;
@media print {&lt;br /&gt;
  #gr-static-bar, .gr-controls, .vector-header-container { display: none !important; }&lt;br /&gt;
  .mw-parser-output { font-size: 11pt !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 33. TYPOGRAPHY CLASSES ────────────────────────────────────── */&lt;br /&gt;
&lt;br /&gt;
/* Heading — center, maroon, AdishilaDevGuru */&lt;br /&gt;
.gr-heading {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  font-size: 1.09em;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  color: #be100e;&lt;br /&gt;
  font-family: &#039;AdishilaDevGuru&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  line-height: 1.4;&lt;br /&gt;
  margin: 0.45em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Sub-heading — center, orange, AdishilaDevGuru */&lt;br /&gt;
.gr-sub-heading {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  font-size: 0.73em;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  color: #e65100;&lt;br /&gt;
  font-family: &#039;AdishilaDevGuru&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
  margin: 0.5em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Chapter Heading — center, maroon, AdishilaDevGuru */&lt;br /&gt;
.gr-chapter-heading {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  font-size: 0.82em;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  color: #be100e;&lt;br /&gt;
  font-family: &#039;AdishilaDevGuru&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
  margin: 0.5em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* M.Veda Shloka — left, bold, maroon, AdishilaVed, 5mm indent */&lt;br /&gt;
.gr-mv-shloka {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: left;&lt;br /&gt;
  font-size: 0.82em;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  color: #be100e;&lt;br /&gt;
  font-family: &#039;AdishilaVed&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  padding-left: 0.86em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.75;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* M.Veda Gadya — justify, bold, maroon, AdishilaVed */&lt;br /&gt;
.gr-mv-gadya {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: justify;&lt;br /&gt;
  font-size: 0.82em;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  color: #be100e;&lt;br /&gt;
  font-family: &#039;AdishilaVed&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  text-indent: 1.18em;&lt;br /&gt;
  padding-left: 0.36em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.75;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* M.Shloka — left, bold, orange, AdishilaDev, 5mm indent */&lt;br /&gt;
.gr-m-shloka {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: left;&lt;br /&gt;
  font-size: 0.82em;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  color: #e65100;&lt;br /&gt;
  font-family: &#039;AdishilaDev&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  padding-left: 0.86em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.75;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* B.Shloka / TK.Shloka / TP.Shloka — left, black, AdishilaDev, 10mm indent */&lt;br /&gt;
.gr-b-shloka,&lt;br /&gt;
.gr-tp-shloka {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: left;&lt;br /&gt;
  font-size: 0.73em;&lt;br /&gt;
  font-weight: normal;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  font-family: &#039;AdishilaDev&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  padding-left: 1.73em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.75;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Reference — orange, AdishilaDev */&lt;br /&gt;
.gr-reference {&lt;br /&gt;
  color: #e65100;&lt;br /&gt;
  font-family: &#039;AdishilaDev&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Custom tag span — subtle dashed underline only */&lt;br /&gt;
.gr-custom {&lt;br /&gt;
  border-bottom: 1px dashed #b5451b;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 34. MINERVA HEADER — orange theme + sticky ────────────────── */&lt;br /&gt;
&lt;br /&gt;
/* Kill space above header */&lt;br /&gt;
.skin-minerva body { margin-top: 0 !important; padding-top: 0 !important; }&lt;br /&gt;
.skin-minerva #mw-mf-viewport,&lt;br /&gt;
.skin-minerva #mw-mf-page-center { margin-top: 0 !important; padding-top: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* Header — orange, sticky */&lt;br /&gt;
.skin-minerva header.header-container {&lt;br /&gt;
  background: #b5451b !important;&lt;br /&gt;
  position: sticky !important;&lt;br /&gt;
  top: 0 !important;&lt;br /&gt;
  z-index: 200 !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  color: #ffffff;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .minerva-header {&lt;br /&gt;
  background: #b5451b !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  min-height: 54px !important;&lt;br /&gt;
  padding: 0 12px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.minerva-icon {&lt;br /&gt;
 &lt;br /&gt;
 filter: brightness(0) saturate(100%) invert(100%) sepia(4%) saturate(1%) hue-rotate(296deg) brightness(104%) contrast(100%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Site name text */&lt;br /&gt;
.skin-minerva .branding-box { background: transparent !important; }&lt;br /&gt;
.skin-minerva .branding-box a {&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .branding-box a span {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-size: 18px !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  font-family: system-ui, -apple-system, sans-serif !important;&lt;br /&gt;
  white-space: nowrap !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hamburger + search icons — white */&lt;br /&gt;
.skin-minerva .minerva-header label,&lt;br /&gt;
.skin-minerva .minerva-header .search-toggle {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .minerva-header svg path,&lt;br /&gt;
.skin-minerva .minerva-header svg rect,&lt;br /&gt;
.skin-minerva .minerva-header svg circle {&lt;br /&gt;
  fill: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .minerva-header .mw-ui-icon:before {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  filter: brightness(10) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Reader toolbar below Minerva header */&lt;br /&gt;
.skin-minerva #gr-static-bar {&lt;br /&gt;
  position: sticky !important;&lt;br /&gt;
  top: 54px !important;&lt;br /&gt;
  z-index: 100 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 35. MINERVA — auto-expand sections ────────────────────────── */&lt;br /&gt;
.skin-minerva .collapsible-block,&lt;br /&gt;
.skin-minerva .collapsible-heading + .collapsible-block {&lt;br /&gt;
  display: block !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .mf-section-0,&lt;br /&gt;
.skin-minerva .mf-section-1,&lt;br /&gt;
.skin-minerva .mf-section-2,&lt;br /&gt;
.skin-minerva .mf-section-3,&lt;br /&gt;
.skin-minerva .mf-section-4,&lt;br /&gt;
.skin-minerva .mf-section-5,&lt;br /&gt;
.skin-minerva .mf-section-6,&lt;br /&gt;
.skin-minerva .mf-section-7,&lt;br /&gt;
.skin-minerva .mf-section-8,&lt;br /&gt;
.skin-minerva .mf-section-9 {&lt;br /&gt;
  display: block !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .section-heading {&lt;br /&gt;
  pointer-events: none !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .section-heading .indicator {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* ── Hide MediaWiki default header user/account controls (desktop) ── */&lt;br /&gt;
#pt-userpage-2,&lt;br /&gt;
#p-vector-user-menu-userpage,&lt;br /&gt;
/* Hide the right-side person-icon dropdown */&lt;br /&gt;
#vector-user-links-dropdown,&lt;br /&gt;
.vector-user-links-dropdown,&lt;br /&gt;
#p-personal-more,&lt;br /&gt;
.vector-user-menu,&lt;br /&gt;
.mw-portlet-vector-user-menu-overflow,&lt;br /&gt;
#pt-watchlist-2, #pt-watchlist {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Hide original userpage text link */&lt;br /&gt;
#p-vector-user-menu-userpage { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* Hide the right-side person-icon user menu dropdown */&lt;br /&gt;
#vector-user-links-dropdown { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Custom username dropdown ── */&lt;br /&gt;
#gr-user-dropdown {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    font-family: system-ui, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
#gr-user-trigger {&lt;br /&gt;
    display: inline-flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    gap: 6px;&lt;br /&gt;
    background: rgba(255,255,255,0.12);&lt;br /&gt;
    border: none;&lt;br /&gt;
    color: #fff;&lt;br /&gt;
    font-size: 0.9em;&lt;br /&gt;
    font-weight: 500;&lt;br /&gt;
    padding: 6px 12px;&lt;br /&gt;
    border-radius: 6px;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
#gr-user-trigger:hover { background: rgba(255,255,255,0.2); }&lt;br /&gt;
#gr-user-trigger .gr-caret { font-size: 0.7em; opacity: 0.8; }&lt;br /&gt;
&lt;br /&gt;
#gr-user-menu {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: calc(100% + 6px);&lt;br /&gt;
    right: 0;&lt;br /&gt;
    min-width: 180px;&lt;br /&gt;
    background: #fff;&lt;br /&gt;
    border: 1px solid #e0d8d2;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
    box-shadow: 0 6px 24px rgba(0,0,0,0.14);&lt;br /&gt;
    padding: 6px;&lt;br /&gt;
    z-index: 1000;&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
#gr-user-menu.gr-open { display: block; }&lt;br /&gt;
#gr-user-menu a {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    gap: 10px;&lt;br /&gt;
    padding: 10px 12px;&lt;br /&gt;
    color: #2c1810;&lt;br /&gt;
    text-decoration: none;&lt;br /&gt;
    font-size: 0.92em;&lt;br /&gt;
    border-radius: 6px;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
#gr-user-menu a:hover { background: #f7f1ed; }&lt;br /&gt;
.vector-user-links a {&lt;br /&gt;
    color: #1C1A17 !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-user-links-main  {&lt;br /&gt;
 display: none !important;&lt;br /&gt;
}&lt;br /&gt;
.gr-phone-row { margin-bottom: 12px; }&lt;br /&gt;
.gr-phone-label {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
    font-size: 0.875rem;&lt;br /&gt;
    margin-bottom: 6px;&lt;br /&gt;
}&lt;br /&gt;
.gr-phone-inputs {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    gap: 8px;&lt;br /&gt;
    align-items: stretch;&lt;br /&gt;
    height: 48px;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    font-family: &amp;quot;Noto Sans Devanagari&amp;quot;, system-ui, -apple-system, BlinkMacSystemFont, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
.gr-phone-country { width: 101px; border-radius: 12px; padding: 12px; gap: 8px; border: 1px solid #CED4DA;}&lt;br /&gt;
.gr-phone-national { flex: 1; border-radius: 12px; padding: 12px; border: 1px solid #CED4DA;}&lt;br /&gt;
&lt;br /&gt;
/* ── Country trigger button ── */&lt;br /&gt;
.gr-country-trigger {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    gap: 8px;&lt;br /&gt;
    width: 101px;&lt;br /&gt;
    border-radius: 12px;&lt;br /&gt;
    padding: 12px;&lt;br /&gt;
    border: 1px solid #CED4DA;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
    background: #fff;&lt;br /&gt;
}&lt;br /&gt;
.gr-country-trigger:hover { border-color: #72777d; }&lt;br /&gt;
.gr-trigger-flag { font-size: 1.3rem; line-height: 1; }&lt;br /&gt;
.gr-trigger-dial { font-size: 0.9rem; color: #54595d; }&lt;br /&gt;
.gr-trigger-caret { font-size: 0.7rem; color: #54595d; }&lt;br /&gt;
&lt;br /&gt;
/* ── Dropdown ── */&lt;br /&gt;
.gr-country-dropdown {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: calc(100% + 4px); left: 0;&lt;br /&gt;
    z-index: 9999;&lt;br /&gt;
    width: 280px;&lt;br /&gt;
    background: #fff;&lt;br /&gt;
    border: 1px solid #a2a9b1;&lt;br /&gt;
    border-radius: 4px;&lt;br /&gt;
    box-shadow: 0 4px 16px rgba(0,0,0,0.12);&lt;br /&gt;
}&lt;br /&gt;
.gr-country-search {&lt;br /&gt;
    width: 100%; box-sizing: border-box;&lt;br /&gt;
    padding: 8px 12px;&lt;br /&gt;
    border: none; border-bottom: 1px solid #eee;&lt;br /&gt;
    font-size: 0.9rem; outline: none;&lt;br /&gt;
}&lt;br /&gt;
.gr-country-list { max-height: 240px; overflow-y: auto; }&lt;br /&gt;
.gr-country-option {&lt;br /&gt;
    display: flex; align-items: center; gap: 8px;&lt;br /&gt;
    padding: 8px 12px; cursor: pointer; font-size: 0.9rem;&lt;br /&gt;
}&lt;br /&gt;
.gr-country-option:hover { background: #f8f9fa; }&lt;br /&gt;
.gr-country-flag { font-size: 1.2rem; flex-shrink: 0; }&lt;br /&gt;
.gr-country-name { flex: 1; color: #202122; }&lt;br /&gt;
.gr-country-dial { color: #54595d; font-size: 0.85rem; }&lt;br /&gt;
&lt;br /&gt;
.gr-phone-national:focus {&lt;br /&gt;
    outline: none; border-color: #4A433A;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Gadget-GrAnnotations.css&amp;diff=6225</id>
		<title>MediaWiki:Gadget-GrAnnotations.css</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Gadget-GrAnnotations.css&amp;diff=6225"/>
		<updated>2026-06-13T10:13:29Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/*&lt;br /&gt;
 * gr_annotations.css  —  grantha.io inline Notes + Bookmarks + Feedback  (v3)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   1. FLOATING ACTION STRIP  (desktop only)&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
#gra-fab {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  z-index: 10200;&lt;br /&gt;
  display: none;&lt;br /&gt;
  flex-direction: row;&lt;br /&gt;
  background: #B14A2E !important;&lt;br /&gt;
    border: none !important;&lt;br /&gt;
    border-radius: 12px !important;&lt;br /&gt;
    padding: 5px 4px !important;&lt;br /&gt;
    box-shadow: 0 3px 14px rgba(0, 0, 0, 0.08) !important;&lt;br /&gt;
    gap: 20px !important;&lt;br /&gt;
}&lt;br /&gt;
#gra-fab.gra-fab-visible { display: flex; }&lt;br /&gt;
&lt;br /&gt;
.gra-fab-btn {&lt;br /&gt;
  height: 48px;&lt;br /&gt;
  width: 48px;&lt;br /&gt;
  border: none;&lt;br /&gt;
  background: transparent;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  position: relative;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.gra-fab-btn-label {&lt;br /&gt;
 font-family: &#039;Noto Sans Devanagari&#039;;&lt;br /&gt;
font-weight: 400;&lt;br /&gt;
font-size: 10px;&lt;br /&gt;
line-height: 100%;&lt;br /&gt;
letter-spacing: 0%;&lt;br /&gt;
color: #ffffff;&lt;br /&gt;
padding: 5px 0;&lt;br /&gt;
}&lt;br /&gt;
.gra-fab-btn:hover { &lt;br /&gt;
background: rgba(255, 255, 255, 0.12) !important; border-radius: 12px;&lt;br /&gt;
}&lt;br /&gt;
.gra-fab-btn:hover .gra-fab-tooltip { opacity: 1; transform: translateX(0) translateY(-50%); }&lt;br /&gt;
&lt;br /&gt;
.gra-fab-tooltip {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  right: calc(100% + 8px);&lt;br /&gt;
  top: 50%;&lt;br /&gt;
  transform: translateX(4px) translateY(-50%);&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  background: rgba(30,30,30,0.82);&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  padding: 3px 9px;&lt;br /&gt;
  border-radius: 999px;&lt;br /&gt;
  pointer-events: none;&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
  transition: opacity 0.18s, transform 0.18s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   2. RIGHT PANEL&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
#gra-panel {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  right: -360px;&lt;br /&gt;
  width: 340px;&lt;br /&gt;
  height: 100vh;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  box-shadow: -3px 0 20px rgba(0,0,0,0.15);&lt;br /&gt;
  z-index: 10100;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  transition: right 0.28s cubic-bezier(0.4,0,0.2,1);&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
}&lt;br /&gt;
#gra-panel.gra-panel-open { right: 0; }&lt;br /&gt;
&lt;br /&gt;
#gra-backdrop {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  inset: 0;&lt;br /&gt;
  background: rgba(0,0,0,0.18);&lt;br /&gt;
  z-index: 10099;&lt;br /&gt;
  display: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
#gra-backdrop.gra-backdrop-visible { display: block; }&lt;br /&gt;
&lt;br /&gt;
#gra-panel-head {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: space-between;&lt;br /&gt;
  padding: 14px 16px 0;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
#gra-panel-close {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  font-size: 18px;&lt;br /&gt;
  color: #666;&lt;br /&gt;
  padding: 2px 6px;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
#gra-panel-close:hover { background: #f5f5f5; color: #222; }&lt;br /&gt;
&lt;br /&gt;
#gra-tabs {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  border-bottom: 2px solid #f0f0f0;&lt;br /&gt;
  margin: 10px 16px 0;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
.gra-tab {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  padding: 8px 4px;&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  font-family: inherit;&lt;br /&gt;
  color: #777;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  border-bottom: 2px solid transparent;&lt;br /&gt;
  margin-bottom: -2px;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  gap: 6px;&lt;br /&gt;
  transition: color 0.15s, border-color 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-tab .gra-icon { width: 16px; height: 16px; opacity: 0.5; }&lt;br /&gt;
.gra-tab:hover { color: #333; }&lt;br /&gt;
.gra-tab.gra-tab-active { color: #B14A2E; border-bottom-color: #B14A2E; }&lt;br /&gt;
.gra-tab.gra-tab-active .gra-icon {&lt;br /&gt;
  opacity: 1;&lt;br /&gt;
  filter: invert(33%) sepia(52%) saturate(1104%) hue-rotate(333deg) brightness(93%) contrast(90%);}&lt;br /&gt;
&lt;br /&gt;
#gra-panel-body {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  overflow-y: auto;&lt;br /&gt;
  padding: 12px 16px 16px;&lt;br /&gt;
}&lt;br /&gt;
.gra-pane { display: none; }&lt;br /&gt;
.gra-pane.gra-pane-active { display: block; }&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   3. FEEDBACK COMPOSER  — centered modal&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
.gra-composer {&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 12px;&lt;br /&gt;
  box-shadow: 0 8px 40px rgba(0,0,0,0.22);&lt;br /&gt;
  width: 420px;&lt;br /&gt;
  max-width: calc(100vw - 32px);&lt;br /&gt;
  padding: 20px 24px 16px;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  /* Centered on screen */&lt;br /&gt;
  top: 50% !important;&lt;br /&gt;
  left: 50% !important;&lt;br /&gt;
  transform: translate(-50%, -50%) !important;&lt;br /&gt;
  z-index: 10150;&lt;br /&gt;
  display: none;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  gap: 12px;&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
}&lt;br /&gt;
.gra-composer.gra-composer-visible { display: flex; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Feedback composer header row */&lt;br /&gt;
.gra-composer-header {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 8px;&lt;br /&gt;
}&lt;br /&gt;
.gra-composer-header strong {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
  color: #1C1A17;&lt;br /&gt;
  font-size: 16px; &lt;br /&gt;
  font-family: &amp;quot;Noto Sans Devanagari&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
.gra-btn-x {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  font-size: 16px;&lt;br /&gt;
  color: #666;&lt;br /&gt;
  padding: 2px 5px;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
.gra-btn-x:hover { background: #f5f5f5; color: #222; }&lt;br /&gt;
&lt;br /&gt;
/* Feedback field labels */&lt;br /&gt;
.gra-fb-field-label {&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
  color: #5f6368;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  letter-spacing: 0.4px;&lt;br /&gt;
  margin-bottom: -6px;   /* tighten gap to input below */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Selected text quote preview */&lt;br /&gt;
.gra-fb-quote-label {&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  color: #9aa0a6;&lt;br /&gt;
  margin-bottom: -4px;&lt;br /&gt;
}&lt;br /&gt;
.gra-fb-quote {&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #5f6368;&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  background: #fafafa;&lt;br /&gt;
  border-left: 3px solid #fbbc04;&lt;br /&gt;
  border-radius: 0 4px 4px 0;&lt;br /&gt;
  padding: 6px 10px;&lt;br /&gt;
  line-height: 1.45;&lt;br /&gt;
  max-height: 56px;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  display: -webkit-box;&lt;br /&gt;
  -webkit-line-clamp: 3;&lt;br /&gt;
  -webkit-box-orient: vertical;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Issue type dropdown */&lt;br /&gt;
.gra-fb-select {&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  padding: 7px 10px;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  font-family: inherit;&lt;br /&gt;
  color: #202124;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  outline: none;&lt;br /&gt;
  transition: border-color 0.15s;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
.gra-fb-select:focus { border-color: #1a73e8; }&lt;br /&gt;
&lt;br /&gt;
/* Email input */&lt;br /&gt;
.gra-fb-email-input {&lt;br /&gt;
  min-height: unset !important;&lt;br /&gt;
  height: 36px;&lt;br /&gt;
  padding: 6px 10px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Status message */&lt;br /&gt;
.gra-fb-status {&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  min-height: 16px;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
.gra-fb-status.gra-fb-ok  { color: #34a853; }&lt;br /&gt;
.gra-fb-status.gra-fb-err { color: #ea4335; }&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   4. NOTE COMPOSER  (local only)&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
.gra-composer-user {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 10px;&lt;br /&gt;
}&lt;br /&gt;
.gra-avatar {&lt;br /&gt;
  width: 32px;&lt;br /&gt;
  height: 32px;&lt;br /&gt;
  border-radius: 50%;&lt;br /&gt;
  background: #1a73e8;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
.gra-composer-uname { font-weight: 600; color: #202124; font-size: 13px; }&lt;br /&gt;
&lt;br /&gt;
.gra-composer-input {&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  padding: 8px 10px;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  font-family: inherit;&lt;br /&gt;
  resize: none;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
  min-height: 56px;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
  color: #202124;&lt;br /&gt;
  outline: none;&lt;br /&gt;
  transition: border-color 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-composer-input::placeholder { color: #aaa; }&lt;br /&gt;
.gra-composer-input:focus { border-color: #B14A2E; }&lt;br /&gt;
&lt;br /&gt;
.gra-composer-actions {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: flex-end;&lt;br /&gt;
  gap: 8px;&lt;br /&gt;
}&lt;br /&gt;
.gra-btn-cancel {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  color: #5f6368;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  font-family:&amp;quot;Noto Sans Devanagari&amp;quot;;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  padding: 8px 12px;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
}&lt;br /&gt;
.gra-btn-cancel:hover { background: #f5f5f5; }&lt;br /&gt;
.gra-btn-submit {&lt;br /&gt;
  background: transparent;&lt;br /&gt;
  color: #B14A2E;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  font-family:&amp;quot;Noto Sans Devanagari&amp;quot;;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  padding: 8px 12px;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  gap: 8px;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-btn-submit:hover { color: #8A351F; }&lt;br /&gt;
.gra-btn-submit:disabled { opacity: 0.4;&lt;br /&gt;
  cursor: not-allowed; }&lt;br /&gt;
&lt;br /&gt;
/* ── Note cards ── */&lt;br /&gt;
.gra-note-card {&lt;br /&gt;
  border: 1px solid #e8eaed;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 10px 12px;&lt;br /&gt;
  margin-bottom: 10px;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  box-shadow: 0 1px 3px rgba(0,0,0,0.07);&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: box-shadow 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-note-card:hover { box-shadow: 0 2px 8px rgba(0,0,0,0.12); }&lt;br /&gt;
.gra-note-card.gra-card-active {&lt;br /&gt;
  border-color: #34a853;&lt;br /&gt;
  box-shadow: 0 0 0 2px rgba(52,168,83,0.25);&lt;br /&gt;
}&lt;br /&gt;
.gra-card-header {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 8px;&lt;br /&gt;
  margin-bottom: 6px;&lt;br /&gt;
}&lt;br /&gt;
.gra-card-meta { flex: 1; }&lt;br /&gt;
.gra-card-ts { font-size: 11px; color: #80868b; }&lt;br /&gt;
.gra-card-quote {&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #5f6368;&lt;br /&gt;
  border-left: 3px solid #34a853;&lt;br /&gt;
  padding-left: 8px;&lt;br /&gt;
  margin-bottom: 6px;&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  line-height: 1.4;&lt;br /&gt;
  display: -webkit-box;&lt;br /&gt;
  -webkit-line-clamp: 2;&lt;br /&gt;
  -webkit-box-orient: vertical;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
}&lt;br /&gt;
.gra-card-text { font-size: 13px; color: #202124; line-height: 1.5; }&lt;br /&gt;
&lt;br /&gt;
.gra-note-del {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  color: #ccc;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  padding: 0 2px;&lt;br /&gt;
  line-height: 1;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
  margin-left: auto;&lt;br /&gt;
}&lt;br /&gt;
.gra-note-del:hover { color: #e53935; }&lt;br /&gt;
&lt;br /&gt;
.gra-empty-state {&lt;br /&gt;
  color: #9aa0a6;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  padding: 32px 16px;&lt;br /&gt;
  line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   5. BOOKMARK CARDS + COMPOSER&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
.gra-bookmark-card {&lt;br /&gt;
  border: 1px solid #e8eaed;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 10px 12px;&lt;br /&gt;
  margin-bottom: 10px;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  box-shadow: 0 1px 3px rgba(0,0,0,0.07);&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: flex-start;&lt;br /&gt;
  gap: 10px;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: box-shadow 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-bookmark-card:hover { box-shadow: 0 2px 8px rgba(0,0,0,0.12); }&lt;br /&gt;
.gra-bookmark-card .gra-icon { margin-top: 2px; flex-shrink: 0; }&lt;br /&gt;
.gra-bookmark-info { flex: 1; min-width: 0; }&lt;br /&gt;
.gra-bookmark-name {&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
  color: #202124;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  text-overflow: ellipsis;&lt;br /&gt;
}&lt;br /&gt;
.gra-bookmark-quote {&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  color: #80868b;&lt;br /&gt;
  margin-top: 2px;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  text-overflow: ellipsis;&lt;br /&gt;
}&lt;br /&gt;
.gra-bookmark-del {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  color: #ccc;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  padding: 0 2px;&lt;br /&gt;
  line-height: 1;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
.gra-bookmark-del:hover { color: #e53935; }&lt;br /&gt;
&lt;br /&gt;
.gra-bm-composer {&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 12px;&lt;br /&gt;
  box-shadow: 0 8px 40px rgba(0,0,0,0.22);&lt;br /&gt;
  width: 420px;&lt;br /&gt;
  max-width: calc(100vw - 32px);&lt;br /&gt;
  padding: 20px 24px 16px;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  /* Centered on screen — same as feedback composer */&lt;br /&gt;
  top: 50% !important;&lt;br /&gt;
  left: 50% !important;&lt;br /&gt;
  transform: translate(-50%, -50%) !important;&lt;br /&gt;
  z-index: 10150;&lt;br /&gt;
  display: none;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  gap: 10px;&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
}&lt;br /&gt;
.gra-bm-composer.gra-composer-visible { display: flex; }&lt;br /&gt;
.gra-bm-composer-label {&lt;br /&gt;
  color: #1C1A17;&lt;br /&gt;
  font-size: 16px;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 8px;&lt;br /&gt;
}&lt;br /&gt;
.gra-bm-composer-label .gra-icon, .gra-composer-header .gra-icon, .gra-tab .gra-icon, .gra-note-card .gra-icon, .gra-bookmark-card .gra-icon {filter: brightness(0) saturate(100%) invert(7%) sepia(8%) saturate(894%) hue-rotate(357deg) brightness(97%) contrast(92%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   6. ANCHOR HIGHLIGHTS&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
/* Note highlight — green tint */&lt;br /&gt;
.gra-note-highlight {&lt;br /&gt;
  background: rgba(52, 168, 83, 0.18);&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-note-highlight:hover,&lt;br /&gt;
.gra-note-highlight.gra-hl-active {&lt;br /&gt;
  background: rgba(52, 168, 83, 0.4);&lt;br /&gt;
  outline: 1.5px solid #34a853;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Bookmark highlight — blue underline */&lt;br /&gt;
.gra-bookmark-highlight {&lt;br /&gt;
  background: rgba(26, 115, 232, 0.12);&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  border-bottom: 1.5px solid #1a73e8;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-bookmark-highlight:hover { background: rgba(26, 115, 232, 0.22); }&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   7. PERSISTENT TOGGLE BUTTON&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
#gra-toggle {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  bottom: 78px;&lt;br /&gt;
  right: 20px;&lt;br /&gt;
  width: 48px;&lt;br /&gt;
  height: 48px;&lt;br /&gt;
  border-radius: 50%;&lt;br /&gt;
  background: #c0521a;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  z-index: 9998;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  box-shadow: 0 3px 12px rgba(0,0,0,0.22);&lt;br /&gt;
  transition: background 0.15s, transform 0.15s;&lt;br /&gt;
}&lt;br /&gt;
#gra-toggle:hover { background: #a0410e; transform: scale(1.07); }&lt;br /&gt;
#gra-toggle .gra-icon {&lt;br /&gt;
  width: 22px;&lt;br /&gt;
  height: 22px;&lt;br /&gt;
  filter: brightness(0) invert(1);&lt;br /&gt;
}&lt;br /&gt;
#gra-toggle-badge {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  top: -4px;&lt;br /&gt;
  right: -4px;&lt;br /&gt;
  background: #e53935;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-size: 10px;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  min-width: 16px;&lt;br /&gt;
  height: 16px;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 0 4px;&lt;br /&gt;
  line-height: 16px;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  display: none;&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  pointer-events: none;&lt;br /&gt;
}&lt;br /&gt;
#gra-panel.gra-panel-open ~ #gra-toggle {&lt;br /&gt;
  right: 356px;&lt;br /&gt;
  transition: right 0.28s cubic-bezier(0.4,0,0.2,1), background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   MOBILE BOTTOM ACTION BAR&lt;br /&gt;
   Slides up from bottom — avoids clashing with browser copy menu.&lt;br /&gt;
   Large tap targets (56px height buttons) with text labels.&lt;br /&gt;
   Only shown on mobile (JS sets _mobile flag).&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
#gra-mobile-bar {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  bottom: 0;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  right: 0;&lt;br /&gt;
  z-index: 10200;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  transform: translateY(100%);&lt;br /&gt;
  transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);&lt;br /&gt;
  pointer-events: none;&lt;br /&gt;
}&lt;br /&gt;
#gra-mobile-bar.gra-mobile-bar-visible {&lt;br /&gt;
  transform: translateY(0);&lt;br /&gt;
  pointer-events: auto;&lt;br /&gt;
}&lt;br /&gt;
#gra-mobile-bar-inner {&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  border-top: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 16px 16px 0 0;&lt;br /&gt;
  box-shadow: 0 -4px 20px rgba(0,0,0,0.18);&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: stretch;&lt;br /&gt;
  padding-bottom: env(safe-area-inset-bottom, 0px);&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-btn {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  gap: 5px;&lt;br /&gt;
  padding: 14px 8px;&lt;br /&gt;
  min-height: 72px;&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  border-right: 1px solid #f0f0f0;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  color: #444;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  -webkit-tap-highlight-color: rgba(0,0,0,0.06);&lt;br /&gt;
  transition: background 0.12s;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-btn:last-child { border-right: none; }&lt;br /&gt;
.gra-mob-btn:active { background: #f5f5f5; }&lt;br /&gt;
.gra-mob-btn .gra-icon { width: 24px; height: 24px; }&lt;br /&gt;
.gra-mob-label { font-size: 11px; line-height: 1.2; text-align: center; }&lt;br /&gt;
.gra-mob-dismiss { color: #999; }&lt;br /&gt;
.gra-mob-dismiss:active { background: #fff0f0; color: #e53935; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   8. RESPONSIVE&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
@media (max-width: 768px) {&lt;br /&gt;
  #gra-panel { width: 100vw; right: -100vw; }&lt;br /&gt;
  .gra-composer {&lt;br /&gt;
    width: calc(100vw - 32px) !important;&lt;br /&gt;
    max-width: 420px;&lt;br /&gt;
    /* Override centering for note/bookmark on mobile — keep centered */&lt;br /&gt;
    top: 50% !important;&lt;br /&gt;
    left: 50% !important;&lt;br /&gt;
    transform: translate(-50%, -50%) !important;&lt;br /&gt;
  }&lt;br /&gt;
  /* bm-composer already centered via its base CSS */&lt;br /&gt;
}&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   REPLACE the entire additions block at the bottom of&lt;br /&gt;
   MediaWiki:Gadget-GrAnnotations.css with this content.&lt;br /&gt;
&lt;br /&gt;
   FAB stack (right:20px desktop, right:16px mobile):&lt;br /&gt;
     22px   [📚] #se-docnav-btn   docs navigator&lt;br /&gt;
     78px   [↑]  #se-scrolltop    scroll to top&lt;br /&gt;
     134px  [✎]  #gra-toggle      notes panel   ← was wrongly 78px&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
&lt;br /&gt;
/* ── #gra-toggle: sits above both siteNav FABs ─────────────────── */&lt;br /&gt;
#gra-toggle {&lt;br /&gt;
  bottom: 78px !important;&lt;br /&gt;
  right: 20px !important;&lt;br /&gt;
}&lt;br /&gt;
#gra-panel.gra-panel-open ~ #gra-toggle {&lt;br /&gt;
  right: 356px !important;&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 768px) {&lt;br /&gt;
  #gra-toggle {&lt;br /&gt;
    bottom: 78px !important;&lt;br /&gt;
    right: 16px !important;&lt;br /&gt;
    width: 44px !important;&lt;br /&gt;
    height: 44px !important;&lt;br /&gt;
  }&lt;br /&gt;
  #gra-panel.gra-panel-open ~ #gra-toggle {&lt;br /&gt;
    right: calc(100vw + 4px) !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Mobile annotation bar above all Minerva overlays ──────────── */&lt;br /&gt;
#gra-mobile-bar {&lt;br /&gt;
  z-index: 99999 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── CSS custom property fallbacks ─────────────────────────────── */&lt;br /&gt;
/* readerToolbar.js writes these at runtime; these are initial values */&lt;br /&gt;
:root {&lt;br /&gt;
  --gr-header-height: 50px;&lt;br /&gt;
  --gr-bar-h: 48px;&lt;br /&gt;
  --gr-bar-top: 50px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Scroll-margin: TOC anchor links clear the fixed bar ────────── */&lt;br /&gt;
/* Vector: header + bar both fixed */&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h1[id],&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h2[id],&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h3[id],&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h4[id],&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h5[id],&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h6[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h1[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h2[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h3[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h4[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h5[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h6[id] {&lt;br /&gt;
  scroll-margin-top: calc(var(--gr-header-height) + var(--gr-bar-h) + 12px);&lt;br /&gt;
}&lt;br /&gt;
/* Minerva: only bar is fixed once header scrolls away */&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h1[id],&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h2[id],&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h3[id],&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h4[id],&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h5[id],&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h6[id] {&lt;br /&gt;
  scroll-margin-top: calc(var(--gr-bar-h) + 12px);&lt;br /&gt;
}&lt;br /&gt;
#mw-content-text .mw-parser-output &amp;gt; *:first-child {&lt;br /&gt;
  scroll-margin-top: calc(var(--gr-header-height) + var(--gr-bar-h) + 8px);&lt;br /&gt;
}&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output &amp;gt; *:first-child {&lt;br /&gt;
  scroll-margin-top: calc(var(--gr-bar-h) + 8px);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
/* Search icon in FAB using an inline SVG data-URI */&lt;br /&gt;
.gra-icon-search {&lt;br /&gt;
  background-image: url(&amp;quot;data:image/svg+xml,%3Csvg xmlns=&#039;http://www.w3.org/2000/svg&#039; viewBox=&#039;0 0 24 24&#039; fill=&#039;none&#039; stroke=&#039;%23ffffff&#039; stroke-width=&#039;2.2&#039; stroke-linecap=&#039;round&#039; stroke-linejoin=&#039;round&#039;%3E%3Ccircle cx=&#039;11&#039; cy=&#039;11&#039; r=&#039;7&#039;/%3E%3Cline x1=&#039;16.5&#039; y1=&#039;16.5&#039; x2=&#039;22&#039; y2=&#039;22&#039;/%3E%3C/svg%3E&amp;quot;) !important;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   MOBILE BOTTOM BAR — terracotta theme&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
#gra-mobile-bar-inner {&lt;br /&gt;
  background: #b5451b !important;&lt;br /&gt;
  border-top: none !important;&lt;br /&gt;
  border-radius: 16px 16px 0 0 !important;&lt;br /&gt;
  box-shadow: 0 -4px 20px rgba(181,69,27,0.35) !important;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
.gra-mob-btn {&lt;br /&gt;
  color: rgba(255,255,255,0.92) !important;&lt;br /&gt;
  border-right-color: rgba(255,255,255,0.18) !important;&lt;br /&gt;
  min-height: 76px !important;&lt;br /&gt;
  padding: 16px 8px !important;&lt;br /&gt;
  font-size: 12px !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-btn:active {&lt;br /&gt;
  background: rgba(0,0,0,0.12) !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-btn .gra-icon {&lt;br /&gt;
  width: 26px !important;&lt;br /&gt;
  height: 26px !important;&lt;br /&gt;
  filter: brightness(0) invert(1) !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-label {&lt;br /&gt;
  color: rgba(255,255,255,0.88) !important;&lt;br /&gt;
  font-size: 11px !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-dismiss {&lt;br /&gt;
  color: rgba(255,255,255,0.70) !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-dismiss .gra-mob-label {&lt;br /&gt;
  color: rgba(255,255,255,0.60) !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-dismiss span[style] {&lt;br /&gt;
  color: rgba(255,255,255,0.70) !important;&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 767px) {&lt;br /&gt;
&lt;br /&gt;
  /* Bottom sheet — pinned to bottom via inset, animated via transform */&lt;br /&gt;
  #gra-fb-composer.gra-composer,&lt;br /&gt;
  #gra-nt-composer.gra-composer,&lt;br /&gt;
  #gra-bm-composer.gra-bm-composer {&lt;br /&gt;
    position: fixed !important;&lt;br /&gt;
    inset: auto 0 0 0 !important;          /* top:auto right:0 bottom:0 left:0 */&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    max-width: 100% !important;&lt;br /&gt;
    margin: 0 !important;&lt;br /&gt;
    border-radius: 16px 16px 0 0 !important;&lt;br /&gt;
    box-shadow: 0 -4px 24px rgba(0,0,0,0.18) !important;&lt;br /&gt;
    padding: 20px 20px calc(20px + env(safe-area-inset-bottom)) !important;&lt;br /&gt;
    box-sizing: border-box !important;&lt;br /&gt;
    transform: translateY(100%) !important;&lt;br /&gt;
    transition: transform 0.28s cubic-bezier(0.32,0.72,0,1) !important;&lt;br /&gt;
    z-index: 10600 !important;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* Slide up when visible */&lt;br /&gt;
  #gra-fb-composer.gra-composer-visible,&lt;br /&gt;
  #gra-nt-composer.gra-composer-visible,&lt;br /&gt;
  #gra-bm-composer.gra-composer-visible {&lt;br /&gt;
    transform: translateY(0) !important;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* Grab handle */&lt;br /&gt;
  #gra-fb-composer::before,&lt;br /&gt;
  #gra-nt-composer::before,&lt;br /&gt;
  #gra-bm-composer::before {&lt;br /&gt;
    content: &amp;quot;&amp;quot;;&lt;br /&gt;
    display: block;&lt;br /&gt;
    width: 36px; height: 4px;&lt;br /&gt;
    border-radius: 2px;&lt;br /&gt;
    background: #d0d0d0;&lt;br /&gt;
    margin: -6px auto 14px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .gra-composer .gra-composer-input,&lt;br /&gt;
  .gra-bm-composer .gra-composer-input {&lt;br /&gt;
    font-size: 16px !important;   /* no iOS zoom on focus */&lt;br /&gt;
  }&lt;br /&gt;
  .gra-composer-actions { display: flex; gap: 10px; }&lt;br /&gt;
  .gra-composer-actions .gra-btn-submit,&lt;br /&gt;
  .gra-composer-actions .gra-btn-cancel { flex: 1; min-height: 44px; }&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 767px) {&lt;br /&gt;
  /* Docked toolbar below the reader header */&lt;br /&gt;
  #gra-fab.gra-fab-mobile-docked {&lt;br /&gt;
    position: fixed !important;&lt;br /&gt;
    top: var(--gr-toc-top, 99px) !important;  /* sits just below reader toolbar */&lt;br /&gt;
    left: 0 !important;&lt;br /&gt;
    right: 0 !important;&lt;br /&gt;
    height: 52px !important;&lt;br /&gt;
    flex-direction: row !important;&lt;br /&gt;
    align-items: center !important;&lt;br /&gt;
    justify-content: space-around !important;&lt;br /&gt;
    border-radius: 0 !important;&lt;br /&gt;
    box-shadow: 0 2px 8px rgba(0,0,0,0.15) !important;&lt;br /&gt;
    z-index: 2147483646 !important;       /* below native menu, above content */&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #gra-fab.gra-fab-mobile-docked .gra-fab-btn {&lt;br /&gt;
    flex: 1;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    height: 44px;&lt;br /&gt;
    background: transparent !important;&lt;br /&gt;
    touch-action: manipulation;&lt;br /&gt;
    -webkit-tap-highlight-color: transparent;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #gra-fab.gra-fab-mobile-docked .gra-fab-btn-label {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-size: 10px;&lt;br /&gt;
    margin-top: 2px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.js&amp;diff=6224</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.js&amp;diff=6224"/>
		<updated>2026-06-13T10:10:45Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* MediaWiki:Common.js — grantha.io  (v7) */&lt;br /&gt;
&lt;br /&gt;
(function () {&lt;br /&gt;
&lt;br /&gt;
    var LS_SCRIPT_KEY = &#039;grantha_reader_script&#039;;&lt;br /&gt;
    var currentScript = &#039;deva&#039;;&lt;br /&gt;
&lt;br /&gt;
    function devanagariToIAST(text) {&lt;br /&gt;
        var CONSONANTS = {&lt;br /&gt;
            &#039;क&#039;: &#039;k&#039;, &#039;ख&#039;: &#039;kh&#039;, &#039;ग&#039;: &#039;g&#039;, &#039;घ&#039;: &#039;gh&#039;, &#039;ङ&#039;: &#039;ṅ&#039;,&lt;br /&gt;
            &#039;च&#039;: &#039;c&#039;, &#039;छ&#039;: &#039;ch&#039;, &#039;ज&#039;: &#039;j&#039;, &#039;झ&#039;: &#039;jh&#039;, &#039;ञ&#039;: &#039;ñ&#039;,&lt;br /&gt;
            &#039;ट&#039;: &#039;ṭ&#039;, &#039;ठ&#039;: &#039;ṭh&#039;, &#039;ड&#039;: &#039;ḍ&#039;, &#039;ढ&#039;: &#039;ḍh&#039;, &#039;ण&#039;: &#039;ṇ&#039;,&lt;br /&gt;
            &#039;त&#039;: &#039;t&#039;, &#039;थ&#039;: &#039;th&#039;, &#039;द&#039;: &#039;d&#039;, &#039;ध&#039;: &#039;dh&#039;, &#039;न&#039;: &#039;n&#039;,&lt;br /&gt;
            &#039;प&#039;: &#039;p&#039;, &#039;फ&#039;: &#039;ph&#039;, &#039;ब&#039;: &#039;b&#039;, &#039;भ&#039;: &#039;bh&#039;, &#039;म&#039;: &#039;m&#039;,&lt;br /&gt;
            &#039;य&#039;: &#039;y&#039;, &#039;र&#039;: &#039;r&#039;, &#039;ल&#039;: &#039;l&#039;, &#039;ळ&#039;: &#039;ḷ&#039;, &#039;व&#039;: &#039;v&#039;,&lt;br /&gt;
            &#039;श&#039;: &#039;ś&#039;, &#039;ष&#039;: &#039;ṣ&#039;, &#039;स&#039;: &#039;s&#039;, &#039;ह&#039;: &#039;h&#039;&lt;br /&gt;
        };&lt;br /&gt;
        var DIACRITICS = {&lt;br /&gt;
            &#039;ा&#039;: &#039;ā&#039;, &#039;ि&#039;: &#039;i&#039;, &#039;ी&#039;: &#039;ī&#039;, &#039;ु&#039;: &#039;u&#039;, &#039;ू&#039;: &#039;ū&#039;,&lt;br /&gt;
            &#039;ृ&#039;: &#039;ṛ&#039;, &#039;ॄ&#039;: &#039;ṝ&#039;, &#039;े&#039;: &#039;e&#039;, &#039;ै&#039;: &#039;ai&#039;, &#039;ो&#039;: &#039;o&#039;, &#039;ौ&#039;: &#039;au&#039;&lt;br /&gt;
        };&lt;br /&gt;
        var VOWELS = {&lt;br /&gt;
            &#039;अ&#039;: &#039;a&#039;, &#039;आ&#039;: &#039;ā&#039;, &#039;इ&#039;: &#039;i&#039;, &#039;ई&#039;: &#039;ī&#039;, &#039;उ&#039;: &#039;u&#039;, &#039;ऊ&#039;: &#039;ū&#039;,&lt;br /&gt;
            &#039;ऋ&#039;: &#039;ṛ&#039;, &#039;ॠ&#039;: &#039;ṝ&#039;, &#039;ए&#039;: &#039;e&#039;, &#039;ऐ&#039;: &#039;ai&#039;, &#039;ओ&#039;: &#039;o&#039;, &#039;औ&#039;: &#039;au&#039;, &#039;ऽ&#039;: &amp;quot;&#039;&amp;quot;&lt;br /&gt;
        };&lt;br /&gt;
        var MISC = {&lt;br /&gt;
            &#039;ं&#039;: &#039;ṃ&#039;, &#039;ः&#039;: &#039;ḥ&#039;, &#039;ँ&#039;: &#039;m̐&#039;, &#039;ॐ&#039;: &#039;oṃ&#039;,&lt;br /&gt;
            &#039;०&#039;: &#039;0&#039;, &#039;१&#039;: &#039;1&#039;, &#039;२&#039;: &#039;2&#039;, &#039;३&#039;: &#039;3&#039;, &#039;४&#039;: &#039;4&#039;,&lt;br /&gt;
            &#039;५&#039;: &#039;5&#039;, &#039;६&#039;: &#039;6&#039;, &#039;७&#039;: &#039;7&#039;, &#039;८&#039;: &#039;8&#039;, &#039;९&#039;: &#039;9&#039;&lt;br /&gt;
        };&lt;br /&gt;
        var HALANTA = &#039;्&#039;;&lt;br /&gt;
        var chars = Array.from(text);&lt;br /&gt;
        var result = &#039;&#039;;&lt;br /&gt;
        var i = 0;&lt;br /&gt;
        while (i &amp;lt; chars.length) {&lt;br /&gt;
            var ch = chars[i];&lt;br /&gt;
            var next = chars[i + 1];&lt;br /&gt;
            if (CONSONANTS[ch]) {&lt;br /&gt;
                var base = CONSONANTS[ch];&lt;br /&gt;
                if (next === HALANTA) { result += base; i += 2; }&lt;br /&gt;
                else if (DIACRITICS[next]) { result += base + DIACRITICS[next]; i += 2; }&lt;br /&gt;
                else if (next === &#039;ं&#039; || next === &#039;ः&#039;) { result += base + &#039;a&#039; + MISC[next]; i += 2; }&lt;br /&gt;
                else { result += base + &#039;a&#039;; i++; }&lt;br /&gt;
            } else if (VOWELS[ch]) { result += VOWELS[ch]; i++; }&lt;br /&gt;
            else if (DIACRITICS[ch]) { result += DIACRITICS[ch]; i++; }&lt;br /&gt;
            else if (MISC[ch]) { result += MISC[ch]; i++; }&lt;br /&gt;
            else { result += ch; i++; }&lt;br /&gt;
        }&lt;br /&gt;
        return result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var SCRIPT_MAP = {&lt;br /&gt;
        kn: {&lt;br /&gt;
            &#039;अ&#039;: &#039;ಅ&#039;, &#039;आ&#039;: &#039;ಆ&#039;, &#039;इ&#039;: &#039;ಇ&#039;, &#039;ई&#039;: &#039;ಈ&#039;, &#039;उ&#039;: &#039;ಉ&#039;, &#039;ऊ&#039;: &#039;ಊ&#039;, &#039;ऋ&#039;: &#039;ಋ&#039;,&lt;br /&gt;
            &#039;ए&#039;: &#039;ಏ&#039;, &#039;ऐ&#039;: &#039;ಐ&#039;, &#039;ओ&#039;: &#039;ಓ&#039;, &#039;औ&#039;: &#039;ಔ&#039;, &#039;ऽ&#039;: &#039;ಽ&#039;,&lt;br /&gt;
            &#039;क&#039;: &#039;ಕ&#039;, &#039;ख&#039;: &#039;ಖ&#039;, &#039;ग&#039;: &#039;ಗ&#039;, &#039;घ&#039;: &#039;ಘ&#039;, &#039;ङ&#039;: &#039;ಙ&#039;,&lt;br /&gt;
            &#039;च&#039;: &#039;ಚ&#039;, &#039;छ&#039;: &#039;ಛ&#039;, &#039;ज&#039;: &#039;ಜ&#039;, &#039;झ&#039;: &#039;ಝ&#039;, &#039;ञ&#039;: &#039;ಞ&#039;,&lt;br /&gt;
            &#039;ट&#039;: &#039;ಟ&#039;, &#039;ठ&#039;: &#039;ಠ&#039;, &#039;ड&#039;: &#039;ಡ&#039;, &#039;ढ&#039;: &#039;ಢ&#039;, &#039;ण&#039;: &#039;ಣ&#039;,&lt;br /&gt;
            &#039;त&#039;: &#039;ತ&#039;, &#039;थ&#039;: &#039;ಥ&#039;, &#039;द&#039;: &#039;ದ&#039;, &#039;ध&#039;: &#039;ಧ&#039;, &#039;न&#039;: &#039;ನ&#039;,&lt;br /&gt;
            &#039;प&#039;: &#039;ಪ&#039;, &#039;फ&#039;: &#039;ಫ&#039;, &#039;ब&#039;: &#039;ಬ&#039;, &#039;भ&#039;: &#039;ಭ&#039;, &#039;म&#039;: &#039;ಮ&#039;,&lt;br /&gt;
            &#039;य&#039;: &#039;ಯ&#039;, &#039;र&#039;: &#039;ರ&#039;, &#039;ल&#039;: &#039;ಲ&#039;, &#039;व&#039;: &#039;ವ&#039;,&lt;br /&gt;
            &#039;श&#039;: &#039;ಶ&#039;, &#039;ष&#039;: &#039;ಷ&#039;, &#039;स&#039;: &#039;ಸ&#039;, &#039;ह&#039;: &#039;ಹ&#039;,&lt;br /&gt;
            &#039;ा&#039;: &#039;ಾ&#039;, &#039;ि&#039;: &#039;ಿ&#039;, &#039;ी&#039;: &#039;ೀ&#039;, &#039;ु&#039;: &#039;ು&#039;, &#039;ू&#039;: &#039;ೂ&#039;,&lt;br /&gt;
            &#039;ृ&#039;: &#039;ೃ&#039;, &#039;े&#039;: &#039;ೇ&#039;, &#039;ै&#039;: &#039;ೈ&#039;, &#039;ो&#039;: &#039;ೋ&#039;, &#039;ौ&#039;: &#039;ೌ&#039;,&lt;br /&gt;
            &#039;ं&#039;: &#039;ಂ&#039;, &#039;ः&#039;: &#039;ಃ&#039;, &#039;्&#039;: &#039;್&#039;,&lt;br /&gt;
            &#039;०&#039;: &#039;೦&#039;, &#039;१&#039;: &#039;೧&#039;, &#039;२&#039;: &#039;೨&#039;, &#039;३&#039;: &#039;೩&#039;, &#039;४&#039;: &#039;೪&#039;,&lt;br /&gt;
            &#039;५&#039;: &#039;೫&#039;, &#039;६&#039;: &#039;೬&#039;, &#039;७&#039;: &#039;೭&#039;, &#039;८&#039;: &#039;೮&#039;, &#039;९&#039;: &#039;೯&#039;&lt;br /&gt;
        },&lt;br /&gt;
        ta: {&lt;br /&gt;
            &#039;अ&#039;: &#039;அ&#039;, &#039;आ&#039;: &#039;ஆ&#039;, &#039;इ&#039;: &#039;இ&#039;, &#039;ई&#039;: &#039;ஈ&#039;, &#039;उ&#039;: &#039;உ&#039;, &#039;ऊ&#039;: &#039;ஊ&#039;,&lt;br /&gt;
            &#039;ऋ&#039;: &#039;ரு&#039;, &#039;ॠ&#039;: &#039;ரூ&#039;,&lt;br /&gt;
            &#039;ए&#039;: &#039;ஏ&#039;, &#039;ऐ&#039;: &#039;ஐ&#039;, &#039;ओ&#039;: &#039;ஓ&#039;, &#039;औ&#039;: &#039;ஔ&#039;,&lt;br /&gt;
            &#039;क&#039;: &#039;க&#039;, &#039;ख&#039;: &#039;க&#039;, &#039;ग&#039;: &#039;க&#039;, &#039;घ&#039;: &#039;க&#039;, &#039;ङ&#039;: &#039;ங&#039;,&lt;br /&gt;
            &#039;च&#039;: &#039;ச&#039;, &#039;छ&#039;: &#039;ச&#039;, &#039;ज&#039;: &#039;ஜ&#039;, &#039;झ&#039;: &#039;ஜ&#039;, &#039;ञ&#039;: &#039;ஞ&#039;,&lt;br /&gt;
            &#039;ட&#039;: &#039;ட&#039;, &#039;ठ&#039;: &#039;ட&#039;, &#039;ड&#039;: &#039;ட&#039;, &#039;ढ&#039;: &#039;ட&#039;, &#039;ண&#039;: &#039;ண&#039;,&lt;br /&gt;
            &#039;त&#039;: &#039;த&#039;, &#039;थ&#039;: &#039;த&#039;, &#039;द&#039;: &#039;த&#039;, &#039;ध&#039;: &#039;த&#039;, &#039;न&#039;: &#039;ந&#039;,&lt;br /&gt;
            &#039;प&#039;: &#039;ப&#039;, &#039;फ&#039;: &#039;ப&#039;, &#039;ब&#039;: &#039;ப&#039;, &#039;भ&#039;: &#039;ப&#039;, &#039;म&#039;: &#039;ம&#039;,&lt;br /&gt;
            &#039;य&#039;: &#039;ய&#039;, &#039;र&#039;: &#039;ர&#039;, &#039;ल&#039;: &#039;ல&#039;, &#039;ळ&#039;: &#039;ழ&#039;, &#039;व&#039;: &#039;வ&#039;,&lt;br /&gt;
            &#039;श&#039;: &#039;ஶ&#039;, &#039;ष&#039;: &#039;ஷ&#039;, &#039;स&#039;: &#039;ஸ&#039;, &#039;ह&#039;: &#039;ஹ&#039;,&lt;br /&gt;
            &#039;ा&#039;: &#039;ா&#039;, &#039;ि&#039;: &#039;ி&#039;, &#039;ी&#039;: &#039;ீ&#039;, &#039;ु&#039;: &#039;ு&#039;, &#039;ू&#039;: &#039;ூ&#039;,&lt;br /&gt;
            &#039;ृ&#039;: &#039;ு&#039;, &#039;ॄ&#039;: &#039;ூ&#039;,&lt;br /&gt;
            &#039;े&#039;: &#039;ே&#039;, &#039;ை&#039;: &#039;ை&#039;, &#039;ो&#039;: &#039;ோ&#039;, &#039;ौ&#039;: &#039;ௌ&#039;,&lt;br /&gt;
            &#039;ं&#039;: &#039;ம்&#039;, &#039;ः&#039;: &#039;:&#039;, &#039;ँ&#039;: &#039;ம்&#039;, &#039;्&#039;: &#039;்&#039;, &#039;ॐ&#039;: &#039;ௐ&#039;, &#039;ऽ&#039;: &#039;ௗ&#039;,&lt;br /&gt;
            &#039;०&#039;: &#039;0&#039;, &#039;१&#039;: &#039;1&#039;, &#039;२&#039;: &#039;2&#039;, &#039;३&#039;: &#039;3&#039;, &#039;४&#039;: &#039;4&#039;,&lt;br /&gt;
            &#039;५&#039;: &#039;5&#039;, &#039;६&#039;: &#039;6&#039;, &#039;७&#039;: &#039;7&#039;, &#039;८&#039;: &#039;8&#039;, &#039;९&#039;: &#039;9&#039;&lt;br /&gt;
        }&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    var PRE = [&lt;br /&gt;
        [/ङ्क/g, &#039;ंक&#039;], [/ङ्ख/g, &#039;ंख&#039;], [/ङ्ग/g, &#039;ंग&#039;], [/ङ्घ/g, &#039;ंघ&#039;],&lt;br /&gt;
        [/ञ्च/g, &#039;ंच&#039;], [/ञ्ज/g, &#039;ंज&#039;], [/ण्ट/g, &#039;ंट&#039;], [/ण्ड/g, &#039;ंड&#039;],&lt;br /&gt;
        [/न्त/g, &#039;ंत&#039;], [/न्द/g, &#039;ंद&#039;], [/म्ब/g, &#039;ंब&#039;], [/म्भ/g, &#039;ंभ&#039;]&lt;br /&gt;
    ];&lt;br /&gt;
&lt;br /&gt;
    function transliterateText(text, script) {&lt;br /&gt;
        if (script === &#039;en&#039;) return devanagariToIAST(text);&lt;br /&gt;
        var map = SCRIPT_MAP[script];&lt;br /&gt;
        if (!map) return text;&lt;br /&gt;
        var t = text;&lt;br /&gt;
        PRE.forEach(function (p) { t = t.replace(p[0], p[1]); });&lt;br /&gt;
        return Array.from(t).map(function (ch) {&lt;br /&gt;
            return map[ch] !== undefined ? map[ch] : ch;&lt;br /&gt;
        }).join(&#039;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var translatableSpans = [];&lt;br /&gt;
&lt;br /&gt;
    function tagTextNodes() {&lt;br /&gt;
        var content = document.querySelector(&#039;.mw-parser-output&#039;);&lt;br /&gt;
        if (content) {&lt;br /&gt;
            var walker = document.createTreeWalker(content, NodeFilter.SHOW_TEXT);&lt;br /&gt;
            var nodes = [];&lt;br /&gt;
            while (walker.nextNode()) nodes.push(walker.currentNode);&lt;br /&gt;
            nodes.forEach(function (node) {&lt;br /&gt;
                var p = node.parentNode;&lt;br /&gt;
                if (!p) return;&lt;br /&gt;
                if (p.hasAttribute &amp;amp;&amp;amp; p.hasAttribute(&#039;data-deva&#039;)) return;&lt;br /&gt;
                if (p.closest) {&lt;br /&gt;
                    if (p.closest(&#039;.gr-controls&#039;)) return;&lt;br /&gt;
                    if (p.closest(&#039;.mw-editsection&#039;)) return;&lt;br /&gt;
                }&lt;br /&gt;
                var orig = node.textContent;&lt;br /&gt;
                if (!orig.trim()) return;&lt;br /&gt;
                var span = document.createElement(&#039;span&#039;);&lt;br /&gt;
                span.setAttribute(&#039;data-deva&#039;, orig);&lt;br /&gt;
                span.textContent = orig;&lt;br /&gt;
                p.replaceChild(span, node);&lt;br /&gt;
                translatableSpans.push(span);&lt;br /&gt;
            });&lt;br /&gt;
        }&lt;br /&gt;
        document.querySelectorAll(&#039;.vector-toc .vector-toc-text&#039;).forEach(function (span) {&lt;br /&gt;
            if (span.hasAttribute(&#039;data-deva&#039;)) return;&lt;br /&gt;
            var orig = span.textContent;&lt;br /&gt;
            if (!orig.trim()) return;&lt;br /&gt;
            span.setAttribute(&#039;data-deva&#039;, orig);&lt;br /&gt;
            translatableSpans.push(span);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function applyScript(script) {&lt;br /&gt;
        currentScript = script;&lt;br /&gt;
        translatableSpans.forEach(function (span) {&lt;br /&gt;
            if (!span.parentNode) return;&lt;br /&gt;
            var orig = span.getAttribute(&#039;data-deva&#039;);&lt;br /&gt;
            if (!orig) return;&lt;br /&gt;
            span.textContent = (script === &#039;deva&#039;)&lt;br /&gt;
                ? orig&lt;br /&gt;
                : transliterateText(orig, script);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function _isNoTocPage() {&lt;br /&gt;
        var pn = (window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get(&#039;wgPageName&#039;)) || &#039;&#039;;&lt;br /&gt;
        return pn === &#039;Main_Page&#039; || /^[A-Za-z0-9_]+:About$/.test(pn);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function renameTocTitle() {&lt;br /&gt;
        if (_isNoTocPage()) return;&lt;br /&gt;
        var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
        if (!toc) return;&lt;br /&gt;
        var titleEl = toc.querySelector(&#039;.vector-toc-title&#039;) || toc.querySelector(&#039;.vector-pinnable-header-label&#039;);&lt;br /&gt;
        if (!titleEl) return;&lt;br /&gt;
        var LABEL = &#039;विषयसूची&#039;;&lt;br /&gt;
        var span = titleEl.querySelector(&#039;.gr-toc-title&#039;);&lt;br /&gt;
        if (!span) {&lt;br /&gt;
            titleEl.innerHTML = &#039;&#039;;&lt;br /&gt;
            span = document.createElement(&#039;span&#039;);&lt;br /&gt;
            span.className = &#039;gr-toc-title&#039;;&lt;br /&gt;
            span.setAttribute(&#039;data-deva&#039;, LABEL);&lt;br /&gt;
            titleEl.appendChild(span);&lt;br /&gt;
            translatableSpans.push(span);&lt;br /&gt;
        }&lt;br /&gt;
        span.textContent = currentScript === &#039;deva&#039; ? LABEL : transliterateText(LABEL, currentScript);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function removeTocBeginning() {&lt;br /&gt;
        if (_isNoTocPage()) return;&lt;br /&gt;
        var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
        if (!toc) return;&lt;br /&gt;
        var el = toc.querySelector(&#039;#vector-toc-beginning&#039;);&lt;br /&gt;
        if (!el) {&lt;br /&gt;
            var items = toc.querySelectorAll(&#039;.vector-toc-list-item&#039;);&lt;br /&gt;
            for (var i = 0; i &amp;lt; items.length; i++) {&lt;br /&gt;
                var a = items[i].querySelector(&#039;a&#039;);&lt;br /&gt;
                if (a) {&lt;br /&gt;
                    var href = a.getAttribute(&#039;href&#039;) || &#039;&#039;;&lt;br /&gt;
                    if (href.indexOf(&#039;#&#039;) === -1) { el = items[i]; break; }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        if (el &amp;amp;&amp;amp; el.parentNode) el.parentNode.removeChild(el);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function expandTocSections() {&lt;br /&gt;
        if (_isNoTocPage()) return;&lt;br /&gt;
        var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
        if (!toc) return;&lt;br /&gt;
        toc.querySelectorAll(&#039;.vector-toc-list-item-collapsed&#039;).forEach(function (li) {&lt;br /&gt;
            li.classList.remove(&#039;vector-toc-list-item-collapsed&#039;);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function injectTocDocNav() {&lt;br /&gt;
        if (_isNoTocPage()) return;&lt;br /&gt;
        var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
        if (!toc) return;&lt;br /&gt;
        if (document.getElementById(&#039;gr-toc-doc-nav&#039;)) return;&lt;br /&gt;
        var artPath = (window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get(&#039;wgArticlePath&#039;)) || &#039;/wiki/$1&#039;;&lt;br /&gt;
        var pageTitle = (window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get(&#039;wgPageName&#039;)) || &#039;&#039;;&lt;br /&gt;
        var teekaPage = document.querySelector(&#039;.gr-teeka-page&#039;);&lt;br /&gt;
        var primarySlug = teekaPage ? (teekaPage.getAttribute(&#039;data-primary&#039;) || &#039;&#039;) : &#039;&#039;;&lt;br /&gt;
        if (!primarySlug) { primarySlug = pageTitle.split(&#039;/&#039;)[0]; }&lt;br /&gt;
        if (!primarySlug) return;&lt;br /&gt;
        function wikiUrl(slug) {&lt;br /&gt;
            if (window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl) return mw.util.getUrl(slug);&lt;br /&gt;
            return artPath.replace(&#039;$1&#039;, encodeURIComponent(slug).replace(/%2F/g, &#039;/&#039;));&lt;br /&gt;
        }&lt;br /&gt;
        var docTitleEl = document.querySelector(&#039;.gr-doc-title&#039;);&lt;br /&gt;
        var hasMoolaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute(&#039;data-has-moola&#039;) === &#039;1&#039;;&lt;br /&gt;
        var hasUllekhaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute(&#039;data-has-ullekha&#039;) === &#039;1&#039;;&lt;br /&gt;
        var showMoolaPage = !teekaPage &amp;amp;&amp;amp; hasMoolaPage;&lt;br /&gt;
        var showMoolaBack = !!teekaPage;&lt;br /&gt;
        var showUllekha = hasUllekhaPage || !!teekaPage;&lt;br /&gt;
        if (!showMoolaPage &amp;amp;&amp;amp; !showMoolaBack &amp;amp;&amp;amp; !showUllekha) return;&lt;br /&gt;
        var nav = document.createElement(&#039;div&#039;);&lt;br /&gt;
        nav.id = &#039;gr-toc-doc-nav&#039;;&lt;br /&gt;
        nav.setAttribute(&#039;class&#039;, &#039;toc-main-links&#039;);&lt;br /&gt;
        function makeBtn(href, label) {&lt;br /&gt;
            var a = document.createElement(&#039;a&#039;);&lt;br /&gt;
            a.href = href;&lt;br /&gt;
            a.setAttribute(&#039;class&#039;, &#039;toc-main-link-item&#039;);&lt;br /&gt;
            var lspan = document.createElement(&#039;span&#039;);&lt;br /&gt;
            lspan.setAttribute(&#039;data-deva&#039;, label);&lt;br /&gt;
            lspan.textContent = (currentScript &amp;amp;&amp;amp; currentScript !== &#039;deva&#039;) ? transliterateText(label, currentScript) : label;&lt;br /&gt;
            translatableSpans.push(lspan);&lt;br /&gt;
            a.appendChild(lspan);&lt;br /&gt;
            a.addEventListener(&#039;mouseover&#039;, function () { this.style.opacity = &#039;0.72&#039;; });&lt;br /&gt;
            a.addEventListener(&#039;mouseout&#039;, function () { this.style.opacity = &#039;1&#039;; });&lt;br /&gt;
            return a;&lt;br /&gt;
        }&lt;br /&gt;
        if (showMoolaPage) nav.appendChild(makeBtn(wikiUrl(primarySlug + &#039;/Moola&#039;), &#039;मूलम्&#039;));&lt;br /&gt;
        if (showMoolaBack) nav.appendChild(makeBtn(wikiUrl(primarySlug), &#039;मूल&#039;));&lt;br /&gt;
        if (showUllekha) nav.appendChild(makeBtn(wikiUrl(primarySlug + &#039;/Ullekha&#039;), &#039;उल्लेख&#039;));&lt;br /&gt;
        var tocContents = toc.querySelector(&#039;.vector-toc-contents&#039;);&lt;br /&gt;
        if (tocContents) toc.insertBefore(nav, tocContents);&lt;br /&gt;
        else toc.appendChild(nav);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var _headingObserver = null;&lt;br /&gt;
&lt;br /&gt;
    function attachHeadingObserver() {&lt;br /&gt;
        if (_isNoTocPage()) return;&lt;br /&gt;
        if (_headingObserver) return;&lt;br /&gt;
        if (!window.IntersectionObserver) return;&lt;br /&gt;
        var ACTIVE_COLOR = &#039;#f57c00&#039;;&lt;br /&gt;
        var _activeId = null;&lt;br /&gt;
        var content = document.querySelector(&#039;.mw-parser-output&#039;);&lt;br /&gt;
        if (!content) return;&lt;br /&gt;
        var headings = Array.from(content.querySelectorAll(&#039;h1[id],h2[id],h3[id],h4[id],h5[id],h6[id]&#039;));&lt;br /&gt;
        if (!headings.length) return;&lt;br /&gt;
        var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
        if (!toc) return;&lt;br /&gt;
        function getTocLink(id) { return toc.querySelector(&#039;a[href=&amp;quot;#&#039; + CSS.escape(id) + &#039;&amp;quot;]&#039;); }&lt;br /&gt;
        function getTocLi(id) { var a = getTocLink(id); return a ? a.closest(&#039;.vector-toc-list-item&#039;) : null; }&lt;br /&gt;
        function clearActive() {&lt;br /&gt;
            toc.querySelectorAll(&#039;.vector-toc-list-item&#039;).forEach(function (li) {&lt;br /&gt;
                li.classList.remove(&#039;vector-toc-list-item-active&#039;);&lt;br /&gt;
                var lnk = li.querySelector(&#039;.vector-toc-link&#039;);&lt;br /&gt;
                if (!lnk) return;&lt;br /&gt;
                lnk.style.removeProperty(&#039;color&#039;);&lt;br /&gt;
                lnk.style.setProperty(&#039;font-weight&#039;, &#039;400&#039;, &#039;important&#039;);&lt;br /&gt;
                lnk.querySelectorAll(&#039;*&#039;).forEach(function (el) { el.style.removeProperty(&#039;color&#039;); el.style.setProperty(&#039;font-weight&#039;, &#039;400&#039;, &#039;important&#039;); });&lt;br /&gt;
            });&lt;br /&gt;
        }&lt;br /&gt;
        function setActive(id) {&lt;br /&gt;
            if (_activeId === id) return;&lt;br /&gt;
            _activeId = id;&lt;br /&gt;
            clearActive();&lt;br /&gt;
            if (!id) return;&lt;br /&gt;
            var li = getTocLi(id);&lt;br /&gt;
            if (!li) return;&lt;br /&gt;
            li.classList.add(&#039;vector-toc-list-item-active&#039;);&lt;br /&gt;
            var hasActiveChild = !!li.querySelector(&#039;.vector-toc-list-item .vector-toc-list-item-active&#039;);&lt;br /&gt;
            if (!hasActiveChild) {&lt;br /&gt;
                var lnk = li.querySelector(&#039;.vector-toc-link&#039;);&lt;br /&gt;
                if (lnk) {&lt;br /&gt;
                    lnk.style.setProperty(&#039;color&#039;, ACTIVE_COLOR, &#039;important&#039;);&lt;br /&gt;
                    lnk.style.setProperty(&#039;font-weight&#039;, &#039;700&#039;, &#039;important&#039;);&lt;br /&gt;
                    lnk.querySelectorAll(&#039;*&#039;).forEach(function (el) { el.style.setProperty(&#039;color&#039;, ACTIVE_COLOR, &#039;important&#039;); el.style.setProperty(&#039;font-weight&#039;, &#039;700&#039;, &#039;important&#039;); });&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            var anc = li.parentNode;&lt;br /&gt;
            while (anc &amp;amp;&amp;amp; anc !== toc) {&lt;br /&gt;
                if (anc.classList) anc.classList.remove(&#039;vector-toc-list-item-collapsed&#039;);&lt;br /&gt;
                if (anc.tagName === &#039;UL&#039; || anc.tagName === &#039;LI&#039;) anc.style.removeProperty(&#039;display&#039;);&lt;br /&gt;
                anc = anc.parentNode;&lt;br /&gt;
            }&lt;br /&gt;
            var sticky = document.querySelector(&#039;.vector-sticky-pinned-container&#039;);&lt;br /&gt;
            var scrollEl = sticky || toc;&lt;br /&gt;
            if (scrollEl.scrollHeight &amp;gt; scrollEl.clientHeight) {&lt;br /&gt;
                var lr = li.getBoundingClientRect();&lt;br /&gt;
                var cr = scrollEl.getBoundingClientRect();&lt;br /&gt;
                if (lr.top &amp;lt; cr.top + 8 || lr.bottom &amp;gt; cr.bottom - 8) {&lt;br /&gt;
                    scrollEl.scrollTop += lr.top - cr.top - scrollEl.clientHeight / 2 + li.offsetHeight / 2;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        var _visible = new Set();&lt;br /&gt;
        _headingObserver = new IntersectionObserver(function (entries) {&lt;br /&gt;
            entries.forEach(function (entry) {&lt;br /&gt;
                if (entry.isIntersecting) _visible.add(entry.target.id);&lt;br /&gt;
                else _visible.delete(entry.target.id);&lt;br /&gt;
            });&lt;br /&gt;
            var topId = null, topY = Infinity;&lt;br /&gt;
            _visible.forEach(function (id) {&lt;br /&gt;
                var el = document.getElementById(id);&lt;br /&gt;
                if (el) { var y = el.getBoundingClientRect().top; if (y &amp;gt;= 0 &amp;amp;&amp;amp; y &amp;lt; topY) { topY = y; topId = id; } }&lt;br /&gt;
            });&lt;br /&gt;
            if (!topId) {&lt;br /&gt;
                var bestY = -Infinity;&lt;br /&gt;
                headings.forEach(function (h) { var y = h.getBoundingClientRect().top; if (y &amp;lt; 0 &amp;amp;&amp;amp; y &amp;gt; bestY) { bestY = y; topId = h.id; } });&lt;br /&gt;
            }&lt;br /&gt;
            setActive(topId || null);&lt;br /&gt;
        }, { rootMargin: &#039;-60px 0px -65% 0px&#039;, threshold: 0 });&lt;br /&gt;
        headings.forEach(function (h) { _headingObserver.observe(h); });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function setupToc() {&lt;br /&gt;
        if (_isNoTocPage()) return;&lt;br /&gt;
        var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
        if (!toc) return;&lt;br /&gt;
        removeTocBeginning();&lt;br /&gt;
        renameTocTitle();&lt;br /&gt;
        expandTocSections();&lt;br /&gt;
        injectTocDocNav();&lt;br /&gt;
        attachHeadingObserver();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function init() {&lt;br /&gt;
        var HIDE_IDS = [&#039;vector-appearance&#039;, &#039;vector-appearance-pinned-container&#039;, &#039;vector-appearance-unpinned-container&#039;];&lt;br /&gt;
        function removeHiddenEls() {&lt;br /&gt;
            HIDE_IDS.forEach(function (id) { var el = document.getElementById(id); if (el &amp;amp;&amp;amp; el.parentNode) el.parentNode.removeChild(el); });&lt;br /&gt;
            var pt = document.getElementById(&#039;vector-page-tools&#039;) || document.querySelector(&#039;.vector-page-tools-pinned-container&#039;);&lt;br /&gt;
            if (pt) pt.querySelectorAll(&#039;[aria-controls=&amp;quot;vector-appearance&amp;quot;]&#039;).forEach(function (el) { if (el.parentNode) el.parentNode.removeChild(el); });&lt;br /&gt;
        }&lt;br /&gt;
        removeHiddenEls();&lt;br /&gt;
        (function detectTeekaMode() {&lt;br /&gt;
            var tp = document.querySelector(&#039;.gr-teeka-page&#039;);&lt;br /&gt;
            if (!tp) return;&lt;br /&gt;
            var primary = tp.getAttribute(&#039;data-primary&#039;) || &#039;&#039;;&lt;br /&gt;
            var artPath = (window.mw &amp;amp;&amp;amp; mw.config.get(&#039;wgArticlePath&#039;)) || &#039;/wiki/$1&#039;;&lt;br /&gt;
            var mainUrl = artPath.replace(&#039;$1&#039;, primary);&lt;br /&gt;
            var refParam = window.location.search.match(/[?&amp;amp;]ref=([01])/);&lt;br /&gt;
            if (refParam) { document.body.classList.add(refParam[1] === &#039;1&#039; ? &#039;gr-ref-mode&#039; : &#039;gr-standalone&#039;); return; }&lt;br /&gt;
            var ref = document.referrer || &#039;&#039;;&lt;br /&gt;
            document.body.classList.add((ref &amp;amp;&amp;amp; primary &amp;amp;&amp;amp; ref.indexOf(mainUrl) !== -1) ? &#039;gr-ref-mode&#039; : &#039;gr-standalone&#039;);&lt;br /&gt;
        }());&lt;br /&gt;
        if (window.MutationObserver) {&lt;br /&gt;
            var hideObs = new MutationObserver(function (mutations) {&lt;br /&gt;
                var dirty = false;&lt;br /&gt;
                mutations.forEach(function (m) { if (m.addedNodes.length) dirty = true; });&lt;br /&gt;
                if (dirty) removeHiddenEls();&lt;br /&gt;
            });&lt;br /&gt;
            hideObs.observe(document.body, { childList: true, subtree: false });&lt;br /&gt;
            setTimeout(function () { hideObs.disconnect(); }, 6000);&lt;br /&gt;
        }&lt;br /&gt;
        var content = document.querySelector(&#039;.mw-parser-output&#039;);&lt;br /&gt;
        var alreadyTagged = content &amp;amp;&amp;amp; content.querySelector(&#039;[data-deva]&#039;);&lt;br /&gt;
        if (!alreadyTagged) { translatableSpans = []; tagTextNodes(); }&lt;br /&gt;
        else {&lt;br /&gt;
            document.querySelectorAll(&#039;.vector-toc .vector-toc-text:not([data-deva])&#039;).forEach(function (span) {&lt;br /&gt;
                var orig = span.textContent; if (!orig.trim()) return;&lt;br /&gt;
                span.setAttribute(&#039;data-deva&#039;, orig); translatableSpans.push(span);&lt;br /&gt;
            });&lt;br /&gt;
        }&lt;br /&gt;
        var saved = (function () { try { return localStorage.getItem(LS_SCRIPT_KEY); } catch (e) { return null; } }());&lt;br /&gt;
        if (saved &amp;amp;&amp;amp; saved !== &#039;deva&#039;) { applyScript(saved); } else { currentScript = &#039;deva&#039;; }&lt;br /&gt;
        setTimeout(setupToc, 200);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    window.addEventListener(&#039;gr-script-change&#039;, function (e) {&lt;br /&gt;
        var script = e &amp;amp;&amp;amp; e.detail &amp;amp;&amp;amp; e.detail.script;&lt;br /&gt;
        if (script) applyScript(script);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    window.addEventListener(&#039;gr-new-content&#039;, function (e) {&lt;br /&gt;
        var container = e &amp;amp;&amp;amp; e.detail &amp;amp;&amp;amp; e.detail.container;&lt;br /&gt;
        if (!container) return;&lt;br /&gt;
        var walker = document.createTreeWalker(container, NodeFilter.SHOW_TEXT);&lt;br /&gt;
        var nodes = [];&lt;br /&gt;
        while (walker.nextNode()) nodes.push(walker.currentNode);&lt;br /&gt;
        nodes.forEach(function (node) {&lt;br /&gt;
            var p = node.parentNode;&lt;br /&gt;
            if (!p || (p.hasAttribute &amp;amp;&amp;amp; p.hasAttribute(&#039;data-deva&#039;))) return;&lt;br /&gt;
            var orig = node.textContent;&lt;br /&gt;
            if (!orig.trim()) return;&lt;br /&gt;
            var span = document.createElement(&#039;span&#039;);&lt;br /&gt;
            span.setAttribute(&#039;data-deva&#039;, orig);&lt;br /&gt;
            span.textContent = currentScript !== &#039;deva&#039; ? transliterateText(orig, currentScript) : orig;&lt;br /&gt;
            p.replaceChild(span, node);&lt;br /&gt;
            translatableSpans.push(span);&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    try {&lt;br /&gt;
        var _grBC = new BroadcastChannel(&#039;gr-script&#039;);&lt;br /&gt;
        _grBC.onmessage = function (e) {&lt;br /&gt;
            var script = e &amp;amp;&amp;amp; e.data &amp;amp;&amp;amp; e.data.script;&lt;br /&gt;
            if (script) { currentScript = script; var sel = document.querySelector(&#039;.gr-script-sel&#039;); if (sel) sel.value = script; applyScript(script); }&lt;br /&gt;
        };&lt;br /&gt;
    } catch (e) { }&lt;br /&gt;
&lt;br /&gt;
    if (window.mw) {&lt;br /&gt;
        mw.hook(&#039;wikipage.content&#039;).add(function () {&lt;br /&gt;
            setTimeout(function () {&lt;br /&gt;
                var content = document.querySelector(&#039;.mw-parser-output&#039;);&lt;br /&gt;
                var alreadyTagged = content &amp;amp;&amp;amp; content.querySelector(&#039;[data-deva]&#039;);&lt;br /&gt;
                if (!alreadyTagged) { translatableSpans = []; tagTextNodes(); }&lt;br /&gt;
                else {&lt;br /&gt;
                    document.querySelectorAll(&#039;.vector-toc .vector-toc-text:not([data-deva])&#039;).forEach(function (span) {&lt;br /&gt;
                        var orig = span.textContent; if (!orig.trim()) return;&lt;br /&gt;
                        span.setAttribute(&#039;data-deva&#039;, orig); translatableSpans.push(span);&lt;br /&gt;
                    });&lt;br /&gt;
                }&lt;br /&gt;
                if (currentScript !== &#039;deva&#039;) applyScript(currentScript);&lt;br /&gt;
                setupToc();&lt;br /&gt;
            }, 150);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) { document.addEventListener(&#039;DOMContentLoaded&#039;, init); }&lt;br /&gt;
    else { init(); }&lt;br /&gt;
&lt;br /&gt;
}());   /* ← end of main IIFE */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Inject &amp;quot;Help&amp;quot; and &amp;quot;About&amp;quot; links into the header ─────────────────&lt;br /&gt;
(function () {&lt;br /&gt;
    function wikiHref(title) {&lt;br /&gt;
        if (window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl) return mw.util.getUrl(title);&lt;br /&gt;
        var ap = (window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get(&#039;wgArticlePath&#039;)) || &#039;/wiki/$1&#039;;&lt;br /&gt;
        return ap.replace(&#039;$1&#039;, title);&lt;br /&gt;
    }&lt;br /&gt;
    var linkStyle = [&#039;color:rgba(255,255,255,0.88)&#039;, &#039;font-size:0.88em&#039;, &#039;font-family:system-ui,sans-serif&#039;, &#039;font-weight:500&#039;, &#039;text-decoration:none&#039;, &#039;padding:4px 10px&#039;, &#039;border-radius:4px&#039;, &#039;margin-right:4px&#039;, &#039;transition:color 0.15s,background 0.15s&#039;, &#039;white-space:nowrap&#039;].join(&#039;;&#039;);&lt;br /&gt;
    function makeHeaderLink(id, href, label) {&lt;br /&gt;
        var a = document.createElement(&#039;a&#039;);&lt;br /&gt;
        a.id = id; a.href = href; a.textContent = label; a.style.cssText = linkStyle;&lt;br /&gt;
        a.addEventListener(&#039;mouseover&#039;, function () { this.style.color = &#039;#fff&#039;; this.style.background = &#039;rgba(255,255,255,0.12)&#039;; });&lt;br /&gt;
        a.addEventListener(&#039;mouseout&#039;, function () { this.style.color = &#039;rgba(255,255,255,0.88)&#039;; this.style.background = &#039;transparent&#039;; });&lt;br /&gt;
        return a;&lt;br /&gt;
    }&lt;br /&gt;
    function injectHeaderLinks() {&lt;br /&gt;
        if (document.getElementById(&#039;gr-about-link&#039;)) return;&lt;br /&gt;
        var headerEnd = document.querySelector(&#039;.vector-header-end&#039;) || document.querySelector(&#039;#vector-user-links&#039;) || document.querySelector(&#039;.mw-header&#039;);&lt;br /&gt;
        if (!headerEnd) return;&lt;br /&gt;
        var helpLink = makeHeaderLink(&#039;gr-help-link&#039;, wikiHref(&#039;My_wiki:Help&#039;), &#039;Help&#039;);&lt;br /&gt;
        var aboutLink = makeHeaderLink(&#039;gr-about-link&#039;, wikiHref(&#039;My_wiki:About&#039;), &#039;About&#039;);&lt;br /&gt;
&lt;br /&gt;
        var userName = window.mw ? mw.config.get(&#039;wgUserName&#039;) : null;&lt;br /&gt;
        var isAnon = !userName || (window.mw &amp;amp;&amp;amp; mw.config.get(&#039;wgUserId&#039;) === null);&lt;br /&gt;
&lt;br /&gt;
        // Build the trailing auth element (Login link for anon, dropdown for logged-in)&lt;br /&gt;
        var authEl = null;&lt;br /&gt;
        if (isAnon) {&lt;br /&gt;
            if (!document.getElementById(&#039;gr-header-login&#039;)) {&lt;br /&gt;
                authEl = makeHeaderLink(&#039;gr-header-login&#039;, wikiHref(&#039;Special:UserLogin&#039;), &#039;Login&#039;);&lt;br /&gt;
            }&lt;br /&gt;
        } else if (!document.getElementById(&#039;gr-header-user&#039;)) {&lt;br /&gt;
            authEl = buildHeaderUserDropdown(userName);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var ul = document.querySelector(&#039;.vector-user-links&#039;) || document.querySelector(&#039;#pt-userpage&#039;);&lt;br /&gt;
        if (ul &amp;amp;&amp;amp; ul.parentNode === headerEnd) {&lt;br /&gt;
            if (authEl) headerEnd.insertBefore(authEl, ul);&lt;br /&gt;
            headerEnd.insertBefore(aboutLink, authEl || ul);&lt;br /&gt;
            headerEnd.insertBefore(helpLink, aboutLink);&lt;br /&gt;
        } else {&lt;br /&gt;
            headerEnd.appendChild(helpLink);&lt;br /&gt;
            headerEnd.appendChild(aboutLink);&lt;br /&gt;
            if (authEl) headerEnd.appendChild(authEl);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function buildHeaderUserDropdown(userName) {&lt;br /&gt;
        var wrap = document.createElement(&#039;div&#039;);&lt;br /&gt;
        wrap.id = &#039;gr-header-user&#039;;&lt;br /&gt;
        wrap.style.cssText = &#039;position:relative;display:inline-block;margin-right:4px;&#039;;&lt;br /&gt;
&lt;br /&gt;
        var trigger = document.createElement(&#039;button&#039;);&lt;br /&gt;
        trigger.id = &#039;gr-header-user-trigger&#039;;&lt;br /&gt;
        trigger.type = &#039;button&#039;;&lt;br /&gt;
        trigger.setAttribute(&#039;aria-haspopup&#039;, &#039;true&#039;);&lt;br /&gt;
        trigger.setAttribute(&#039;aria-expanded&#039;, &#039;false&#039;);&lt;br /&gt;
        trigger.style.cssText = [&lt;br /&gt;
            &#039;display:inline-flex&#039;, &#039;align-items:center&#039;, &#039;gap:5px&#039;,&lt;br /&gt;
            &#039;color:rgba(255,255,255,0.88)&#039;, &#039;font-size:0.88em&#039;,&lt;br /&gt;
            &#039;font-family:system-ui,sans-serif&#039;, &#039;font-weight:500&#039;,&lt;br /&gt;
            &#039;background:transparent&#039;, &#039;border:none&#039;, &#039;cursor:pointer&#039;,&lt;br /&gt;
            &#039;padding:4px 10px&#039;, &#039;border-radius:4px&#039;, &#039;white-space:nowrap&#039;,&lt;br /&gt;
            &#039;transition:color 0.15s,background 0.15s&#039;&lt;br /&gt;
        ].join(&#039;;&#039;);&lt;br /&gt;
        trigger.innerHTML =&lt;br /&gt;
            &#039;&amp;lt;span&amp;gt;&#039; + userName.replace(/&amp;lt;/g, &#039;&amp;amp;lt;&#039;) + &#039;&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
            &#039;&amp;lt;span id=&amp;quot;gr-header-caret&amp;quot; style=&amp;quot;font-size:0.8em;transition:transform 0.2s;&amp;quot;&amp;gt;\u25be&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
        trigger.addEventListener(&#039;mouseover&#039;, function () { this.style.color = &#039;#fff&#039;; this.style.background = &#039;rgba(255,255,255,0.12)&#039;; });&lt;br /&gt;
        trigger.addEventListener(&#039;mouseout&#039;, function () { if (menu.style.display === &#039;none&#039;) { this.style.color = &#039;rgba(255,255,255,0.88)&#039;; this.style.background = &#039;transparent&#039;; } });&lt;br /&gt;
&lt;br /&gt;
        var menu = document.createElement(&#039;div&#039;);&lt;br /&gt;
        menu.id = &#039;gr-header-user-menu&#039;;&lt;br /&gt;
        menu.setAttribute(&#039;role&#039;, &#039;menu&#039;);&lt;br /&gt;
        menu.style.cssText = [&lt;br /&gt;
            &#039;display:none&#039;, &#039;position:absolute&#039;, &#039;top:100%&#039;, &#039;right:0&#039;, &#039;margin-top:4px&#039;,&lt;br /&gt;
            &#039;min-width:150px&#039;, &#039;background:#fff&#039;, &#039;border-radius:6px&#039;,&lt;br /&gt;
            &#039;box-shadow:0 4px 16px rgba(0,0,0,0.18)&#039;, &#039;overflow:hidden&#039;, &#039;z-index:1000&#039;&lt;br /&gt;
        ].join(&#039;;&#039;);&lt;br /&gt;
&lt;br /&gt;
        var itemStyle = &#039;display:block;padding:10px 16px;font-size:0.9em;color:#2c1810;text-decoration:none;font-family:system-ui,sans-serif;background:#fff;&#039;;&lt;br /&gt;
        function makeMenuItem(href, label, id) {&lt;br /&gt;
            var a = document.createElement(&#039;a&#039;);&lt;br /&gt;
            a.href = href; a.setAttribute(&#039;role&#039;, &#039;menuitem&#039;);&lt;br /&gt;
            a.textContent = label; a.style.cssText = itemStyle;&lt;br /&gt;
            if (id) a.id = id;&lt;br /&gt;
            a.addEventListener(&#039;mouseover&#039;, function () { this.style.background = &#039;#f5efe9&#039;; });&lt;br /&gt;
            a.addEventListener(&#039;mouseout&#039;, function () { this.style.background = &#039;#fff&#039;; });&lt;br /&gt;
            return a;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        menu.appendChild(makeMenuItem(wikiHref(&#039;Special:Profile&#039;), &#039;Profile&#039;));&lt;br /&gt;
        menu.appendChild(makeMenuItem(&#039;#&#039;, &#039;Log out&#039;, &#039;gr-header-logout&#039;));&lt;br /&gt;
&lt;br /&gt;
        function setOpen(open) {&lt;br /&gt;
            menu.style.display = open ? &#039;block&#039; : &#039;none&#039;;&lt;br /&gt;
            trigger.setAttribute(&#039;aria-expanded&#039;, open ? &#039;true&#039; : &#039;false&#039;);&lt;br /&gt;
            var caret = document.getElementById(&#039;gr-header-caret&#039;);&lt;br /&gt;
            if (caret) caret.style.transform = open ? &#039;rotate(180deg)&#039; : &#039;&#039;;&lt;br /&gt;
            if (open) { trigger.style.color = &#039;#fff&#039;; trigger.style.background = &#039;rgba(255,255,255,0.12)&#039;; }&lt;br /&gt;
            else { trigger.style.color = &#039;rgba(255,255,255,0.88)&#039;; trigger.style.background = &#039;transparent&#039;; }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        trigger.addEventListener(&#039;click&#039;, function (e) {&lt;br /&gt;
            e.stopPropagation();&lt;br /&gt;
            setOpen(menu.style.display === &#039;none&#039;);&lt;br /&gt;
        });&lt;br /&gt;
        document.addEventListener(&#039;click&#039;, function (e) {&lt;br /&gt;
            if (!wrap.contains(e.target)) setOpen(false);&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        // Logout: POST with CSRF token (same approach as the desktop dropdown)&lt;br /&gt;
        menu.querySelector(&#039;#gr-header-logout&#039;).addEventListener(&#039;click&#039;, function (e) {&lt;br /&gt;
            e.preventDefault();&lt;br /&gt;
            if (window.mw &amp;amp;&amp;amp; mw.user &amp;amp;&amp;amp; mw.user.tokens) {&lt;br /&gt;
                var t = mw.user.tokens.get(&#039;csrfToken&#039;);&lt;br /&gt;
                if (t) {&lt;br /&gt;
                    var script = (mw.util &amp;amp;&amp;amp; mw.util.wikiScript) ? mw.util.wikiScript() : &#039;/index.php&#039;;&lt;br /&gt;
                    var form = document.createElement(&#039;form&#039;);&lt;br /&gt;
                    form.method = &#039;post&#039;;&lt;br /&gt;
                    form.action = script + &#039;?title=Special:UserLogout&#039;;&lt;br /&gt;
                    form.style.display = &#039;none&#039;;&lt;br /&gt;
                    form.innerHTML =&lt;br /&gt;
                        &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;wpEditToken&amp;quot; value=&amp;quot;&#039; + String(t).replace(/&amp;quot;/g, &#039;&amp;amp;quot;&#039;) + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
                        &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;title&amp;quot; value=&amp;quot;Special:UserLogout&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
                        &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;returnto&amp;quot; value=&amp;quot;Main Page&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
                    document.body.appendChild(form);&lt;br /&gt;
                    form.submit();&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            if (window.mw &amp;amp;&amp;amp; mw.Api) {&lt;br /&gt;
                new mw.Api().postWithToken(&#039;csrf&#039;, { action: &#039;logout&#039; })&lt;br /&gt;
                    .done(function () { location.href = &#039;/Main_Page&#039;; })&lt;br /&gt;
                    .fail(function () { location.href = &#039;/index.php?title=Special:UserLogout&#039;; });&lt;br /&gt;
            } else {&lt;br /&gt;
                location.href = &#039;/index.php?title=Special:UserLogout&#039;;&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        wrap.appendChild(trigger);&lt;br /&gt;
        wrap.appendChild(menu);&lt;br /&gt;
        return wrap;&lt;br /&gt;
    }&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) document.addEventListener(&#039;DOMContentLoaded&#039;, injectHeaderLinks);&lt;br /&gt;
    else injectHeaderLinks();&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Main page: by-Grantha / by-Author toggle ──────────────────────&lt;br /&gt;
(function () {&lt;br /&gt;
    function grHomeView(v) {&lt;br /&gt;
        var gView = document.getElementById(&#039;gr-view-grantha&#039;);&lt;br /&gt;
        var aView = document.getElementById(&#039;gr-view-author&#039;);&lt;br /&gt;
        var gBtn = document.getElementById(&#039;gr-toggle-grantha&#039;);&lt;br /&gt;
        var aBtn = document.getElementById(&#039;gr-toggle-author&#039;);&lt;br /&gt;
        if (!gView || !aView || !gBtn || !aBtn) return;&lt;br /&gt;
        gView.style.display = (v === &#039;grantha&#039;) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
        aView.style.display = (v === &#039;author&#039;) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
        gBtn.className = &#039;gr-toggle-btn&#039; + (v === &#039;grantha&#039; ? &#039; gr-toggle-active&#039; : &#039;&#039;);&lt;br /&gt;
        aBtn.className = &#039;gr-toggle-btn&#039; + (v === &#039;author&#039; ? &#039; gr-toggle-active&#039; : &#039;&#039;);&lt;br /&gt;
        try { localStorage.setItem(&#039;gr_home_view&#039;, v); } catch (e) { }&lt;br /&gt;
    }&lt;br /&gt;
    function initHomeToggle() {&lt;br /&gt;
        var gBtn = document.getElementById(&#039;gr-toggle-grantha&#039;);&lt;br /&gt;
        var aBtn = document.getElementById(&#039;gr-toggle-author&#039;);&lt;br /&gt;
        if (!gBtn || !aBtn) return;&lt;br /&gt;
        gBtn.addEventListener(&#039;click&#039;, function () { grHomeView(&#039;grantha&#039;); });&lt;br /&gt;
        aBtn.addEventListener(&#039;click&#039;, function () { grHomeView(&#039;author&#039;); });&lt;br /&gt;
        [gBtn, aBtn].forEach(function (btn) { btn.addEventListener(&#039;keydown&#039;, function (e) { if (e.key === &#039;Enter&#039; || e.key === &#039; &#039;) btn.click(); }); });&lt;br /&gt;
        var saved; try { saved = localStorage.getItem(&#039;gr_home_view&#039;); } catch (e) { }&lt;br /&gt;
        if (saved === &#039;author&#039;) grHomeView(&#039;author&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) document.addEventListener(&#039;DOMContentLoaded&#039;, initHomeToggle);&lt;br /&gt;
    else initHomeToggle();&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Ullekha reference link handler ─────────────────────────────────&lt;br /&gt;
(function () {&lt;br /&gt;
    function highlightOnArrival() {&lt;br /&gt;
        var search = window.location.search;&lt;br /&gt;
        if (!search) return;&lt;br /&gt;
        var m = search.match(/[?&amp;amp;]hlUllekha=([^&amp;amp;]+)/);&lt;br /&gt;
        if (!m) return;&lt;br /&gt;
        var needle;&lt;br /&gt;
        try { needle = decodeURIComponent(m[1]); } catch (e) { return; }&lt;br /&gt;
        if (!needle || needle.length &amp;lt; 4) return;&lt;br /&gt;
        function doHighlight() {&lt;br /&gt;
            var content = document.querySelector(&#039;.mw-parser-output&#039;);&lt;br /&gt;
            if (!content) return;&lt;br /&gt;
            var snippet = needle.slice(0, 40);&lt;br /&gt;
            var found = false;&lt;br /&gt;
            var spans = content.querySelectorAll(&#039;[data-deva]&#039;);&lt;br /&gt;
            for (var i = 0; i &amp;lt; spans.length &amp;amp;&amp;amp; !found; i++) {&lt;br /&gt;
                var spanEl = spans[i];&lt;br /&gt;
                var orig = spanEl.getAttribute(&#039;data-deva&#039;) || &#039;&#039;;&lt;br /&gt;
                if (orig.indexOf(snippet) === -1) continue;&lt;br /&gt;
                var idx = orig.indexOf(snippet);&lt;br /&gt;
                var hlText = orig.slice(idx, Math.min(idx + needle.length, orig.length));&lt;br /&gt;
                var mark = document.createElement(&#039;mark&#039;);&lt;br /&gt;
                mark.className = &#039;gr-ullekha-highlight&#039;;&lt;br /&gt;
                mark.style.cssText = &#039;background:#fff176;border-radius:2px;padding:0 2px;&#039;;&lt;br /&gt;
                mark.textContent = hlText;&lt;br /&gt;
                var parent = spanEl.parentNode;&lt;br /&gt;
                if (!parent) continue;&lt;br /&gt;
                var before = document.createTextNode(orig.slice(0, idx));&lt;br /&gt;
                var after = document.createTextNode(orig.slice(idx + hlText.length));&lt;br /&gt;
                parent.insertBefore(before, spanEl); parent.insertBefore(mark, spanEl); parent.insertBefore(after, spanEl); parent.removeChild(spanEl);&lt;br /&gt;
                setTimeout(function () { mark.scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; }); }, 100);&lt;br /&gt;
                found = true;&lt;br /&gt;
            }&lt;br /&gt;
            if (!found) {&lt;br /&gt;
                var walker = document.createTreeWalker(content, NodeFilter.SHOW_TEXT);&lt;br /&gt;
                while (walker.nextNode() &amp;amp;&amp;amp; !found) {&lt;br /&gt;
                    var node = walker.currentNode;&lt;br /&gt;
                    var txt = node.textContent || &#039;&#039;;&lt;br /&gt;
                    if (txt.indexOf(snippet) === -1) continue;&lt;br /&gt;
                    var idx2 = txt.indexOf(snippet);&lt;br /&gt;
                    var mark2 = document.createElement(&#039;mark&#039;);&lt;br /&gt;
                    mark2.className = &#039;gr-ullekha-highlight&#039;;&lt;br /&gt;
                    mark2.style.cssText = &#039;background:#fff176;border-radius:2px;padding:0 2px;&#039;;&lt;br /&gt;
                    mark2.textContent = txt.slice(idx2, Math.min(idx2 + needle.length, txt.length));&lt;br /&gt;
                    var p = node.parentNode;&lt;br /&gt;
                    p.insertBefore(document.createTextNode(txt.slice(0, idx2)), node);&lt;br /&gt;
                    p.insertBefore(mark2, node);&lt;br /&gt;
                    p.insertBefore(document.createTextNode(txt.slice(idx2 + mark2.textContent.length)), node);&lt;br /&gt;
                    p.removeChild(node);&lt;br /&gt;
                    setTimeout(function () { mark2.scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; }); }, 100);&lt;br /&gt;
                    found = true;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        doHighlight();&lt;br /&gt;
    }&lt;br /&gt;
    function wireUllekhaLinks() {&lt;br /&gt;
        document.querySelectorAll(&#039;.gr-ullekha-ref-link&#039;).forEach(function (wrap) {&lt;br /&gt;
            var anchor = wrap.getAttribute(&#039;data-anchor&#039;) || &#039;&#039;;&lt;br /&gt;
            var hl = wrap.getAttribute(&#039;data-hl&#039;) || &#039;&#039;;&lt;br /&gt;
            var a = wrap.querySelector(&#039;a&#039;);&lt;br /&gt;
            if (!a) return;&lt;br /&gt;
            var base = a.href.split(&#039;#&#039;)[0];&lt;br /&gt;
            var encoded = encodeURIComponent(hl);&lt;br /&gt;
            a.href = base + (hl ? &#039;?hlUllekha=&#039; + encoded : &#039;&#039;) + (anchor ? &#039;#&#039; + anchor : &#039;&#039;);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) { document.addEventListener(&#039;DOMContentLoaded&#039;, function () { highlightOnArrival(); wireUllekhaLinks(); }); }&lt;br /&gt;
    else { highlightOnArrival(); wireUllekhaLinks(); }&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
/* ── Search result highlight ──────────────────────────────────── */&lt;br /&gt;
/* EXACT REPLACEMENT for the search highlight IIFE in MediaWiki:Common.js.&lt;br /&gt;
 * Only changes from the original working version:&lt;br /&gt;
 *  - Mobile bar: full-width terracotta bottom bar instead of floating pill&lt;br /&gt;
 *  - showDismissBar: guard added (if !count return) to prevent empty bar&lt;br /&gt;
 * Everything else (storeQueryForLink, applyHighlight, wrapMatches) is&lt;br /&gt;
 * identical to the version that was working.&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
&lt;br /&gt;
    function storeQueryForLink(url, query) {&lt;br /&gt;
        try {&lt;br /&gt;
            var a = document.createElement(&#039;a&#039;);&lt;br /&gt;
            a.href = url;&lt;br /&gt;
            sessionStorage.setItem(&#039;gr_search_hl&#039;, JSON.stringify({&lt;br /&gt;
                query: query,&lt;br /&gt;
                pathname: a.pathname&lt;br /&gt;
            }));&lt;br /&gt;
        } catch (e) { }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function applyHighlight() {&lt;br /&gt;
        var stored;&lt;br /&gt;
        try {&lt;br /&gt;
            stored = JSON.parse(sessionStorage.getItem(&#039;gr_search_hl&#039;) || &#039;null&#039;);&lt;br /&gt;
        } catch (e) { return; }&lt;br /&gt;
        if (!stored || !stored.query) return;&lt;br /&gt;
&lt;br /&gt;
        var currentPath = window.location.pathname;&lt;br /&gt;
        var storedPath = stored.pathname || &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
        function normPath(p) { return decodeURIComponent(p).replace(/\/+$/, &#039;&#039;); }&lt;br /&gt;
        if (storedPath &amp;amp;&amp;amp; normPath(storedPath) !== normPath(currentPath)) {&lt;br /&gt;
            try { sessionStorage.removeItem(&#039;gr_search_hl&#039;); } catch (e) { }&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var query = stored.query.trim();&lt;br /&gt;
        if (!query) return;&lt;br /&gt;
&lt;br /&gt;
        try { sessionStorage.removeItem(&#039;gr_search_hl&#039;); } catch (e) { }&lt;br /&gt;
&lt;br /&gt;
        var delays = [0, 200, 600];&lt;br /&gt;
        delays.forEach(function (ms) {&lt;br /&gt;
            setTimeout(function () {&lt;br /&gt;
                if (document.querySelector(&#039;.gr-search-hl&#039;)) return;&lt;br /&gt;
                highlightText(query);&lt;br /&gt;
            }, ms);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function highlightText(query) {&lt;br /&gt;
        var content = document.querySelector(&#039;#mw-content-text .mw-parser-output&#039;);&lt;br /&gt;
        if (!content) return;&lt;br /&gt;
&lt;br /&gt;
        var raw = query.replace(/^&amp;quot;|&amp;quot;$/g, &#039;&#039;).trim();&lt;br /&gt;
        if (!raw) return;&lt;br /&gt;
&lt;br /&gt;
        var patterns = [];&lt;br /&gt;
        patterns.push(escapeRegex(raw));&lt;br /&gt;
        raw.split(/\s+/).forEach(function (w) {&lt;br /&gt;
            if (w.length &amp;gt;= 2) patterns.push(escapeRegex(w));&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        var matched = false;&lt;br /&gt;
        for (var pi = 0; pi &amp;lt; patterns.length; pi++) {&lt;br /&gt;
            var re;&lt;br /&gt;
            try { re = new RegExp(&#039;(&#039; + patterns[pi] + &#039;)&#039;, &#039;gi&#039;); }&lt;br /&gt;
            catch (e) { continue; }&lt;br /&gt;
            var count = wrapMatches(content, re);&lt;br /&gt;
            if (count &amp;gt; 0) { matched = true; break; }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if (!matched) return;&lt;br /&gt;
&lt;br /&gt;
        var first = document.querySelector(&#039;.gr-search-hl&#039;);&lt;br /&gt;
        if (first) {&lt;br /&gt;
            first.scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; });&lt;br /&gt;
            first.classList.add(&#039;gr-search-hl-pulse&#039;);&lt;br /&gt;
            setTimeout(function () { first.classList.remove(&#039;gr-search-hl-pulse&#039;); }, 2000);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        showDismissBar(query);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function escapeRegex(s) {&lt;br /&gt;
        return s.replace(/[.*+?^${}()|[\]\\]/g, &#039;\\$&amp;amp;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function wrapMatches(root, re) {&lt;br /&gt;
        var count = 0;&lt;br /&gt;
        var walker = document.createTreeWalker(&lt;br /&gt;
            root, NodeFilter.SHOW_TEXT, {&lt;br /&gt;
            acceptNode: function (node) {&lt;br /&gt;
                var p = node.parentElement;&lt;br /&gt;
                if (!p) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
                var tag = p.tagName.toUpperCase();&lt;br /&gt;
                if (tag === &#039;SCRIPT&#039; || tag === &#039;STYLE&#039; || tag === &#039;NOSCRIPT&#039;) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
                if (p.classList.contains(&#039;gr-search-hl&#039;)) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
                return NodeFilter.FILTER_ACCEPT;&lt;br /&gt;
            }&lt;br /&gt;
        }, false&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
        var nodes = [];&lt;br /&gt;
        var node;&lt;br /&gt;
        while ((node = walker.nextNode())) nodes.push(node);&lt;br /&gt;
&lt;br /&gt;
        nodes.forEach(function (textNode) {&lt;br /&gt;
            var val = textNode.nodeValue;&lt;br /&gt;
            if (!re.test(val)) return;&lt;br /&gt;
            re.lastIndex = 0;&lt;br /&gt;
&lt;br /&gt;
            var frag = document.createDocumentFragment();&lt;br /&gt;
            var last = 0;&lt;br /&gt;
            var m;&lt;br /&gt;
            while ((m = re.exec(val)) !== null) {&lt;br /&gt;
                if (m.index &amp;gt; last) {&lt;br /&gt;
                    frag.appendChild(document.createTextNode(val.slice(last, m.index)));&lt;br /&gt;
                }&lt;br /&gt;
                var span = document.createElement(&#039;span&#039;);&lt;br /&gt;
                span.className = &#039;gr-search-hl&#039;;&lt;br /&gt;
                span.textContent = m[0];&lt;br /&gt;
                frag.appendChild(span);&lt;br /&gt;
                last = m.index + m[0].length;&lt;br /&gt;
                count++;&lt;br /&gt;
            }&lt;br /&gt;
            if (last &amp;lt; val.length) {&lt;br /&gt;
                frag.appendChild(document.createTextNode(val.slice(last)));&lt;br /&gt;
            }&lt;br /&gt;
            textNode.parentNode.replaceChild(frag, textNode);&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        return count;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function showDismissBar(query) {&lt;br /&gt;
        var existing = document.getElementById(&#039;gr-hl-bar&#039;);&lt;br /&gt;
        if (existing) existing.remove();&lt;br /&gt;
&lt;br /&gt;
        var count = document.querySelectorAll(&#039;.gr-search-hl&#039;).length;&lt;br /&gt;
        if (!count) return;&lt;br /&gt;
&lt;br /&gt;
        var isMob = window.innerWidth &amp;lt; 768 || !!document.getElementById(&#039;mw-mf-viewport&#039;);&lt;br /&gt;
        var bar = document.createElement(&#039;div&#039;);&lt;br /&gt;
        bar.id = &#039;gr-hl-bar&#039;;&lt;br /&gt;
&lt;br /&gt;
        if (isMob) {&lt;br /&gt;
            bar.className = &#039;gr-search-hl-mobile&#039;;&lt;br /&gt;
&lt;br /&gt;
            bar.innerHTML =&lt;br /&gt;
                &#039;&amp;lt;button id=&amp;quot;gr-hl-results&amp;quot; class=&amp;quot;gr-search-bar-btn&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;span class=&amp;quot;gra-icon gra-icon-search&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;span&amp;gt;&#039; + count + &#039; match&#039; + (count === 1 ? &#039;&#039; : &#039;es&#039;) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;button id=&amp;quot;gr-hl-prev&amp;quot; class=&amp;quot;gr-search-bar-btn&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;span class=&amp;quot;gra-icon gra-icon-prev&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039; + +&lt;br /&gt;
                &#039;&amp;lt;span&amp;gt;Prev&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;button id=&amp;quot;gr-hl-next&amp;quot; class=&amp;quot;gr-search-bar-btn&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;span class=&amp;quot;gr-icon gr-icon-next&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039; + +&lt;br /&gt;
                &#039;&amp;lt;span&amp;gt;Next&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;button id=&amp;quot;gr-hl-dismiss&amp;quot; class=&amp;quot;gr-search-bar-btn&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;span class=&amp;quot;gra-icon gra-icon-close&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039; + +&lt;br /&gt;
                &#039;&amp;lt;span&amp;gt;Close&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
        } else {&lt;br /&gt;
            bar.style.cssText = [&lt;br /&gt;
                &#039;position:fixed&#039;, &#039;bottom:0&#039;, &#039;left:0&#039;, &#039;right:0&#039;, &#039;z-index:10200&#039;,&lt;br /&gt;
                &#039;background:#b5451b&#039;, &#039;color:#fff&#039;, &#039;padding:10px 16px&#039;,&lt;br /&gt;
                &#039;display:flex&#039;, &#039;align-items:center&#039;, &#039;justify-content:space-between&#039;,&lt;br /&gt;
                &#039;font-family:system-ui,sans-serif&#039;, &#039;font-size:14px&#039;,&lt;br /&gt;
                &#039;box-shadow:0 -2px 8px rgba(0,0,0,0.2)&#039;&lt;br /&gt;
            ].join(&#039;;&#039;);&lt;br /&gt;
&lt;br /&gt;
            var nav = document.createElement(&#039;div&#039;);&lt;br /&gt;
            nav.style.cssText = &#039;display:flex;align-items:center;gap:12px;&#039;;&lt;br /&gt;
            nav.innerHTML =&lt;br /&gt;
                &#039;&amp;lt;span&amp;gt;🔍 &amp;lt;strong&amp;gt;&#039; + escHtml(query) + &#039;&amp;lt;/strong&amp;gt; — &#039; + count + &#039; match&#039; + (count === 1 ? &#039;&#039; : &#039;es&#039;) + &#039;&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;button id=&amp;quot;gr-hl-prev&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;↑ Prev&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;button id=&amp;quot;gr-hl-next&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;↓ Next&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;button id=&amp;quot;gr-hl-results&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;← Results&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
            bar.appendChild(nav);&lt;br /&gt;
&lt;br /&gt;
            var db = document.createElement(&#039;button&#039;);&lt;br /&gt;
            db.id = &#039;gr-hl-dismiss&#039;; db.textContent = &#039;✕ Close&#039;;&lt;br /&gt;
            db.style.cssText = &#039;background:rgba(255,255,255,0.15);border:none;color:#fff;padding:4px 12px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&#039;;&lt;br /&gt;
            bar.appendChild(db);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        document.body.appendChild(bar);&lt;br /&gt;
&lt;br /&gt;
        var hlEls = Array.from(document.querySelectorAll(&#039;.gr-search-hl&#039;));&lt;br /&gt;
        var current = 0;&lt;br /&gt;
&lt;br /&gt;
        function goTo(idx) {&lt;br /&gt;
            hlEls.forEach(function (el) { el.classList.remove(&#039;gr-search-hl-current&#039;); });&lt;br /&gt;
            current = ((idx % hlEls.length) + hlEls.length) % hlEls.length;&lt;br /&gt;
            hlEls[current].classList.add(&#039;gr-search-hl-current&#039;);&lt;br /&gt;
            hlEls[current].scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; });&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function dismiss() { clearHighlights(); bar.remove(); }&lt;br /&gt;
&lt;br /&gt;
        var nb = document.getElementById(&#039;gr-hl-next&#039;);&lt;br /&gt;
        var pb = document.getElementById(&#039;gr-hl-prev&#039;);&lt;br /&gt;
        var rb = document.getElementById(&#039;gr-hl-results&#039;);&lt;br /&gt;
        var db2 = document.getElementById(&#039;gr-hl-dismiss&#039;);&lt;br /&gt;
        if (nb) nb.onclick = function () { goTo(current + 1); };&lt;br /&gt;
        if (pb) pb.onclick = function () { goTo(current - 1); };&lt;br /&gt;
        if (db2) db2.onclick = dismiss;&lt;br /&gt;
        if (rb) rb.onclick = function () {&lt;br /&gt;
            bar.remove(); clearHighlights();&lt;br /&gt;
            if (window.showSearchDialog) window.showSearchDialog(query);&lt;br /&gt;
        };&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function clearHighlights() {&lt;br /&gt;
        document.querySelectorAll(&#039;.gr-search-hl&#039;).forEach(function (span) {&lt;br /&gt;
            var p = span.parentNode; if (!p) return;&lt;br /&gt;
            while (span.firstChild) p.insertBefore(span.firstChild, span);&lt;br /&gt;
            p.removeChild(span);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function escHtml(s) {&lt;br /&gt;
        return String(s).replace(/&amp;amp;/g, &#039;&amp;amp;amp;&#039;).replace(/&amp;lt;/g, &#039;&amp;amp;lt;&#039;).replace(/&amp;gt;/g, &#039;&amp;amp;gt;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function injectHighlightCSS() {&lt;br /&gt;
        if (document.getElementById(&#039;gr-hl-css&#039;)) return;&lt;br /&gt;
        var s = document.createElement(&#039;style&#039;);&lt;br /&gt;
        s.id = &#039;gr-hl-css&#039;;&lt;br /&gt;
        s.textContent = [&lt;br /&gt;
            &#039;.gr-search-hl{background:#fff176;color:#1a1a1a;border-radius:2px;padding:0 1px;box-shadow:0 0 0 1px rgba(181,69,27,0.25);}&#039;,&lt;br /&gt;
            &#039;.gr-search-hl-current{background:#ffb300!important;box-shadow:0 0 0 2px #b5451b!important;}&#039;,&lt;br /&gt;
            &#039;@keyframes gr-hl-pulse{0%{background:#ffb300;}50%{background:#fff176;}100%{background:#fff176;}}&#039;,&lt;br /&gt;
            &#039;.gr-search-hl-pulse{animation:gr-hl-pulse 1.2s ease 2;}&#039;,&lt;br /&gt;
        ].join(&#039;&#039;);&lt;br /&gt;
        document.head.appendChild(s);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    injectHighlightCSS();&lt;br /&gt;
&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) {&lt;br /&gt;
        document.addEventListener(&#039;DOMContentLoaded&#039;, applyHighlight);&lt;br /&gt;
    } else {&lt;br /&gt;
        applyHighlight();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (window.mw) {&lt;br /&gt;
        mw.hook(&#039;wikipage.content&#039;).add(function () {&lt;br /&gt;
            setTimeout(applyHighlight, 100);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    window.grStoreSearchHL = storeQueryForLink;&lt;br /&gt;
&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
/* ═══════════════════════════════════════════════════════════════&lt;br /&gt;
   Mobile addon — only runs on Minerva (mobile) skin&lt;br /&gt;
   ═══════════════════════════════════════════════════════════════ */&lt;br /&gt;
(function () {&lt;br /&gt;
    if (!document.body.classList.contains(&#039;skin-minerva&#039;)) return;&lt;br /&gt;
    function injectCSS() {&lt;br /&gt;
        if (document.getElementById(&#039;gr-mob-css&#039;)) return;&lt;br /&gt;
        var s = document.createElement(&#039;style&#039;);&lt;br /&gt;
        s.id = &#039;gr-mob-css&#039;;&lt;br /&gt;
        s.textContent =&lt;br /&gt;
            &#039;body,#mw-mf-viewport,#mw-mf-page-center{padding-top:0!important;margin-top:0!important;}&#039; +&lt;br /&gt;
            &#039;html,body,#mw-mf-viewport,#mw-mf-page-center{overflow-x:hidden!important;max-width:100vw!important;}&#039; +&lt;br /&gt;
            &#039;header.header-container{background:#b5451b!important;position:sticky!important;top:0!important;z-index:300!important;}&#039; +&lt;br /&gt;
            &#039;.minerva-header{background:#b5451b!important;min-height:54px!important;}&#039; +&lt;br /&gt;
            &#039;.minerva-header .search-toggle,.minerva-header .minerva-user-notifications{display:none!important;}&#039; +&lt;br /&gt;
            &#039;.branding-box a{display:flex!important;align-items:center!important;text-decoration:none!important;max-width:calc(100vw - 80px)!important;}&#039; +&lt;br /&gt;
            &#039;.branding-box a::before{content:&amp;quot;&amp;quot;;display:block;width:30px;height:30px;flex-shrink:0;background:url(&amp;quot;/favicon.png&amp;quot;) center/contain no-repeat;margin-right:8px;}&#039; +&lt;br /&gt;
            &#039;.branding-box a span{color:#fff!important;font-size:16px!important;font-weight:700!important;font-family:system-ui,sans-serif!important;line-height:1.2!important;flex:1 1 auto!important;min-width:0!important;}&#039; +&lt;br /&gt;
            &#039;.minerva-header svg path,.minerva-header svg rect,.minerva-header svg circle{fill:#fff!important;}&#039; +&lt;br /&gt;
            &#039;.minerva-header label{color:#fff!important;}&#039; +&lt;br /&gt;
            &#039;.minerva-tabs,.mw-portlet-associated-pages,.page-actions-menu,#page-secondary-actions,.last-modified-bar,.minerva-anon-talk-link{display:none!important;}&#039; +&lt;br /&gt;
            &#039;#gr-mob-menu-items{display:block!important;}&#039; +&lt;br /&gt;
            &#039;.mw-footer.minerva-footer,.footer-places,.footer-info,.minerva-footer-logo,#footer-places-about,#footer-places-disclaimers,#footer-places-privacy{display:none!important;}&#039; +&lt;br /&gt;
            &#039;#gr-static-bar{position:sticky!important;top:54px!important;z-index:200!important;}&#039; +&lt;br /&gt;
            &#039;.mf-section-0,.mf-section-1,.mf-section-2,.mf-section-3,.mf-section-4,.mf-section-5,.mf-section-6,.mf-section-7,.mf-section-8,.mf-section-9,.mf-section-10{display:block!important;visibility:visible!important;}&#039; +&lt;br /&gt;
            &#039;.collapsible-block{display:block!important;}&#039; +&lt;br /&gt;
            &#039;.section-heading .indicator,.collapsible-heading .indicator{display:none!important;}&#039; +&lt;br /&gt;
            &#039;.section-heading,.collapsible-heading{pointer-events:none!important;}&#039; +&lt;br /&gt;
            &#039;.gr-home-grid{flex-direction:column!important;flex-wrap:nowrap!important;gap:12px!important;width:100%!important;}&#039; +&lt;br /&gt;
            &#039;.gr-home-card{width:100%!important;max-width:100%!important;min-width:unset!important;box-sizing:border-box!important;flex:none!important;}&#039; +&lt;br /&gt;
            &#039;.gr-home-toggle{flex-wrap:wrap!important;}&#039; +&lt;br /&gt;
            &#039;.mw-parser-output{font-size:18px!important;line-height:1.8!important;}&#039; +&lt;br /&gt;
            &#039;.mw-parser-output h2,.mw-parser-output h3{width:100%!important;}&#039; +&lt;br /&gt;
            &#039;.bhashyam-block{margin-left:8px!important;}&#039; +&lt;br /&gt;
            &#039;#footer,.mw-footer,.catlinks,#catlinks{display:none!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-panel{position:fixed!important;top:0!important;left:0!important;bottom:0!important;width:82vw!important;max-width:340px!important;background:#fff!important;z-index:10400!important;box-shadow:4px 0 28px rgba(0,0,0,0.22)!important;overflow-y:auto!important;padding:0 0 40px!important;transform:translateX(-110%)!important;transition:transform 0.26s cubic-bezier(0.4,0,0.2,1)!important;display:block!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-panel.open{transform:translateX(0)!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-backdrop{display:none!important;position:fixed!important;inset:0!important;background:rgba(0,0,0,0.4)!important;z-index:10399!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-backdrop.open{display:block!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-header{position:sticky!important;top:0!important;background:#fff!important;display:flex!important;align-items:center!important;justify-content:space-between!important;padding:16px 16px 12px!important;border-bottom:1px solid #f0ebe6!important;z-index:1!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-title{font-size:13px!important;font-weight:700!important;text-transform:uppercase!important;letter-spacing:0.08em!important;color:#b5451b!important;font-family:system-ui,sans-serif!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-close{background:none!important;border:none!important;font-size:22px!important;color:#999!important;cursor:pointer!important;padding:4px 8px!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-body{padding:12px 16px!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-body a{display:block!important;font-size:16px!important;line-height:1.6!important;color:#2c1810!important;text-decoration:none!important;padding:8px 0!important;border-bottom:1px solid #f5f0ed!important;}&#039;;&lt;br /&gt;
        document.head.appendChild(s);&lt;br /&gt;
    }&lt;br /&gt;
    function expandSections() {&lt;br /&gt;
        document.querySelectorAll(&#039;[class*=&amp;quot;mf-section-&amp;quot;], .collapsible-block&#039;).forEach(function (el) { el.removeAttribute(&#039;hidden&#039;); el.style.setProperty(&#039;display&#039;, &#039;block&#039;, &#039;important&#039;); el.style.setProperty(&#039;visibility&#039;, &#039;visible&#039;, &#039;important&#039;); el.removeAttribute(&#039;aria-hidden&#039;); });&lt;br /&gt;
        document.querySelectorAll(&#039;.section-heading, .collapsible-heading&#039;).forEach(function (el) { el.setAttribute(&#039;aria-expanded&#039;, &#039;true&#039;); el.style.setProperty(&#039;pointer-events&#039;, &#039;none&#039;, &#039;important&#039;); });&lt;br /&gt;
    }&lt;br /&gt;
    function watchSections() {&lt;br /&gt;
        var t = null;&lt;br /&gt;
        var obs = new MutationObserver(function (ms) { if (ms.some(function (m) { return m.attributeName === &#039;hidden&#039;; })) { clearTimeout(t); t = setTimeout(expandSections, 30); } });&lt;br /&gt;
        obs.observe(document.querySelector(&#039;#mw-content-text&#039;) || document.body, { subtree: true, attributes: true, attributeFilter: [&#039;hidden&#039;, &#039;aria-hidden&#039;] });&lt;br /&gt;
    }&lt;br /&gt;
    function watchBodyPadding() {&lt;br /&gt;
        new MutationObserver(function () { if (document.body.style.paddingTop &amp;amp;&amp;amp; document.body.style.paddingTop !== &#039;0px&#039;) document.body.style.paddingTop = &#039;&#039;; }).observe(document.body, { attributes: true, attributeFilter: [&#039;style&#039;] });&lt;br /&gt;
    }&lt;br /&gt;
    function injectMenuLinks() {&lt;br /&gt;
        if (document.getElementById(&#039;gr-mob-menu-items&#039;)) return;&lt;br /&gt;
        var navDrawer = document.querySelector(&#039;.navigation-drawer&#039;);&lt;br /&gt;
        if (!navDrawer) return;&lt;br /&gt;
        var wrap = document.createElement(&#039;div&#039;); wrap.id = &#039;gr-mob-menu-items&#039;; wrap.style.cssText = &#039;width:100%;background:#fff;margin-top:8px;&#039;;&lt;br /&gt;
        var itemStyle = &#039;display:flex;align-items:center;gap:14px;padding:15px 20px;font-size:16px;color:#2c1810;text-decoration:none;font-family:system-ui,sans-serif;border-bottom:1px solid #f0ebe6;background:#fff;&#039;;&lt;br /&gt;
        function makeItem(href, label) { var a = document.createElement(&#039;a&#039;); a.href = href; a.style.cssText = itemStyle; a.innerHTML = &#039;&amp;lt;span&amp;gt;&#039; + label + &#039;&amp;lt;/span&amp;gt;&#039;; return a; }&lt;br /&gt;
        wrap.appendChild(makeItem(&#039;/Main_Page&#039;, &#039;Home&#039;));&lt;br /&gt;
        wrap.appendChild(makeItem(&#039;/My_wiki:Help&#039;, &#039;Help&#039;));&lt;br /&gt;
        wrap.appendChild(makeItem(&#039;/My_wiki:About&#039;, &#039;About&#039;));&lt;br /&gt;
        var userName = window.mw ? mw.config.get(&#039;wgUserName&#039;) : null;&lt;br /&gt;
        if (userName) {&lt;br /&gt;
            wrap.appendChild(makeItem((window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl) ? mw.util.getUrl(&#039;Special:Profile&#039;) : &#039;/Special:Profile&#039;, &#039;Profile&#039;));&lt;br /&gt;
            var la = document.querySelector(&#039;a[href*=&amp;quot;action=logout&amp;quot;]&#039;);&lt;br /&gt;
            wrap.appendChild(makeItem(la ? la.href : &#039;/index.php?title=Special:UserLogout&#039;, &#039;Log out&#039;));&lt;br /&gt;
        }&lt;br /&gt;
        else wrap.appendChild(makeItem(&#039;/index.php?title=Special:UserLogin&#039;, &#039;Log in&#039;));&lt;br /&gt;
        var pageLeft = document.getElementById(&#039;mw-mf-page-left&#039;);&lt;br /&gt;
        if (pageLeft) { while (pageLeft.firstChild) pageLeft.removeChild(pageLeft.firstChild); pageLeft.style.removeProperty(&#039;display&#039;); pageLeft.appendChild(wrap); }&lt;br /&gt;
        else navDrawer.appendChild(wrap);&lt;br /&gt;
    }&lt;br /&gt;
    var _tocDone = false;&lt;br /&gt;
    function initToc() {&lt;br /&gt;
        if (_tocDone) return;&lt;br /&gt;
        var tocList = document.querySelector(&#039;.vector-toc-contents, .vector-toc .vector-toc-list&#039;);&lt;br /&gt;
        if (!tocList || !tocList.querySelector(&#039;li&#039;)) return;&lt;br /&gt;
        _tocDone = true;&lt;br /&gt;
        var bd = document.createElement(&#039;div&#039;); bd.className = &#039;gr-mob-toc-backdrop&#039;; document.body.appendChild(bd);&lt;br /&gt;
        var panel = document.createElement(&#039;div&#039;); panel.className = &#039;gr-mob-toc-panel&#039;;&lt;br /&gt;
        var hdr = document.createElement(&#039;div&#039;); hdr.className = &#039;gr-mob-toc-header&#039;;&lt;br /&gt;
        var ttl = document.createElement(&#039;div&#039;); ttl.className = &#039;gr-mob-toc-title&#039;; ttl.textContent = &#039;विषयसूची&#039;;&lt;br /&gt;
        var cls = document.createElement(&#039;button&#039;); cls.className = &#039;gr-mob-toc-close&#039;; cls.textContent = &#039;✕&#039;;&lt;br /&gt;
        hdr.appendChild(ttl); hdr.appendChild(cls); panel.appendChild(hdr);&lt;br /&gt;
        var body = document.createElement(&#039;div&#039;); body.className = &#039;gr-mob-toc-body&#039;; body.appendChild(tocList.cloneNode(true)); panel.appendChild(body); document.body.appendChild(panel);&lt;br /&gt;
        var btn = document.createElement(&#039;button&#039;); btn.id = &#039;gr-mob-toc-btn&#039;; btn.innerHTML = &#039;☰ &amp;amp;nbsp;Contents&#039;;&lt;br /&gt;
        btn.style.cssText = &#039;position:fixed;bottom:148px;left:16px;z-index:9100;background:#fff;border:1.5px solid #b5451b;border-radius:24px;padding:10px 16px;font-size:15px;font-family:system-ui,sans-serif;color:#b5451b;font-weight:600;box-shadow:0 3px 14px rgba(0,0,0,0.15);cursor:pointer;&#039;;&lt;br /&gt;
        document.body.appendChild(btn);&lt;br /&gt;
        function open() { panel.classList.add(&#039;open&#039;); bd.classList.add(&#039;open&#039;); document.body.style.overflow = &#039;hidden&#039;; }&lt;br /&gt;
        function close() { panel.classList.remove(&#039;open&#039;); bd.classList.remove(&#039;open&#039;); document.body.style.overflow = &#039;&#039;; }&lt;br /&gt;
        btn.onclick = open; cls.onclick = close; bd.onclick = close;&lt;br /&gt;
        body.querySelectorAll(&#039;a&#039;).forEach(function (a) { a.onclick = close; });&lt;br /&gt;
    }&lt;br /&gt;
    function injectMoolaUllekhaLinks() {&lt;br /&gt;
        if (document.getElementById(&#039;gr-mob-doc-nav&#039;)) return;&lt;br /&gt;
        var pageName = (window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get(&#039;wgPageName&#039;)) || &#039;&#039;;&lt;br /&gt;
        if (pageName === &#039;Main_Page&#039; || !pageName) return;&lt;br /&gt;
        function wikiUrl(slug) { if (window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl) return mw.util.getUrl(slug); return ((window.mw &amp;amp;&amp;amp; mw.config.get(&#039;wgArticlePath&#039;)) || &#039;/wiki/$1&#039;).replace(&#039;$1&#039;, encodeURIComponent(slug).replace(/%2F/g, &#039;/&#039;)); }&lt;br /&gt;
        var teekaPage = document.querySelector(&#039;.gr-teeka-page&#039;);&lt;br /&gt;
        var primarySlug = teekaPage ? (teekaPage.getAttribute(&#039;data-primary&#039;) || pageName.split(&#039;/&#039;)[0]) : pageName.split(&#039;/&#039;)[0];&lt;br /&gt;
        var docTitleEl = document.querySelector(&#039;.gr-doc-title&#039;);&lt;br /&gt;
        var hasMoolaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute(&#039;data-has-moola&#039;) === &#039;1&#039;;&lt;br /&gt;
        var hasUllekhaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute(&#039;data-has-ullekha&#039;) === &#039;1&#039;;&lt;br /&gt;
        var showMoolam = !!teekaPage || hasMoolaPage, showUllekha = hasUllekhaPage || !!teekaPage;&lt;br /&gt;
        if (!showMoolam &amp;amp;&amp;amp; !showUllekha) return;&lt;br /&gt;
        var nav = document.createElement(&#039;div&#039;); nav.id = &#039;gr-mob-doc-nav&#039;;&lt;br /&gt;
        nav.style.cssText = &#039;display:flex;gap:10px;padding:10px 16px 8px;background:#fdf8f5;border-bottom:1px solid #f0e0d6;font-family:system-ui,sans-serif;&#039;;&lt;br /&gt;
        function makeLink(href, label) { var a = document.createElement(&#039;a&#039;); a.href = href; a.textContent = label; a.style.cssText = &#039;display:inline-flex;align-items:center;padding:5px 16px;border-radius:20px;background:#fff;border:1.5px solid #e8cfc4;color:#b5451b;font-size:14px;font-weight:600;text-decoration:none;&#039;; return a; }&lt;br /&gt;
        if (teekaPage) nav.appendChild(makeLink(wikiUrl(primarySlug), &#039;मूल&#039;));&lt;br /&gt;
        else if (hasMoolaPage) nav.appendChild(makeLink(wikiUrl(primarySlug + &#039;/Moola&#039;), &#039;मूलम्&#039;));&lt;br /&gt;
        if (showUllekha) nav.appendChild(makeLink(wikiUrl(primarySlug + &#039;/Ullekha&#039;), &#039;उल्लेख&#039;));&lt;br /&gt;
        var h1 = document.getElementById(&#039;firstHeading&#039;) || document.querySelector(&#039;.page-heading, h1.firstHeading, .mw-first-heading&#039;);&lt;br /&gt;
        if (h1 &amp;amp;&amp;amp; h1.parentNode) h1.parentNode.insertBefore(nav, h1.nextSibling);&lt;br /&gt;
        else { var ct = document.getElementById(&#039;mw-content-text&#039;); if (ct) ct.insertBefore(nav, ct.firstChild); }&lt;br /&gt;
    }&lt;br /&gt;
    injectCSS(); watchBodyPadding();&lt;br /&gt;
    function boot() { expandSections(); watchSections(); injectMenuLinks(); injectMoolaUllekhaLinks();[100, 400, 900, 1800].forEach(function (ms) { setTimeout(expandSections, ms); }); setTimeout(initToc, 700); }&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) document.addEventListener(&#039;DOMContentLoaded&#039;, boot);&lt;br /&gt;
    else boot();&lt;br /&gt;
    if (window.mw) mw.hook(&#039;wikipage.content&#039;).add(function () { setTimeout(function () { expandSections(); injectMenuLinks(); injectMoolaUllekhaLinks(); initToc(); }, 300); });&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(function () {&lt;br /&gt;
    &#039;use strict&#039;;&lt;br /&gt;
    mw.hook(&#039;wikipage.content&#039;).add(function () {&lt;br /&gt;
        setTimeout(function () {&lt;br /&gt;
            var blocks = document.querySelectorAll(&#039;.collapsible-block, .toggle-list&#039;);&lt;br /&gt;
            Array.prototype.forEach.call(blocks, function (el) { if (!el.parentNode) { try { el.remove(); } catch (e) { } } });&lt;br /&gt;
        }, 0);&lt;br /&gt;
    });&lt;br /&gt;
    if (mw.config.get(&#039;wgPageName&#039;) !== &#039;Main_Page&#039;) return;&lt;br /&gt;
    mw.loader.using(&#039;mediawiki.util&#039;).done(function () {&lt;br /&gt;
        $(function () { applyHomeToggleOffset(); window.addEventListener(&#039;resize&#039;, applyHomeToggleOffset, { passive: true }); setTimeout(applyHomeToggleOffset, 300); setTimeout(applyHomeToggleOffset, 800); });&lt;br /&gt;
    });&lt;br /&gt;
    function applyHomeToggleOffset() {&lt;br /&gt;
        var bar = document.getElementById(&#039;gr-static-bar&#039;); if (!bar) return;&lt;br /&gt;
        var barBottom = Math.round(bar.getBoundingClientRect().bottom);&lt;br /&gt;
        [document.getElementById(&#039;gr-home&#039;), document.getElementById(&#039;gr-home-toggle&#039;), document.querySelector(&#039;#mw-content-text .mw-parser-output &amp;gt; .gr-home, #mw-content-text .mw-parser-output &amp;gt; *:first-child&#039;)].forEach(function (el) { if (el) el.style.scrollMarginTop = (barBottom + 4) + &#039;px&#039;; });&lt;br /&gt;
        var isMob = window.innerWidth &amp;lt; 768 || !!document.getElementById(&#039;mw-mf-viewport&#039;);&lt;br /&gt;
        if (isMob) { var toggleEl = document.getElementById(&#039;gr-home-toggle&#039;); if (toggleEl) { var tr = toggleEl.getBoundingClientRect(); if (tr.top &amp;lt; barBottom) { var cp = parseInt(window.getComputedStyle(document.body).paddingTop, 10) || 0; document.body.style.paddingTop = (cp + (barBottom - tr.top) + 4) + &#039;px&#039;; } } }&lt;br /&gt;
    }&lt;br /&gt;
    $(function () {&lt;br /&gt;
        var $toggle = $(&#039;#gr-home-toggle&#039;), $viewG = $(&#039;#gr-view-grantha&#039;), $viewA = $(&#039;#gr-view-author&#039;), $btnG = $(&#039;#gr-toggle-grantha&#039;), $btnA = $(&#039;#gr-toggle-author&#039;);&lt;br /&gt;
        if (!$toggle.length || !$viewG.length || !$viewA.length) return; if ($toggle.data(&#039;gr-wired&#039;)) return; $toggle.data(&#039;gr-wired&#039;, true);&lt;br /&gt;
        function showView(which) { if (which === &#039;grantha&#039;) { $viewG.show(); $viewA.hide(); $btnG.addClass(&#039;gr-toggle-active&#039;); $btnA.removeClass(&#039;gr-toggle-active&#039;); } else { $viewA.show(); $viewG.hide(); $btnA.addClass(&#039;gr-toggle-active&#039;); $btnG.removeClass(&#039;gr-toggle-active&#039;); } try { localStorage.setItem(&#039;grantha_home_tab&#039;, which); } catch (e) { } }&lt;br /&gt;
        $btnG.on(&#039;click keydown&#039;, function (e) { if (e.type === &#039;keydown&#039; &amp;amp;&amp;amp; e.key !== &#039;Enter&#039; &amp;amp;&amp;amp; e.key !== &#039; &#039;) return; showView(&#039;grantha&#039;); });&lt;br /&gt;
        $btnA.on(&#039;click keydown&#039;, function (e) { if (e.type === &#039;keydown&#039; &amp;amp;&amp;amp; e.key !== &#039;Enter&#039; &amp;amp;&amp;amp; e.key !== &#039; &#039;) return; showView(&#039;author&#039;); });&lt;br /&gt;
        try { var saved = localStorage.getItem(&#039;grantha_home_tab&#039;); if (saved === &#039;author&#039;) showView(&#039;author&#039;); else showView(&#039;grantha&#039;); } catch (e) { showView(&#039;grantha&#039;); }&lt;br /&gt;
    });&lt;br /&gt;
}());&lt;br /&gt;
// ── Replace MediaWiki user links with a single username dropdown (Profile + Logout) ──&lt;br /&gt;
(function () {&lt;br /&gt;
    function wikiHref(title) {&lt;br /&gt;
        if (window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl) return mw.util.getUrl(title);&lt;br /&gt;
        var ap = (window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get(&#039;wgArticlePath&#039;)) || &#039;/wiki/$1&#039;;&lt;br /&gt;
        return ap.replace(&#039;$1&#039;, title);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function buildLogoutForm(token) {&lt;br /&gt;
        token = token || &#039;&#039;;&lt;br /&gt;
        var esc = String(token).replace(/&amp;quot;/g, &#039;&amp;amp;quot;&#039;);&lt;br /&gt;
        var script = (window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.wikiScript) ? mw.util.wikiScript() : &#039;/index.php&#039;;&lt;br /&gt;
        var form = document.createElement(&#039;form&#039;);&lt;br /&gt;
        form.method = &#039;post&#039;;&lt;br /&gt;
        form.action = script + &#039;?title=Special:UserLogout&#039;;&lt;br /&gt;
        form.style.display = &#039;none&#039;;&lt;br /&gt;
        form.innerHTML =&lt;br /&gt;
            &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;wpEditToken&amp;quot; value=&amp;quot;&#039; + esc + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
            &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;title&amp;quot; value=&amp;quot;Special:UserLogout&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
            &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;returnto&amp;quot; value=&amp;quot;Main Page&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
        document.body.appendChild(form);&lt;br /&gt;
        return form;&lt;br /&gt;
    }&lt;br /&gt;
}());&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Mobile.css&amp;diff=6223</id>
		<title>MediaWiki:Mobile.css</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Mobile.css&amp;diff=6223"/>
		<updated>2026-06-13T09:59:31Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ================================================================&lt;br /&gt;
   MediaWiki:Mobile.css&lt;br /&gt;
   Loaded only on Minerva (mobile skin).&lt;br /&gt;
   ================================================================ */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ── 1. AUTO-ZOOM PREVENTION ─────────────────────────────────────&lt;br /&gt;
   iOS and Android zoom the viewport when a focused input has&lt;br /&gt;
   font-size &amp;lt; 16px. Every input on the site must be &amp;gt;= 16px.&lt;br /&gt;
   ──────────────────────────────────────────────────────────────── */&lt;br /&gt;
&lt;br /&gt;
/* Reader toolbar search input */&lt;br /&gt;
#gr-search-panel input {&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* New document dialog inputs */&lt;br /&gt;
#gr-newdoc-overlay input,&lt;br /&gt;
#gr-newdoc-overlay select,&lt;br /&gt;
#gr-newdoc-overlay textarea {&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Annotation composer inputs (gr_annotations gadget) */&lt;br /&gt;
.gra-composer-input,&lt;br /&gt;
.gra-fb-select,&lt;br /&gt;
#gra-nt-input,&lt;br /&gt;
#gra-bm-input,&lt;br /&gt;
#gra-fb-text,&lt;br /&gt;
#gra-fb-email {&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ── 2. LONG-PRESS CONTEXT MENU SUPPRESSION ──────────────────────&lt;br /&gt;
   -webkit-touch-callout: none  → stops iOS &amp;quot;Copy / Look Up / Share&amp;quot;&lt;br /&gt;
                                   popup on long press of buttons&lt;br /&gt;
   user-select: none            → prevents text selection on button labels&lt;br /&gt;
   touch-action: manipulation   → removes 300ms tap delay and prevents&lt;br /&gt;
                                   context menu on long press (iOS + Android)&lt;br /&gt;
   ──────────────────────────────────────────────────────────────── */&lt;br /&gt;
&lt;br /&gt;
/* Sanskrit keyboard keys */&lt;br /&gt;
.gr-kb-key,&lt;br /&gt;
.gr-kb-key-iast,&lt;br /&gt;
.gr-kb-action,&lt;br /&gt;
.gr-kb {&lt;br /&gt;
  -webkit-touch-callout: none;&lt;br /&gt;
  user-select: none;&lt;br /&gt;
  touch-action: manipulation;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Annotation FAB buttons and mobile action bar */&lt;br /&gt;
.gra-mob-btn,&lt;br /&gt;
.gra-fab-btn,&lt;br /&gt;
#gra-toggle,&lt;br /&gt;
#gra-mob-feedback,&lt;br /&gt;
#gra-mob-note,&lt;br /&gt;
#gra-mob-bookmark,&lt;br /&gt;
#gra-mob-dismiss {&lt;br /&gt;
  -webkit-touch-callout: none;&lt;br /&gt;
  user-select: none;&lt;br /&gt;
  touch-action: manipulation;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Reader toolbar buttons */&lt;br /&gt;
#gr-static-bar .gr-btn,&lt;br /&gt;
#gr-static-bar .gr-icon-btn {&lt;br /&gt;
  -webkit-touch-callout: none;&lt;br /&gt;
  user-select: none;&lt;br /&gt;
  touch-action: manipulation;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* siteNav FAB buttons */&lt;br /&gt;
#se-docnav-btn,&lt;br /&gt;
#se-scrolltop {&lt;br /&gt;
  -webkit-touch-callout: none;&lt;br /&gt;
  user-select: none;&lt;br /&gt;
  touch-action: manipulation;&lt;br /&gt;
}&lt;br /&gt;
Template style fixes for Mobile&lt;br /&gt;
.mw-parser-output h2, .mw-parser-output .mw-heading2 h2 {&lt;br /&gt;
  margin-top: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Spacing fixes for headings */&lt;br /&gt;
.skin-minerva .mw-parser-output h2,&lt;br /&gt;
.skin-minerva .mw-parser-output .mw-heading2 h2,&lt;br /&gt;
.skin-minerva .mw-parser-output .mw-heading2 {&lt;br /&gt;
    margin-top: 8px !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .mw-parser-output .mw-heading2 + p,&lt;br /&gt;
.skin-minerva .mw-parser-output h2 + p {&lt;br /&gt;
    margin-top: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Also reduce Minerva&#039;s paragraph bottom margin inside content */&lt;br /&gt;
.skin-minerva .mw-parser-output p {&lt;br /&gt;
    padding-bottom: 0.25em !important;&lt;br /&gt;
    margin: 0 0 0.25em 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .section-heading,&lt;br /&gt;
.skin-minerva .collapsible-heading {&lt;br /&gt;
    margin: 0 !important;&lt;br /&gt;
    padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.page-Special_UserLogin .navigation-drawer,&lt;br /&gt;
.page-Special_UserLogin .header-container .toggle-list__checkbox,&lt;br /&gt;
.page-Special_UserLogin #mw-mf-main-menu-button,&lt;br /&gt;
.page-Special_CreateAccount .navigation-drawer,&lt;br /&gt;
.page-Special_CreateAccount #mw-mf-main-menu-button&lt;br /&gt;
.mw-special-Userlogin .page-Special_UserLogin .header-container .minerva-icon {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;br /&gt;
.page-Special_UserLogin #mw-mf-main-menu-button,&lt;br /&gt;
.mw-special-Userlogin #mw-mf-main-menu-button {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Search Results Bar styles */&lt;br /&gt;
.gr-search-hl-mobile {&lt;br /&gt;
    position: fixed;&lt;br /&gt;
    top: 105px;&lt;br /&gt;
    left: 0px;&lt;br /&gt;
    right: 0px;&lt;br /&gt;
    z-index: 10200;&lt;br /&gt;
    background: rgb(181, 69, 27);&lt;br /&gt;
    color: rgb(255, 255, 255);&lt;br /&gt;
    padding: 0px;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: stretch;&lt;br /&gt;
    font-family: &amp;quot;Noto Sans Devanagari&amp;quot;, system-ui, sans-serif;&lt;br /&gt;
    box-shadow: rgba(0, 0, 0, 0.25) 0px -2px 12px;&lt;br /&gt;
    height: 56px;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.js&amp;diff=6222</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.js&amp;diff=6222"/>
		<updated>2026-06-13T09:51:21Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* MediaWiki:Common.js — grantha.io  (v7) */&lt;br /&gt;
&lt;br /&gt;
(function () {&lt;br /&gt;
&lt;br /&gt;
    var LS_SCRIPT_KEY = &#039;grantha_reader_script&#039;;&lt;br /&gt;
    var currentScript = &#039;deva&#039;;&lt;br /&gt;
&lt;br /&gt;
    function devanagariToIAST(text) {&lt;br /&gt;
        var CONSONANTS = {&lt;br /&gt;
            &#039;क&#039;: &#039;k&#039;, &#039;ख&#039;: &#039;kh&#039;, &#039;ग&#039;: &#039;g&#039;, &#039;घ&#039;: &#039;gh&#039;, &#039;ङ&#039;: &#039;ṅ&#039;,&lt;br /&gt;
            &#039;च&#039;: &#039;c&#039;, &#039;छ&#039;: &#039;ch&#039;, &#039;ज&#039;: &#039;j&#039;, &#039;झ&#039;: &#039;jh&#039;, &#039;ञ&#039;: &#039;ñ&#039;,&lt;br /&gt;
            &#039;ट&#039;: &#039;ṭ&#039;, &#039;ठ&#039;: &#039;ṭh&#039;, &#039;ड&#039;: &#039;ḍ&#039;, &#039;ढ&#039;: &#039;ḍh&#039;, &#039;ण&#039;: &#039;ṇ&#039;,&lt;br /&gt;
            &#039;त&#039;: &#039;t&#039;, &#039;थ&#039;: &#039;th&#039;, &#039;द&#039;: &#039;d&#039;, &#039;ध&#039;: &#039;dh&#039;, &#039;न&#039;: &#039;n&#039;,&lt;br /&gt;
            &#039;प&#039;: &#039;p&#039;, &#039;फ&#039;: &#039;ph&#039;, &#039;ब&#039;: &#039;b&#039;, &#039;भ&#039;: &#039;bh&#039;, &#039;म&#039;: &#039;m&#039;,&lt;br /&gt;
            &#039;य&#039;: &#039;y&#039;, &#039;र&#039;: &#039;r&#039;, &#039;ल&#039;: &#039;l&#039;, &#039;ळ&#039;: &#039;ḷ&#039;, &#039;व&#039;: &#039;v&#039;,&lt;br /&gt;
            &#039;श&#039;: &#039;ś&#039;, &#039;ष&#039;: &#039;ṣ&#039;, &#039;स&#039;: &#039;s&#039;, &#039;ह&#039;: &#039;h&#039;&lt;br /&gt;
        };&lt;br /&gt;
        var DIACRITICS = {&lt;br /&gt;
            &#039;ा&#039;: &#039;ā&#039;, &#039;ि&#039;: &#039;i&#039;, &#039;ी&#039;: &#039;ī&#039;, &#039;ु&#039;: &#039;u&#039;, &#039;ू&#039;: &#039;ū&#039;,&lt;br /&gt;
            &#039;ृ&#039;: &#039;ṛ&#039;, &#039;ॄ&#039;: &#039;ṝ&#039;, &#039;े&#039;: &#039;e&#039;, &#039;ै&#039;: &#039;ai&#039;, &#039;ो&#039;: &#039;o&#039;, &#039;ौ&#039;: &#039;au&#039;&lt;br /&gt;
        };&lt;br /&gt;
        var VOWELS = {&lt;br /&gt;
            &#039;अ&#039;: &#039;a&#039;, &#039;आ&#039;: &#039;ā&#039;, &#039;इ&#039;: &#039;i&#039;, &#039;ई&#039;: &#039;ī&#039;, &#039;उ&#039;: &#039;u&#039;, &#039;ऊ&#039;: &#039;ū&#039;,&lt;br /&gt;
            &#039;ऋ&#039;: &#039;ṛ&#039;, &#039;ॠ&#039;: &#039;ṝ&#039;, &#039;ए&#039;: &#039;e&#039;, &#039;ऐ&#039;: &#039;ai&#039;, &#039;ओ&#039;: &#039;o&#039;, &#039;औ&#039;: &#039;au&#039;, &#039;ऽ&#039;: &amp;quot;&#039;&amp;quot;&lt;br /&gt;
        };&lt;br /&gt;
        var MISC = {&lt;br /&gt;
            &#039;ं&#039;: &#039;ṃ&#039;, &#039;ः&#039;: &#039;ḥ&#039;, &#039;ँ&#039;: &#039;m̐&#039;, &#039;ॐ&#039;: &#039;oṃ&#039;,&lt;br /&gt;
            &#039;०&#039;: &#039;0&#039;, &#039;१&#039;: &#039;1&#039;, &#039;२&#039;: &#039;2&#039;, &#039;३&#039;: &#039;3&#039;, &#039;४&#039;: &#039;4&#039;,&lt;br /&gt;
            &#039;५&#039;: &#039;5&#039;, &#039;६&#039;: &#039;6&#039;, &#039;७&#039;: &#039;7&#039;, &#039;८&#039;: &#039;8&#039;, &#039;९&#039;: &#039;9&#039;&lt;br /&gt;
        };&lt;br /&gt;
        var HALANTA = &#039;्&#039;;&lt;br /&gt;
        var chars = Array.from(text);&lt;br /&gt;
        var result = &#039;&#039;;&lt;br /&gt;
        var i = 0;&lt;br /&gt;
        while (i &amp;lt; chars.length) {&lt;br /&gt;
            var ch = chars[i];&lt;br /&gt;
            var next = chars[i + 1];&lt;br /&gt;
            if (CONSONANTS[ch]) {&lt;br /&gt;
                var base = CONSONANTS[ch];&lt;br /&gt;
                if (next === HALANTA) { result += base; i += 2; }&lt;br /&gt;
                else if (DIACRITICS[next]) { result += base + DIACRITICS[next]; i += 2; }&lt;br /&gt;
                else if (next === &#039;ं&#039; || next === &#039;ः&#039;) { result += base + &#039;a&#039; + MISC[next]; i += 2; }&lt;br /&gt;
                else { result += base + &#039;a&#039;; i++; }&lt;br /&gt;
            } else if (VOWELS[ch]) { result += VOWELS[ch]; i++; }&lt;br /&gt;
            else if (DIACRITICS[ch]) { result += DIACRITICS[ch]; i++; }&lt;br /&gt;
            else if (MISC[ch]) { result += MISC[ch]; i++; }&lt;br /&gt;
            else { result += ch; i++; }&lt;br /&gt;
        }&lt;br /&gt;
        return result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var SCRIPT_MAP = {&lt;br /&gt;
        kn: {&lt;br /&gt;
            &#039;अ&#039;: &#039;ಅ&#039;, &#039;आ&#039;: &#039;ಆ&#039;, &#039;इ&#039;: &#039;ಇ&#039;, &#039;ई&#039;: &#039;ಈ&#039;, &#039;उ&#039;: &#039;ಉ&#039;, &#039;ऊ&#039;: &#039;ಊ&#039;, &#039;ऋ&#039;: &#039;ಋ&#039;,&lt;br /&gt;
            &#039;ए&#039;: &#039;ಏ&#039;, &#039;ऐ&#039;: &#039;ಐ&#039;, &#039;ओ&#039;: &#039;ಓ&#039;, &#039;औ&#039;: &#039;ಔ&#039;, &#039;ऽ&#039;: &#039;ಽ&#039;,&lt;br /&gt;
            &#039;क&#039;: &#039;ಕ&#039;, &#039;ख&#039;: &#039;ಖ&#039;, &#039;ग&#039;: &#039;ಗ&#039;, &#039;घ&#039;: &#039;ಘ&#039;, &#039;ङ&#039;: &#039;ಙ&#039;,&lt;br /&gt;
            &#039;च&#039;: &#039;ಚ&#039;, &#039;छ&#039;: &#039;ಛ&#039;, &#039;ज&#039;: &#039;ಜ&#039;, &#039;झ&#039;: &#039;ಝ&#039;, &#039;ञ&#039;: &#039;ಞ&#039;,&lt;br /&gt;
            &#039;ट&#039;: &#039;ಟ&#039;, &#039;ठ&#039;: &#039;ಠ&#039;, &#039;ड&#039;: &#039;ಡ&#039;, &#039;ढ&#039;: &#039;ಢ&#039;, &#039;ण&#039;: &#039;ಣ&#039;,&lt;br /&gt;
            &#039;त&#039;: &#039;ತ&#039;, &#039;थ&#039;: &#039;ಥ&#039;, &#039;द&#039;: &#039;ದ&#039;, &#039;ध&#039;: &#039;ಧ&#039;, &#039;न&#039;: &#039;ನ&#039;,&lt;br /&gt;
            &#039;प&#039;: &#039;ಪ&#039;, &#039;फ&#039;: &#039;ಫ&#039;, &#039;ब&#039;: &#039;ಬ&#039;, &#039;भ&#039;: &#039;ಭ&#039;, &#039;म&#039;: &#039;ಮ&#039;,&lt;br /&gt;
            &#039;य&#039;: &#039;ಯ&#039;, &#039;र&#039;: &#039;ರ&#039;, &#039;ल&#039;: &#039;ಲ&#039;, &#039;व&#039;: &#039;ವ&#039;,&lt;br /&gt;
            &#039;श&#039;: &#039;ಶ&#039;, &#039;ष&#039;: &#039;ಷ&#039;, &#039;स&#039;: &#039;ಸ&#039;, &#039;ह&#039;: &#039;ಹ&#039;,&lt;br /&gt;
            &#039;ा&#039;: &#039;ಾ&#039;, &#039;ि&#039;: &#039;ಿ&#039;, &#039;ी&#039;: &#039;ೀ&#039;, &#039;ु&#039;: &#039;ು&#039;, &#039;ू&#039;: &#039;ೂ&#039;,&lt;br /&gt;
            &#039;ृ&#039;: &#039;ೃ&#039;, &#039;े&#039;: &#039;ೇ&#039;, &#039;ै&#039;: &#039;ೈ&#039;, &#039;ो&#039;: &#039;ೋ&#039;, &#039;ौ&#039;: &#039;ೌ&#039;,&lt;br /&gt;
            &#039;ं&#039;: &#039;ಂ&#039;, &#039;ः&#039;: &#039;ಃ&#039;, &#039;्&#039;: &#039;್&#039;,&lt;br /&gt;
            &#039;०&#039;: &#039;೦&#039;, &#039;१&#039;: &#039;೧&#039;, &#039;२&#039;: &#039;೨&#039;, &#039;३&#039;: &#039;೩&#039;, &#039;४&#039;: &#039;೪&#039;,&lt;br /&gt;
            &#039;५&#039;: &#039;೫&#039;, &#039;६&#039;: &#039;೬&#039;, &#039;७&#039;: &#039;೭&#039;, &#039;८&#039;: &#039;೮&#039;, &#039;९&#039;: &#039;೯&#039;&lt;br /&gt;
        },&lt;br /&gt;
        ta: {&lt;br /&gt;
            &#039;अ&#039;: &#039;அ&#039;, &#039;आ&#039;: &#039;ஆ&#039;, &#039;इ&#039;: &#039;இ&#039;, &#039;ई&#039;: &#039;ஈ&#039;, &#039;उ&#039;: &#039;உ&#039;, &#039;ऊ&#039;: &#039;ஊ&#039;,&lt;br /&gt;
            &#039;ऋ&#039;: &#039;ரு&#039;, &#039;ॠ&#039;: &#039;ரூ&#039;,&lt;br /&gt;
            &#039;ए&#039;: &#039;ஏ&#039;, &#039;ऐ&#039;: &#039;ஐ&#039;, &#039;ओ&#039;: &#039;ஓ&#039;, &#039;औ&#039;: &#039;ஔ&#039;,&lt;br /&gt;
            &#039;क&#039;: &#039;க&#039;, &#039;ख&#039;: &#039;க&#039;, &#039;ग&#039;: &#039;க&#039;, &#039;घ&#039;: &#039;க&#039;, &#039;ङ&#039;: &#039;ங&#039;,&lt;br /&gt;
            &#039;च&#039;: &#039;ச&#039;, &#039;छ&#039;: &#039;ச&#039;, &#039;ज&#039;: &#039;ஜ&#039;, &#039;झ&#039;: &#039;ஜ&#039;, &#039;ञ&#039;: &#039;ஞ&#039;,&lt;br /&gt;
            &#039;ட&#039;: &#039;ட&#039;, &#039;ठ&#039;: &#039;ட&#039;, &#039;ड&#039;: &#039;ட&#039;, &#039;ढ&#039;: &#039;ட&#039;, &#039;ண&#039;: &#039;ண&#039;,&lt;br /&gt;
            &#039;त&#039;: &#039;த&#039;, &#039;थ&#039;: &#039;த&#039;, &#039;द&#039;: &#039;த&#039;, &#039;ध&#039;: &#039;த&#039;, &#039;न&#039;: &#039;ந&#039;,&lt;br /&gt;
            &#039;प&#039;: &#039;ப&#039;, &#039;फ&#039;: &#039;ப&#039;, &#039;ब&#039;: &#039;ப&#039;, &#039;भ&#039;: &#039;ப&#039;, &#039;म&#039;: &#039;ம&#039;,&lt;br /&gt;
            &#039;य&#039;: &#039;ய&#039;, &#039;र&#039;: &#039;ர&#039;, &#039;ल&#039;: &#039;ல&#039;, &#039;ळ&#039;: &#039;ழ&#039;, &#039;व&#039;: &#039;வ&#039;,&lt;br /&gt;
            &#039;श&#039;: &#039;ஶ&#039;, &#039;ष&#039;: &#039;ஷ&#039;, &#039;स&#039;: &#039;ஸ&#039;, &#039;ह&#039;: &#039;ஹ&#039;,&lt;br /&gt;
            &#039;ा&#039;: &#039;ா&#039;, &#039;ि&#039;: &#039;ி&#039;, &#039;ी&#039;: &#039;ீ&#039;, &#039;ु&#039;: &#039;ு&#039;, &#039;ू&#039;: &#039;ூ&#039;,&lt;br /&gt;
            &#039;ृ&#039;: &#039;ு&#039;, &#039;ॄ&#039;: &#039;ூ&#039;,&lt;br /&gt;
            &#039;े&#039;: &#039;ே&#039;, &#039;ை&#039;: &#039;ை&#039;, &#039;ो&#039;: &#039;ோ&#039;, &#039;ौ&#039;: &#039;ௌ&#039;,&lt;br /&gt;
            &#039;ं&#039;: &#039;ம்&#039;, &#039;ः&#039;: &#039;:&#039;, &#039;ँ&#039;: &#039;ம்&#039;, &#039;्&#039;: &#039;்&#039;, &#039;ॐ&#039;: &#039;ௐ&#039;, &#039;ऽ&#039;: &#039;ௗ&#039;,&lt;br /&gt;
            &#039;०&#039;: &#039;0&#039;, &#039;१&#039;: &#039;1&#039;, &#039;२&#039;: &#039;2&#039;, &#039;३&#039;: &#039;3&#039;, &#039;४&#039;: &#039;4&#039;,&lt;br /&gt;
            &#039;५&#039;: &#039;5&#039;, &#039;६&#039;: &#039;6&#039;, &#039;७&#039;: &#039;7&#039;, &#039;८&#039;: &#039;8&#039;, &#039;९&#039;: &#039;9&#039;&lt;br /&gt;
        }&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    var PRE = [&lt;br /&gt;
        [/ङ्क/g, &#039;ंक&#039;], [/ङ्ख/g, &#039;ंख&#039;], [/ङ्ग/g, &#039;ंग&#039;], [/ङ्घ/g, &#039;ंघ&#039;],&lt;br /&gt;
        [/ञ्च/g, &#039;ंच&#039;], [/ञ्ज/g, &#039;ंज&#039;], [/ण्ट/g, &#039;ंट&#039;], [/ण्ड/g, &#039;ंड&#039;],&lt;br /&gt;
        [/न्त/g, &#039;ंत&#039;], [/न्द/g, &#039;ंद&#039;], [/म्ब/g, &#039;ंब&#039;], [/म्भ/g, &#039;ंभ&#039;]&lt;br /&gt;
    ];&lt;br /&gt;
&lt;br /&gt;
    function transliterateText(text, script) {&lt;br /&gt;
        if (script === &#039;en&#039;) return devanagariToIAST(text);&lt;br /&gt;
        var map = SCRIPT_MAP[script];&lt;br /&gt;
        if (!map) return text;&lt;br /&gt;
        var t = text;&lt;br /&gt;
        PRE.forEach(function (p) { t = t.replace(p[0], p[1]); });&lt;br /&gt;
        return Array.from(t).map(function (ch) {&lt;br /&gt;
            return map[ch] !== undefined ? map[ch] : ch;&lt;br /&gt;
        }).join(&#039;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var translatableSpans = [];&lt;br /&gt;
&lt;br /&gt;
    function tagTextNodes() {&lt;br /&gt;
        var content = document.querySelector(&#039;.mw-parser-output&#039;);&lt;br /&gt;
        if (content) {&lt;br /&gt;
            var walker = document.createTreeWalker(content, NodeFilter.SHOW_TEXT);&lt;br /&gt;
            var nodes = [];&lt;br /&gt;
            while (walker.nextNode()) nodes.push(walker.currentNode);&lt;br /&gt;
            nodes.forEach(function (node) {&lt;br /&gt;
                var p = node.parentNode;&lt;br /&gt;
                if (!p) return;&lt;br /&gt;
                if (p.hasAttribute &amp;amp;&amp;amp; p.hasAttribute(&#039;data-deva&#039;)) return;&lt;br /&gt;
                if (p.closest) {&lt;br /&gt;
                    if (p.closest(&#039;.gr-controls&#039;)) return;&lt;br /&gt;
                    if (p.closest(&#039;.mw-editsection&#039;)) return;&lt;br /&gt;
                }&lt;br /&gt;
                var orig = node.textContent;&lt;br /&gt;
                if (!orig.trim()) return;&lt;br /&gt;
                var span = document.createElement(&#039;span&#039;);&lt;br /&gt;
                span.setAttribute(&#039;data-deva&#039;, orig);&lt;br /&gt;
                span.textContent = orig;&lt;br /&gt;
                p.replaceChild(span, node);&lt;br /&gt;
                translatableSpans.push(span);&lt;br /&gt;
            });&lt;br /&gt;
        }&lt;br /&gt;
        document.querySelectorAll(&#039;.vector-toc .vector-toc-text&#039;).forEach(function (span) {&lt;br /&gt;
            if (span.hasAttribute(&#039;data-deva&#039;)) return;&lt;br /&gt;
            var orig = span.textContent;&lt;br /&gt;
            if (!orig.trim()) return;&lt;br /&gt;
            span.setAttribute(&#039;data-deva&#039;, orig);&lt;br /&gt;
            translatableSpans.push(span);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function applyScript(script) {&lt;br /&gt;
        currentScript = script;&lt;br /&gt;
        translatableSpans.forEach(function (span) {&lt;br /&gt;
            if (!span.parentNode) return;&lt;br /&gt;
            var orig = span.getAttribute(&#039;data-deva&#039;);&lt;br /&gt;
            if (!orig) return;&lt;br /&gt;
            span.textContent = (script === &#039;deva&#039;)&lt;br /&gt;
                ? orig&lt;br /&gt;
                : transliterateText(orig, script);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function _isNoTocPage() {&lt;br /&gt;
        var pn = (window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get(&#039;wgPageName&#039;)) || &#039;&#039;;&lt;br /&gt;
        return pn === &#039;Main_Page&#039; || /^[A-Za-z0-9_]+:About$/.test(pn);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function renameTocTitle() {&lt;br /&gt;
        if (_isNoTocPage()) return;&lt;br /&gt;
        var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
        if (!toc) return;&lt;br /&gt;
        var titleEl = toc.querySelector(&#039;.vector-toc-title&#039;) || toc.querySelector(&#039;.vector-pinnable-header-label&#039;);&lt;br /&gt;
        if (!titleEl) return;&lt;br /&gt;
        var LABEL = &#039;विषयसूची&#039;;&lt;br /&gt;
        var span = titleEl.querySelector(&#039;.gr-toc-title&#039;);&lt;br /&gt;
        if (!span) {&lt;br /&gt;
            titleEl.innerHTML = &#039;&#039;;&lt;br /&gt;
            span = document.createElement(&#039;span&#039;);&lt;br /&gt;
            span.className = &#039;gr-toc-title&#039;;&lt;br /&gt;
            span.setAttribute(&#039;data-deva&#039;, LABEL);&lt;br /&gt;
            titleEl.appendChild(span);&lt;br /&gt;
            translatableSpans.push(span);&lt;br /&gt;
        }&lt;br /&gt;
        span.textContent = currentScript === &#039;deva&#039; ? LABEL : transliterateText(LABEL, currentScript);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function removeTocBeginning() {&lt;br /&gt;
        if (_isNoTocPage()) return;&lt;br /&gt;
        var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
        if (!toc) return;&lt;br /&gt;
        var el = toc.querySelector(&#039;#vector-toc-beginning&#039;);&lt;br /&gt;
        if (!el) {&lt;br /&gt;
            var items = toc.querySelectorAll(&#039;.vector-toc-list-item&#039;);&lt;br /&gt;
            for (var i = 0; i &amp;lt; items.length; i++) {&lt;br /&gt;
                var a = items[i].querySelector(&#039;a&#039;);&lt;br /&gt;
                if (a) {&lt;br /&gt;
                    var href = a.getAttribute(&#039;href&#039;) || &#039;&#039;;&lt;br /&gt;
                    if (href.indexOf(&#039;#&#039;) === -1) { el = items[i]; break; }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        if (el &amp;amp;&amp;amp; el.parentNode) el.parentNode.removeChild(el);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function expandTocSections() {&lt;br /&gt;
        if (_isNoTocPage()) return;&lt;br /&gt;
        var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
        if (!toc) return;&lt;br /&gt;
        toc.querySelectorAll(&#039;.vector-toc-list-item-collapsed&#039;).forEach(function (li) {&lt;br /&gt;
            li.classList.remove(&#039;vector-toc-list-item-collapsed&#039;);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function injectTocDocNav() {&lt;br /&gt;
        if (_isNoTocPage()) return;&lt;br /&gt;
        var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
        if (!toc) return;&lt;br /&gt;
        if (document.getElementById(&#039;gr-toc-doc-nav&#039;)) return;&lt;br /&gt;
        var artPath = (window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get(&#039;wgArticlePath&#039;)) || &#039;/wiki/$1&#039;;&lt;br /&gt;
        var pageTitle = (window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get(&#039;wgPageName&#039;)) || &#039;&#039;;&lt;br /&gt;
        var teekaPage = document.querySelector(&#039;.gr-teeka-page&#039;);&lt;br /&gt;
        var primarySlug = teekaPage ? (teekaPage.getAttribute(&#039;data-primary&#039;) || &#039;&#039;) : &#039;&#039;;&lt;br /&gt;
        if (!primarySlug) { primarySlug = pageTitle.split(&#039;/&#039;)[0]; }&lt;br /&gt;
        if (!primarySlug) return;&lt;br /&gt;
        function wikiUrl(slug) {&lt;br /&gt;
            if (window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl) return mw.util.getUrl(slug);&lt;br /&gt;
            return artPath.replace(&#039;$1&#039;, encodeURIComponent(slug).replace(/%2F/g, &#039;/&#039;));&lt;br /&gt;
        }&lt;br /&gt;
        var docTitleEl = document.querySelector(&#039;.gr-doc-title&#039;);&lt;br /&gt;
        var hasMoolaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute(&#039;data-has-moola&#039;) === &#039;1&#039;;&lt;br /&gt;
        var hasUllekhaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute(&#039;data-has-ullekha&#039;) === &#039;1&#039;;&lt;br /&gt;
        var showMoolaPage = !teekaPage &amp;amp;&amp;amp; hasMoolaPage;&lt;br /&gt;
        var showMoolaBack = !!teekaPage;&lt;br /&gt;
        var showUllekha = hasUllekhaPage || !!teekaPage;&lt;br /&gt;
        if (!showMoolaPage &amp;amp;&amp;amp; !showMoolaBack &amp;amp;&amp;amp; !showUllekha) return;&lt;br /&gt;
        var nav = document.createElement(&#039;div&#039;);&lt;br /&gt;
        nav.id = &#039;gr-toc-doc-nav&#039;;&lt;br /&gt;
        nav.setAttribute(&#039;class&#039;, &#039;toc-main-links&#039;);&lt;br /&gt;
        function makeBtn(href, label) {&lt;br /&gt;
            var a = document.createElement(&#039;a&#039;);&lt;br /&gt;
            a.href = href;&lt;br /&gt;
            a.setAttribute(&#039;class&#039;, &#039;toc-main-link-item&#039;);&lt;br /&gt;
            var lspan = document.createElement(&#039;span&#039;);&lt;br /&gt;
            lspan.setAttribute(&#039;data-deva&#039;, label);&lt;br /&gt;
            lspan.textContent = (currentScript &amp;amp;&amp;amp; currentScript !== &#039;deva&#039;) ? transliterateText(label, currentScript) : label;&lt;br /&gt;
            translatableSpans.push(lspan);&lt;br /&gt;
            a.appendChild(lspan);&lt;br /&gt;
            a.addEventListener(&#039;mouseover&#039;, function () { this.style.opacity = &#039;0.72&#039;; });&lt;br /&gt;
            a.addEventListener(&#039;mouseout&#039;, function () { this.style.opacity = &#039;1&#039;; });&lt;br /&gt;
            return a;&lt;br /&gt;
        }&lt;br /&gt;
        if (showMoolaPage) nav.appendChild(makeBtn(wikiUrl(primarySlug + &#039;/Moola&#039;), &#039;मूलम्&#039;));&lt;br /&gt;
        if (showMoolaBack) nav.appendChild(makeBtn(wikiUrl(primarySlug), &#039;मूल&#039;));&lt;br /&gt;
        if (showUllekha) nav.appendChild(makeBtn(wikiUrl(primarySlug + &#039;/Ullekha&#039;), &#039;उल्लेख&#039;));&lt;br /&gt;
        var tocContents = toc.querySelector(&#039;.vector-toc-contents&#039;);&lt;br /&gt;
        if (tocContents) toc.insertBefore(nav, tocContents);&lt;br /&gt;
        else toc.appendChild(nav);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var _headingObserver = null;&lt;br /&gt;
&lt;br /&gt;
    function attachHeadingObserver() {&lt;br /&gt;
        if (_isNoTocPage()) return;&lt;br /&gt;
        if (_headingObserver) return;&lt;br /&gt;
        if (!window.IntersectionObserver) return;&lt;br /&gt;
        var ACTIVE_COLOR = &#039;#f57c00&#039;;&lt;br /&gt;
        var _activeId = null;&lt;br /&gt;
        var content = document.querySelector(&#039;.mw-parser-output&#039;);&lt;br /&gt;
        if (!content) return;&lt;br /&gt;
        var headings = Array.from(content.querySelectorAll(&#039;h1[id],h2[id],h3[id],h4[id],h5[id],h6[id]&#039;));&lt;br /&gt;
        if (!headings.length) return;&lt;br /&gt;
        var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
        if (!toc) return;&lt;br /&gt;
        function getTocLink(id) { return toc.querySelector(&#039;a[href=&amp;quot;#&#039; + CSS.escape(id) + &#039;&amp;quot;]&#039;); }&lt;br /&gt;
        function getTocLi(id) { var a = getTocLink(id); return a ? a.closest(&#039;.vector-toc-list-item&#039;) : null; }&lt;br /&gt;
        function clearActive() {&lt;br /&gt;
            toc.querySelectorAll(&#039;.vector-toc-list-item&#039;).forEach(function (li) {&lt;br /&gt;
                li.classList.remove(&#039;vector-toc-list-item-active&#039;);&lt;br /&gt;
                var lnk = li.querySelector(&#039;.vector-toc-link&#039;);&lt;br /&gt;
                if (!lnk) return;&lt;br /&gt;
                lnk.style.removeProperty(&#039;color&#039;);&lt;br /&gt;
                lnk.style.setProperty(&#039;font-weight&#039;, &#039;400&#039;, &#039;important&#039;);&lt;br /&gt;
                lnk.querySelectorAll(&#039;*&#039;).forEach(function (el) { el.style.removeProperty(&#039;color&#039;); el.style.setProperty(&#039;font-weight&#039;, &#039;400&#039;, &#039;important&#039;); });&lt;br /&gt;
            });&lt;br /&gt;
        }&lt;br /&gt;
        function setActive(id) {&lt;br /&gt;
            if (_activeId === id) return;&lt;br /&gt;
            _activeId = id;&lt;br /&gt;
            clearActive();&lt;br /&gt;
            if (!id) return;&lt;br /&gt;
            var li = getTocLi(id);&lt;br /&gt;
            if (!li) return;&lt;br /&gt;
            li.classList.add(&#039;vector-toc-list-item-active&#039;);&lt;br /&gt;
            var hasActiveChild = !!li.querySelector(&#039;.vector-toc-list-item .vector-toc-list-item-active&#039;);&lt;br /&gt;
            if (!hasActiveChild) {&lt;br /&gt;
                var lnk = li.querySelector(&#039;.vector-toc-link&#039;);&lt;br /&gt;
                if (lnk) {&lt;br /&gt;
                    lnk.style.setProperty(&#039;color&#039;, ACTIVE_COLOR, &#039;important&#039;);&lt;br /&gt;
                    lnk.style.setProperty(&#039;font-weight&#039;, &#039;700&#039;, &#039;important&#039;);&lt;br /&gt;
                    lnk.querySelectorAll(&#039;*&#039;).forEach(function (el) { el.style.setProperty(&#039;color&#039;, ACTIVE_COLOR, &#039;important&#039;); el.style.setProperty(&#039;font-weight&#039;, &#039;700&#039;, &#039;important&#039;); });&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            var anc = li.parentNode;&lt;br /&gt;
            while (anc &amp;amp;&amp;amp; anc !== toc) {&lt;br /&gt;
                if (anc.classList) anc.classList.remove(&#039;vector-toc-list-item-collapsed&#039;);&lt;br /&gt;
                if (anc.tagName === &#039;UL&#039; || anc.tagName === &#039;LI&#039;) anc.style.removeProperty(&#039;display&#039;);&lt;br /&gt;
                anc = anc.parentNode;&lt;br /&gt;
            }&lt;br /&gt;
            var sticky = document.querySelector(&#039;.vector-sticky-pinned-container&#039;);&lt;br /&gt;
            var scrollEl = sticky || toc;&lt;br /&gt;
            if (scrollEl.scrollHeight &amp;gt; scrollEl.clientHeight) {&lt;br /&gt;
                var lr = li.getBoundingClientRect();&lt;br /&gt;
                var cr = scrollEl.getBoundingClientRect();&lt;br /&gt;
                if (lr.top &amp;lt; cr.top + 8 || lr.bottom &amp;gt; cr.bottom - 8) {&lt;br /&gt;
                    scrollEl.scrollTop += lr.top - cr.top - scrollEl.clientHeight / 2 + li.offsetHeight / 2;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        var _visible = new Set();&lt;br /&gt;
        _headingObserver = new IntersectionObserver(function (entries) {&lt;br /&gt;
            entries.forEach(function (entry) {&lt;br /&gt;
                if (entry.isIntersecting) _visible.add(entry.target.id);&lt;br /&gt;
                else _visible.delete(entry.target.id);&lt;br /&gt;
            });&lt;br /&gt;
            var topId = null, topY = Infinity;&lt;br /&gt;
            _visible.forEach(function (id) {&lt;br /&gt;
                var el = document.getElementById(id);&lt;br /&gt;
                if (el) { var y = el.getBoundingClientRect().top; if (y &amp;gt;= 0 &amp;amp;&amp;amp; y &amp;lt; topY) { topY = y; topId = id; } }&lt;br /&gt;
            });&lt;br /&gt;
            if (!topId) {&lt;br /&gt;
                var bestY = -Infinity;&lt;br /&gt;
                headings.forEach(function (h) { var y = h.getBoundingClientRect().top; if (y &amp;lt; 0 &amp;amp;&amp;amp; y &amp;gt; bestY) { bestY = y; topId = h.id; } });&lt;br /&gt;
            }&lt;br /&gt;
            setActive(topId || null);&lt;br /&gt;
        }, { rootMargin: &#039;-60px 0px -65% 0px&#039;, threshold: 0 });&lt;br /&gt;
        headings.forEach(function (h) { _headingObserver.observe(h); });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function setupToc() {&lt;br /&gt;
        if (_isNoTocPage()) return;&lt;br /&gt;
        var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
        if (!toc) return;&lt;br /&gt;
        removeTocBeginning();&lt;br /&gt;
        renameTocTitle();&lt;br /&gt;
        expandTocSections();&lt;br /&gt;
        injectTocDocNav();&lt;br /&gt;
        attachHeadingObserver();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function init() {&lt;br /&gt;
        var HIDE_IDS = [&#039;vector-appearance&#039;, &#039;vector-appearance-pinned-container&#039;, &#039;vector-appearance-unpinned-container&#039;];&lt;br /&gt;
        function removeHiddenEls() {&lt;br /&gt;
            HIDE_IDS.forEach(function (id) { var el = document.getElementById(id); if (el &amp;amp;&amp;amp; el.parentNode) el.parentNode.removeChild(el); });&lt;br /&gt;
            var pt = document.getElementById(&#039;vector-page-tools&#039;) || document.querySelector(&#039;.vector-page-tools-pinned-container&#039;);&lt;br /&gt;
            if (pt) pt.querySelectorAll(&#039;[aria-controls=&amp;quot;vector-appearance&amp;quot;]&#039;).forEach(function (el) { if (el.parentNode) el.parentNode.removeChild(el); });&lt;br /&gt;
        }&lt;br /&gt;
        removeHiddenEls();&lt;br /&gt;
        (function detectTeekaMode() {&lt;br /&gt;
            var tp = document.querySelector(&#039;.gr-teeka-page&#039;);&lt;br /&gt;
            if (!tp) return;&lt;br /&gt;
            var primary = tp.getAttribute(&#039;data-primary&#039;) || &#039;&#039;;&lt;br /&gt;
            var artPath = (window.mw &amp;amp;&amp;amp; mw.config.get(&#039;wgArticlePath&#039;)) || &#039;/wiki/$1&#039;;&lt;br /&gt;
            var mainUrl = artPath.replace(&#039;$1&#039;, primary);&lt;br /&gt;
            var refParam = window.location.search.match(/[?&amp;amp;]ref=([01])/);&lt;br /&gt;
            if (refParam) { document.body.classList.add(refParam[1] === &#039;1&#039; ? &#039;gr-ref-mode&#039; : &#039;gr-standalone&#039;); return; }&lt;br /&gt;
            var ref = document.referrer || &#039;&#039;;&lt;br /&gt;
            document.body.classList.add((ref &amp;amp;&amp;amp; primary &amp;amp;&amp;amp; ref.indexOf(mainUrl) !== -1) ? &#039;gr-ref-mode&#039; : &#039;gr-standalone&#039;);&lt;br /&gt;
        }());&lt;br /&gt;
        if (window.MutationObserver) {&lt;br /&gt;
            var hideObs = new MutationObserver(function (mutations) {&lt;br /&gt;
                var dirty = false;&lt;br /&gt;
                mutations.forEach(function (m) { if (m.addedNodes.length) dirty = true; });&lt;br /&gt;
                if (dirty) removeHiddenEls();&lt;br /&gt;
            });&lt;br /&gt;
            hideObs.observe(document.body, { childList: true, subtree: false });&lt;br /&gt;
            setTimeout(function () { hideObs.disconnect(); }, 6000);&lt;br /&gt;
        }&lt;br /&gt;
        var content = document.querySelector(&#039;.mw-parser-output&#039;);&lt;br /&gt;
        var alreadyTagged = content &amp;amp;&amp;amp; content.querySelector(&#039;[data-deva]&#039;);&lt;br /&gt;
        if (!alreadyTagged) { translatableSpans = []; tagTextNodes(); }&lt;br /&gt;
        else {&lt;br /&gt;
            document.querySelectorAll(&#039;.vector-toc .vector-toc-text:not([data-deva])&#039;).forEach(function (span) {&lt;br /&gt;
                var orig = span.textContent; if (!orig.trim()) return;&lt;br /&gt;
                span.setAttribute(&#039;data-deva&#039;, orig); translatableSpans.push(span);&lt;br /&gt;
            });&lt;br /&gt;
        }&lt;br /&gt;
        var saved = (function () { try { return localStorage.getItem(LS_SCRIPT_KEY); } catch (e) { return null; } }());&lt;br /&gt;
        if (saved &amp;amp;&amp;amp; saved !== &#039;deva&#039;) { applyScript(saved); } else { currentScript = &#039;deva&#039;; }&lt;br /&gt;
        setTimeout(setupToc, 200);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    window.addEventListener(&#039;gr-script-change&#039;, function (e) {&lt;br /&gt;
        var script = e &amp;amp;&amp;amp; e.detail &amp;amp;&amp;amp; e.detail.script;&lt;br /&gt;
        if (script) applyScript(script);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    window.addEventListener(&#039;gr-new-content&#039;, function (e) {&lt;br /&gt;
        var container = e &amp;amp;&amp;amp; e.detail &amp;amp;&amp;amp; e.detail.container;&lt;br /&gt;
        if (!container) return;&lt;br /&gt;
        var walker = document.createTreeWalker(container, NodeFilter.SHOW_TEXT);&lt;br /&gt;
        var nodes = [];&lt;br /&gt;
        while (walker.nextNode()) nodes.push(walker.currentNode);&lt;br /&gt;
        nodes.forEach(function (node) {&lt;br /&gt;
            var p = node.parentNode;&lt;br /&gt;
            if (!p || (p.hasAttribute &amp;amp;&amp;amp; p.hasAttribute(&#039;data-deva&#039;))) return;&lt;br /&gt;
            var orig = node.textContent;&lt;br /&gt;
            if (!orig.trim()) return;&lt;br /&gt;
            var span = document.createElement(&#039;span&#039;);&lt;br /&gt;
            span.setAttribute(&#039;data-deva&#039;, orig);&lt;br /&gt;
            span.textContent = currentScript !== &#039;deva&#039; ? transliterateText(orig, currentScript) : orig;&lt;br /&gt;
            p.replaceChild(span, node);&lt;br /&gt;
            translatableSpans.push(span);&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    try {&lt;br /&gt;
        var _grBC = new BroadcastChannel(&#039;gr-script&#039;);&lt;br /&gt;
        _grBC.onmessage = function (e) {&lt;br /&gt;
            var script = e &amp;amp;&amp;amp; e.data &amp;amp;&amp;amp; e.data.script;&lt;br /&gt;
            if (script) { currentScript = script; var sel = document.querySelector(&#039;.gr-script-sel&#039;); if (sel) sel.value = script; applyScript(script); }&lt;br /&gt;
        };&lt;br /&gt;
    } catch (e) { }&lt;br /&gt;
&lt;br /&gt;
    if (window.mw) {&lt;br /&gt;
        mw.hook(&#039;wikipage.content&#039;).add(function () {&lt;br /&gt;
            setTimeout(function () {&lt;br /&gt;
                var content = document.querySelector(&#039;.mw-parser-output&#039;);&lt;br /&gt;
                var alreadyTagged = content &amp;amp;&amp;amp; content.querySelector(&#039;[data-deva]&#039;);&lt;br /&gt;
                if (!alreadyTagged) { translatableSpans = []; tagTextNodes(); }&lt;br /&gt;
                else {&lt;br /&gt;
                    document.querySelectorAll(&#039;.vector-toc .vector-toc-text:not([data-deva])&#039;).forEach(function (span) {&lt;br /&gt;
                        var orig = span.textContent; if (!orig.trim()) return;&lt;br /&gt;
                        span.setAttribute(&#039;data-deva&#039;, orig); translatableSpans.push(span);&lt;br /&gt;
                    });&lt;br /&gt;
                }&lt;br /&gt;
                if (currentScript !== &#039;deva&#039;) applyScript(currentScript);&lt;br /&gt;
                setupToc();&lt;br /&gt;
            }, 150);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) { document.addEventListener(&#039;DOMContentLoaded&#039;, init); }&lt;br /&gt;
    else { init(); }&lt;br /&gt;
&lt;br /&gt;
}());   /* ← end of main IIFE */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Inject &amp;quot;Help&amp;quot; and &amp;quot;About&amp;quot; links into the header ─────────────────&lt;br /&gt;
(function () {&lt;br /&gt;
    function wikiHref(title) {&lt;br /&gt;
        if (window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl) return mw.util.getUrl(title);&lt;br /&gt;
        var ap = (window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get(&#039;wgArticlePath&#039;)) || &#039;/wiki/$1&#039;;&lt;br /&gt;
        return ap.replace(&#039;$1&#039;, title);&lt;br /&gt;
    }&lt;br /&gt;
    var linkStyle = [&#039;color:rgba(255,255,255,0.88)&#039;, &#039;font-size:0.88em&#039;, &#039;font-family:system-ui,sans-serif&#039;, &#039;font-weight:500&#039;, &#039;text-decoration:none&#039;, &#039;padding:4px 10px&#039;, &#039;border-radius:4px&#039;, &#039;margin-right:4px&#039;, &#039;transition:color 0.15s,background 0.15s&#039;, &#039;white-space:nowrap&#039;].join(&#039;;&#039;);&lt;br /&gt;
    function makeHeaderLink(id, href, label) {&lt;br /&gt;
        var a = document.createElement(&#039;a&#039;);&lt;br /&gt;
        a.id = id; a.href = href; a.textContent = label; a.style.cssText = linkStyle;&lt;br /&gt;
        a.addEventListener(&#039;mouseover&#039;, function () { this.style.color = &#039;#fff&#039;; this.style.background = &#039;rgba(255,255,255,0.12)&#039;; });&lt;br /&gt;
        a.addEventListener(&#039;mouseout&#039;, function () { this.style.color = &#039;rgba(255,255,255,0.88)&#039;; this.style.background = &#039;transparent&#039;; });&lt;br /&gt;
        return a;&lt;br /&gt;
    }&lt;br /&gt;
    function injectHeaderLinks() {&lt;br /&gt;
        if (document.getElementById(&#039;gr-about-link&#039;)) return;&lt;br /&gt;
        var headerEnd = document.querySelector(&#039;.vector-header-end&#039;) || document.querySelector(&#039;#vector-user-links&#039;) || document.querySelector(&#039;.mw-header&#039;);&lt;br /&gt;
        if (!headerEnd) return;&lt;br /&gt;
        var helpLink = makeHeaderLink(&#039;gr-help-link&#039;, wikiHref(&#039;My_wiki:Help&#039;), &#039;Help&#039;);&lt;br /&gt;
        var aboutLink = makeHeaderLink(&#039;gr-about-link&#039;, wikiHref(&#039;My_wiki:About&#039;), &#039;About&#039;);&lt;br /&gt;
&lt;br /&gt;
        var userName = window.mw ? mw.config.get(&#039;wgUserName&#039;) : null;&lt;br /&gt;
        var isAnon = !userName || (window.mw &amp;amp;&amp;amp; mw.config.get(&#039;wgUserId&#039;) === null);&lt;br /&gt;
&lt;br /&gt;
        // Build the trailing auth element (Login link for anon, dropdown for logged-in)&lt;br /&gt;
        var authEl = null;&lt;br /&gt;
        if (isAnon) {&lt;br /&gt;
            if (!document.getElementById(&#039;gr-header-login&#039;)) {&lt;br /&gt;
                authEl = makeHeaderLink(&#039;gr-header-login&#039;, wikiHref(&#039;Special:UserLogin&#039;), &#039;Login&#039;);&lt;br /&gt;
            }&lt;br /&gt;
        } else if (!document.getElementById(&#039;gr-header-user&#039;)) {&lt;br /&gt;
            authEl = buildHeaderUserDropdown(userName);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var ul = document.querySelector(&#039;.vector-user-links&#039;) || document.querySelector(&#039;#pt-userpage&#039;);&lt;br /&gt;
        if (ul &amp;amp;&amp;amp; ul.parentNode === headerEnd) {&lt;br /&gt;
            if (authEl) headerEnd.insertBefore(authEl, ul);&lt;br /&gt;
            headerEnd.insertBefore(aboutLink, authEl || ul);&lt;br /&gt;
            headerEnd.insertBefore(helpLink, aboutLink);&lt;br /&gt;
        } else {&lt;br /&gt;
            headerEnd.appendChild(helpLink);&lt;br /&gt;
            headerEnd.appendChild(aboutLink);&lt;br /&gt;
            if (authEl) headerEnd.appendChild(authEl);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function buildHeaderUserDropdown(userName) {&lt;br /&gt;
        var wrap = document.createElement(&#039;div&#039;);&lt;br /&gt;
        wrap.id = &#039;gr-header-user&#039;;&lt;br /&gt;
        wrap.style.cssText = &#039;position:relative;display:inline-block;margin-right:4px;&#039;;&lt;br /&gt;
&lt;br /&gt;
        var trigger = document.createElement(&#039;button&#039;);&lt;br /&gt;
        trigger.id = &#039;gr-header-user-trigger&#039;;&lt;br /&gt;
        trigger.type = &#039;button&#039;;&lt;br /&gt;
        trigger.setAttribute(&#039;aria-haspopup&#039;, &#039;true&#039;);&lt;br /&gt;
        trigger.setAttribute(&#039;aria-expanded&#039;, &#039;false&#039;);&lt;br /&gt;
        trigger.style.cssText = [&lt;br /&gt;
            &#039;display:inline-flex&#039;, &#039;align-items:center&#039;, &#039;gap:5px&#039;,&lt;br /&gt;
            &#039;color:rgba(255,255,255,0.88)&#039;, &#039;font-size:0.88em&#039;,&lt;br /&gt;
            &#039;font-family:system-ui,sans-serif&#039;, &#039;font-weight:500&#039;,&lt;br /&gt;
            &#039;background:transparent&#039;, &#039;border:none&#039;, &#039;cursor:pointer&#039;,&lt;br /&gt;
            &#039;padding:4px 10px&#039;, &#039;border-radius:4px&#039;, &#039;white-space:nowrap&#039;,&lt;br /&gt;
            &#039;transition:color 0.15s,background 0.15s&#039;&lt;br /&gt;
        ].join(&#039;;&#039;);&lt;br /&gt;
        trigger.innerHTML =&lt;br /&gt;
            &#039;&amp;lt;span&amp;gt;&#039; + userName.replace(/&amp;lt;/g, &#039;&amp;amp;lt;&#039;) + &#039;&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
            &#039;&amp;lt;span id=&amp;quot;gr-header-caret&amp;quot; style=&amp;quot;font-size:0.8em;transition:transform 0.2s;&amp;quot;&amp;gt;\u25be&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
        trigger.addEventListener(&#039;mouseover&#039;, function () { this.style.color = &#039;#fff&#039;; this.style.background = &#039;rgba(255,255,255,0.12)&#039;; });&lt;br /&gt;
        trigger.addEventListener(&#039;mouseout&#039;, function () { if (menu.style.display === &#039;none&#039;) { this.style.color = &#039;rgba(255,255,255,0.88)&#039;; this.style.background = &#039;transparent&#039;; } });&lt;br /&gt;
&lt;br /&gt;
        var menu = document.createElement(&#039;div&#039;);&lt;br /&gt;
        menu.id = &#039;gr-header-user-menu&#039;;&lt;br /&gt;
        menu.setAttribute(&#039;role&#039;, &#039;menu&#039;);&lt;br /&gt;
        menu.style.cssText = [&lt;br /&gt;
            &#039;display:none&#039;, &#039;position:absolute&#039;, &#039;top:100%&#039;, &#039;right:0&#039;, &#039;margin-top:4px&#039;,&lt;br /&gt;
            &#039;min-width:150px&#039;, &#039;background:#fff&#039;, &#039;border-radius:6px&#039;,&lt;br /&gt;
            &#039;box-shadow:0 4px 16px rgba(0,0,0,0.18)&#039;, &#039;overflow:hidden&#039;, &#039;z-index:1000&#039;&lt;br /&gt;
        ].join(&#039;;&#039;);&lt;br /&gt;
&lt;br /&gt;
        var itemStyle = &#039;display:block;padding:10px 16px;font-size:0.9em;color:#2c1810;text-decoration:none;font-family:system-ui,sans-serif;background:#fff;&#039;;&lt;br /&gt;
        function makeMenuItem(href, label, id) {&lt;br /&gt;
            var a = document.createElement(&#039;a&#039;);&lt;br /&gt;
            a.href = href; a.setAttribute(&#039;role&#039;, &#039;menuitem&#039;);&lt;br /&gt;
            a.textContent = label; a.style.cssText = itemStyle;&lt;br /&gt;
            if (id) a.id = id;&lt;br /&gt;
            a.addEventListener(&#039;mouseover&#039;, function () { this.style.background = &#039;#f5efe9&#039;; });&lt;br /&gt;
            a.addEventListener(&#039;mouseout&#039;, function () { this.style.background = &#039;#fff&#039;; });&lt;br /&gt;
            return a;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        menu.appendChild(makeMenuItem(wikiHref(&#039;Special:Profile&#039;), &#039;Profile&#039;));&lt;br /&gt;
        menu.appendChild(makeMenuItem(&#039;#&#039;, &#039;Log out&#039;, &#039;gr-header-logout&#039;));&lt;br /&gt;
&lt;br /&gt;
        function setOpen(open) {&lt;br /&gt;
            menu.style.display = open ? &#039;block&#039; : &#039;none&#039;;&lt;br /&gt;
            trigger.setAttribute(&#039;aria-expanded&#039;, open ? &#039;true&#039; : &#039;false&#039;);&lt;br /&gt;
            var caret = document.getElementById(&#039;gr-header-caret&#039;);&lt;br /&gt;
            if (caret) caret.style.transform = open ? &#039;rotate(180deg)&#039; : &#039;&#039;;&lt;br /&gt;
            if (open) { trigger.style.color = &#039;#fff&#039;; trigger.style.background = &#039;rgba(255,255,255,0.12)&#039;; }&lt;br /&gt;
            else { trigger.style.color = &#039;rgba(255,255,255,0.88)&#039;; trigger.style.background = &#039;transparent&#039;; }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        trigger.addEventListener(&#039;click&#039;, function (e) {&lt;br /&gt;
            e.stopPropagation();&lt;br /&gt;
            setOpen(menu.style.display === &#039;none&#039;);&lt;br /&gt;
        });&lt;br /&gt;
        document.addEventListener(&#039;click&#039;, function (e) {&lt;br /&gt;
            if (!wrap.contains(e.target)) setOpen(false);&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        // Logout: POST with CSRF token (same approach as the desktop dropdown)&lt;br /&gt;
        menu.querySelector(&#039;#gr-header-logout&#039;).addEventListener(&#039;click&#039;, function (e) {&lt;br /&gt;
            e.preventDefault();&lt;br /&gt;
            if (window.mw &amp;amp;&amp;amp; mw.user &amp;amp;&amp;amp; mw.user.tokens) {&lt;br /&gt;
                var t = mw.user.tokens.get(&#039;csrfToken&#039;);&lt;br /&gt;
                if (t) {&lt;br /&gt;
                    var script = (mw.util &amp;amp;&amp;amp; mw.util.wikiScript) ? mw.util.wikiScript() : &#039;/index.php&#039;;&lt;br /&gt;
                    var form = document.createElement(&#039;form&#039;);&lt;br /&gt;
                    form.method = &#039;post&#039;;&lt;br /&gt;
                    form.action = script + &#039;?title=Special:UserLogout&#039;;&lt;br /&gt;
                    form.style.display = &#039;none&#039;;&lt;br /&gt;
                    form.innerHTML =&lt;br /&gt;
                        &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;wpEditToken&amp;quot; value=&amp;quot;&#039; + String(t).replace(/&amp;quot;/g, &#039;&amp;amp;quot;&#039;) + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
                        &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;title&amp;quot; value=&amp;quot;Special:UserLogout&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
                        &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;returnto&amp;quot; value=&amp;quot;Main Page&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
                    document.body.appendChild(form);&lt;br /&gt;
                    form.submit();&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            if (window.mw &amp;amp;&amp;amp; mw.Api) {&lt;br /&gt;
                new mw.Api().postWithToken(&#039;csrf&#039;, { action: &#039;logout&#039; })&lt;br /&gt;
                    .done(function () { location.href = &#039;/Main_Page&#039;; })&lt;br /&gt;
                    .fail(function () { location.href = &#039;/index.php?title=Special:UserLogout&#039;; });&lt;br /&gt;
            } else {&lt;br /&gt;
                location.href = &#039;/index.php?title=Special:UserLogout&#039;;&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        wrap.appendChild(trigger);&lt;br /&gt;
        wrap.appendChild(menu);&lt;br /&gt;
        return wrap;&lt;br /&gt;
    }&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) document.addEventListener(&#039;DOMContentLoaded&#039;, injectHeaderLinks);&lt;br /&gt;
    else injectHeaderLinks();&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Main page: by-Grantha / by-Author toggle ──────────────────────&lt;br /&gt;
(function () {&lt;br /&gt;
    function grHomeView(v) {&lt;br /&gt;
        var gView = document.getElementById(&#039;gr-view-grantha&#039;);&lt;br /&gt;
        var aView = document.getElementById(&#039;gr-view-author&#039;);&lt;br /&gt;
        var gBtn = document.getElementById(&#039;gr-toggle-grantha&#039;);&lt;br /&gt;
        var aBtn = document.getElementById(&#039;gr-toggle-author&#039;);&lt;br /&gt;
        if (!gView || !aView || !gBtn || !aBtn) return;&lt;br /&gt;
        gView.style.display = (v === &#039;grantha&#039;) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
        aView.style.display = (v === &#039;author&#039;) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
        gBtn.className = &#039;gr-toggle-btn&#039; + (v === &#039;grantha&#039; ? &#039; gr-toggle-active&#039; : &#039;&#039;);&lt;br /&gt;
        aBtn.className = &#039;gr-toggle-btn&#039; + (v === &#039;author&#039; ? &#039; gr-toggle-active&#039; : &#039;&#039;);&lt;br /&gt;
        try { localStorage.setItem(&#039;gr_home_view&#039;, v); } catch (e) { }&lt;br /&gt;
    }&lt;br /&gt;
    function initHomeToggle() {&lt;br /&gt;
        var gBtn = document.getElementById(&#039;gr-toggle-grantha&#039;);&lt;br /&gt;
        var aBtn = document.getElementById(&#039;gr-toggle-author&#039;);&lt;br /&gt;
        if (!gBtn || !aBtn) return;&lt;br /&gt;
        gBtn.addEventListener(&#039;click&#039;, function () { grHomeView(&#039;grantha&#039;); });&lt;br /&gt;
        aBtn.addEventListener(&#039;click&#039;, function () { grHomeView(&#039;author&#039;); });&lt;br /&gt;
        [gBtn, aBtn].forEach(function (btn) { btn.addEventListener(&#039;keydown&#039;, function (e) { if (e.key === &#039;Enter&#039; || e.key === &#039; &#039;) btn.click(); }); });&lt;br /&gt;
        var saved; try { saved = localStorage.getItem(&#039;gr_home_view&#039;); } catch (e) { }&lt;br /&gt;
        if (saved === &#039;author&#039;) grHomeView(&#039;author&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) document.addEventListener(&#039;DOMContentLoaded&#039;, initHomeToggle);&lt;br /&gt;
    else initHomeToggle();&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Ullekha reference link handler ─────────────────────────────────&lt;br /&gt;
(function () {&lt;br /&gt;
    function highlightOnArrival() {&lt;br /&gt;
        var search = window.location.search;&lt;br /&gt;
        if (!search) return;&lt;br /&gt;
        var m = search.match(/[?&amp;amp;]hlUllekha=([^&amp;amp;]+)/);&lt;br /&gt;
        if (!m) return;&lt;br /&gt;
        var needle;&lt;br /&gt;
        try { needle = decodeURIComponent(m[1]); } catch (e) { return; }&lt;br /&gt;
        if (!needle || needle.length &amp;lt; 4) return;&lt;br /&gt;
        function doHighlight() {&lt;br /&gt;
            var content = document.querySelector(&#039;.mw-parser-output&#039;);&lt;br /&gt;
            if (!content) return;&lt;br /&gt;
            var snippet = needle.slice(0, 40);&lt;br /&gt;
            var found = false;&lt;br /&gt;
            var spans = content.querySelectorAll(&#039;[data-deva]&#039;);&lt;br /&gt;
            for (var i = 0; i &amp;lt; spans.length &amp;amp;&amp;amp; !found; i++) {&lt;br /&gt;
                var spanEl = spans[i];&lt;br /&gt;
                var orig = spanEl.getAttribute(&#039;data-deva&#039;) || &#039;&#039;;&lt;br /&gt;
                if (orig.indexOf(snippet) === -1) continue;&lt;br /&gt;
                var idx = orig.indexOf(snippet);&lt;br /&gt;
                var hlText = orig.slice(idx, Math.min(idx + needle.length, orig.length));&lt;br /&gt;
                var mark = document.createElement(&#039;mark&#039;);&lt;br /&gt;
                mark.className = &#039;gr-ullekha-highlight&#039;;&lt;br /&gt;
                mark.style.cssText = &#039;background:#fff176;border-radius:2px;padding:0 2px;&#039;;&lt;br /&gt;
                mark.textContent = hlText;&lt;br /&gt;
                var parent = spanEl.parentNode;&lt;br /&gt;
                if (!parent) continue;&lt;br /&gt;
                var before = document.createTextNode(orig.slice(0, idx));&lt;br /&gt;
                var after = document.createTextNode(orig.slice(idx + hlText.length));&lt;br /&gt;
                parent.insertBefore(before, spanEl); parent.insertBefore(mark, spanEl); parent.insertBefore(after, spanEl); parent.removeChild(spanEl);&lt;br /&gt;
                setTimeout(function () { mark.scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; }); }, 100);&lt;br /&gt;
                found = true;&lt;br /&gt;
            }&lt;br /&gt;
            if (!found) {&lt;br /&gt;
                var walker = document.createTreeWalker(content, NodeFilter.SHOW_TEXT);&lt;br /&gt;
                while (walker.nextNode() &amp;amp;&amp;amp; !found) {&lt;br /&gt;
                    var node = walker.currentNode;&lt;br /&gt;
                    var txt = node.textContent || &#039;&#039;;&lt;br /&gt;
                    if (txt.indexOf(snippet) === -1) continue;&lt;br /&gt;
                    var idx2 = txt.indexOf(snippet);&lt;br /&gt;
                    var mark2 = document.createElement(&#039;mark&#039;);&lt;br /&gt;
                    mark2.className = &#039;gr-ullekha-highlight&#039;;&lt;br /&gt;
                    mark2.style.cssText = &#039;background:#fff176;border-radius:2px;padding:0 2px;&#039;;&lt;br /&gt;
                    mark2.textContent = txt.slice(idx2, Math.min(idx2 + needle.length, txt.length));&lt;br /&gt;
                    var p = node.parentNode;&lt;br /&gt;
                    p.insertBefore(document.createTextNode(txt.slice(0, idx2)), node);&lt;br /&gt;
                    p.insertBefore(mark2, node);&lt;br /&gt;
                    p.insertBefore(document.createTextNode(txt.slice(idx2 + mark2.textContent.length)), node);&lt;br /&gt;
                    p.removeChild(node);&lt;br /&gt;
                    setTimeout(function () { mark2.scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; }); }, 100);&lt;br /&gt;
                    found = true;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        doHighlight();&lt;br /&gt;
    }&lt;br /&gt;
    function wireUllekhaLinks() {&lt;br /&gt;
        document.querySelectorAll(&#039;.gr-ullekha-ref-link&#039;).forEach(function (wrap) {&lt;br /&gt;
            var anchor = wrap.getAttribute(&#039;data-anchor&#039;) || &#039;&#039;;&lt;br /&gt;
            var hl = wrap.getAttribute(&#039;data-hl&#039;) || &#039;&#039;;&lt;br /&gt;
            var a = wrap.querySelector(&#039;a&#039;);&lt;br /&gt;
            if (!a) return;&lt;br /&gt;
            var base = a.href.split(&#039;#&#039;)[0];&lt;br /&gt;
            var encoded = encodeURIComponent(hl);&lt;br /&gt;
            a.href = base + (hl ? &#039;?hlUllekha=&#039; + encoded : &#039;&#039;) + (anchor ? &#039;#&#039; + anchor : &#039;&#039;);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) { document.addEventListener(&#039;DOMContentLoaded&#039;, function () { highlightOnArrival(); wireUllekhaLinks(); }); }&lt;br /&gt;
    else { highlightOnArrival(); wireUllekhaLinks(); }&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
/* ── Search result highlight ──────────────────────────────────── */&lt;br /&gt;
/* EXACT REPLACEMENT for the search highlight IIFE in MediaWiki:Common.js.&lt;br /&gt;
 * Only changes from the original working version:&lt;br /&gt;
 *  - Mobile bar: full-width terracotta bottom bar instead of floating pill&lt;br /&gt;
 *  - showDismissBar: guard added (if !count return) to prevent empty bar&lt;br /&gt;
 * Everything else (storeQueryForLink, applyHighlight, wrapMatches) is&lt;br /&gt;
 * identical to the version that was working.&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
&lt;br /&gt;
    function storeQueryForLink(url, query) {&lt;br /&gt;
        try {&lt;br /&gt;
            var a = document.createElement(&#039;a&#039;);&lt;br /&gt;
            a.href = url;&lt;br /&gt;
            sessionStorage.setItem(&#039;gr_search_hl&#039;, JSON.stringify({&lt;br /&gt;
                query: query,&lt;br /&gt;
                pathname: a.pathname&lt;br /&gt;
            }));&lt;br /&gt;
        } catch (e) { }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function applyHighlight() {&lt;br /&gt;
        var stored;&lt;br /&gt;
        try {&lt;br /&gt;
            stored = JSON.parse(sessionStorage.getItem(&#039;gr_search_hl&#039;) || &#039;null&#039;);&lt;br /&gt;
        } catch (e) { return; }&lt;br /&gt;
        if (!stored || !stored.query) return;&lt;br /&gt;
&lt;br /&gt;
        var currentPath = window.location.pathname;&lt;br /&gt;
        var storedPath = stored.pathname || &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
        function normPath(p) { return decodeURIComponent(p).replace(/\/+$/, &#039;&#039;); }&lt;br /&gt;
        if (storedPath &amp;amp;&amp;amp; normPath(storedPath) !== normPath(currentPath)) {&lt;br /&gt;
            try { sessionStorage.removeItem(&#039;gr_search_hl&#039;); } catch (e) { }&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var query = stored.query.trim();&lt;br /&gt;
        if (!query) return;&lt;br /&gt;
&lt;br /&gt;
        try { sessionStorage.removeItem(&#039;gr_search_hl&#039;); } catch (e) { }&lt;br /&gt;
&lt;br /&gt;
        var delays = [0, 200, 600];&lt;br /&gt;
        delays.forEach(function (ms) {&lt;br /&gt;
            setTimeout(function () {&lt;br /&gt;
                if (document.querySelector(&#039;.gr-search-hl&#039;)) return;&lt;br /&gt;
                highlightText(query);&lt;br /&gt;
            }, ms);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function highlightText(query) {&lt;br /&gt;
        var content = document.querySelector(&#039;#mw-content-text .mw-parser-output&#039;);&lt;br /&gt;
        if (!content) return;&lt;br /&gt;
&lt;br /&gt;
        var raw = query.replace(/^&amp;quot;|&amp;quot;$/g, &#039;&#039;).trim();&lt;br /&gt;
        if (!raw) return;&lt;br /&gt;
&lt;br /&gt;
        var patterns = [];&lt;br /&gt;
        patterns.push(escapeRegex(raw));&lt;br /&gt;
        raw.split(/\s+/).forEach(function (w) {&lt;br /&gt;
            if (w.length &amp;gt;= 2) patterns.push(escapeRegex(w));&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        var matched = false;&lt;br /&gt;
        for (var pi = 0; pi &amp;lt; patterns.length; pi++) {&lt;br /&gt;
            var re;&lt;br /&gt;
            try { re = new RegExp(&#039;(&#039; + patterns[pi] + &#039;)&#039;, &#039;gi&#039;); }&lt;br /&gt;
            catch (e) { continue; }&lt;br /&gt;
            var count = wrapMatches(content, re);&lt;br /&gt;
            if (count &amp;gt; 0) { matched = true; break; }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if (!matched) return;&lt;br /&gt;
&lt;br /&gt;
        var first = document.querySelector(&#039;.gr-search-hl&#039;);&lt;br /&gt;
        if (first) {&lt;br /&gt;
            first.scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; });&lt;br /&gt;
            first.classList.add(&#039;gr-search-hl-pulse&#039;);&lt;br /&gt;
            setTimeout(function () { first.classList.remove(&#039;gr-search-hl-pulse&#039;); }, 2000);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        showDismissBar(query);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function escapeRegex(s) {&lt;br /&gt;
        return s.replace(/[.*+?^${}()|[\]\\]/g, &#039;\\$&amp;amp;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function wrapMatches(root, re) {&lt;br /&gt;
        var count = 0;&lt;br /&gt;
        var walker = document.createTreeWalker(&lt;br /&gt;
            root, NodeFilter.SHOW_TEXT, {&lt;br /&gt;
            acceptNode: function (node) {&lt;br /&gt;
                var p = node.parentElement;&lt;br /&gt;
                if (!p) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
                var tag = p.tagName.toUpperCase();&lt;br /&gt;
                if (tag === &#039;SCRIPT&#039; || tag === &#039;STYLE&#039; || tag === &#039;NOSCRIPT&#039;) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
                if (p.classList.contains(&#039;gr-search-hl&#039;)) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
                return NodeFilter.FILTER_ACCEPT;&lt;br /&gt;
            }&lt;br /&gt;
        }, false&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
        var nodes = [];&lt;br /&gt;
        var node;&lt;br /&gt;
        while ((node = walker.nextNode())) nodes.push(node);&lt;br /&gt;
&lt;br /&gt;
        nodes.forEach(function (textNode) {&lt;br /&gt;
            var val = textNode.nodeValue;&lt;br /&gt;
            if (!re.test(val)) return;&lt;br /&gt;
            re.lastIndex = 0;&lt;br /&gt;
&lt;br /&gt;
            var frag = document.createDocumentFragment();&lt;br /&gt;
            var last = 0;&lt;br /&gt;
            var m;&lt;br /&gt;
            while ((m = re.exec(val)) !== null) {&lt;br /&gt;
                if (m.index &amp;gt; last) {&lt;br /&gt;
                    frag.appendChild(document.createTextNode(val.slice(last, m.index)));&lt;br /&gt;
                }&lt;br /&gt;
                var span = document.createElement(&#039;span&#039;);&lt;br /&gt;
                span.className = &#039;gr-search-hl&#039;;&lt;br /&gt;
                span.textContent = m[0];&lt;br /&gt;
                frag.appendChild(span);&lt;br /&gt;
                last = m.index + m[0].length;&lt;br /&gt;
                count++;&lt;br /&gt;
            }&lt;br /&gt;
            if (last &amp;lt; val.length) {&lt;br /&gt;
                frag.appendChild(document.createTextNode(val.slice(last)));&lt;br /&gt;
            }&lt;br /&gt;
            textNode.parentNode.replaceChild(frag, textNode);&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        return count;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function showDismissBar(query) {&lt;br /&gt;
        var existing = document.getElementById(&#039;gr-hl-bar&#039;);&lt;br /&gt;
        if (existing) existing.remove();&lt;br /&gt;
&lt;br /&gt;
        var count = document.querySelectorAll(&#039;.gr-search-hl&#039;).length;&lt;br /&gt;
        if (!count) return;&lt;br /&gt;
&lt;br /&gt;
        var isMob = window.innerWidth &amp;lt; 768 || !!document.getElementById(&#039;mw-mf-viewport&#039;);&lt;br /&gt;
        var bar = document.createElement(&#039;div&#039;);&lt;br /&gt;
        bar.id = &#039;gr-hl-bar&#039;;&lt;br /&gt;
&lt;br /&gt;
        if (isMob) {&lt;br /&gt;
            bar.style.cssText = [&lt;br /&gt;
                &#039;position:fixed&#039;, &#039;bottom:0&#039;, &#039;left:0&#039;, &#039;right:0&#039;,&lt;br /&gt;
                &#039;z-index:10200&#039;, &#039;background:#b5451b&#039;, &#039;color:#fff&#039;,&lt;br /&gt;
                &#039;padding:0&#039;, &#039;display:flex&#039;, &#039;align-items:stretch&#039;,&lt;br /&gt;
                &#039;font-family:system-ui,sans-serif&#039;,&lt;br /&gt;
                &#039;box-shadow:0 -2px 12px rgba(0,0,0,0.25)&#039;, &#039;height:56px&#039;&lt;br /&gt;
            ].join(&#039;;&#039;);&lt;br /&gt;
            bar.className = &#039;gr-search-hl-mobile&#039;;&lt;br /&gt;
&lt;br /&gt;
            var mbs = &#039;flex:1;display:flex;flex-direction:column;align-items:center;&#039; +&lt;br /&gt;
                &#039;justify-content:center;background:none;border:none;color:#fff;cursor:pointer;&#039; +&lt;br /&gt;
                &#039;padding:6px 4px;font-family:system-ui,sans-serif;font-size:11px;font-weight:500;&#039; +&lt;br /&gt;
                &#039;gap:3px;-webkit-tap-highlight-color:rgba(0,0,0,0.12);&#039;;&lt;br /&gt;
&lt;br /&gt;
            bar.innerHTML =&lt;br /&gt;
                &#039;&amp;lt;button id=&amp;quot;gr-hl-prev&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;polyline points=&amp;quot;15 18 9 12 15 6&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;span&amp;gt;Prev&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;button id=&amp;quot;gr-hl-next&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;polyline points=&amp;quot;9 18 15 12 9 6&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;span&amp;gt;Next&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;button id=&amp;quot;gr-hl-results&amp;quot; style=&amp;quot;&#039; + mbs + &#039;flex:1.6;border-left:1px solid rgba(255,255,255,0.2);border-right:1px solid rgba(255,255,255,0.2);&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;circle cx=&amp;quot;11&amp;quot; cy=&amp;quot;11&amp;quot; r=&amp;quot;7&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;16.5&amp;quot; y1=&amp;quot;16.5&amp;quot; x2=&amp;quot;22&amp;quot; y2=&amp;quot;22&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;span&amp;gt;&#039; + count + &#039; match&#039; + (count === 1 ? &#039;&#039; : &#039;es&#039;) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;button id=&amp;quot;gr-hl-dismiss&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;line x1=&amp;quot;18&amp;quot; y1=&amp;quot;6&amp;quot; x2=&amp;quot;6&amp;quot; y2=&amp;quot;18&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;6&amp;quot; y1=&amp;quot;6&amp;quot; x2=&amp;quot;18&amp;quot; y2=&amp;quot;18&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;span&amp;gt;Close&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
        } else {&lt;br /&gt;
            bar.style.cssText = [&lt;br /&gt;
                &#039;position:fixed&#039;, &#039;bottom:0&#039;, &#039;left:0&#039;, &#039;right:0&#039;, &#039;z-index:10200&#039;,&lt;br /&gt;
                &#039;background:#b5451b&#039;, &#039;color:#fff&#039;, &#039;padding:10px 16px&#039;,&lt;br /&gt;
                &#039;display:flex&#039;, &#039;align-items:center&#039;, &#039;justify-content:space-between&#039;,&lt;br /&gt;
                &#039;font-family:system-ui,sans-serif&#039;, &#039;font-size:14px&#039;,&lt;br /&gt;
                &#039;box-shadow:0 -2px 8px rgba(0,0,0,0.2)&#039;&lt;br /&gt;
            ].join(&#039;;&#039;);&lt;br /&gt;
&lt;br /&gt;
            var nav = document.createElement(&#039;div&#039;);&lt;br /&gt;
            nav.style.cssText = &#039;display:flex;align-items:center;gap:12px;&#039;;&lt;br /&gt;
            nav.innerHTML =&lt;br /&gt;
                &#039;&amp;lt;span&amp;gt;🔍 &amp;lt;strong&amp;gt;&#039; + escHtml(query) + &#039;&amp;lt;/strong&amp;gt; — &#039; + count + &#039; match&#039; + (count === 1 ? &#039;&#039; : &#039;es&#039;) + &#039;&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;button id=&amp;quot;gr-hl-prev&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;↑ Prev&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;button id=&amp;quot;gr-hl-next&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;↓ Next&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;button id=&amp;quot;gr-hl-results&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;← Results&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
            bar.appendChild(nav);&lt;br /&gt;
&lt;br /&gt;
            var db = document.createElement(&#039;button&#039;);&lt;br /&gt;
            db.id = &#039;gr-hl-dismiss&#039;; db.textContent = &#039;✕ Close&#039;;&lt;br /&gt;
            db.style.cssText = &#039;background:rgba(255,255,255,0.15);border:none;color:#fff;padding:4px 12px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&#039;;&lt;br /&gt;
            bar.appendChild(db);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        document.body.appendChild(bar);&lt;br /&gt;
&lt;br /&gt;
        var hlEls = Array.from(document.querySelectorAll(&#039;.gr-search-hl&#039;));&lt;br /&gt;
        var current = 0;&lt;br /&gt;
&lt;br /&gt;
        function goTo(idx) {&lt;br /&gt;
            hlEls.forEach(function (el) { el.classList.remove(&#039;gr-search-hl-current&#039;); });&lt;br /&gt;
            current = ((idx % hlEls.length) + hlEls.length) % hlEls.length;&lt;br /&gt;
            hlEls[current].classList.add(&#039;gr-search-hl-current&#039;);&lt;br /&gt;
            hlEls[current].scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; });&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function dismiss() { clearHighlights(); bar.remove(); }&lt;br /&gt;
&lt;br /&gt;
        var nb = document.getElementById(&#039;gr-hl-next&#039;);&lt;br /&gt;
        var pb = document.getElementById(&#039;gr-hl-prev&#039;);&lt;br /&gt;
        var rb = document.getElementById(&#039;gr-hl-results&#039;);&lt;br /&gt;
        var db2 = document.getElementById(&#039;gr-hl-dismiss&#039;);&lt;br /&gt;
        if (nb) nb.onclick = function () { goTo(current + 1); };&lt;br /&gt;
        if (pb) pb.onclick = function () { goTo(current - 1); };&lt;br /&gt;
        if (db2) db2.onclick = dismiss;&lt;br /&gt;
        if (rb) rb.onclick = function () {&lt;br /&gt;
            bar.remove(); clearHighlights();&lt;br /&gt;
            if (window.showSearchDialog) window.showSearchDialog(query);&lt;br /&gt;
        };&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function clearHighlights() {&lt;br /&gt;
        document.querySelectorAll(&#039;.gr-search-hl&#039;).forEach(function (span) {&lt;br /&gt;
            var p = span.parentNode; if (!p) return;&lt;br /&gt;
            while (span.firstChild) p.insertBefore(span.firstChild, span);&lt;br /&gt;
            p.removeChild(span);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function escHtml(s) {&lt;br /&gt;
        return String(s).replace(/&amp;amp;/g, &#039;&amp;amp;amp;&#039;).replace(/&amp;lt;/g, &#039;&amp;amp;lt;&#039;).replace(/&amp;gt;/g, &#039;&amp;amp;gt;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function injectHighlightCSS() {&lt;br /&gt;
        if (document.getElementById(&#039;gr-hl-css&#039;)) return;&lt;br /&gt;
        var s = document.createElement(&#039;style&#039;);&lt;br /&gt;
        s.id = &#039;gr-hl-css&#039;;&lt;br /&gt;
        s.textContent = [&lt;br /&gt;
            &#039;.gr-search-hl{background:#fff176;color:#1a1a1a;border-radius:2px;padding:0 1px;box-shadow:0 0 0 1px rgba(181,69,27,0.25);}&#039;,&lt;br /&gt;
            &#039;.gr-search-hl-current{background:#ffb300!important;box-shadow:0 0 0 2px #b5451b!important;}&#039;,&lt;br /&gt;
            &#039;@keyframes gr-hl-pulse{0%{background:#ffb300;}50%{background:#fff176;}100%{background:#fff176;}}&#039;,&lt;br /&gt;
            &#039;.gr-search-hl-pulse{animation:gr-hl-pulse 1.2s ease 2;}&#039;,&lt;br /&gt;
        ].join(&#039;&#039;);&lt;br /&gt;
        document.head.appendChild(s);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    injectHighlightCSS();&lt;br /&gt;
&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) {&lt;br /&gt;
        document.addEventListener(&#039;DOMContentLoaded&#039;, applyHighlight);&lt;br /&gt;
    } else {&lt;br /&gt;
        applyHighlight();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (window.mw) {&lt;br /&gt;
        mw.hook(&#039;wikipage.content&#039;).add(function () {&lt;br /&gt;
            setTimeout(applyHighlight, 100);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    window.grStoreSearchHL = storeQueryForLink;&lt;br /&gt;
&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
/* ═══════════════════════════════════════════════════════════════&lt;br /&gt;
   Mobile addon — only runs on Minerva (mobile) skin&lt;br /&gt;
   ═══════════════════════════════════════════════════════════════ */&lt;br /&gt;
(function () {&lt;br /&gt;
    if (!document.body.classList.contains(&#039;skin-minerva&#039;)) return;&lt;br /&gt;
    function injectCSS() {&lt;br /&gt;
        if (document.getElementById(&#039;gr-mob-css&#039;)) return;&lt;br /&gt;
        var s = document.createElement(&#039;style&#039;);&lt;br /&gt;
        s.id = &#039;gr-mob-css&#039;;&lt;br /&gt;
        s.textContent =&lt;br /&gt;
            &#039;body,#mw-mf-viewport,#mw-mf-page-center{padding-top:0!important;margin-top:0!important;}&#039; +&lt;br /&gt;
            &#039;html,body,#mw-mf-viewport,#mw-mf-page-center{overflow-x:hidden!important;max-width:100vw!important;}&#039; +&lt;br /&gt;
            &#039;header.header-container{background:#b5451b!important;position:sticky!important;top:0!important;z-index:300!important;}&#039; +&lt;br /&gt;
            &#039;.minerva-header{background:#b5451b!important;min-height:54px!important;}&#039; +&lt;br /&gt;
            &#039;.minerva-header .search-toggle,.minerva-header .minerva-user-notifications{display:none!important;}&#039; +&lt;br /&gt;
            &#039;.branding-box a{display:flex!important;align-items:center!important;text-decoration:none!important;max-width:calc(100vw - 80px)!important;}&#039; +&lt;br /&gt;
            &#039;.branding-box a::before{content:&amp;quot;&amp;quot;;display:block;width:30px;height:30px;flex-shrink:0;background:url(&amp;quot;/favicon.png&amp;quot;) center/contain no-repeat;margin-right:8px;}&#039; +&lt;br /&gt;
            &#039;.branding-box a span{color:#fff!important;font-size:16px!important;font-weight:700!important;font-family:system-ui,sans-serif!important;line-height:1.2!important;flex:1 1 auto!important;min-width:0!important;}&#039; +&lt;br /&gt;
            &#039;.minerva-header svg path,.minerva-header svg rect,.minerva-header svg circle{fill:#fff!important;}&#039; +&lt;br /&gt;
            &#039;.minerva-header label{color:#fff!important;}&#039; +&lt;br /&gt;
            &#039;.minerva-tabs,.mw-portlet-associated-pages,.page-actions-menu,#page-secondary-actions,.last-modified-bar,.minerva-anon-talk-link{display:none!important;}&#039; +&lt;br /&gt;
            &#039;#gr-mob-menu-items{display:block!important;}&#039; +&lt;br /&gt;
            &#039;.mw-footer.minerva-footer,.footer-places,.footer-info,.minerva-footer-logo,#footer-places-about,#footer-places-disclaimers,#footer-places-privacy{display:none!important;}&#039; +&lt;br /&gt;
            &#039;#gr-static-bar{position:sticky!important;top:54px!important;z-index:200!important;}&#039; +&lt;br /&gt;
            &#039;.mf-section-0,.mf-section-1,.mf-section-2,.mf-section-3,.mf-section-4,.mf-section-5,.mf-section-6,.mf-section-7,.mf-section-8,.mf-section-9,.mf-section-10{display:block!important;visibility:visible!important;}&#039; +&lt;br /&gt;
            &#039;.collapsible-block{display:block!important;}&#039; +&lt;br /&gt;
            &#039;.section-heading .indicator,.collapsible-heading .indicator{display:none!important;}&#039; +&lt;br /&gt;
            &#039;.section-heading,.collapsible-heading{pointer-events:none!important;}&#039; +&lt;br /&gt;
            &#039;.gr-home-grid{flex-direction:column!important;flex-wrap:nowrap!important;gap:12px!important;width:100%!important;}&#039; +&lt;br /&gt;
            &#039;.gr-home-card{width:100%!important;max-width:100%!important;min-width:unset!important;box-sizing:border-box!important;flex:none!important;}&#039; +&lt;br /&gt;
            &#039;.gr-home-toggle{flex-wrap:wrap!important;}&#039; +&lt;br /&gt;
            &#039;.mw-parser-output{font-size:18px!important;line-height:1.8!important;}&#039; +&lt;br /&gt;
            &#039;.mw-parser-output h2,.mw-parser-output h3{width:100%!important;}&#039; +&lt;br /&gt;
            &#039;.bhashyam-block{margin-left:8px!important;}&#039; +&lt;br /&gt;
            &#039;#footer,.mw-footer,.catlinks,#catlinks{display:none!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-panel{position:fixed!important;top:0!important;left:0!important;bottom:0!important;width:82vw!important;max-width:340px!important;background:#fff!important;z-index:10400!important;box-shadow:4px 0 28px rgba(0,0,0,0.22)!important;overflow-y:auto!important;padding:0 0 40px!important;transform:translateX(-110%)!important;transition:transform 0.26s cubic-bezier(0.4,0,0.2,1)!important;display:block!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-panel.open{transform:translateX(0)!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-backdrop{display:none!important;position:fixed!important;inset:0!important;background:rgba(0,0,0,0.4)!important;z-index:10399!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-backdrop.open{display:block!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-header{position:sticky!important;top:0!important;background:#fff!important;display:flex!important;align-items:center!important;justify-content:space-between!important;padding:16px 16px 12px!important;border-bottom:1px solid #f0ebe6!important;z-index:1!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-title{font-size:13px!important;font-weight:700!important;text-transform:uppercase!important;letter-spacing:0.08em!important;color:#b5451b!important;font-family:system-ui,sans-serif!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-close{background:none!important;border:none!important;font-size:22px!important;color:#999!important;cursor:pointer!important;padding:4px 8px!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-body{padding:12px 16px!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-body a{display:block!important;font-size:16px!important;line-height:1.6!important;color:#2c1810!important;text-decoration:none!important;padding:8px 0!important;border-bottom:1px solid #f5f0ed!important;}&#039;;&lt;br /&gt;
        document.head.appendChild(s);&lt;br /&gt;
    }&lt;br /&gt;
    function expandSections() {&lt;br /&gt;
        document.querySelectorAll(&#039;[class*=&amp;quot;mf-section-&amp;quot;], .collapsible-block&#039;).forEach(function (el) { el.removeAttribute(&#039;hidden&#039;); el.style.setProperty(&#039;display&#039;, &#039;block&#039;, &#039;important&#039;); el.style.setProperty(&#039;visibility&#039;, &#039;visible&#039;, &#039;important&#039;); el.removeAttribute(&#039;aria-hidden&#039;); });&lt;br /&gt;
        document.querySelectorAll(&#039;.section-heading, .collapsible-heading&#039;).forEach(function (el) { el.setAttribute(&#039;aria-expanded&#039;, &#039;true&#039;); el.style.setProperty(&#039;pointer-events&#039;, &#039;none&#039;, &#039;important&#039;); });&lt;br /&gt;
    }&lt;br /&gt;
    function watchSections() {&lt;br /&gt;
        var t = null;&lt;br /&gt;
        var obs = new MutationObserver(function (ms) { if (ms.some(function (m) { return m.attributeName === &#039;hidden&#039;; })) { clearTimeout(t); t = setTimeout(expandSections, 30); } });&lt;br /&gt;
        obs.observe(document.querySelector(&#039;#mw-content-text&#039;) || document.body, { subtree: true, attributes: true, attributeFilter: [&#039;hidden&#039;, &#039;aria-hidden&#039;] });&lt;br /&gt;
    }&lt;br /&gt;
    function watchBodyPadding() {&lt;br /&gt;
        new MutationObserver(function () { if (document.body.style.paddingTop &amp;amp;&amp;amp; document.body.style.paddingTop !== &#039;0px&#039;) document.body.style.paddingTop = &#039;&#039;; }).observe(document.body, { attributes: true, attributeFilter: [&#039;style&#039;] });&lt;br /&gt;
    }&lt;br /&gt;
    function injectMenuLinks() {&lt;br /&gt;
        if (document.getElementById(&#039;gr-mob-menu-items&#039;)) return;&lt;br /&gt;
        var navDrawer = document.querySelector(&#039;.navigation-drawer&#039;);&lt;br /&gt;
        if (!navDrawer) return;&lt;br /&gt;
        var wrap = document.createElement(&#039;div&#039;); wrap.id = &#039;gr-mob-menu-items&#039;; wrap.style.cssText = &#039;width:100%;background:#fff;margin-top:8px;&#039;;&lt;br /&gt;
        var itemStyle = &#039;display:flex;align-items:center;gap:14px;padding:15px 20px;font-size:16px;color:#2c1810;text-decoration:none;font-family:system-ui,sans-serif;border-bottom:1px solid #f0ebe6;background:#fff;&#039;;&lt;br /&gt;
        function makeItem(href, label) { var a = document.createElement(&#039;a&#039;); a.href = href; a.style.cssText = itemStyle; a.innerHTML = &#039;&amp;lt;span&amp;gt;&#039; + label + &#039;&amp;lt;/span&amp;gt;&#039;; return a; }&lt;br /&gt;
        wrap.appendChild(makeItem(&#039;/Main_Page&#039;, &#039;Home&#039;));&lt;br /&gt;
        wrap.appendChild(makeItem(&#039;/My_wiki:Help&#039;, &#039;Help&#039;));&lt;br /&gt;
        wrap.appendChild(makeItem(&#039;/My_wiki:About&#039;, &#039;About&#039;));&lt;br /&gt;
        var userName = window.mw ? mw.config.get(&#039;wgUserName&#039;) : null;&lt;br /&gt;
        if (userName) {&lt;br /&gt;
            wrap.appendChild(makeItem((window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl) ? mw.util.getUrl(&#039;Special:Profile&#039;) : &#039;/Special:Profile&#039;, &#039;Profile&#039;));&lt;br /&gt;
            var la = document.querySelector(&#039;a[href*=&amp;quot;action=logout&amp;quot;]&#039;);&lt;br /&gt;
            wrap.appendChild(makeItem(la ? la.href : &#039;/index.php?title=Special:UserLogout&#039;, &#039;Log out&#039;));&lt;br /&gt;
        }&lt;br /&gt;
        else wrap.appendChild(makeItem(&#039;/index.php?title=Special:UserLogin&#039;, &#039;Log in&#039;));&lt;br /&gt;
        var pageLeft = document.getElementById(&#039;mw-mf-page-left&#039;);&lt;br /&gt;
        if (pageLeft) { while (pageLeft.firstChild) pageLeft.removeChild(pageLeft.firstChild); pageLeft.style.removeProperty(&#039;display&#039;); pageLeft.appendChild(wrap); }&lt;br /&gt;
        else navDrawer.appendChild(wrap);&lt;br /&gt;
    }&lt;br /&gt;
    var _tocDone = false;&lt;br /&gt;
    function initToc() {&lt;br /&gt;
        if (_tocDone) return;&lt;br /&gt;
        var tocList = document.querySelector(&#039;.vector-toc-contents, .vector-toc .vector-toc-list&#039;);&lt;br /&gt;
        if (!tocList || !tocList.querySelector(&#039;li&#039;)) return;&lt;br /&gt;
        _tocDone = true;&lt;br /&gt;
        var bd = document.createElement(&#039;div&#039;); bd.className = &#039;gr-mob-toc-backdrop&#039;; document.body.appendChild(bd);&lt;br /&gt;
        var panel = document.createElement(&#039;div&#039;); panel.className = &#039;gr-mob-toc-panel&#039;;&lt;br /&gt;
        var hdr = document.createElement(&#039;div&#039;); hdr.className = &#039;gr-mob-toc-header&#039;;&lt;br /&gt;
        var ttl = document.createElement(&#039;div&#039;); ttl.className = &#039;gr-mob-toc-title&#039;; ttl.textContent = &#039;विषयसूची&#039;;&lt;br /&gt;
        var cls = document.createElement(&#039;button&#039;); cls.className = &#039;gr-mob-toc-close&#039;; cls.textContent = &#039;✕&#039;;&lt;br /&gt;
        hdr.appendChild(ttl); hdr.appendChild(cls); panel.appendChild(hdr);&lt;br /&gt;
        var body = document.createElement(&#039;div&#039;); body.className = &#039;gr-mob-toc-body&#039;; body.appendChild(tocList.cloneNode(true)); panel.appendChild(body); document.body.appendChild(panel);&lt;br /&gt;
        var btn = document.createElement(&#039;button&#039;); btn.id = &#039;gr-mob-toc-btn&#039;; btn.innerHTML = &#039;☰ &amp;amp;nbsp;Contents&#039;;&lt;br /&gt;
        btn.style.cssText = &#039;position:fixed;bottom:148px;left:16px;z-index:9100;background:#fff;border:1.5px solid #b5451b;border-radius:24px;padding:10px 16px;font-size:15px;font-family:system-ui,sans-serif;color:#b5451b;font-weight:600;box-shadow:0 3px 14px rgba(0,0,0,0.15);cursor:pointer;&#039;;&lt;br /&gt;
        document.body.appendChild(btn);&lt;br /&gt;
        function open() { panel.classList.add(&#039;open&#039;); bd.classList.add(&#039;open&#039;); document.body.style.overflow = &#039;hidden&#039;; }&lt;br /&gt;
        function close() { panel.classList.remove(&#039;open&#039;); bd.classList.remove(&#039;open&#039;); document.body.style.overflow = &#039;&#039;; }&lt;br /&gt;
        btn.onclick = open; cls.onclick = close; bd.onclick = close;&lt;br /&gt;
        body.querySelectorAll(&#039;a&#039;).forEach(function (a) { a.onclick = close; });&lt;br /&gt;
    }&lt;br /&gt;
    function injectMoolaUllekhaLinks() {&lt;br /&gt;
        if (document.getElementById(&#039;gr-mob-doc-nav&#039;)) return;&lt;br /&gt;
        var pageName = (window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get(&#039;wgPageName&#039;)) || &#039;&#039;;&lt;br /&gt;
        if (pageName === &#039;Main_Page&#039; || !pageName) return;&lt;br /&gt;
        function wikiUrl(slug) { if (window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl) return mw.util.getUrl(slug); return ((window.mw &amp;amp;&amp;amp; mw.config.get(&#039;wgArticlePath&#039;)) || &#039;/wiki/$1&#039;).replace(&#039;$1&#039;, encodeURIComponent(slug).replace(/%2F/g, &#039;/&#039;)); }&lt;br /&gt;
        var teekaPage = document.querySelector(&#039;.gr-teeka-page&#039;);&lt;br /&gt;
        var primarySlug = teekaPage ? (teekaPage.getAttribute(&#039;data-primary&#039;) || pageName.split(&#039;/&#039;)[0]) : pageName.split(&#039;/&#039;)[0];&lt;br /&gt;
        var docTitleEl = document.querySelector(&#039;.gr-doc-title&#039;);&lt;br /&gt;
        var hasMoolaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute(&#039;data-has-moola&#039;) === &#039;1&#039;;&lt;br /&gt;
        var hasUllekhaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute(&#039;data-has-ullekha&#039;) === &#039;1&#039;;&lt;br /&gt;
        var showMoolam = !!teekaPage || hasMoolaPage, showUllekha = hasUllekhaPage || !!teekaPage;&lt;br /&gt;
        if (!showMoolam &amp;amp;&amp;amp; !showUllekha) return;&lt;br /&gt;
        var nav = document.createElement(&#039;div&#039;); nav.id = &#039;gr-mob-doc-nav&#039;;&lt;br /&gt;
        nav.style.cssText = &#039;display:flex;gap:10px;padding:10px 16px 8px;background:#fdf8f5;border-bottom:1px solid #f0e0d6;font-family:system-ui,sans-serif;&#039;;&lt;br /&gt;
        function makeLink(href, label) { var a = document.createElement(&#039;a&#039;); a.href = href; a.textContent = label; a.style.cssText = &#039;display:inline-flex;align-items:center;padding:5px 16px;border-radius:20px;background:#fff;border:1.5px solid #e8cfc4;color:#b5451b;font-size:14px;font-weight:600;text-decoration:none;&#039;; return a; }&lt;br /&gt;
        if (teekaPage) nav.appendChild(makeLink(wikiUrl(primarySlug), &#039;मूल&#039;));&lt;br /&gt;
        else if (hasMoolaPage) nav.appendChild(makeLink(wikiUrl(primarySlug + &#039;/Moola&#039;), &#039;मूलम्&#039;));&lt;br /&gt;
        if (showUllekha) nav.appendChild(makeLink(wikiUrl(primarySlug + &#039;/Ullekha&#039;), &#039;उल्लेख&#039;));&lt;br /&gt;
        var h1 = document.getElementById(&#039;firstHeading&#039;) || document.querySelector(&#039;.page-heading, h1.firstHeading, .mw-first-heading&#039;);&lt;br /&gt;
        if (h1 &amp;amp;&amp;amp; h1.parentNode) h1.parentNode.insertBefore(nav, h1.nextSibling);&lt;br /&gt;
        else { var ct = document.getElementById(&#039;mw-content-text&#039;); if (ct) ct.insertBefore(nav, ct.firstChild); }&lt;br /&gt;
    }&lt;br /&gt;
    injectCSS(); watchBodyPadding();&lt;br /&gt;
    function boot() { expandSections(); watchSections(); injectMenuLinks(); injectMoolaUllekhaLinks();[100, 400, 900, 1800].forEach(function (ms) { setTimeout(expandSections, ms); }); setTimeout(initToc, 700); }&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) document.addEventListener(&#039;DOMContentLoaded&#039;, boot);&lt;br /&gt;
    else boot();&lt;br /&gt;
    if (window.mw) mw.hook(&#039;wikipage.content&#039;).add(function () { setTimeout(function () { expandSections(); injectMenuLinks(); injectMoolaUllekhaLinks(); initToc(); }, 300); });&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(function () {&lt;br /&gt;
    &#039;use strict&#039;;&lt;br /&gt;
    mw.hook(&#039;wikipage.content&#039;).add(function () {&lt;br /&gt;
        setTimeout(function () {&lt;br /&gt;
            var blocks = document.querySelectorAll(&#039;.collapsible-block, .toggle-list&#039;);&lt;br /&gt;
            Array.prototype.forEach.call(blocks, function (el) { if (!el.parentNode) { try { el.remove(); } catch (e) { } } });&lt;br /&gt;
        }, 0);&lt;br /&gt;
    });&lt;br /&gt;
    if (mw.config.get(&#039;wgPageName&#039;) !== &#039;Main_Page&#039;) return;&lt;br /&gt;
    mw.loader.using(&#039;mediawiki.util&#039;).done(function () {&lt;br /&gt;
        $(function () { applyHomeToggleOffset(); window.addEventListener(&#039;resize&#039;, applyHomeToggleOffset, { passive: true }); setTimeout(applyHomeToggleOffset, 300); setTimeout(applyHomeToggleOffset, 800); });&lt;br /&gt;
    });&lt;br /&gt;
    function applyHomeToggleOffset() {&lt;br /&gt;
        var bar = document.getElementById(&#039;gr-static-bar&#039;); if (!bar) return;&lt;br /&gt;
        var barBottom = Math.round(bar.getBoundingClientRect().bottom);&lt;br /&gt;
        [document.getElementById(&#039;gr-home&#039;), document.getElementById(&#039;gr-home-toggle&#039;), document.querySelector(&#039;#mw-content-text .mw-parser-output &amp;gt; .gr-home, #mw-content-text .mw-parser-output &amp;gt; *:first-child&#039;)].forEach(function (el) { if (el) el.style.scrollMarginTop = (barBottom + 4) + &#039;px&#039;; });&lt;br /&gt;
        var isMob = window.innerWidth &amp;lt; 768 || !!document.getElementById(&#039;mw-mf-viewport&#039;);&lt;br /&gt;
        if (isMob) { var toggleEl = document.getElementById(&#039;gr-home-toggle&#039;); if (toggleEl) { var tr = toggleEl.getBoundingClientRect(); if (tr.top &amp;lt; barBottom) { var cp = parseInt(window.getComputedStyle(document.body).paddingTop, 10) || 0; document.body.style.paddingTop = (cp + (barBottom - tr.top) + 4) + &#039;px&#039;; } } }&lt;br /&gt;
    }&lt;br /&gt;
    $(function () {&lt;br /&gt;
        var $toggle = $(&#039;#gr-home-toggle&#039;), $viewG = $(&#039;#gr-view-grantha&#039;), $viewA = $(&#039;#gr-view-author&#039;), $btnG = $(&#039;#gr-toggle-grantha&#039;), $btnA = $(&#039;#gr-toggle-author&#039;);&lt;br /&gt;
        if (!$toggle.length || !$viewG.length || !$viewA.length) return; if ($toggle.data(&#039;gr-wired&#039;)) return; $toggle.data(&#039;gr-wired&#039;, true);&lt;br /&gt;
        function showView(which) { if (which === &#039;grantha&#039;) { $viewG.show(); $viewA.hide(); $btnG.addClass(&#039;gr-toggle-active&#039;); $btnA.removeClass(&#039;gr-toggle-active&#039;); } else { $viewA.show(); $viewG.hide(); $btnA.addClass(&#039;gr-toggle-active&#039;); $btnG.removeClass(&#039;gr-toggle-active&#039;); } try { localStorage.setItem(&#039;grantha_home_tab&#039;, which); } catch (e) { } }&lt;br /&gt;
        $btnG.on(&#039;click keydown&#039;, function (e) { if (e.type === &#039;keydown&#039; &amp;amp;&amp;amp; e.key !== &#039;Enter&#039; &amp;amp;&amp;amp; e.key !== &#039; &#039;) return; showView(&#039;grantha&#039;); });&lt;br /&gt;
        $btnA.on(&#039;click keydown&#039;, function (e) { if (e.type === &#039;keydown&#039; &amp;amp;&amp;amp; e.key !== &#039;Enter&#039; &amp;amp;&amp;amp; e.key !== &#039; &#039;) return; showView(&#039;author&#039;); });&lt;br /&gt;
        try { var saved = localStorage.getItem(&#039;grantha_home_tab&#039;); if (saved === &#039;author&#039;) showView(&#039;author&#039;); else showView(&#039;grantha&#039;); } catch (e) { showView(&#039;grantha&#039;); }&lt;br /&gt;
    });&lt;br /&gt;
}());&lt;br /&gt;
// ── Replace MediaWiki user links with a single username dropdown (Profile + Logout) ──&lt;br /&gt;
(function () {&lt;br /&gt;
    function wikiHref(title) {&lt;br /&gt;
        if (window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl) return mw.util.getUrl(title);&lt;br /&gt;
        var ap = (window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get(&#039;wgArticlePath&#039;)) || &#039;/wiki/$1&#039;;&lt;br /&gt;
        return ap.replace(&#039;$1&#039;, title);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function buildLogoutForm(token) {&lt;br /&gt;
        token = token || &#039;&#039;;&lt;br /&gt;
        var esc = String(token).replace(/&amp;quot;/g, &#039;&amp;amp;quot;&#039;);&lt;br /&gt;
        var script = (window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.wikiScript) ? mw.util.wikiScript() : &#039;/index.php&#039;;&lt;br /&gt;
        var form = document.createElement(&#039;form&#039;);&lt;br /&gt;
        form.method = &#039;post&#039;;&lt;br /&gt;
        form.action = script + &#039;?title=Special:UserLogout&#039;;&lt;br /&gt;
        form.style.display = &#039;none&#039;;&lt;br /&gt;
        form.innerHTML =&lt;br /&gt;
            &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;wpEditToken&amp;quot; value=&amp;quot;&#039; + esc + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
            &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;title&amp;quot; value=&amp;quot;Special:UserLogout&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
            &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;returnto&amp;quot; value=&amp;quot;Main Page&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
        document.body.appendChild(form);&lt;br /&gt;
        return form;&lt;br /&gt;
    }&lt;br /&gt;
}());&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.js&amp;diff=6221</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.js&amp;diff=6221"/>
		<updated>2026-06-13T09:49:01Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* MediaWiki:Common.js — grantha.io  (v7) */&lt;br /&gt;
&lt;br /&gt;
(function () {&lt;br /&gt;
&lt;br /&gt;
    var LS_SCRIPT_KEY = &#039;grantha_reader_script&#039;;&lt;br /&gt;
    var currentScript = &#039;deva&#039;;&lt;br /&gt;
&lt;br /&gt;
    function devanagariToIAST(text) {&lt;br /&gt;
        var CONSONANTS = {&lt;br /&gt;
            &#039;क&#039;: &#039;k&#039;, &#039;ख&#039;: &#039;kh&#039;, &#039;ग&#039;: &#039;g&#039;, &#039;घ&#039;: &#039;gh&#039;, &#039;ङ&#039;: &#039;ṅ&#039;,&lt;br /&gt;
            &#039;च&#039;: &#039;c&#039;, &#039;छ&#039;: &#039;ch&#039;, &#039;ज&#039;: &#039;j&#039;, &#039;झ&#039;: &#039;jh&#039;, &#039;ञ&#039;: &#039;ñ&#039;,&lt;br /&gt;
            &#039;ट&#039;: &#039;ṭ&#039;, &#039;ठ&#039;: &#039;ṭh&#039;, &#039;ड&#039;: &#039;ḍ&#039;, &#039;ढ&#039;: &#039;ḍh&#039;, &#039;ण&#039;: &#039;ṇ&#039;,&lt;br /&gt;
            &#039;त&#039;: &#039;t&#039;, &#039;थ&#039;: &#039;th&#039;, &#039;द&#039;: &#039;d&#039;, &#039;ध&#039;: &#039;dh&#039;, &#039;न&#039;: &#039;n&#039;,&lt;br /&gt;
            &#039;प&#039;: &#039;p&#039;, &#039;फ&#039;: &#039;ph&#039;, &#039;ब&#039;: &#039;b&#039;, &#039;भ&#039;: &#039;bh&#039;, &#039;म&#039;: &#039;m&#039;,&lt;br /&gt;
            &#039;य&#039;: &#039;y&#039;, &#039;र&#039;: &#039;r&#039;, &#039;ल&#039;: &#039;l&#039;, &#039;ळ&#039;: &#039;ḷ&#039;, &#039;व&#039;: &#039;v&#039;,&lt;br /&gt;
            &#039;श&#039;: &#039;ś&#039;, &#039;ष&#039;: &#039;ṣ&#039;, &#039;स&#039;: &#039;s&#039;, &#039;ह&#039;: &#039;h&#039;&lt;br /&gt;
        };&lt;br /&gt;
        var DIACRITICS = {&lt;br /&gt;
            &#039;ा&#039;: &#039;ā&#039;, &#039;ि&#039;: &#039;i&#039;, &#039;ी&#039;: &#039;ī&#039;, &#039;ु&#039;: &#039;u&#039;, &#039;ू&#039;: &#039;ū&#039;,&lt;br /&gt;
            &#039;ृ&#039;: &#039;ṛ&#039;, &#039;ॄ&#039;: &#039;ṝ&#039;, &#039;े&#039;: &#039;e&#039;, &#039;ै&#039;: &#039;ai&#039;, &#039;ो&#039;: &#039;o&#039;, &#039;ौ&#039;: &#039;au&#039;&lt;br /&gt;
        };&lt;br /&gt;
        var VOWELS = {&lt;br /&gt;
            &#039;अ&#039;: &#039;a&#039;, &#039;आ&#039;: &#039;ā&#039;, &#039;इ&#039;: &#039;i&#039;, &#039;ई&#039;: &#039;ī&#039;, &#039;उ&#039;: &#039;u&#039;, &#039;ऊ&#039;: &#039;ū&#039;,&lt;br /&gt;
            &#039;ऋ&#039;: &#039;ṛ&#039;, &#039;ॠ&#039;: &#039;ṝ&#039;, &#039;ए&#039;: &#039;e&#039;, &#039;ऐ&#039;: &#039;ai&#039;, &#039;ओ&#039;: &#039;o&#039;, &#039;औ&#039;: &#039;au&#039;, &#039;ऽ&#039;: &amp;quot;&#039;&amp;quot;&lt;br /&gt;
        };&lt;br /&gt;
        var MISC = {&lt;br /&gt;
            &#039;ं&#039;: &#039;ṃ&#039;, &#039;ः&#039;: &#039;ḥ&#039;, &#039;ँ&#039;: &#039;m̐&#039;, &#039;ॐ&#039;: &#039;oṃ&#039;,&lt;br /&gt;
            &#039;०&#039;: &#039;0&#039;, &#039;१&#039;: &#039;1&#039;, &#039;२&#039;: &#039;2&#039;, &#039;३&#039;: &#039;3&#039;, &#039;४&#039;: &#039;4&#039;,&lt;br /&gt;
            &#039;५&#039;: &#039;5&#039;, &#039;६&#039;: &#039;6&#039;, &#039;७&#039;: &#039;7&#039;, &#039;८&#039;: &#039;8&#039;, &#039;९&#039;: &#039;9&#039;&lt;br /&gt;
        };&lt;br /&gt;
        var HALANTA = &#039;्&#039;;&lt;br /&gt;
        var chars = Array.from(text);&lt;br /&gt;
        var result = &#039;&#039;;&lt;br /&gt;
        var i = 0;&lt;br /&gt;
        while (i &amp;lt; chars.length) {&lt;br /&gt;
            var ch = chars[i];&lt;br /&gt;
            var next = chars[i + 1];&lt;br /&gt;
            if (CONSONANTS[ch]) {&lt;br /&gt;
                var base = CONSONANTS[ch];&lt;br /&gt;
                if (next === HALANTA) { result += base; i += 2; }&lt;br /&gt;
                else if (DIACRITICS[next]) { result += base + DIACRITICS[next]; i += 2; }&lt;br /&gt;
                else if (next === &#039;ं&#039; || next === &#039;ः&#039;) { result += base + &#039;a&#039; + MISC[next]; i += 2; }&lt;br /&gt;
                else { result += base + &#039;a&#039;; i++; }&lt;br /&gt;
            } else if (VOWELS[ch]) { result += VOWELS[ch]; i++; }&lt;br /&gt;
            else if (DIACRITICS[ch]) { result += DIACRITICS[ch]; i++; }&lt;br /&gt;
            else if (MISC[ch]) { result += MISC[ch]; i++; }&lt;br /&gt;
            else { result += ch; i++; }&lt;br /&gt;
        }&lt;br /&gt;
        return result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var SCRIPT_MAP = {&lt;br /&gt;
        kn: {&lt;br /&gt;
            &#039;अ&#039;: &#039;ಅ&#039;, &#039;आ&#039;: &#039;ಆ&#039;, &#039;इ&#039;: &#039;ಇ&#039;, &#039;ई&#039;: &#039;ಈ&#039;, &#039;उ&#039;: &#039;ಉ&#039;, &#039;ऊ&#039;: &#039;ಊ&#039;, &#039;ऋ&#039;: &#039;ಋ&#039;,&lt;br /&gt;
            &#039;ए&#039;: &#039;ಏ&#039;, &#039;ऐ&#039;: &#039;ಐ&#039;, &#039;ओ&#039;: &#039;ಓ&#039;, &#039;औ&#039;: &#039;ಔ&#039;, &#039;ऽ&#039;: &#039;ಽ&#039;,&lt;br /&gt;
            &#039;क&#039;: &#039;ಕ&#039;, &#039;ख&#039;: &#039;ಖ&#039;, &#039;ग&#039;: &#039;ಗ&#039;, &#039;घ&#039;: &#039;ಘ&#039;, &#039;ङ&#039;: &#039;ಙ&#039;,&lt;br /&gt;
            &#039;च&#039;: &#039;ಚ&#039;, &#039;छ&#039;: &#039;ಛ&#039;, &#039;ज&#039;: &#039;ಜ&#039;, &#039;झ&#039;: &#039;ಝ&#039;, &#039;ञ&#039;: &#039;ಞ&#039;,&lt;br /&gt;
            &#039;ट&#039;: &#039;ಟ&#039;, &#039;ठ&#039;: &#039;ಠ&#039;, &#039;ड&#039;: &#039;ಡ&#039;, &#039;ढ&#039;: &#039;ಢ&#039;, &#039;ण&#039;: &#039;ಣ&#039;,&lt;br /&gt;
            &#039;त&#039;: &#039;ತ&#039;, &#039;थ&#039;: &#039;ಥ&#039;, &#039;द&#039;: &#039;ದ&#039;, &#039;ध&#039;: &#039;ಧ&#039;, &#039;न&#039;: &#039;ನ&#039;,&lt;br /&gt;
            &#039;प&#039;: &#039;ಪ&#039;, &#039;फ&#039;: &#039;ಫ&#039;, &#039;ब&#039;: &#039;ಬ&#039;, &#039;भ&#039;: &#039;ಭ&#039;, &#039;म&#039;: &#039;ಮ&#039;,&lt;br /&gt;
            &#039;य&#039;: &#039;ಯ&#039;, &#039;र&#039;: &#039;ರ&#039;, &#039;ल&#039;: &#039;ಲ&#039;, &#039;व&#039;: &#039;ವ&#039;,&lt;br /&gt;
            &#039;श&#039;: &#039;ಶ&#039;, &#039;ष&#039;: &#039;ಷ&#039;, &#039;स&#039;: &#039;ಸ&#039;, &#039;ह&#039;: &#039;ಹ&#039;,&lt;br /&gt;
            &#039;ा&#039;: &#039;ಾ&#039;, &#039;ि&#039;: &#039;ಿ&#039;, &#039;ी&#039;: &#039;ೀ&#039;, &#039;ु&#039;: &#039;ು&#039;, &#039;ू&#039;: &#039;ೂ&#039;,&lt;br /&gt;
            &#039;ृ&#039;: &#039;ೃ&#039;, &#039;े&#039;: &#039;ೇ&#039;, &#039;ै&#039;: &#039;ೈ&#039;, &#039;ो&#039;: &#039;ೋ&#039;, &#039;ौ&#039;: &#039;ೌ&#039;,&lt;br /&gt;
            &#039;ं&#039;: &#039;ಂ&#039;, &#039;ः&#039;: &#039;ಃ&#039;, &#039;्&#039;: &#039;್&#039;,&lt;br /&gt;
            &#039;०&#039;: &#039;೦&#039;, &#039;१&#039;: &#039;೧&#039;, &#039;२&#039;: &#039;೨&#039;, &#039;३&#039;: &#039;೩&#039;, &#039;४&#039;: &#039;೪&#039;,&lt;br /&gt;
            &#039;५&#039;: &#039;೫&#039;, &#039;६&#039;: &#039;೬&#039;, &#039;७&#039;: &#039;೭&#039;, &#039;८&#039;: &#039;೮&#039;, &#039;९&#039;: &#039;೯&#039;&lt;br /&gt;
        },&lt;br /&gt;
        ta: {&lt;br /&gt;
            &#039;अ&#039;: &#039;அ&#039;, &#039;आ&#039;: &#039;ஆ&#039;, &#039;इ&#039;: &#039;இ&#039;, &#039;ई&#039;: &#039;ஈ&#039;, &#039;उ&#039;: &#039;உ&#039;, &#039;ऊ&#039;: &#039;ஊ&#039;,&lt;br /&gt;
            &#039;ऋ&#039;: &#039;ரு&#039;, &#039;ॠ&#039;: &#039;ரூ&#039;,&lt;br /&gt;
            &#039;ए&#039;: &#039;ஏ&#039;, &#039;ऐ&#039;: &#039;ஐ&#039;, &#039;ओ&#039;: &#039;ஓ&#039;, &#039;औ&#039;: &#039;ஔ&#039;,&lt;br /&gt;
            &#039;क&#039;: &#039;க&#039;, &#039;ख&#039;: &#039;க&#039;, &#039;ग&#039;: &#039;க&#039;, &#039;घ&#039;: &#039;க&#039;, &#039;ङ&#039;: &#039;ங&#039;,&lt;br /&gt;
            &#039;च&#039;: &#039;ச&#039;, &#039;छ&#039;: &#039;ச&#039;, &#039;ज&#039;: &#039;ஜ&#039;, &#039;झ&#039;: &#039;ஜ&#039;, &#039;ञ&#039;: &#039;ஞ&#039;,&lt;br /&gt;
            &#039;ட&#039;: &#039;ட&#039;, &#039;ठ&#039;: &#039;ட&#039;, &#039;ड&#039;: &#039;ட&#039;, &#039;ढ&#039;: &#039;ட&#039;, &#039;ண&#039;: &#039;ண&#039;,&lt;br /&gt;
            &#039;त&#039;: &#039;த&#039;, &#039;थ&#039;: &#039;த&#039;, &#039;द&#039;: &#039;த&#039;, &#039;ध&#039;: &#039;த&#039;, &#039;न&#039;: &#039;ந&#039;,&lt;br /&gt;
            &#039;प&#039;: &#039;ப&#039;, &#039;फ&#039;: &#039;ப&#039;, &#039;ब&#039;: &#039;ப&#039;, &#039;भ&#039;: &#039;ப&#039;, &#039;म&#039;: &#039;ம&#039;,&lt;br /&gt;
            &#039;य&#039;: &#039;ய&#039;, &#039;र&#039;: &#039;ர&#039;, &#039;ल&#039;: &#039;ல&#039;, &#039;ळ&#039;: &#039;ழ&#039;, &#039;व&#039;: &#039;வ&#039;,&lt;br /&gt;
            &#039;श&#039;: &#039;ஶ&#039;, &#039;ष&#039;: &#039;ஷ&#039;, &#039;स&#039;: &#039;ஸ&#039;, &#039;ह&#039;: &#039;ஹ&#039;,&lt;br /&gt;
            &#039;ा&#039;: &#039;ா&#039;, &#039;ि&#039;: &#039;ி&#039;, &#039;ी&#039;: &#039;ீ&#039;, &#039;ु&#039;: &#039;ு&#039;, &#039;ू&#039;: &#039;ூ&#039;,&lt;br /&gt;
            &#039;ृ&#039;: &#039;ு&#039;, &#039;ॄ&#039;: &#039;ூ&#039;,&lt;br /&gt;
            &#039;े&#039;: &#039;ே&#039;, &#039;ை&#039;: &#039;ை&#039;, &#039;ो&#039;: &#039;ோ&#039;, &#039;ौ&#039;: &#039;ௌ&#039;,&lt;br /&gt;
            &#039;ं&#039;: &#039;ம்&#039;, &#039;ः&#039;: &#039;:&#039;, &#039;ँ&#039;: &#039;ம்&#039;, &#039;्&#039;: &#039;்&#039;, &#039;ॐ&#039;: &#039;ௐ&#039;, &#039;ऽ&#039;: &#039;ௗ&#039;,&lt;br /&gt;
            &#039;०&#039;: &#039;0&#039;, &#039;१&#039;: &#039;1&#039;, &#039;२&#039;: &#039;2&#039;, &#039;३&#039;: &#039;3&#039;, &#039;४&#039;: &#039;4&#039;,&lt;br /&gt;
            &#039;५&#039;: &#039;5&#039;, &#039;६&#039;: &#039;6&#039;, &#039;७&#039;: &#039;7&#039;, &#039;८&#039;: &#039;8&#039;, &#039;९&#039;: &#039;9&#039;&lt;br /&gt;
        }&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    var PRE = [&lt;br /&gt;
        [/ङ्क/g, &#039;ंक&#039;], [/ङ्ख/g, &#039;ंख&#039;], [/ङ्ग/g, &#039;ंग&#039;], [/ङ्घ/g, &#039;ंघ&#039;],&lt;br /&gt;
        [/ञ्च/g, &#039;ंच&#039;], [/ञ्ज/g, &#039;ंज&#039;], [/ण्ट/g, &#039;ंट&#039;], [/ण्ड/g, &#039;ंड&#039;],&lt;br /&gt;
        [/न्त/g, &#039;ंत&#039;], [/न्द/g, &#039;ंद&#039;], [/म्ब/g, &#039;ंब&#039;], [/म्भ/g, &#039;ंभ&#039;]&lt;br /&gt;
    ];&lt;br /&gt;
&lt;br /&gt;
    function transliterateText(text, script) {&lt;br /&gt;
        if (script === &#039;en&#039;) return devanagariToIAST(text);&lt;br /&gt;
        var map = SCRIPT_MAP[script];&lt;br /&gt;
        if (!map) return text;&lt;br /&gt;
        var t = text;&lt;br /&gt;
        PRE.forEach(function (p) { t = t.replace(p[0], p[1]); });&lt;br /&gt;
        return Array.from(t).map(function (ch) {&lt;br /&gt;
            return map[ch] !== undefined ? map[ch] : ch;&lt;br /&gt;
        }).join(&#039;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var translatableSpans = [];&lt;br /&gt;
&lt;br /&gt;
    function tagTextNodes() {&lt;br /&gt;
        var content = document.querySelector(&#039;.mw-parser-output&#039;);&lt;br /&gt;
        if (content) {&lt;br /&gt;
            var walker = document.createTreeWalker(content, NodeFilter.SHOW_TEXT);&lt;br /&gt;
            var nodes = [];&lt;br /&gt;
            while (walker.nextNode()) nodes.push(walker.currentNode);&lt;br /&gt;
            nodes.forEach(function (node) {&lt;br /&gt;
                var p = node.parentNode;&lt;br /&gt;
                if (!p) return;&lt;br /&gt;
                if (p.hasAttribute &amp;amp;&amp;amp; p.hasAttribute(&#039;data-deva&#039;)) return;&lt;br /&gt;
                if (p.closest) {&lt;br /&gt;
                    if (p.closest(&#039;.gr-controls&#039;)) return;&lt;br /&gt;
                    if (p.closest(&#039;.mw-editsection&#039;)) return;&lt;br /&gt;
                }&lt;br /&gt;
                var orig = node.textContent;&lt;br /&gt;
                if (!orig.trim()) return;&lt;br /&gt;
                var span = document.createElement(&#039;span&#039;);&lt;br /&gt;
                span.setAttribute(&#039;data-deva&#039;, orig);&lt;br /&gt;
                span.textContent = orig;&lt;br /&gt;
                p.replaceChild(span, node);&lt;br /&gt;
                translatableSpans.push(span);&lt;br /&gt;
            });&lt;br /&gt;
        }&lt;br /&gt;
        document.querySelectorAll(&#039;.vector-toc .vector-toc-text&#039;).forEach(function (span) {&lt;br /&gt;
            if (span.hasAttribute(&#039;data-deva&#039;)) return;&lt;br /&gt;
            var orig = span.textContent;&lt;br /&gt;
            if (!orig.trim()) return;&lt;br /&gt;
            span.setAttribute(&#039;data-deva&#039;, orig);&lt;br /&gt;
            translatableSpans.push(span);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function applyScript(script) {&lt;br /&gt;
        currentScript = script;&lt;br /&gt;
        translatableSpans.forEach(function (span) {&lt;br /&gt;
            if (!span.parentNode) return;&lt;br /&gt;
            var orig = span.getAttribute(&#039;data-deva&#039;);&lt;br /&gt;
            if (!orig) return;&lt;br /&gt;
            span.textContent = (script === &#039;deva&#039;)&lt;br /&gt;
                ? orig&lt;br /&gt;
                : transliterateText(orig, script);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function _isNoTocPage() {&lt;br /&gt;
        var pn = (window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get(&#039;wgPageName&#039;)) || &#039;&#039;;&lt;br /&gt;
        return pn === &#039;Main_Page&#039; || /^[A-Za-z0-9_]+:About$/.test(pn);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function renameTocTitle() {&lt;br /&gt;
        if (_isNoTocPage()) return;&lt;br /&gt;
        var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
        if (!toc) return;&lt;br /&gt;
        var titleEl = toc.querySelector(&#039;.vector-toc-title&#039;) || toc.querySelector(&#039;.vector-pinnable-header-label&#039;);&lt;br /&gt;
        if (!titleEl) return;&lt;br /&gt;
        var LABEL = &#039;विषयसूची&#039;;&lt;br /&gt;
        var span = titleEl.querySelector(&#039;.gr-toc-title&#039;);&lt;br /&gt;
        if (!span) {&lt;br /&gt;
            titleEl.innerHTML = &#039;&#039;;&lt;br /&gt;
            span = document.createElement(&#039;span&#039;);&lt;br /&gt;
            span.className = &#039;gr-toc-title&#039;;&lt;br /&gt;
            span.setAttribute(&#039;data-deva&#039;, LABEL);&lt;br /&gt;
            titleEl.appendChild(span);&lt;br /&gt;
            translatableSpans.push(span);&lt;br /&gt;
        }&lt;br /&gt;
        span.textContent = currentScript === &#039;deva&#039; ? LABEL : transliterateText(LABEL, currentScript);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function removeTocBeginning() {&lt;br /&gt;
        if (_isNoTocPage()) return;&lt;br /&gt;
        var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
        if (!toc) return;&lt;br /&gt;
        var el = toc.querySelector(&#039;#vector-toc-beginning&#039;);&lt;br /&gt;
        if (!el) {&lt;br /&gt;
            var items = toc.querySelectorAll(&#039;.vector-toc-list-item&#039;);&lt;br /&gt;
            for (var i = 0; i &amp;lt; items.length; i++) {&lt;br /&gt;
                var a = items[i].querySelector(&#039;a&#039;);&lt;br /&gt;
                if (a) {&lt;br /&gt;
                    var href = a.getAttribute(&#039;href&#039;) || &#039;&#039;;&lt;br /&gt;
                    if (href.indexOf(&#039;#&#039;) === -1) { el = items[i]; break; }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        if (el &amp;amp;&amp;amp; el.parentNode) el.parentNode.removeChild(el);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function expandTocSections() {&lt;br /&gt;
        if (_isNoTocPage()) return;&lt;br /&gt;
        var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
        if (!toc) return;&lt;br /&gt;
        toc.querySelectorAll(&#039;.vector-toc-list-item-collapsed&#039;).forEach(function (li) {&lt;br /&gt;
            li.classList.remove(&#039;vector-toc-list-item-collapsed&#039;);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function injectTocDocNav() {&lt;br /&gt;
        if (_isNoTocPage()) return;&lt;br /&gt;
        var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
        if (!toc) return;&lt;br /&gt;
        if (document.getElementById(&#039;gr-toc-doc-nav&#039;)) return;&lt;br /&gt;
        var artPath = (window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get(&#039;wgArticlePath&#039;)) || &#039;/wiki/$1&#039;;&lt;br /&gt;
        var pageTitle = (window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get(&#039;wgPageName&#039;)) || &#039;&#039;;&lt;br /&gt;
        var teekaPage = document.querySelector(&#039;.gr-teeka-page&#039;);&lt;br /&gt;
        var primarySlug = teekaPage ? (teekaPage.getAttribute(&#039;data-primary&#039;) || &#039;&#039;) : &#039;&#039;;&lt;br /&gt;
        if (!primarySlug) { primarySlug = pageTitle.split(&#039;/&#039;)[0]; }&lt;br /&gt;
        if (!primarySlug) return;&lt;br /&gt;
        function wikiUrl(slug) {&lt;br /&gt;
            if (window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl) return mw.util.getUrl(slug);&lt;br /&gt;
            return artPath.replace(&#039;$1&#039;, encodeURIComponent(slug).replace(/%2F/g, &#039;/&#039;));&lt;br /&gt;
        }&lt;br /&gt;
        var docTitleEl = document.querySelector(&#039;.gr-doc-title&#039;);&lt;br /&gt;
        var hasMoolaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute(&#039;data-has-moola&#039;) === &#039;1&#039;;&lt;br /&gt;
        var hasUllekhaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute(&#039;data-has-ullekha&#039;) === &#039;1&#039;;&lt;br /&gt;
        var showMoolaPage = !teekaPage &amp;amp;&amp;amp; hasMoolaPage;&lt;br /&gt;
        var showMoolaBack = !!teekaPage;&lt;br /&gt;
        var showUllekha = hasUllekhaPage || !!teekaPage;&lt;br /&gt;
        if (!showMoolaPage &amp;amp;&amp;amp; !showMoolaBack &amp;amp;&amp;amp; !showUllekha) return;&lt;br /&gt;
        var nav = document.createElement(&#039;div&#039;);&lt;br /&gt;
        nav.id = &#039;gr-toc-doc-nav&#039;;&lt;br /&gt;
        nav.setAttribute(&#039;class&#039;, &#039;toc-main-links&#039;);&lt;br /&gt;
        function makeBtn(href, label) {&lt;br /&gt;
            var a = document.createElement(&#039;a&#039;);&lt;br /&gt;
            a.href = href;&lt;br /&gt;
            a.setAttribute(&#039;class&#039;, &#039;toc-main-link-item&#039;);&lt;br /&gt;
            var lspan = document.createElement(&#039;span&#039;);&lt;br /&gt;
            lspan.setAttribute(&#039;data-deva&#039;, label);&lt;br /&gt;
            lspan.textContent = (currentScript &amp;amp;&amp;amp; currentScript !== &#039;deva&#039;) ? transliterateText(label, currentScript) : label;&lt;br /&gt;
            translatableSpans.push(lspan);&lt;br /&gt;
            a.appendChild(lspan);&lt;br /&gt;
            a.addEventListener(&#039;mouseover&#039;, function () { this.style.opacity = &#039;0.72&#039;; });&lt;br /&gt;
            a.addEventListener(&#039;mouseout&#039;, function () { this.style.opacity = &#039;1&#039;; });&lt;br /&gt;
            return a;&lt;br /&gt;
        }&lt;br /&gt;
        if (showMoolaPage) nav.appendChild(makeBtn(wikiUrl(primarySlug + &#039;/Moola&#039;), &#039;मूलम्&#039;));&lt;br /&gt;
        if (showMoolaBack) nav.appendChild(makeBtn(wikiUrl(primarySlug), &#039;मूल&#039;));&lt;br /&gt;
        if (showUllekha) nav.appendChild(makeBtn(wikiUrl(primarySlug + &#039;/Ullekha&#039;), &#039;उल्लेख&#039;));&lt;br /&gt;
        var tocContents = toc.querySelector(&#039;.vector-toc-contents&#039;);&lt;br /&gt;
        if (tocContents) toc.insertBefore(nav, tocContents);&lt;br /&gt;
        else toc.appendChild(nav);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var _headingObserver = null;&lt;br /&gt;
&lt;br /&gt;
    function attachHeadingObserver() {&lt;br /&gt;
        if (_isNoTocPage()) return;&lt;br /&gt;
        if (_headingObserver) return;&lt;br /&gt;
        if (!window.IntersectionObserver) return;&lt;br /&gt;
        var ACTIVE_COLOR = &#039;#f57c00&#039;;&lt;br /&gt;
        var _activeId = null;&lt;br /&gt;
        var content = document.querySelector(&#039;.mw-parser-output&#039;);&lt;br /&gt;
        if (!content) return;&lt;br /&gt;
        var headings = Array.from(content.querySelectorAll(&#039;h1[id],h2[id],h3[id],h4[id],h5[id],h6[id]&#039;));&lt;br /&gt;
        if (!headings.length) return;&lt;br /&gt;
        var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
        if (!toc) return;&lt;br /&gt;
        function getTocLink(id) { return toc.querySelector(&#039;a[href=&amp;quot;#&#039; + CSS.escape(id) + &#039;&amp;quot;]&#039;); }&lt;br /&gt;
        function getTocLi(id) { var a = getTocLink(id); return a ? a.closest(&#039;.vector-toc-list-item&#039;) : null; }&lt;br /&gt;
        function clearActive() {&lt;br /&gt;
            toc.querySelectorAll(&#039;.vector-toc-list-item&#039;).forEach(function (li) {&lt;br /&gt;
                li.classList.remove(&#039;vector-toc-list-item-active&#039;);&lt;br /&gt;
                var lnk = li.querySelector(&#039;.vector-toc-link&#039;);&lt;br /&gt;
                if (!lnk) return;&lt;br /&gt;
                lnk.style.removeProperty(&#039;color&#039;);&lt;br /&gt;
                lnk.style.setProperty(&#039;font-weight&#039;, &#039;400&#039;, &#039;important&#039;);&lt;br /&gt;
                lnk.querySelectorAll(&#039;*&#039;).forEach(function (el) { el.style.removeProperty(&#039;color&#039;); el.style.setProperty(&#039;font-weight&#039;, &#039;400&#039;, &#039;important&#039;); });&lt;br /&gt;
            });&lt;br /&gt;
        }&lt;br /&gt;
        function setActive(id) {&lt;br /&gt;
            if (_activeId === id) return;&lt;br /&gt;
            _activeId = id;&lt;br /&gt;
            clearActive();&lt;br /&gt;
            if (!id) return;&lt;br /&gt;
            var li = getTocLi(id);&lt;br /&gt;
            if (!li) return;&lt;br /&gt;
            li.classList.add(&#039;vector-toc-list-item-active&#039;);&lt;br /&gt;
            var hasActiveChild = !!li.querySelector(&#039;.vector-toc-list-item .vector-toc-list-item-active&#039;);&lt;br /&gt;
            if (!hasActiveChild) {&lt;br /&gt;
                var lnk = li.querySelector(&#039;.vector-toc-link&#039;);&lt;br /&gt;
                if (lnk) {&lt;br /&gt;
                    lnk.style.setProperty(&#039;color&#039;, ACTIVE_COLOR, &#039;important&#039;);&lt;br /&gt;
                    lnk.style.setProperty(&#039;font-weight&#039;, &#039;700&#039;, &#039;important&#039;);&lt;br /&gt;
                    lnk.querySelectorAll(&#039;*&#039;).forEach(function (el) { el.style.setProperty(&#039;color&#039;, ACTIVE_COLOR, &#039;important&#039;); el.style.setProperty(&#039;font-weight&#039;, &#039;700&#039;, &#039;important&#039;); });&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            var anc = li.parentNode;&lt;br /&gt;
            while (anc &amp;amp;&amp;amp; anc !== toc) {&lt;br /&gt;
                if (anc.classList) anc.classList.remove(&#039;vector-toc-list-item-collapsed&#039;);&lt;br /&gt;
                if (anc.tagName === &#039;UL&#039; || anc.tagName === &#039;LI&#039;) anc.style.removeProperty(&#039;display&#039;);&lt;br /&gt;
                anc = anc.parentNode;&lt;br /&gt;
            }&lt;br /&gt;
            var sticky = document.querySelector(&#039;.vector-sticky-pinned-container&#039;);&lt;br /&gt;
            var scrollEl = sticky || toc;&lt;br /&gt;
            if (scrollEl.scrollHeight &amp;gt; scrollEl.clientHeight) {&lt;br /&gt;
                var lr = li.getBoundingClientRect();&lt;br /&gt;
                var cr = scrollEl.getBoundingClientRect();&lt;br /&gt;
                if (lr.top &amp;lt; cr.top + 8 || lr.bottom &amp;gt; cr.bottom - 8) {&lt;br /&gt;
                    scrollEl.scrollTop += lr.top - cr.top - scrollEl.clientHeight / 2 + li.offsetHeight / 2;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        var _visible = new Set();&lt;br /&gt;
        _headingObserver = new IntersectionObserver(function (entries) {&lt;br /&gt;
            entries.forEach(function (entry) {&lt;br /&gt;
                if (entry.isIntersecting) _visible.add(entry.target.id);&lt;br /&gt;
                else _visible.delete(entry.target.id);&lt;br /&gt;
            });&lt;br /&gt;
            var topId = null, topY = Infinity;&lt;br /&gt;
            _visible.forEach(function (id) {&lt;br /&gt;
                var el = document.getElementById(id);&lt;br /&gt;
                if (el) { var y = el.getBoundingClientRect().top; if (y &amp;gt;= 0 &amp;amp;&amp;amp; y &amp;lt; topY) { topY = y; topId = id; } }&lt;br /&gt;
            });&lt;br /&gt;
            if (!topId) {&lt;br /&gt;
                var bestY = -Infinity;&lt;br /&gt;
                headings.forEach(function (h) { var y = h.getBoundingClientRect().top; if (y &amp;lt; 0 &amp;amp;&amp;amp; y &amp;gt; bestY) { bestY = y; topId = h.id; } });&lt;br /&gt;
            }&lt;br /&gt;
            setActive(topId || null);&lt;br /&gt;
        }, { rootMargin: &#039;-60px 0px -65% 0px&#039;, threshold: 0 });&lt;br /&gt;
        headings.forEach(function (h) { _headingObserver.observe(h); });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function setupToc() {&lt;br /&gt;
        if (_isNoTocPage()) return;&lt;br /&gt;
        var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
        if (!toc) return;&lt;br /&gt;
        removeTocBeginning();&lt;br /&gt;
        renameTocTitle();&lt;br /&gt;
        expandTocSections();&lt;br /&gt;
        injectTocDocNav();&lt;br /&gt;
        attachHeadingObserver();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function init() {&lt;br /&gt;
        var HIDE_IDS = [&#039;vector-appearance&#039;, &#039;vector-appearance-pinned-container&#039;, &#039;vector-appearance-unpinned-container&#039;];&lt;br /&gt;
        function removeHiddenEls() {&lt;br /&gt;
            HIDE_IDS.forEach(function (id) { var el = document.getElementById(id); if (el &amp;amp;&amp;amp; el.parentNode) el.parentNode.removeChild(el); });&lt;br /&gt;
            var pt = document.getElementById(&#039;vector-page-tools&#039;) || document.querySelector(&#039;.vector-page-tools-pinned-container&#039;);&lt;br /&gt;
            if (pt) pt.querySelectorAll(&#039;[aria-controls=&amp;quot;vector-appearance&amp;quot;]&#039;).forEach(function (el) { if (el.parentNode) el.parentNode.removeChild(el); });&lt;br /&gt;
        }&lt;br /&gt;
        removeHiddenEls();&lt;br /&gt;
        (function detectTeekaMode() {&lt;br /&gt;
            var tp = document.querySelector(&#039;.gr-teeka-page&#039;);&lt;br /&gt;
            if (!tp) return;&lt;br /&gt;
            var primary = tp.getAttribute(&#039;data-primary&#039;) || &#039;&#039;;&lt;br /&gt;
            var artPath = (window.mw &amp;amp;&amp;amp; mw.config.get(&#039;wgArticlePath&#039;)) || &#039;/wiki/$1&#039;;&lt;br /&gt;
            var mainUrl = artPath.replace(&#039;$1&#039;, primary);&lt;br /&gt;
            var refParam = window.location.search.match(/[?&amp;amp;]ref=([01])/);&lt;br /&gt;
            if (refParam) { document.body.classList.add(refParam[1] === &#039;1&#039; ? &#039;gr-ref-mode&#039; : &#039;gr-standalone&#039;); return; }&lt;br /&gt;
            var ref = document.referrer || &#039;&#039;;&lt;br /&gt;
            document.body.classList.add((ref &amp;amp;&amp;amp; primary &amp;amp;&amp;amp; ref.indexOf(mainUrl) !== -1) ? &#039;gr-ref-mode&#039; : &#039;gr-standalone&#039;);&lt;br /&gt;
        }());&lt;br /&gt;
        if (window.MutationObserver) {&lt;br /&gt;
            var hideObs = new MutationObserver(function (mutations) {&lt;br /&gt;
                var dirty = false;&lt;br /&gt;
                mutations.forEach(function (m) { if (m.addedNodes.length) dirty = true; });&lt;br /&gt;
                if (dirty) removeHiddenEls();&lt;br /&gt;
            });&lt;br /&gt;
            hideObs.observe(document.body, { childList: true, subtree: false });&lt;br /&gt;
            setTimeout(function () { hideObs.disconnect(); }, 6000);&lt;br /&gt;
        }&lt;br /&gt;
        var content = document.querySelector(&#039;.mw-parser-output&#039;);&lt;br /&gt;
        var alreadyTagged = content &amp;amp;&amp;amp; content.querySelector(&#039;[data-deva]&#039;);&lt;br /&gt;
        if (!alreadyTagged) { translatableSpans = []; tagTextNodes(); }&lt;br /&gt;
        else {&lt;br /&gt;
            document.querySelectorAll(&#039;.vector-toc .vector-toc-text:not([data-deva])&#039;).forEach(function (span) {&lt;br /&gt;
                var orig = span.textContent; if (!orig.trim()) return;&lt;br /&gt;
                span.setAttribute(&#039;data-deva&#039;, orig); translatableSpans.push(span);&lt;br /&gt;
            });&lt;br /&gt;
        }&lt;br /&gt;
        var saved = (function () { try { return localStorage.getItem(LS_SCRIPT_KEY); } catch (e) { return null; } }());&lt;br /&gt;
        if (saved &amp;amp;&amp;amp; saved !== &#039;deva&#039;) { applyScript(saved); } else { currentScript = &#039;deva&#039;; }&lt;br /&gt;
        setTimeout(setupToc, 200);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    window.addEventListener(&#039;gr-script-change&#039;, function (e) {&lt;br /&gt;
        var script = e &amp;amp;&amp;amp; e.detail &amp;amp;&amp;amp; e.detail.script;&lt;br /&gt;
        if (script) applyScript(script);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    window.addEventListener(&#039;gr-new-content&#039;, function (e) {&lt;br /&gt;
        var container = e &amp;amp;&amp;amp; e.detail &amp;amp;&amp;amp; e.detail.container;&lt;br /&gt;
        if (!container) return;&lt;br /&gt;
        var walker = document.createTreeWalker(container, NodeFilter.SHOW_TEXT);&lt;br /&gt;
        var nodes = [];&lt;br /&gt;
        while (walker.nextNode()) nodes.push(walker.currentNode);&lt;br /&gt;
        nodes.forEach(function (node) {&lt;br /&gt;
            var p = node.parentNode;&lt;br /&gt;
            if (!p || (p.hasAttribute &amp;amp;&amp;amp; p.hasAttribute(&#039;data-deva&#039;))) return;&lt;br /&gt;
            var orig = node.textContent;&lt;br /&gt;
            if (!orig.trim()) return;&lt;br /&gt;
            var span = document.createElement(&#039;span&#039;);&lt;br /&gt;
            span.setAttribute(&#039;data-deva&#039;, orig);&lt;br /&gt;
            span.textContent = currentScript !== &#039;deva&#039; ? transliterateText(orig, currentScript) : orig;&lt;br /&gt;
            p.replaceChild(span, node);&lt;br /&gt;
            translatableSpans.push(span);&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    try {&lt;br /&gt;
        var _grBC = new BroadcastChannel(&#039;gr-script&#039;);&lt;br /&gt;
        _grBC.onmessage = function (e) {&lt;br /&gt;
            var script = e &amp;amp;&amp;amp; e.data &amp;amp;&amp;amp; e.data.script;&lt;br /&gt;
            if (script) { currentScript = script; var sel = document.querySelector(&#039;.gr-script-sel&#039;); if (sel) sel.value = script; applyScript(script); }&lt;br /&gt;
        };&lt;br /&gt;
    } catch (e) { }&lt;br /&gt;
&lt;br /&gt;
    if (window.mw) {&lt;br /&gt;
        mw.hook(&#039;wikipage.content&#039;).add(function () {&lt;br /&gt;
            setTimeout(function () {&lt;br /&gt;
                var content = document.querySelector(&#039;.mw-parser-output&#039;);&lt;br /&gt;
                var alreadyTagged = content &amp;amp;&amp;amp; content.querySelector(&#039;[data-deva]&#039;);&lt;br /&gt;
                if (!alreadyTagged) { translatableSpans = []; tagTextNodes(); }&lt;br /&gt;
                else {&lt;br /&gt;
                    document.querySelectorAll(&#039;.vector-toc .vector-toc-text:not([data-deva])&#039;).forEach(function (span) {&lt;br /&gt;
                        var orig = span.textContent; if (!orig.trim()) return;&lt;br /&gt;
                        span.setAttribute(&#039;data-deva&#039;, orig); translatableSpans.push(span);&lt;br /&gt;
                    });&lt;br /&gt;
                }&lt;br /&gt;
                if (currentScript !== &#039;deva&#039;) applyScript(currentScript);&lt;br /&gt;
                setupToc();&lt;br /&gt;
            }, 150);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) { document.addEventListener(&#039;DOMContentLoaded&#039;, init); }&lt;br /&gt;
    else { init(); }&lt;br /&gt;
&lt;br /&gt;
}());   /* ← end of main IIFE */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Inject &amp;quot;Help&amp;quot; and &amp;quot;About&amp;quot; links into the header ─────────────────&lt;br /&gt;
(function () {&lt;br /&gt;
    function wikiHref(title) {&lt;br /&gt;
        if (window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl) return mw.util.getUrl(title);&lt;br /&gt;
        var ap = (window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get(&#039;wgArticlePath&#039;)) || &#039;/wiki/$1&#039;;&lt;br /&gt;
        return ap.replace(&#039;$1&#039;, title);&lt;br /&gt;
    }&lt;br /&gt;
    var linkStyle = [&#039;color:rgba(255,255,255,0.88)&#039;, &#039;font-size:0.88em&#039;, &#039;font-family:system-ui,sans-serif&#039;, &#039;font-weight:500&#039;, &#039;text-decoration:none&#039;, &#039;padding:4px 10px&#039;, &#039;border-radius:4px&#039;, &#039;margin-right:4px&#039;, &#039;transition:color 0.15s,background 0.15s&#039;, &#039;white-space:nowrap&#039;].join(&#039;;&#039;);&lt;br /&gt;
    function makeHeaderLink(id, href, label) {&lt;br /&gt;
        var a = document.createElement(&#039;a&#039;);&lt;br /&gt;
        a.id = id; a.href = href; a.textContent = label; a.style.cssText = linkStyle;&lt;br /&gt;
        a.addEventListener(&#039;mouseover&#039;, function () { this.style.color = &#039;#fff&#039;; this.style.background = &#039;rgba(255,255,255,0.12)&#039;; });&lt;br /&gt;
        a.addEventListener(&#039;mouseout&#039;, function () { this.style.color = &#039;rgba(255,255,255,0.88)&#039;; this.style.background = &#039;transparent&#039;; });&lt;br /&gt;
        return a;&lt;br /&gt;
    }&lt;br /&gt;
    function injectHeaderLinks() {&lt;br /&gt;
        if (document.getElementById(&#039;gr-about-link&#039;)) return;&lt;br /&gt;
        var headerEnd = document.querySelector(&#039;.vector-header-end&#039;) || document.querySelector(&#039;#vector-user-links&#039;) || document.querySelector(&#039;.mw-header&#039;);&lt;br /&gt;
        if (!headerEnd) return;&lt;br /&gt;
        var helpLink = makeHeaderLink(&#039;gr-help-link&#039;, wikiHref(&#039;My_wiki:Help&#039;), &#039;Help&#039;);&lt;br /&gt;
        var aboutLink = makeHeaderLink(&#039;gr-about-link&#039;, wikiHref(&#039;My_wiki:About&#039;), &#039;About&#039;);&lt;br /&gt;
&lt;br /&gt;
        var userName = window.mw ? mw.config.get(&#039;wgUserName&#039;) : null;&lt;br /&gt;
        var isAnon = !userName || (window.mw &amp;amp;&amp;amp; mw.config.get(&#039;wgUserId&#039;) === null);&lt;br /&gt;
&lt;br /&gt;
        // Build the trailing auth element (Login link for anon, dropdown for logged-in)&lt;br /&gt;
        var authEl = null;&lt;br /&gt;
        if (isAnon) {&lt;br /&gt;
            if (!document.getElementById(&#039;gr-header-login&#039;)) {&lt;br /&gt;
                authEl = makeHeaderLink(&#039;gr-header-login&#039;, wikiHref(&#039;Special:UserLogin&#039;), &#039;Login&#039;);&lt;br /&gt;
            }&lt;br /&gt;
        } else if (!document.getElementById(&#039;gr-header-user&#039;)) {&lt;br /&gt;
            authEl = buildHeaderUserDropdown(userName);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var ul = document.querySelector(&#039;.vector-user-links&#039;) || document.querySelector(&#039;#pt-userpage&#039;);&lt;br /&gt;
        if (ul &amp;amp;&amp;amp; ul.parentNode === headerEnd) {&lt;br /&gt;
            if (authEl) headerEnd.insertBefore(authEl, ul);&lt;br /&gt;
            headerEnd.insertBefore(aboutLink, authEl || ul);&lt;br /&gt;
            headerEnd.insertBefore(helpLink, aboutLink);&lt;br /&gt;
        } else {&lt;br /&gt;
            headerEnd.appendChild(helpLink);&lt;br /&gt;
            headerEnd.appendChild(aboutLink);&lt;br /&gt;
            if (authEl) headerEnd.appendChild(authEl);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function buildHeaderUserDropdown(userName) {&lt;br /&gt;
        var wrap = document.createElement(&#039;div&#039;);&lt;br /&gt;
        wrap.id = &#039;gr-header-user&#039;;&lt;br /&gt;
        wrap.style.cssText = &#039;position:relative;display:inline-block;margin-right:4px;&#039;;&lt;br /&gt;
&lt;br /&gt;
        var trigger = document.createElement(&#039;button&#039;);&lt;br /&gt;
        trigger.id = &#039;gr-header-user-trigger&#039;;&lt;br /&gt;
        trigger.type = &#039;button&#039;;&lt;br /&gt;
        trigger.setAttribute(&#039;aria-haspopup&#039;, &#039;true&#039;);&lt;br /&gt;
        trigger.setAttribute(&#039;aria-expanded&#039;, &#039;false&#039;);&lt;br /&gt;
        trigger.style.cssText = [&lt;br /&gt;
            &#039;display:inline-flex&#039;, &#039;align-items:center&#039;, &#039;gap:5px&#039;,&lt;br /&gt;
            &#039;color:rgba(255,255,255,0.88)&#039;, &#039;font-size:0.88em&#039;,&lt;br /&gt;
            &#039;font-family:system-ui,sans-serif&#039;, &#039;font-weight:500&#039;,&lt;br /&gt;
            &#039;background:transparent&#039;, &#039;border:none&#039;, &#039;cursor:pointer&#039;,&lt;br /&gt;
            &#039;padding:4px 10px&#039;, &#039;border-radius:4px&#039;, &#039;white-space:nowrap&#039;,&lt;br /&gt;
            &#039;transition:color 0.15s,background 0.15s&#039;&lt;br /&gt;
        ].join(&#039;;&#039;);&lt;br /&gt;
        trigger.innerHTML =&lt;br /&gt;
            &#039;&amp;lt;span&amp;gt;&#039; + userName.replace(/&amp;lt;/g, &#039;&amp;amp;lt;&#039;) + &#039;&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
            &#039;&amp;lt;span id=&amp;quot;gr-header-caret&amp;quot; style=&amp;quot;font-size:0.8em;transition:transform 0.2s;&amp;quot;&amp;gt;\u25be&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
        trigger.addEventListener(&#039;mouseover&#039;, function () { this.style.color = &#039;#fff&#039;; this.style.background = &#039;rgba(255,255,255,0.12)&#039;; });&lt;br /&gt;
        trigger.addEventListener(&#039;mouseout&#039;, function () { if (menu.style.display === &#039;none&#039;) { this.style.color = &#039;rgba(255,255,255,0.88)&#039;; this.style.background = &#039;transparent&#039;; } });&lt;br /&gt;
&lt;br /&gt;
        var menu = document.createElement(&#039;div&#039;);&lt;br /&gt;
        menu.id = &#039;gr-header-user-menu&#039;;&lt;br /&gt;
        menu.setAttribute(&#039;role&#039;, &#039;menu&#039;);&lt;br /&gt;
        menu.style.cssText = [&lt;br /&gt;
            &#039;display:none&#039;, &#039;position:absolute&#039;, &#039;top:100%&#039;, &#039;right:0&#039;, &#039;margin-top:4px&#039;,&lt;br /&gt;
            &#039;min-width:150px&#039;, &#039;background:#fff&#039;, &#039;border-radius:6px&#039;,&lt;br /&gt;
            &#039;box-shadow:0 4px 16px rgba(0,0,0,0.18)&#039;, &#039;overflow:hidden&#039;, &#039;z-index:1000&#039;&lt;br /&gt;
        ].join(&#039;;&#039;);&lt;br /&gt;
&lt;br /&gt;
        var itemStyle = &#039;display:block;padding:10px 16px;font-size:0.9em;color:#2c1810;text-decoration:none;font-family:system-ui,sans-serif;background:#fff;&#039;;&lt;br /&gt;
        function makeMenuItem(href, label, id) {&lt;br /&gt;
            var a = document.createElement(&#039;a&#039;);&lt;br /&gt;
            a.href = href; a.setAttribute(&#039;role&#039;, &#039;menuitem&#039;);&lt;br /&gt;
            a.textContent = label; a.style.cssText = itemStyle;&lt;br /&gt;
            if (id) a.id = id;&lt;br /&gt;
            a.addEventListener(&#039;mouseover&#039;, function () { this.style.background = &#039;#f5efe9&#039;; });&lt;br /&gt;
            a.addEventListener(&#039;mouseout&#039;, function () { this.style.background = &#039;#fff&#039;; });&lt;br /&gt;
            return a;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        menu.appendChild(makeMenuItem(wikiHref(&#039;Special:Profile&#039;), &#039;Profile&#039;));&lt;br /&gt;
        menu.appendChild(makeMenuItem(&#039;#&#039;, &#039;Log out&#039;, &#039;gr-header-logout&#039;));&lt;br /&gt;
&lt;br /&gt;
        function setOpen(open) {&lt;br /&gt;
            menu.style.display = open ? &#039;block&#039; : &#039;none&#039;;&lt;br /&gt;
            trigger.setAttribute(&#039;aria-expanded&#039;, open ? &#039;true&#039; : &#039;false&#039;);&lt;br /&gt;
            var caret = document.getElementById(&#039;gr-header-caret&#039;);&lt;br /&gt;
            if (caret) caret.style.transform = open ? &#039;rotate(180deg)&#039; : &#039;&#039;;&lt;br /&gt;
            if (open) { trigger.style.color = &#039;#fff&#039;; trigger.style.background = &#039;rgba(255,255,255,0.12)&#039;; }&lt;br /&gt;
            else { trigger.style.color = &#039;rgba(255,255,255,0.88)&#039;; trigger.style.background = &#039;transparent&#039;; }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        trigger.addEventListener(&#039;click&#039;, function (e) {&lt;br /&gt;
            e.stopPropagation();&lt;br /&gt;
            setOpen(menu.style.display === &#039;none&#039;);&lt;br /&gt;
        });&lt;br /&gt;
        document.addEventListener(&#039;click&#039;, function (e) {&lt;br /&gt;
            if (!wrap.contains(e.target)) setOpen(false);&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        // Logout: POST with CSRF token (same approach as the desktop dropdown)&lt;br /&gt;
        menu.querySelector(&#039;#gr-header-logout&#039;).addEventListener(&#039;click&#039;, function (e) {&lt;br /&gt;
            e.preventDefault();&lt;br /&gt;
            if (window.mw &amp;amp;&amp;amp; mw.user &amp;amp;&amp;amp; mw.user.tokens) {&lt;br /&gt;
                var t = mw.user.tokens.get(&#039;csrfToken&#039;);&lt;br /&gt;
                if (t) {&lt;br /&gt;
                    var script = (mw.util &amp;amp;&amp;amp; mw.util.wikiScript) ? mw.util.wikiScript() : &#039;/index.php&#039;;&lt;br /&gt;
                    var form = document.createElement(&#039;form&#039;);&lt;br /&gt;
                    form.method = &#039;post&#039;;&lt;br /&gt;
                    form.action = script + &#039;?title=Special:UserLogout&#039;;&lt;br /&gt;
                    form.style.display = &#039;none&#039;;&lt;br /&gt;
                    form.innerHTML =&lt;br /&gt;
                        &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;wpEditToken&amp;quot; value=&amp;quot;&#039; + String(t).replace(/&amp;quot;/g, &#039;&amp;amp;quot;&#039;) + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
                        &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;title&amp;quot; value=&amp;quot;Special:UserLogout&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
                        &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;returnto&amp;quot; value=&amp;quot;Main Page&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
                    document.body.appendChild(form);&lt;br /&gt;
                    form.submit();&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            if (window.mw &amp;amp;&amp;amp; mw.Api) {&lt;br /&gt;
                new mw.Api().postWithToken(&#039;csrf&#039;, { action: &#039;logout&#039; })&lt;br /&gt;
                    .done(function () { location.href = &#039;/Main_Page&#039;; })&lt;br /&gt;
                    .fail(function () { location.href = &#039;/index.php?title=Special:UserLogout&#039;; });&lt;br /&gt;
            } else {&lt;br /&gt;
                location.href = &#039;/index.php?title=Special:UserLogout&#039;;&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        wrap.appendChild(trigger);&lt;br /&gt;
        wrap.appendChild(menu);&lt;br /&gt;
        return wrap;&lt;br /&gt;
    }&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) document.addEventListener(&#039;DOMContentLoaded&#039;, injectHeaderLinks);&lt;br /&gt;
    else injectHeaderLinks();&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Main page: by-Grantha / by-Author toggle ──────────────────────&lt;br /&gt;
(function () {&lt;br /&gt;
    function grHomeView(v) {&lt;br /&gt;
        var gView = document.getElementById(&#039;gr-view-grantha&#039;);&lt;br /&gt;
        var aView = document.getElementById(&#039;gr-view-author&#039;);&lt;br /&gt;
        var gBtn = document.getElementById(&#039;gr-toggle-grantha&#039;);&lt;br /&gt;
        var aBtn = document.getElementById(&#039;gr-toggle-author&#039;);&lt;br /&gt;
        if (!gView || !aView || !gBtn || !aBtn) return;&lt;br /&gt;
        gView.style.display = (v === &#039;grantha&#039;) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
        aView.style.display = (v === &#039;author&#039;) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
        gBtn.className = &#039;gr-toggle-btn&#039; + (v === &#039;grantha&#039; ? &#039; gr-toggle-active&#039; : &#039;&#039;);&lt;br /&gt;
        aBtn.className = &#039;gr-toggle-btn&#039; + (v === &#039;author&#039; ? &#039; gr-toggle-active&#039; : &#039;&#039;);&lt;br /&gt;
        try { localStorage.setItem(&#039;gr_home_view&#039;, v); } catch (e) { }&lt;br /&gt;
    }&lt;br /&gt;
    function initHomeToggle() {&lt;br /&gt;
        var gBtn = document.getElementById(&#039;gr-toggle-grantha&#039;);&lt;br /&gt;
        var aBtn = document.getElementById(&#039;gr-toggle-author&#039;);&lt;br /&gt;
        if (!gBtn || !aBtn) return;&lt;br /&gt;
        gBtn.addEventListener(&#039;click&#039;, function () { grHomeView(&#039;grantha&#039;); });&lt;br /&gt;
        aBtn.addEventListener(&#039;click&#039;, function () { grHomeView(&#039;author&#039;); });&lt;br /&gt;
        [gBtn, aBtn].forEach(function (btn) { btn.addEventListener(&#039;keydown&#039;, function (e) { if (e.key === &#039;Enter&#039; || e.key === &#039; &#039;) btn.click(); }); });&lt;br /&gt;
        var saved; try { saved = localStorage.getItem(&#039;gr_home_view&#039;); } catch (e) { }&lt;br /&gt;
        if (saved === &#039;author&#039;) grHomeView(&#039;author&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) document.addEventListener(&#039;DOMContentLoaded&#039;, initHomeToggle);&lt;br /&gt;
    else initHomeToggle();&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Ullekha reference link handler ─────────────────────────────────&lt;br /&gt;
(function () {&lt;br /&gt;
    function highlightOnArrival() {&lt;br /&gt;
        var search = window.location.search;&lt;br /&gt;
        if (!search) return;&lt;br /&gt;
        var m = search.match(/[?&amp;amp;]hlUllekha=([^&amp;amp;]+)/);&lt;br /&gt;
        if (!m) return;&lt;br /&gt;
        var needle;&lt;br /&gt;
        try { needle = decodeURIComponent(m[1]); } catch (e) { return; }&lt;br /&gt;
        if (!needle || needle.length &amp;lt; 4) return;&lt;br /&gt;
        function doHighlight() {&lt;br /&gt;
            var content = document.querySelector(&#039;.mw-parser-output&#039;);&lt;br /&gt;
            if (!content) return;&lt;br /&gt;
            var snippet = needle.slice(0, 40);&lt;br /&gt;
            var found = false;&lt;br /&gt;
            var spans = content.querySelectorAll(&#039;[data-deva]&#039;);&lt;br /&gt;
            for (var i = 0; i &amp;lt; spans.length &amp;amp;&amp;amp; !found; i++) {&lt;br /&gt;
                var spanEl = spans[i];&lt;br /&gt;
                var orig = spanEl.getAttribute(&#039;data-deva&#039;) || &#039;&#039;;&lt;br /&gt;
                if (orig.indexOf(snippet) === -1) continue;&lt;br /&gt;
                var idx = orig.indexOf(snippet);&lt;br /&gt;
                var hlText = orig.slice(idx, Math.min(idx + needle.length, orig.length));&lt;br /&gt;
                var mark = document.createElement(&#039;mark&#039;);&lt;br /&gt;
                mark.className = &#039;gr-ullekha-highlight&#039;;&lt;br /&gt;
                mark.style.cssText = &#039;background:#fff176;border-radius:2px;padding:0 2px;&#039;;&lt;br /&gt;
                mark.textContent = hlText;&lt;br /&gt;
                var parent = spanEl.parentNode;&lt;br /&gt;
                if (!parent) continue;&lt;br /&gt;
                var before = document.createTextNode(orig.slice(0, idx));&lt;br /&gt;
                var after = document.createTextNode(orig.slice(idx + hlText.length));&lt;br /&gt;
                parent.insertBefore(before, spanEl); parent.insertBefore(mark, spanEl); parent.insertBefore(after, spanEl); parent.removeChild(spanEl);&lt;br /&gt;
                setTimeout(function () { mark.scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; }); }, 100);&lt;br /&gt;
                found = true;&lt;br /&gt;
            }&lt;br /&gt;
            if (!found) {&lt;br /&gt;
                var walker = document.createTreeWalker(content, NodeFilter.SHOW_TEXT);&lt;br /&gt;
                while (walker.nextNode() &amp;amp;&amp;amp; !found) {&lt;br /&gt;
                    var node = walker.currentNode;&lt;br /&gt;
                    var txt = node.textContent || &#039;&#039;;&lt;br /&gt;
                    if (txt.indexOf(snippet) === -1) continue;&lt;br /&gt;
                    var idx2 = txt.indexOf(snippet);&lt;br /&gt;
                    var mark2 = document.createElement(&#039;mark&#039;);&lt;br /&gt;
                    mark2.className = &#039;gr-ullekha-highlight&#039;;&lt;br /&gt;
                    mark2.style.cssText = &#039;background:#fff176;border-radius:2px;padding:0 2px;&#039;;&lt;br /&gt;
                    mark2.textContent = txt.slice(idx2, Math.min(idx2 + needle.length, txt.length));&lt;br /&gt;
                    var p = node.parentNode;&lt;br /&gt;
                    p.insertBefore(document.createTextNode(txt.slice(0, idx2)), node);&lt;br /&gt;
                    p.insertBefore(mark2, node);&lt;br /&gt;
                    p.insertBefore(document.createTextNode(txt.slice(idx2 + mark2.textContent.length)), node);&lt;br /&gt;
                    p.removeChild(node);&lt;br /&gt;
                    setTimeout(function () { mark2.scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; }); }, 100);&lt;br /&gt;
                    found = true;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        doHighlight();&lt;br /&gt;
    }&lt;br /&gt;
    function wireUllekhaLinks() {&lt;br /&gt;
        document.querySelectorAll(&#039;.gr-ullekha-ref-link&#039;).forEach(function (wrap) {&lt;br /&gt;
            var anchor = wrap.getAttribute(&#039;data-anchor&#039;) || &#039;&#039;;&lt;br /&gt;
            var hl = wrap.getAttribute(&#039;data-hl&#039;) || &#039;&#039;;&lt;br /&gt;
            var a = wrap.querySelector(&#039;a&#039;);&lt;br /&gt;
            if (!a) return;&lt;br /&gt;
            var base = a.href.split(&#039;#&#039;)[0];&lt;br /&gt;
            var encoded = encodeURIComponent(hl);&lt;br /&gt;
            a.href = base + (hl ? &#039;?hlUllekha=&#039; + encoded : &#039;&#039;) + (anchor ? &#039;#&#039; + anchor : &#039;&#039;);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) { document.addEventListener(&#039;DOMContentLoaded&#039;, function () { highlightOnArrival(); wireUllekhaLinks(); }); }&lt;br /&gt;
    else { highlightOnArrival(); wireUllekhaLinks(); }&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
/* ── Search result highlight ──────────────────────────────────── */&lt;br /&gt;
/* EXACT REPLACEMENT for the search highlight IIFE in MediaWiki:Common.js.&lt;br /&gt;
 * Only changes from the original working version:&lt;br /&gt;
 *  - Mobile bar: full-width terracotta bottom bar instead of floating pill&lt;br /&gt;
 *  - showDismissBar: guard added (if !count return) to prevent empty bar&lt;br /&gt;
 * Everything else (storeQueryForLink, applyHighlight, wrapMatches) is&lt;br /&gt;
 * identical to the version that was working.&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
&lt;br /&gt;
    function storeQueryForLink(url, query) {&lt;br /&gt;
        try {&lt;br /&gt;
            var a = document.createElement(&#039;a&#039;);&lt;br /&gt;
            a.href = url;&lt;br /&gt;
            sessionStorage.setItem(&#039;gr_search_hl&#039;, JSON.stringify({&lt;br /&gt;
                query: query,&lt;br /&gt;
                pathname: a.pathname&lt;br /&gt;
            }));&lt;br /&gt;
        } catch (e) { }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function applyHighlight() {&lt;br /&gt;
        var stored;&lt;br /&gt;
        try {&lt;br /&gt;
            stored = JSON.parse(sessionStorage.getItem(&#039;gr_search_hl&#039;) || &#039;null&#039;);&lt;br /&gt;
        } catch (e) { return; }&lt;br /&gt;
        if (!stored || !stored.query) return;&lt;br /&gt;
&lt;br /&gt;
        var currentPath = window.location.pathname;&lt;br /&gt;
        var storedPath = stored.pathname || &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
        function normPath(p) { return decodeURIComponent(p).replace(/\/+$/, &#039;&#039;); }&lt;br /&gt;
        if (storedPath &amp;amp;&amp;amp; normPath(storedPath) !== normPath(currentPath)) {&lt;br /&gt;
            try { sessionStorage.removeItem(&#039;gr_search_hl&#039;); } catch (e) { }&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var query = stored.query.trim();&lt;br /&gt;
        if (!query) return;&lt;br /&gt;
&lt;br /&gt;
        try { sessionStorage.removeItem(&#039;gr_search_hl&#039;); } catch (e) { }&lt;br /&gt;
&lt;br /&gt;
        var delays = [0, 200, 600];&lt;br /&gt;
        delays.forEach(function (ms) {&lt;br /&gt;
            setTimeout(function () {&lt;br /&gt;
                if (document.querySelector(&#039;.gr-search-hl&#039;)) return;&lt;br /&gt;
                highlightText(query);&lt;br /&gt;
            }, ms);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function highlightText(query) {&lt;br /&gt;
        var content = document.querySelector(&#039;#mw-content-text .mw-parser-output&#039;);&lt;br /&gt;
        if (!content) return;&lt;br /&gt;
&lt;br /&gt;
        var raw = query.replace(/^&amp;quot;|&amp;quot;$/g, &#039;&#039;).trim();&lt;br /&gt;
        if (!raw) return;&lt;br /&gt;
&lt;br /&gt;
        var patterns = [];&lt;br /&gt;
        patterns.push(escapeRegex(raw));&lt;br /&gt;
        raw.split(/\s+/).forEach(function (w) {&lt;br /&gt;
            if (w.length &amp;gt;= 2) patterns.push(escapeRegex(w));&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        var matched = false;&lt;br /&gt;
        for (var pi = 0; pi &amp;lt; patterns.length; pi++) {&lt;br /&gt;
            var re;&lt;br /&gt;
            try { re = new RegExp(&#039;(&#039; + patterns[pi] + &#039;)&#039;, &#039;gi&#039;); }&lt;br /&gt;
            catch (e) { continue; }&lt;br /&gt;
            var count = wrapMatches(content, re);&lt;br /&gt;
            if (count &amp;gt; 0) { matched = true; break; }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if (!matched) return;&lt;br /&gt;
&lt;br /&gt;
        var first = document.querySelector(&#039;.gr-search-hl&#039;);&lt;br /&gt;
        if (first) {&lt;br /&gt;
            first.scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; });&lt;br /&gt;
            first.classList.add(&#039;gr-search-hl-pulse&#039;);&lt;br /&gt;
            setTimeout(function () { first.classList.remove(&#039;gr-search-hl-pulse&#039;); }, 2000);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        showDismissBar(query);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function escapeRegex(s) {&lt;br /&gt;
        return s.replace(/[.*+?^${}()|[\]\\]/g, &#039;\\$&amp;amp;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function wrapMatches(root, re) {&lt;br /&gt;
        var count = 0;&lt;br /&gt;
        var walker = document.createTreeWalker(&lt;br /&gt;
            root, NodeFilter.SHOW_TEXT, {&lt;br /&gt;
            acceptNode: function (node) {&lt;br /&gt;
                var p = node.parentElement;&lt;br /&gt;
                if (!p) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
                var tag = p.tagName.toUpperCase();&lt;br /&gt;
                if (tag === &#039;SCRIPT&#039; || tag === &#039;STYLE&#039; || tag === &#039;NOSCRIPT&#039;) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
                if (p.classList.contains(&#039;gr-search-hl&#039;)) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
                return NodeFilter.FILTER_ACCEPT;&lt;br /&gt;
            }&lt;br /&gt;
        }, false&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
        var nodes = [];&lt;br /&gt;
        var node;&lt;br /&gt;
        while ((node = walker.nextNode())) nodes.push(node);&lt;br /&gt;
&lt;br /&gt;
        nodes.forEach(function (textNode) {&lt;br /&gt;
            var val = textNode.nodeValue;&lt;br /&gt;
            if (!re.test(val)) return;&lt;br /&gt;
            re.lastIndex = 0;&lt;br /&gt;
&lt;br /&gt;
            var frag = document.createDocumentFragment();&lt;br /&gt;
            var last = 0;&lt;br /&gt;
            var m;&lt;br /&gt;
            while ((m = re.exec(val)) !== null) {&lt;br /&gt;
                if (m.index &amp;gt; last) {&lt;br /&gt;
                    frag.appendChild(document.createTextNode(val.slice(last, m.index)));&lt;br /&gt;
                }&lt;br /&gt;
                var span = document.createElement(&#039;span&#039;);&lt;br /&gt;
                span.className = &#039;gr-search-hl&#039;;&lt;br /&gt;
                span.textContent = m[0];&lt;br /&gt;
                frag.appendChild(span);&lt;br /&gt;
                last = m.index + m[0].length;&lt;br /&gt;
                count++;&lt;br /&gt;
            }&lt;br /&gt;
            if (last &amp;lt; val.length) {&lt;br /&gt;
                frag.appendChild(document.createTextNode(val.slice(last)));&lt;br /&gt;
            }&lt;br /&gt;
            textNode.parentNode.replaceChild(frag, textNode);&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        return count;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function showDismissBar(query) {&lt;br /&gt;
        var existing = document.getElementById(&#039;gr-hl-bar&#039;);&lt;br /&gt;
        if (existing) existing.remove();&lt;br /&gt;
&lt;br /&gt;
        var count = document.querySelectorAll(&#039;.gr-search-hl&#039;).length;&lt;br /&gt;
        if (!count) return;&lt;br /&gt;
&lt;br /&gt;
        var isMob = window.innerWidth &amp;lt; 768 || !!document.getElementById(&#039;mw-mf-viewport&#039;);&lt;br /&gt;
        var bar = document.createElement(&#039;div&#039;);&lt;br /&gt;
        bar.id = &#039;gr-hl-bar&#039;;&lt;br /&gt;
&lt;br /&gt;
        if (isMob) {&lt;br /&gt;
            bar.style.cssText = [&lt;br /&gt;
                &#039;position:fixed&#039;, &#039;bottom:0&#039;, &#039;left:0&#039;, &#039;right:0&#039;,&lt;br /&gt;
                &#039;z-index:10200&#039;, &#039;background:#b5451b&#039;, &#039;color:#fff&#039;,&lt;br /&gt;
                &#039;padding:0&#039;, &#039;display:flex&#039;, &#039;align-items:stretch&#039;,&lt;br /&gt;
                &#039;font-family:system-ui,sans-serif&#039;,&lt;br /&gt;
                &#039;box-shadow:0 -2px 12px rgba(0,0,0,0.25)&#039;, &#039;height:56px&#039;&lt;br /&gt;
            ].join(&#039;;&#039;);&lt;br /&gt;
            bar.class = &#039;gr-search-hl-mobile&#039;;&lt;br /&gt;
&lt;br /&gt;
            var mbs = &#039;flex:1;display:flex;flex-direction:column;align-items:center;&#039; +&lt;br /&gt;
                &#039;justify-content:center;background:none;border:none;color:#fff;cursor:pointer;&#039; +&lt;br /&gt;
                &#039;padding:6px 4px;font-family:system-ui,sans-serif;font-size:11px;font-weight:500;&#039; +&lt;br /&gt;
                &#039;gap:3px;-webkit-tap-highlight-color:rgba(0,0,0,0.12);&#039;;&lt;br /&gt;
&lt;br /&gt;
            bar.innerHTML =&lt;br /&gt;
                &#039;&amp;lt;button id=&amp;quot;gr-hl-prev&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;polyline points=&amp;quot;15 18 9 12 15 6&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;span&amp;gt;Prev&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;button id=&amp;quot;gr-hl-next&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;polyline points=&amp;quot;9 18 15 12 9 6&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;span&amp;gt;Next&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;button id=&amp;quot;gr-hl-results&amp;quot; style=&amp;quot;&#039; + mbs + &#039;flex:1.6;border-left:1px solid rgba(255,255,255,0.2);border-right:1px solid rgba(255,255,255,0.2);&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;circle cx=&amp;quot;11&amp;quot; cy=&amp;quot;11&amp;quot; r=&amp;quot;7&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;16.5&amp;quot; y1=&amp;quot;16.5&amp;quot; x2=&amp;quot;22&amp;quot; y2=&amp;quot;22&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;span&amp;gt;&#039; + count + &#039; match&#039; + (count === 1 ? &#039;&#039; : &#039;es&#039;) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;button id=&amp;quot;gr-hl-dismiss&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;line x1=&amp;quot;18&amp;quot; y1=&amp;quot;6&amp;quot; x2=&amp;quot;6&amp;quot; y2=&amp;quot;18&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;6&amp;quot; y1=&amp;quot;6&amp;quot; x2=&amp;quot;18&amp;quot; y2=&amp;quot;18&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;span&amp;gt;Close&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
        } else {&lt;br /&gt;
            bar.style.cssText = [&lt;br /&gt;
                &#039;position:fixed&#039;, &#039;bottom:0&#039;, &#039;left:0&#039;, &#039;right:0&#039;, &#039;z-index:10200&#039;,&lt;br /&gt;
                &#039;background:#b5451b&#039;, &#039;color:#fff&#039;, &#039;padding:10px 16px&#039;,&lt;br /&gt;
                &#039;display:flex&#039;, &#039;align-items:center&#039;, &#039;justify-content:space-between&#039;,&lt;br /&gt;
                &#039;font-family:system-ui,sans-serif&#039;, &#039;font-size:14px&#039;,&lt;br /&gt;
                &#039;box-shadow:0 -2px 8px rgba(0,0,0,0.2)&#039;&lt;br /&gt;
            ].join(&#039;;&#039;);&lt;br /&gt;
&lt;br /&gt;
            var nav = document.createElement(&#039;div&#039;);&lt;br /&gt;
            nav.style.cssText = &#039;display:flex;align-items:center;gap:12px;&#039;;&lt;br /&gt;
            nav.innerHTML =&lt;br /&gt;
                &#039;&amp;lt;span&amp;gt;🔍 &amp;lt;strong&amp;gt;&#039; + escHtml(query) + &#039;&amp;lt;/strong&amp;gt; — &#039; + count + &#039; match&#039; + (count === 1 ? &#039;&#039; : &#039;es&#039;) + &#039;&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;button id=&amp;quot;gr-hl-prev&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;↑ Prev&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;button id=&amp;quot;gr-hl-next&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;↓ Next&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;button id=&amp;quot;gr-hl-results&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;← Results&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
            bar.appendChild(nav);&lt;br /&gt;
&lt;br /&gt;
            var db = document.createElement(&#039;button&#039;);&lt;br /&gt;
            db.id = &#039;gr-hl-dismiss&#039;; db.textContent = &#039;✕ Close&#039;;&lt;br /&gt;
            db.style.cssText = &#039;background:rgba(255,255,255,0.15);border:none;color:#fff;padding:4px 12px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&#039;;&lt;br /&gt;
            bar.appendChild(db);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        document.body.appendChild(bar);&lt;br /&gt;
&lt;br /&gt;
        var hlEls = Array.from(document.querySelectorAll(&#039;.gr-search-hl&#039;));&lt;br /&gt;
        var current = 0;&lt;br /&gt;
&lt;br /&gt;
        function goTo(idx) {&lt;br /&gt;
            hlEls.forEach(function (el) { el.classList.remove(&#039;gr-search-hl-current&#039;); });&lt;br /&gt;
            current = ((idx % hlEls.length) + hlEls.length) % hlEls.length;&lt;br /&gt;
            hlEls[current].classList.add(&#039;gr-search-hl-current&#039;);&lt;br /&gt;
            hlEls[current].scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; });&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function dismiss() { clearHighlights(); bar.remove(); }&lt;br /&gt;
&lt;br /&gt;
        var nb = document.getElementById(&#039;gr-hl-next&#039;);&lt;br /&gt;
        var pb = document.getElementById(&#039;gr-hl-prev&#039;);&lt;br /&gt;
        var rb = document.getElementById(&#039;gr-hl-results&#039;);&lt;br /&gt;
        var db2 = document.getElementById(&#039;gr-hl-dismiss&#039;);&lt;br /&gt;
        if (nb) nb.onclick = function () { goTo(current + 1); };&lt;br /&gt;
        if (pb) pb.onclick = function () { goTo(current - 1); };&lt;br /&gt;
        if (db2) db2.onclick = dismiss;&lt;br /&gt;
        if (rb) rb.onclick = function () {&lt;br /&gt;
            bar.remove(); clearHighlights();&lt;br /&gt;
            if (window.showSearchDialog) window.showSearchDialog(query);&lt;br /&gt;
        };&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function clearHighlights() {&lt;br /&gt;
        document.querySelectorAll(&#039;.gr-search-hl&#039;).forEach(function (span) {&lt;br /&gt;
            var p = span.parentNode; if (!p) return;&lt;br /&gt;
            while (span.firstChild) p.insertBefore(span.firstChild, span);&lt;br /&gt;
            p.removeChild(span);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function escHtml(s) {&lt;br /&gt;
        return String(s).replace(/&amp;amp;/g, &#039;&amp;amp;amp;&#039;).replace(/&amp;lt;/g, &#039;&amp;amp;lt;&#039;).replace(/&amp;gt;/g, &#039;&amp;amp;gt;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function injectHighlightCSS() {&lt;br /&gt;
        if (document.getElementById(&#039;gr-hl-css&#039;)) return;&lt;br /&gt;
        var s = document.createElement(&#039;style&#039;);&lt;br /&gt;
        s.id = &#039;gr-hl-css&#039;;&lt;br /&gt;
        s.textContent = [&lt;br /&gt;
            &#039;.gr-search-hl{background:#fff176;color:#1a1a1a;border-radius:2px;padding:0 1px;box-shadow:0 0 0 1px rgba(181,69,27,0.25);}&#039;,&lt;br /&gt;
            &#039;.gr-search-hl-current{background:#ffb300!important;box-shadow:0 0 0 2px #b5451b!important;}&#039;,&lt;br /&gt;
            &#039;@keyframes gr-hl-pulse{0%{background:#ffb300;}50%{background:#fff176;}100%{background:#fff176;}}&#039;,&lt;br /&gt;
            &#039;.gr-search-hl-pulse{animation:gr-hl-pulse 1.2s ease 2;}&#039;,&lt;br /&gt;
        ].join(&#039;&#039;);&lt;br /&gt;
        document.head.appendChild(s);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    injectHighlightCSS();&lt;br /&gt;
&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) {&lt;br /&gt;
        document.addEventListener(&#039;DOMContentLoaded&#039;, applyHighlight);&lt;br /&gt;
    } else {&lt;br /&gt;
        applyHighlight();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (window.mw) {&lt;br /&gt;
        mw.hook(&#039;wikipage.content&#039;).add(function () {&lt;br /&gt;
            setTimeout(applyHighlight, 100);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    window.grStoreSearchHL = storeQueryForLink;&lt;br /&gt;
&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
/* ═══════════════════════════════════════════════════════════════&lt;br /&gt;
   Mobile addon — only runs on Minerva (mobile) skin&lt;br /&gt;
   ═══════════════════════════════════════════════════════════════ */&lt;br /&gt;
(function () {&lt;br /&gt;
    if (!document.body.classList.contains(&#039;skin-minerva&#039;)) return;&lt;br /&gt;
    function injectCSS() {&lt;br /&gt;
        if (document.getElementById(&#039;gr-mob-css&#039;)) return;&lt;br /&gt;
        var s = document.createElement(&#039;style&#039;);&lt;br /&gt;
        s.id = &#039;gr-mob-css&#039;;&lt;br /&gt;
        s.textContent =&lt;br /&gt;
            &#039;body,#mw-mf-viewport,#mw-mf-page-center{padding-top:0!important;margin-top:0!important;}&#039; +&lt;br /&gt;
            &#039;html,body,#mw-mf-viewport,#mw-mf-page-center{overflow-x:hidden!important;max-width:100vw!important;}&#039; +&lt;br /&gt;
            &#039;header.header-container{background:#b5451b!important;position:sticky!important;top:0!important;z-index:300!important;}&#039; +&lt;br /&gt;
            &#039;.minerva-header{background:#b5451b!important;min-height:54px!important;}&#039; +&lt;br /&gt;
            &#039;.minerva-header .search-toggle,.minerva-header .minerva-user-notifications{display:none!important;}&#039; +&lt;br /&gt;
            &#039;.branding-box a{display:flex!important;align-items:center!important;text-decoration:none!important;max-width:calc(100vw - 80px)!important;}&#039; +&lt;br /&gt;
            &#039;.branding-box a::before{content:&amp;quot;&amp;quot;;display:block;width:30px;height:30px;flex-shrink:0;background:url(&amp;quot;/favicon.png&amp;quot;) center/contain no-repeat;margin-right:8px;}&#039; +&lt;br /&gt;
            &#039;.branding-box a span{color:#fff!important;font-size:16px!important;font-weight:700!important;font-family:system-ui,sans-serif!important;line-height:1.2!important;flex:1 1 auto!important;min-width:0!important;}&#039; +&lt;br /&gt;
            &#039;.minerva-header svg path,.minerva-header svg rect,.minerva-header svg circle{fill:#fff!important;}&#039; +&lt;br /&gt;
            &#039;.minerva-header label{color:#fff!important;}&#039; +&lt;br /&gt;
            &#039;.minerva-tabs,.mw-portlet-associated-pages,.page-actions-menu,#page-secondary-actions,.last-modified-bar,.minerva-anon-talk-link{display:none!important;}&#039; +&lt;br /&gt;
            &#039;#gr-mob-menu-items{display:block!important;}&#039; +&lt;br /&gt;
            &#039;.mw-footer.minerva-footer,.footer-places,.footer-info,.minerva-footer-logo,#footer-places-about,#footer-places-disclaimers,#footer-places-privacy{display:none!important;}&#039; +&lt;br /&gt;
            &#039;#gr-static-bar{position:sticky!important;top:54px!important;z-index:200!important;}&#039; +&lt;br /&gt;
            &#039;.mf-section-0,.mf-section-1,.mf-section-2,.mf-section-3,.mf-section-4,.mf-section-5,.mf-section-6,.mf-section-7,.mf-section-8,.mf-section-9,.mf-section-10{display:block!important;visibility:visible!important;}&#039; +&lt;br /&gt;
            &#039;.collapsible-block{display:block!important;}&#039; +&lt;br /&gt;
            &#039;.section-heading .indicator,.collapsible-heading .indicator{display:none!important;}&#039; +&lt;br /&gt;
            &#039;.section-heading,.collapsible-heading{pointer-events:none!important;}&#039; +&lt;br /&gt;
            &#039;.gr-home-grid{flex-direction:column!important;flex-wrap:nowrap!important;gap:12px!important;width:100%!important;}&#039; +&lt;br /&gt;
            &#039;.gr-home-card{width:100%!important;max-width:100%!important;min-width:unset!important;box-sizing:border-box!important;flex:none!important;}&#039; +&lt;br /&gt;
            &#039;.gr-home-toggle{flex-wrap:wrap!important;}&#039; +&lt;br /&gt;
            &#039;.mw-parser-output{font-size:18px!important;line-height:1.8!important;}&#039; +&lt;br /&gt;
            &#039;.mw-parser-output h2,.mw-parser-output h3{width:100%!important;}&#039; +&lt;br /&gt;
            &#039;.bhashyam-block{margin-left:8px!important;}&#039; +&lt;br /&gt;
            &#039;#footer,.mw-footer,.catlinks,#catlinks{display:none!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-panel{position:fixed!important;top:0!important;left:0!important;bottom:0!important;width:82vw!important;max-width:340px!important;background:#fff!important;z-index:10400!important;box-shadow:4px 0 28px rgba(0,0,0,0.22)!important;overflow-y:auto!important;padding:0 0 40px!important;transform:translateX(-110%)!important;transition:transform 0.26s cubic-bezier(0.4,0,0.2,1)!important;display:block!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-panel.open{transform:translateX(0)!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-backdrop{display:none!important;position:fixed!important;inset:0!important;background:rgba(0,0,0,0.4)!important;z-index:10399!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-backdrop.open{display:block!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-header{position:sticky!important;top:0!important;background:#fff!important;display:flex!important;align-items:center!important;justify-content:space-between!important;padding:16px 16px 12px!important;border-bottom:1px solid #f0ebe6!important;z-index:1!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-title{font-size:13px!important;font-weight:700!important;text-transform:uppercase!important;letter-spacing:0.08em!important;color:#b5451b!important;font-family:system-ui,sans-serif!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-close{background:none!important;border:none!important;font-size:22px!important;color:#999!important;cursor:pointer!important;padding:4px 8px!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-body{padding:12px 16px!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-body a{display:block!important;font-size:16px!important;line-height:1.6!important;color:#2c1810!important;text-decoration:none!important;padding:8px 0!important;border-bottom:1px solid #f5f0ed!important;}&#039;;&lt;br /&gt;
        document.head.appendChild(s);&lt;br /&gt;
    }&lt;br /&gt;
    function expandSections() {&lt;br /&gt;
        document.querySelectorAll(&#039;[class*=&amp;quot;mf-section-&amp;quot;], .collapsible-block&#039;).forEach(function (el) { el.removeAttribute(&#039;hidden&#039;); el.style.setProperty(&#039;display&#039;, &#039;block&#039;, &#039;important&#039;); el.style.setProperty(&#039;visibility&#039;, &#039;visible&#039;, &#039;important&#039;); el.removeAttribute(&#039;aria-hidden&#039;); });&lt;br /&gt;
        document.querySelectorAll(&#039;.section-heading, .collapsible-heading&#039;).forEach(function (el) { el.setAttribute(&#039;aria-expanded&#039;, &#039;true&#039;); el.style.setProperty(&#039;pointer-events&#039;, &#039;none&#039;, &#039;important&#039;); });&lt;br /&gt;
    }&lt;br /&gt;
    function watchSections() {&lt;br /&gt;
        var t = null;&lt;br /&gt;
        var obs = new MutationObserver(function (ms) { if (ms.some(function (m) { return m.attributeName === &#039;hidden&#039;; })) { clearTimeout(t); t = setTimeout(expandSections, 30); } });&lt;br /&gt;
        obs.observe(document.querySelector(&#039;#mw-content-text&#039;) || document.body, { subtree: true, attributes: true, attributeFilter: [&#039;hidden&#039;, &#039;aria-hidden&#039;] });&lt;br /&gt;
    }&lt;br /&gt;
    function watchBodyPadding() {&lt;br /&gt;
        new MutationObserver(function () { if (document.body.style.paddingTop &amp;amp;&amp;amp; document.body.style.paddingTop !== &#039;0px&#039;) document.body.style.paddingTop = &#039;&#039;; }).observe(document.body, { attributes: true, attributeFilter: [&#039;style&#039;] });&lt;br /&gt;
    }&lt;br /&gt;
    function injectMenuLinks() {&lt;br /&gt;
        if (document.getElementById(&#039;gr-mob-menu-items&#039;)) return;&lt;br /&gt;
        var navDrawer = document.querySelector(&#039;.navigation-drawer&#039;);&lt;br /&gt;
        if (!navDrawer) return;&lt;br /&gt;
        var wrap = document.createElement(&#039;div&#039;); wrap.id = &#039;gr-mob-menu-items&#039;; wrap.style.cssText = &#039;width:100%;background:#fff;margin-top:8px;&#039;;&lt;br /&gt;
        var itemStyle = &#039;display:flex;align-items:center;gap:14px;padding:15px 20px;font-size:16px;color:#2c1810;text-decoration:none;font-family:system-ui,sans-serif;border-bottom:1px solid #f0ebe6;background:#fff;&#039;;&lt;br /&gt;
        function makeItem(href, label) { var a = document.createElement(&#039;a&#039;); a.href = href; a.style.cssText = itemStyle; a.innerHTML = &#039;&amp;lt;span&amp;gt;&#039; + label + &#039;&amp;lt;/span&amp;gt;&#039;; return a; }&lt;br /&gt;
        wrap.appendChild(makeItem(&#039;/Main_Page&#039;, &#039;Home&#039;));&lt;br /&gt;
        wrap.appendChild(makeItem(&#039;/My_wiki:Help&#039;, &#039;Help&#039;));&lt;br /&gt;
        wrap.appendChild(makeItem(&#039;/My_wiki:About&#039;, &#039;About&#039;));&lt;br /&gt;
        var userName = window.mw ? mw.config.get(&#039;wgUserName&#039;) : null;&lt;br /&gt;
        if (userName) {&lt;br /&gt;
            wrap.appendChild(makeItem((window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl) ? mw.util.getUrl(&#039;Special:Profile&#039;) : &#039;/Special:Profile&#039;, &#039;Profile&#039;));&lt;br /&gt;
            var la = document.querySelector(&#039;a[href*=&amp;quot;action=logout&amp;quot;]&#039;);&lt;br /&gt;
            wrap.appendChild(makeItem(la ? la.href : &#039;/index.php?title=Special:UserLogout&#039;, &#039;Log out&#039;));&lt;br /&gt;
        }&lt;br /&gt;
        else wrap.appendChild(makeItem(&#039;/index.php?title=Special:UserLogin&#039;, &#039;Log in&#039;));&lt;br /&gt;
        var pageLeft = document.getElementById(&#039;mw-mf-page-left&#039;);&lt;br /&gt;
        if (pageLeft) { while (pageLeft.firstChild) pageLeft.removeChild(pageLeft.firstChild); pageLeft.style.removeProperty(&#039;display&#039;); pageLeft.appendChild(wrap); }&lt;br /&gt;
        else navDrawer.appendChild(wrap);&lt;br /&gt;
    }&lt;br /&gt;
    var _tocDone = false;&lt;br /&gt;
    function initToc() {&lt;br /&gt;
        if (_tocDone) return;&lt;br /&gt;
        var tocList = document.querySelector(&#039;.vector-toc-contents, .vector-toc .vector-toc-list&#039;);&lt;br /&gt;
        if (!tocList || !tocList.querySelector(&#039;li&#039;)) return;&lt;br /&gt;
        _tocDone = true;&lt;br /&gt;
        var bd = document.createElement(&#039;div&#039;); bd.className = &#039;gr-mob-toc-backdrop&#039;; document.body.appendChild(bd);&lt;br /&gt;
        var panel = document.createElement(&#039;div&#039;); panel.className = &#039;gr-mob-toc-panel&#039;;&lt;br /&gt;
        var hdr = document.createElement(&#039;div&#039;); hdr.className = &#039;gr-mob-toc-header&#039;;&lt;br /&gt;
        var ttl = document.createElement(&#039;div&#039;); ttl.className = &#039;gr-mob-toc-title&#039;; ttl.textContent = &#039;विषयसूची&#039;;&lt;br /&gt;
        var cls = document.createElement(&#039;button&#039;); cls.className = &#039;gr-mob-toc-close&#039;; cls.textContent = &#039;✕&#039;;&lt;br /&gt;
        hdr.appendChild(ttl); hdr.appendChild(cls); panel.appendChild(hdr);&lt;br /&gt;
        var body = document.createElement(&#039;div&#039;); body.className = &#039;gr-mob-toc-body&#039;; body.appendChild(tocList.cloneNode(true)); panel.appendChild(body); document.body.appendChild(panel);&lt;br /&gt;
        var btn = document.createElement(&#039;button&#039;); btn.id = &#039;gr-mob-toc-btn&#039;; btn.innerHTML = &#039;☰ &amp;amp;nbsp;Contents&#039;;&lt;br /&gt;
        btn.style.cssText = &#039;position:fixed;bottom:148px;left:16px;z-index:9100;background:#fff;border:1.5px solid #b5451b;border-radius:24px;padding:10px 16px;font-size:15px;font-family:system-ui,sans-serif;color:#b5451b;font-weight:600;box-shadow:0 3px 14px rgba(0,0,0,0.15);cursor:pointer;&#039;;&lt;br /&gt;
        document.body.appendChild(btn);&lt;br /&gt;
        function open() { panel.classList.add(&#039;open&#039;); bd.classList.add(&#039;open&#039;); document.body.style.overflow = &#039;hidden&#039;; }&lt;br /&gt;
        function close() { panel.classList.remove(&#039;open&#039;); bd.classList.remove(&#039;open&#039;); document.body.style.overflow = &#039;&#039;; }&lt;br /&gt;
        btn.onclick = open; cls.onclick = close; bd.onclick = close;&lt;br /&gt;
        body.querySelectorAll(&#039;a&#039;).forEach(function (a) { a.onclick = close; });&lt;br /&gt;
    }&lt;br /&gt;
    function injectMoolaUllekhaLinks() {&lt;br /&gt;
        if (document.getElementById(&#039;gr-mob-doc-nav&#039;)) return;&lt;br /&gt;
        var pageName = (window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get(&#039;wgPageName&#039;)) || &#039;&#039;;&lt;br /&gt;
        if (pageName === &#039;Main_Page&#039; || !pageName) return;&lt;br /&gt;
        function wikiUrl(slug) { if (window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl) return mw.util.getUrl(slug); return ((window.mw &amp;amp;&amp;amp; mw.config.get(&#039;wgArticlePath&#039;)) || &#039;/wiki/$1&#039;).replace(&#039;$1&#039;, encodeURIComponent(slug).replace(/%2F/g, &#039;/&#039;)); }&lt;br /&gt;
        var teekaPage = document.querySelector(&#039;.gr-teeka-page&#039;);&lt;br /&gt;
        var primarySlug = teekaPage ? (teekaPage.getAttribute(&#039;data-primary&#039;) || pageName.split(&#039;/&#039;)[0]) : pageName.split(&#039;/&#039;)[0];&lt;br /&gt;
        var docTitleEl = document.querySelector(&#039;.gr-doc-title&#039;);&lt;br /&gt;
        var hasMoolaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute(&#039;data-has-moola&#039;) === &#039;1&#039;;&lt;br /&gt;
        var hasUllekhaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute(&#039;data-has-ullekha&#039;) === &#039;1&#039;;&lt;br /&gt;
        var showMoolam = !!teekaPage || hasMoolaPage, showUllekha = hasUllekhaPage || !!teekaPage;&lt;br /&gt;
        if (!showMoolam &amp;amp;&amp;amp; !showUllekha) return;&lt;br /&gt;
        var nav = document.createElement(&#039;div&#039;); nav.id = &#039;gr-mob-doc-nav&#039;;&lt;br /&gt;
        nav.style.cssText = &#039;display:flex;gap:10px;padding:10px 16px 8px;background:#fdf8f5;border-bottom:1px solid #f0e0d6;font-family:system-ui,sans-serif;&#039;;&lt;br /&gt;
        function makeLink(href, label) { var a = document.createElement(&#039;a&#039;); a.href = href; a.textContent = label; a.style.cssText = &#039;display:inline-flex;align-items:center;padding:5px 16px;border-radius:20px;background:#fff;border:1.5px solid #e8cfc4;color:#b5451b;font-size:14px;font-weight:600;text-decoration:none;&#039;; return a; }&lt;br /&gt;
        if (teekaPage) nav.appendChild(makeLink(wikiUrl(primarySlug), &#039;मूल&#039;));&lt;br /&gt;
        else if (hasMoolaPage) nav.appendChild(makeLink(wikiUrl(primarySlug + &#039;/Moola&#039;), &#039;मूलम्&#039;));&lt;br /&gt;
        if (showUllekha) nav.appendChild(makeLink(wikiUrl(primarySlug + &#039;/Ullekha&#039;), &#039;उल्लेख&#039;));&lt;br /&gt;
        var h1 = document.getElementById(&#039;firstHeading&#039;) || document.querySelector(&#039;.page-heading, h1.firstHeading, .mw-first-heading&#039;);&lt;br /&gt;
        if (h1 &amp;amp;&amp;amp; h1.parentNode) h1.parentNode.insertBefore(nav, h1.nextSibling);&lt;br /&gt;
        else { var ct = document.getElementById(&#039;mw-content-text&#039;); if (ct) ct.insertBefore(nav, ct.firstChild); }&lt;br /&gt;
    }&lt;br /&gt;
    injectCSS(); watchBodyPadding();&lt;br /&gt;
    function boot() { expandSections(); watchSections(); injectMenuLinks(); injectMoolaUllekhaLinks();[100, 400, 900, 1800].forEach(function (ms) { setTimeout(expandSections, ms); }); setTimeout(initToc, 700); }&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) document.addEventListener(&#039;DOMContentLoaded&#039;, boot);&lt;br /&gt;
    else boot();&lt;br /&gt;
    if (window.mw) mw.hook(&#039;wikipage.content&#039;).add(function () { setTimeout(function () { expandSections(); injectMenuLinks(); injectMoolaUllekhaLinks(); initToc(); }, 300); });&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(function () {&lt;br /&gt;
    &#039;use strict&#039;;&lt;br /&gt;
    mw.hook(&#039;wikipage.content&#039;).add(function () {&lt;br /&gt;
        setTimeout(function () {&lt;br /&gt;
            var blocks = document.querySelectorAll(&#039;.collapsible-block, .toggle-list&#039;);&lt;br /&gt;
            Array.prototype.forEach.call(blocks, function (el) { if (!el.parentNode) { try { el.remove(); } catch (e) { } } });&lt;br /&gt;
        }, 0);&lt;br /&gt;
    });&lt;br /&gt;
    if (mw.config.get(&#039;wgPageName&#039;) !== &#039;Main_Page&#039;) return;&lt;br /&gt;
    mw.loader.using(&#039;mediawiki.util&#039;).done(function () {&lt;br /&gt;
        $(function () { applyHomeToggleOffset(); window.addEventListener(&#039;resize&#039;, applyHomeToggleOffset, { passive: true }); setTimeout(applyHomeToggleOffset, 300); setTimeout(applyHomeToggleOffset, 800); });&lt;br /&gt;
    });&lt;br /&gt;
    function applyHomeToggleOffset() {&lt;br /&gt;
        var bar = document.getElementById(&#039;gr-static-bar&#039;); if (!bar) return;&lt;br /&gt;
        var barBottom = Math.round(bar.getBoundingClientRect().bottom);&lt;br /&gt;
        [document.getElementById(&#039;gr-home&#039;), document.getElementById(&#039;gr-home-toggle&#039;), document.querySelector(&#039;#mw-content-text .mw-parser-output &amp;gt; .gr-home, #mw-content-text .mw-parser-output &amp;gt; *:first-child&#039;)].forEach(function (el) { if (el) el.style.scrollMarginTop = (barBottom + 4) + &#039;px&#039;; });&lt;br /&gt;
        var isMob = window.innerWidth &amp;lt; 768 || !!document.getElementById(&#039;mw-mf-viewport&#039;);&lt;br /&gt;
        if (isMob) { var toggleEl = document.getElementById(&#039;gr-home-toggle&#039;); if (toggleEl) { var tr = toggleEl.getBoundingClientRect(); if (tr.top &amp;lt; barBottom) { var cp = parseInt(window.getComputedStyle(document.body).paddingTop, 10) || 0; document.body.style.paddingTop = (cp + (barBottom - tr.top) + 4) + &#039;px&#039;; } } }&lt;br /&gt;
    }&lt;br /&gt;
    $(function () {&lt;br /&gt;
        var $toggle = $(&#039;#gr-home-toggle&#039;), $viewG = $(&#039;#gr-view-grantha&#039;), $viewA = $(&#039;#gr-view-author&#039;), $btnG = $(&#039;#gr-toggle-grantha&#039;), $btnA = $(&#039;#gr-toggle-author&#039;);&lt;br /&gt;
        if (!$toggle.length || !$viewG.length || !$viewA.length) return; if ($toggle.data(&#039;gr-wired&#039;)) return; $toggle.data(&#039;gr-wired&#039;, true);&lt;br /&gt;
        function showView(which) { if (which === &#039;grantha&#039;) { $viewG.show(); $viewA.hide(); $btnG.addClass(&#039;gr-toggle-active&#039;); $btnA.removeClass(&#039;gr-toggle-active&#039;); } else { $viewA.show(); $viewG.hide(); $btnA.addClass(&#039;gr-toggle-active&#039;); $btnG.removeClass(&#039;gr-toggle-active&#039;); } try { localStorage.setItem(&#039;grantha_home_tab&#039;, which); } catch (e) { } }&lt;br /&gt;
        $btnG.on(&#039;click keydown&#039;, function (e) { if (e.type === &#039;keydown&#039; &amp;amp;&amp;amp; e.key !== &#039;Enter&#039; &amp;amp;&amp;amp; e.key !== &#039; &#039;) return; showView(&#039;grantha&#039;); });&lt;br /&gt;
        $btnA.on(&#039;click keydown&#039;, function (e) { if (e.type === &#039;keydown&#039; &amp;amp;&amp;amp; e.key !== &#039;Enter&#039; &amp;amp;&amp;amp; e.key !== &#039; &#039;) return; showView(&#039;author&#039;); });&lt;br /&gt;
        try { var saved = localStorage.getItem(&#039;grantha_home_tab&#039;); if (saved === &#039;author&#039;) showView(&#039;author&#039;); else showView(&#039;grantha&#039;); } catch (e) { showView(&#039;grantha&#039;); }&lt;br /&gt;
    });&lt;br /&gt;
}());&lt;br /&gt;
// ── Replace MediaWiki user links with a single username dropdown (Profile + Logout) ──&lt;br /&gt;
(function () {&lt;br /&gt;
    function wikiHref(title) {&lt;br /&gt;
        if (window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl) return mw.util.getUrl(title);&lt;br /&gt;
        var ap = (window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get(&#039;wgArticlePath&#039;)) || &#039;/wiki/$1&#039;;&lt;br /&gt;
        return ap.replace(&#039;$1&#039;, title);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function buildLogoutForm(token) {&lt;br /&gt;
        token = token || &#039;&#039;;&lt;br /&gt;
        var esc = String(token).replace(/&amp;quot;/g, &#039;&amp;amp;quot;&#039;);&lt;br /&gt;
        var script = (window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.wikiScript) ? mw.util.wikiScript() : &#039;/index.php&#039;;&lt;br /&gt;
        var form = document.createElement(&#039;form&#039;);&lt;br /&gt;
        form.method = &#039;post&#039;;&lt;br /&gt;
        form.action = script + &#039;?title=Special:UserLogout&#039;;&lt;br /&gt;
        form.style.display = &#039;none&#039;;&lt;br /&gt;
        form.innerHTML =&lt;br /&gt;
            &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;wpEditToken&amp;quot; value=&amp;quot;&#039; + esc + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
            &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;title&amp;quot; value=&amp;quot;Special:UserLogout&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
            &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;returnto&amp;quot; value=&amp;quot;Main Page&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
        document.body.appendChild(form);&lt;br /&gt;
        return form;&lt;br /&gt;
    }&lt;br /&gt;
}());&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.css&amp;diff=6220</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.css&amp;diff=6220"/>
		<updated>2026-06-13T03:55:57Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ═══════════════════════════════════════════════════════════════════&lt;br /&gt;
   MediaWiki:Common.css — Anandamakaranda&lt;br /&gt;
   Clean rebuild — works on Vector (desktop) + Minerva (mobile)&lt;br /&gt;
   ═══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
&lt;br /&gt;
/* ── 1. CSS VARIABLES ──────────────────────────────────────────── */&lt;br /&gt;
:root {&lt;br /&gt;
  --maroon:       #be100e;&lt;br /&gt;
  --orange:       #e65100;&lt;br /&gt;
  --light-orange: #f57c00;&lt;br /&gt;
  --dark-gray:    #555;&lt;br /&gt;
  --light-gray:   #eee;&lt;br /&gt;
  --muted-gray:   #888;&lt;br /&gt;
  --text:         #1a1a1a;&lt;br /&gt;
  --brown:        #a07040;&lt;br /&gt;
  --light-brown:  #e8d4a0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 2. FONTS ──────────────────────────────────────────────────── */&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;Adishila&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/adishila/Adishila.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: normal; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;Adishila&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/adishila/AdishilaBold.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: bold; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;AdishilaDev&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/AdishilaDev.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: normal; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;AdishilaDev&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/AdishilaDeBv.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: bold; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;AdishilaDevGuru&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/AdishilaDevGuru.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: bold; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;Noto Sans Devanagari&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/Noto_Sans_Devanagari/NotoSansDevanagari.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: normal; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-content-text {&lt;br /&gt;
  font-family: &#039;Adishila&#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output {&lt;br /&gt;
  font-size: 22px;&lt;br /&gt;
  line-height: 1.7;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  max-width: 100%;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  margin: 0; padding: 0;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Danda marks wrap issue&lt;br /&gt;
.mw-parser-output { overflow-wrap: anywhere; }&lt;br /&gt;
&lt;br /&gt;
/* ── 4. HIDE ELEMENTS (both skins) ────────────────────────────── */&lt;br /&gt;
/* Page title */&lt;br /&gt;
h1.firstHeading, #firstHeading, .mw-page-title-main { display: none !important; }&lt;br /&gt;
/* Footer */&lt;br /&gt;
#footer, .mw-footer, .vector-footer, .vector-footer-container,&lt;br /&gt;
footer, .minerva-footer { display: none !important; }&lt;br /&gt;
/* Categories */&lt;br /&gt;
.catlinks, #catlinks, .mw-normal-catlinks, .mw-hidden-catlinks { display: none !important; }&lt;br /&gt;
/* Edit section links */&lt;br /&gt;
.mw-editsection, .mw-editsection-bracket { display: none !important; }&lt;br /&gt;
/* Site notice */&lt;br /&gt;
#siteNotice { display: none !important; }&lt;br /&gt;
/* Watchlist */&lt;br /&gt;
li#pt-watchlist, li#pt-watchlist-kbd { display: none !important; }&lt;br /&gt;
/* Appearance panel */&lt;br /&gt;
#vector-appearance, #vector-appearance-pinned-container,&lt;br /&gt;
#vector-appearance-unpinned-container, .mw-portlet-appearance,&lt;br /&gt;
#p-appearance, [aria-controls=&amp;quot;vector-appearance&amp;quot;] { display: none !important; }&lt;br /&gt;
/* Vector hamburger + sidebar */&lt;br /&gt;
#mw-sidebar-button, .vector-main-menu, .vector-main-menu-container,&lt;br /&gt;
.vector-main-menu-landmark, #vector-main-menu-dropdown { display: none !important; }&lt;br /&gt;
/* Vector search box (we use our own) */&lt;br /&gt;
#p-search, .vector-search-box, .vector-search-box-vue,&lt;br /&gt;
.vector-search-box-collapses { display: none !important; }&lt;br /&gt;
/* Vector page toolbar */&lt;br /&gt;
.vector-page-toolbar, .vector-page-toolbar-container { display: none !important; }&lt;br /&gt;
/* Vector page tools */&lt;br /&gt;
.vector-page-tools { display: none !important; }&lt;br /&gt;
/* Empty paragraphs */&lt;br /&gt;
.mw-parser-output p:empty,&lt;br /&gt;
.mw-parser-output &amp;gt; div &amp;gt; p:empty,&lt;br /&gt;
.mw-heading + p:empty,&lt;br /&gt;
.adhyaya-block + p:empty,&lt;br /&gt;
.verse-block + p:empty { display: none !important; margin: 0 !important; }&lt;br /&gt;
/* Empty divs */&lt;br /&gt;
.adhyaya-block:empty, .mw-parser-output div:empty { display: none !important; }&lt;br /&gt;
/* Cargo hidden */&lt;br /&gt;
.cargo-store-only { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 5. VECTOR HEADER (desktop only) ──────────────────────────── */&lt;br /&gt;
.vector-header-container {&lt;br /&gt;
  background: #b5451b !important;&lt;br /&gt;
  border-bottom: 1px solid rgba(255,255,255,0.12);&lt;br /&gt;
}&lt;br /&gt;
.vector-header {&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  justify-content: space-between !important;&lt;br /&gt;
  padding-left: 20px !important;&lt;br /&gt;
  padding-right: 20px !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-header-start {&lt;br /&gt;
  flex: 0 0 auto !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  gap: 12px;&lt;br /&gt;
}&lt;br /&gt;
.vector-header-end {&lt;br /&gt;
  flex: 0 0 auto !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  margin-left: auto;&lt;br /&gt;
}&lt;br /&gt;
.mw-logo { display: flex !important; align-items: center; opacity: 1 !important; }&lt;br /&gt;
.mw-logo-icon { width: 24px; height: 24px; }&lt;br /&gt;
&lt;br /&gt;
/* Site name */&lt;br /&gt;
.mw-logo-wordmark {&lt;br /&gt;
  font-size: 0 !important;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  flex-direction: column !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-logo-wordmark::before {&lt;br /&gt;
  content: &#039;Anandamakaranda&#039;;&lt;br /&gt;
  font-size: 17px;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-family: system-ui, -apple-system, sans-serif;&lt;br /&gt;
  letter-spacing: -0.01em;&lt;br /&gt;
}&lt;br /&gt;
.mw-logo-wordmark::after {&lt;br /&gt;
  content: &amp;quot;A Digital Archive of Dvaita Vedanta Literature&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  font-weight: 400;&lt;br /&gt;
  color: rgba(255,255,255,0.85);&lt;br /&gt;
  letter-spacing: 0.3px;&lt;br /&gt;
  margin-top: 1px;&lt;br /&gt;
  font-family: sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Header right links */&lt;br /&gt;
.vector-header-end &amp;gt; *:not(#p-search) { color: rgba(255,255,255,0.9) !important; }&lt;br /&gt;
.vector-user-links a { color: rgba(255,255,255,0.9) !important; }&lt;br /&gt;
&lt;br /&gt;
/* User icon white */&lt;br /&gt;
.vector-user-menu-container .vector-icon svg,&lt;br /&gt;
.vector-user-menu-container .vector-icon svg path,&lt;br /&gt;
.vector-user-menu-container .vector-icon svg circle {&lt;br /&gt;
  fill: #fff !important; stroke: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-user-links .vector-user-menu-chevron .vector-icon svg,&lt;br /&gt;
.vector-user-links .vector-user-menu-chevron .vector-icon svg path {&lt;br /&gt;
  fill: rgba(255,255,255,0.9) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* User dropdown — dark text on white card */&lt;br /&gt;
.vector-user-menu .mw-list-item a,&lt;br /&gt;
.vector-user-menu .vector-menu-content-list a,&lt;br /&gt;
#p-personal .vector-menu-content a,&lt;br /&gt;
.mw-portlet-personal .vector-menu-content a { color: #202122 !important; }&lt;br /&gt;
.vector-user-menu .mw-list-item a:hover { color: var(--light-orange) !important; }&lt;br /&gt;
&lt;br /&gt;
/* Suppress Vector sticky header clone */&lt;br /&gt;
.vector-sticky-header { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* Suppress body top padding that Vector adds */&lt;br /&gt;
.mw-body { margin-top: 0 !important; padding-top: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 6. VECTOR TOC (desktop sidebar) ──────────────────────────── */&lt;br /&gt;
.vector-toc .vector-toc-numb { display: none !important; }&lt;br /&gt;
.vector-toc .vector-toc-title {&lt;br /&gt;
  font-size: 0.72em !important; font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase; letter-spacing: 0.08em;&lt;br /&gt;
  color: var(--text) !important;&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, system-ui, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-toc .vector-toc-text {&lt;br /&gt;
  white-space: normal !important; word-break: break-word !important;&lt;br /&gt;
  overflow-wrap: anywhere !important; display: inline !important;&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, system-ui, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-toc a, .vector-toc .vector-toc-link {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, system-ui, sans-serif !important;&lt;br /&gt;
  color: var(--text) !important; text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-toc a:hover { color: var(--light-orange) !important; }&lt;br /&gt;
.vector-toc .vector-toc-list-item-active .vector-toc-link,&lt;br /&gt;
.vector-toc .vector-toc-list-item-active .vector-toc-link * {&lt;br /&gt;
  color: var(--light-orange) !important; font-weight: 700 !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-toc .cdx-button.vector-toc-toggle {&lt;br /&gt;
  background: none !important; border: none !important;&lt;br /&gt;
  box-shadow: none !important; color: var(--text) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 7. HEADINGS ───────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output h1, .mw-parser-output h2, .mw-parser-output h3, .mw-parser-output h4,&lt;br /&gt;
.mw-parser-output .mw-heading h1, .mw-parser-output .mw-heading h2,&lt;br /&gt;
.mw-parser-output .mw-heading h3 {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  border: none !important; padding: 0 !important; background: none !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output .mw-heading { border: none !important; margin: 0; padding: 0; }&lt;br /&gt;
&lt;br /&gt;
.mw-heading, .mw-heading2, .mw-heading3 { text-align:center; }&lt;br /&gt;
.mw-parser-output h2, .mw-parser-output .mw-heading2 h2 {&lt;br /&gt;
  font-size: 1.2em !important; font-weight: 500 !important;&lt;br /&gt;
  color: var(--maroon) !important; line-height: 1.8;&lt;br /&gt;
  margin: 24px 0 4px !important;&lt;br /&gt;
  border-bottom: 2px dotted var(--maroon) !important;&lt;br /&gt;
  width: 75%; font-family: &#039;AdishilaDev&#039;; text-align: center;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output h3, .mw-parser-output .mw-heading3 h3 {&lt;br /&gt;
  font-size: 1em !important; font-weight: 500 !important;&lt;br /&gt;
  color: var(--orange) !important; line-height: 1.5;&lt;br /&gt;
  margin: 24px 0 8px !important;&lt;br /&gt;
  border-bottom: 1px dotted var(--orange) !important;&lt;br /&gt;
  width: 55%; font-family: &#039;AdishilaDev&#039;; text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 8. PARAGRAPHS ─────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output p { margin: 0 0 0.35rem !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 9. DOCUMENT TITLE ─────────────────────────────────────────── */&lt;br /&gt;
.gr-doc-title {&lt;br /&gt;
  font-size: 2em; font-weight: 500; color: var(--maroon);&lt;br /&gt;
  line-height: 1.4; margin: 0 0 16px; border: none !important;&lt;br /&gt;
  text-align:center; font-family: &#039;AdishilaDev&#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 10. VERSE BLOCKS ──────────────────────────────────────────── */&lt;br /&gt;
.shloka-block { display: block; text-align: left; margin: 3px 0 0; padding-bottom: 0.5em; }&lt;br /&gt;
.shloka-line { display: block; font-style: normal; color: #333; line-height: 1.35; margin: 0; }&lt;br /&gt;
.verse-block { display: block; margin: 6px 0 0; text-align: left; }&lt;br /&gt;
.verse-block .shloka-block { text-align: left; margin: 0; }&lt;br /&gt;
.verse-block .shloka-line {&lt;br /&gt;
  display: block; font-style: italic; color: #c65;&lt;br /&gt;
  font-weight: 500; line-height: 1.35; margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.verse-block + p { display: none !important; margin: 0 !important; }&lt;br /&gt;
.mw-parser-output .verse-block,&lt;br /&gt;
.mw-parser-output .shloka-block { margin-top: 2px !important; margin-bottom: 2px !important; }&lt;br /&gt;
&lt;br /&gt;
.gr-verse-text, .verse-line, .verse-text {&lt;br /&gt;
  color: #b5451b; font-style: italic; line-height: 1.5; display: block; margin: 0.1em 0;&lt;br /&gt;
}&lt;br /&gt;
.gr-verse-type-sutra .gr-verse-text,&lt;br /&gt;
.verse-block[data-type=&amp;quot;sutra&amp;quot;] .verse-line { font-style: normal; font-weight: 600; color: #b5451b; }&lt;br /&gt;
&lt;br /&gt;
/* ── 11. UVACHA ────────────────────────────────────────────────── */&lt;br /&gt;
.uvacha-block {&lt;br /&gt;
  display: block; font-weight: bold; color: #c65;&lt;br /&gt;
  margin: 0.5rem 0 0; padding: 2px 0 2px 12px;&lt;br /&gt;
  border-left: 3px solid #c65; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
.uvacha-block + .verse-block { margin-top: 2px; }&lt;br /&gt;
.gr-uvaaca, .uvaaca {&lt;br /&gt;
  color: #b5451b; font-weight: 600; font-size: 0.92em; margin: 0.5em 0 0.2em 0; display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 12. BHASHYAM ──────────────────────────────────────────────── */&lt;br /&gt;
.bhashyam-block {&lt;br /&gt;
  display: block; font-size: 1em; line-height: 1.6; color: #555;&lt;br /&gt;
  margin: 0.25em 0 0.35em 48px; padding: 0; border: none; background: transparent;&lt;br /&gt;
}&lt;br /&gt;
.gr-bhashyam, .commentary-bhashyam {&lt;br /&gt;
  color: #222; font-style: normal; line-height: 1.75; margin: 0.3em 0 0.5em 0;&lt;br /&gt;
}&lt;br /&gt;
.gr-leading-bhashya { font-style: italic; color: #555; margin: 0.4em 0 0.5em 0; }&lt;br /&gt;
&lt;br /&gt;
/* ── 13. PADYA ─────────────────────────────────────────────────── */&lt;br /&gt;
.padya-block {&lt;br /&gt;
  display: block; font-size: 1em; line-height: 1.75; color: #c65 !important;&lt;br /&gt;
  font-style: italic; font-weight: 500; margin: 0.4em 0 0.6em 60px;&lt;br /&gt;
}&lt;br /&gt;
.gr-padapatha { font-size: 0.9em; color: #555; margin: 0.2em 0 0.3em 0.8em; }&lt;br /&gt;
&lt;br /&gt;
/* ── 14. TEEKA ─────────────────────────────────────────────────── */&lt;br /&gt;
.teeka-block {&lt;br /&gt;
  padding: 6px 10px 8px; margin: 0.3em 0; line-height: 1.6; color: #555;&lt;br /&gt;
}&lt;br /&gt;
.teeka-title {&lt;br /&gt;
  font-family: &#039;AdishilaDev&#039;;, sans-serif !important;&lt;br /&gt;
  font-size: 1.75em; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase;&lt;br /&gt;
  margin-bottom: 4px; padding-bottom: 3px;&lt;br /&gt;
}&lt;br /&gt;
.teeka-body .shloka-block {&lt;br /&gt;
  margin: 0.4em 0; padding: 0.3em 0.6em; font-family: &#039;AdishilaDev&#039;;&lt;br /&gt;
}&lt;br /&gt;
.teeka-body .shloka-line { font-style: italic; font-size: 0.97em; font-family: &#039;AdishilaDev&#039;; }&lt;br /&gt;
&lt;br /&gt;
/* ── 15. PRATEEKA / MOOLA ──────────────────────────────────────── */&lt;br /&gt;
.gr-prateeka { font-weight: bold; font-style: normal; color: #333; }&lt;br /&gt;
.gr-mulaprateeka-block {&lt;br /&gt;
  display: block; font-weight: bold; font-style: normal;&lt;br /&gt;
  text-align: center; color: #333; margin: 0.7em 0 0.3em; line-height: 1.5;&lt;br /&gt;
}&lt;br /&gt;
.gr-moola { font-weight: bold; font-style: italic; color: #c65; }&lt;br /&gt;
&lt;br /&gt;
/* ── 16. ADHYAYA ───────────────────────────────────────────────── */&lt;br /&gt;
.adhyaya-block { margin: 0 0 4px; }&lt;br /&gt;
.adhyaya-trans { font-size: 0.9em; color: #666; margin: 2px 0 0; }&lt;br /&gt;
.adhyaya-intro { margin-top: 8px; line-height: 1.75; color: #555; }&lt;br /&gt;
.introduction p { color: var(--dark-gray); font-weight: 400; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.introduction { padding-bottom: 0.5em; text-align: justify; }&lt;br /&gt;
&lt;br /&gt;
/* ── 17. NYAYA / PRASNA ────────────────────────────────────────── */&lt;br /&gt;
.nyaya-block { margin: 32px 0; padding-top: 12px; border-top: 1px solid #eee; }&lt;br /&gt;
.nyaya-title {&lt;br /&gt;
  font-size: 1em; font-weight: 500; color: var(--orange);&lt;br /&gt;
  margin-bottom: 0.4rem; border-bottom: 1px dotted var(--orange); width: 50%;&lt;br /&gt;
}&lt;br /&gt;
.nyaya-body { color: #555; line-height: 1.75; margin-top: 0.5rem; }&lt;br /&gt;
.prasna-block { margin: 32px 0; padding-top: 12px; border-top: 1px solid #eee; }&lt;br /&gt;
.prasna-title {&lt;br /&gt;
  font-size: 1em; font-weight: 500; color: var(--orange);&lt;br /&gt;
  margin-bottom: 0.4rem; border-bottom: 1px dotted var(--orange); width: 50%;&lt;br /&gt;
}&lt;br /&gt;
.prasna-question, .prasna-answer { color: #555; line-height: 1.75; margin-top: 0.5rem; }&lt;br /&gt;
.prasna-answer { margin-left: 60px; }&lt;br /&gt;
&lt;br /&gt;
/* ── 18. VYAKHYA ELEMENTS ──────────────────────────────────────── */&lt;br /&gt;
.gr-vyakhya-head, .gr-section-head {&lt;br /&gt;
  font-size: 0.9em; font-weight: 700; color: #6a3e00;&lt;br /&gt;
  margin: 0.35em 0 0.15em; font-family: inherit; border: none; padding: 0;&lt;br /&gt;
}&lt;br /&gt;
.gr-avataranika {&lt;br /&gt;
  font-style: italic; color: #444; margin: 0.2em 0 0.5em 0.5em;&lt;br /&gt;
  padding-left: 0.6em; border-left: 2px solid #c9a96e; line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
.gr-vyakhya-pada {&lt;br /&gt;
  font-size: 0.88em; color: #555; background: #fafafa;&lt;br /&gt;
  border: 1px solid #e8e0d0; border-radius: 4px; padding: 0.5em 0.8em;&lt;br /&gt;
  margin: 0.5em 0; line-height: 1.5; white-space: pre-wrap;&lt;br /&gt;
}&lt;br /&gt;
.gr-vyakhya-gadya {&lt;br /&gt;
  font-weight: bold; font-size: 0.95em; text-align: center;&lt;br /&gt;
  color: #8b1a1a; margin: 0.2em 0; line-height: 1.6; letter-spacing: 0.03em;&lt;br /&gt;
}&lt;br /&gt;
.gr-vyakhya-para { margin: 0 0 0.5em 0; line-height: 1.65; color: #444; }&lt;br /&gt;
.gr-embedded-bhashya { margin: 0.2em 0 0.2em 1em; line-height: 1.6; }&lt;br /&gt;
.gr-gadya {&lt;br /&gt;
  display: block !important; font-size: 0.96em !important; font-weight: 600 !important;&lt;br /&gt;
  font-style: normal !important; color: #555 !important; margin: 16px 0 4px !important;&lt;br /&gt;
  border-bottom: 1px solid #ddd !important; width: 60%; line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
.gr-author-note {&lt;br /&gt;
  font-style: italic; color: var(--maroon); text-align: center; font-size: 0.9em;&lt;br /&gt;
  margin: 0.8em 0 0.4em 0; border-top: 1px solid #ddd; padding-top: 0.4em; font-family: &#039;AdishilaDev&#039;&lt;br /&gt;
}&lt;br /&gt;
.gr-devatachandas { font-size: 0.82em; color: #777; margin: 0.4em 0 0.2em 0; }&lt;br /&gt;
.gr-vargikarana   { font-size: 0.82em; color: #888; margin: 0.5em 0 0.1em 0; }&lt;br /&gt;
&lt;br /&gt;
/* ── 20. BHASHYA COLLECTION ────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output .bhashya-collection { margin: 0; padding: 0; }&lt;br /&gt;
.mw-parser-output .bhashya + p:empty,&lt;br /&gt;
.mw-parser-output .verse + p:empty,&lt;br /&gt;
.mw-parser-output .bhashya-collection + p:empty,&lt;br /&gt;
.mw-parser-output .pramana + p:empty,&lt;br /&gt;
.mw-parser-output .author-note + p:empty { display: none !important; margin: 0 !important; height: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 21. VERSE ACTIONS ─────────────────────────────────────────── */&lt;br /&gt;
.verse-actions {&lt;br /&gt;
  display: flex; flex-direction: row; align-items: center;&lt;br /&gt;
  gap: 6px; margin-top: 4px; justify-content: center;&lt;br /&gt;
}&lt;br /&gt;
.verse-action-btn {&lt;br /&gt;
  display: inline-flex; align-items: center; justify-content: center;&lt;br /&gt;
  padding: 4px; border-radius: 6px; cursor: pointer; opacity: 0.75; transition: all 0.2s;&lt;br /&gt;
}&lt;br /&gt;
.verse-action-btn:hover { opacity: 1; background-color: rgba(0,0,0,0.05); }&lt;br /&gt;
.icon { display: inline-block; width: 18px; height: 18px; background-repeat: no-repeat; background-position: center; background-size: contain; }&lt;br /&gt;
.icon-copy       { background-image: url(&#039;/images/copy.svg&#039;); }&lt;br /&gt;
.icon-commentary { background-image: url(&#039;/images/commentary.svg&#039;); }&lt;br /&gt;
.copy-tooltip {&lt;br /&gt;
  position: absolute; bottom: calc(100% + 8px); left: 50%;&lt;br /&gt;
  transform: translateX(-50%) translateY(4px);&lt;br /&gt;
  white-space: nowrap; pointer-events: none; z-index: 9999;&lt;br /&gt;
  display: inline-flex; align-items: center; padding: 2px 8px; border-radius: 999px;&lt;br /&gt;
  font-size: 0.75rem; font-weight: 500; background: rgba(30,30,30,0.82); color: #fff;&lt;br /&gt;
  opacity: 0; transition: opacity 0.2s, transform 0.2s;&lt;br /&gt;
}&lt;br /&gt;
.copy-tooltip.copy-tooltip-visible { opacity: 1; transform: translateX(-50%) translateY(0); }&lt;br /&gt;
&lt;br /&gt;
/* ── 22. CODE / PRE ────────────────────────────────────────────── */&lt;br /&gt;
pre, code, .mw-code, tt, kbd {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif ;&lt;br /&gt;
  background-color: transparent !important; border: none !important; padding: 0.3em 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-collapsible, .mw-collapsible-content, blockquote, .quotebox {&lt;br /&gt;
  background-color: transparent !important; border: none !important;&lt;br /&gt;
  font-style: normal !important; padding: 0 !important; margin-left: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 23. INLINE TOC BOX (wikitext __TOC__) ─────────────────────── */&lt;br /&gt;
.toc {&lt;br /&gt;
  display: block !important; background: #fffdf5; border: 1px solid #e8c88a;&lt;br /&gt;
  border-radius: 8px; padding: 12px 16px; margin: 0 0 24px 0;&lt;br /&gt;
  width: fit-content; min-width: 220px; max-width: 420px;&lt;br /&gt;
  font-size: 0.9em; line-height: 2;&lt;br /&gt;
}&lt;br /&gt;
.toc h2, .toc .toctitle {&lt;br /&gt;
  font-size: 0.85em !important; font-weight: 600 !important; color: var(--text) !important;&lt;br /&gt;
  border: none !important; margin: 0 0 6px !important; text-transform: uppercase; letter-spacing: 0.05em;&lt;br /&gt;
}&lt;br /&gt;
.toc ul { margin: 0 !important; padding-left: 1.2em !important; list-style: none !important; }&lt;br /&gt;
.toc li { margin: 0; padding: 0; }&lt;br /&gt;
.toc a { color: var(--text) !important; text-decoration: none !important; }&lt;br /&gt;
.toc a:hover { color: var(--light-orange) !important; }&lt;br /&gt;
.toc .toclevel-1 &amp;gt; a { font-weight: 600; }&lt;br /&gt;
.tocnumber { display: none; }&lt;br /&gt;
&lt;br /&gt;
/* ── 24. DOC TEEKAS + TOC NAV ──────────────────────────────────── */&lt;br /&gt;
.gr-doc-teekas { margin-bottom: 1em; }&lt;br /&gt;
.gr-doc-teekas + p:empty { display: none !important; margin: 0 !important; height: 0 !important; }&lt;br /&gt;
.toc-main-links { display: flex; gap: 6px; padding: 5px; align-items: center; margin-bottom: 4px; }&lt;br /&gt;
.toc-main-link-item {&lt;br /&gt;
  font-size: 0.9em; color: var(--text); text-decoration: none; padding: 4px 8px;&lt;br /&gt;
  border-radius: 6px; background: rgba(0,0,0,0.05); transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.toc-main-link-item:hover { background: rgba(0,0,0,0.10) !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 25. MAIN PAGE ─────────────────────────────────────────────── */&lt;br /&gt;
body.page-Main_Page #mw-panel,&lt;br /&gt;
body.page-Main_Page .vector-sidebar-container { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
.gr-home { max-width: 1080px; margin: 0 auto; padding: 0; }&lt;br /&gt;
.gr-home-page-title {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif !important;&lt;br /&gt;
  text-align: center; font-size: 1.8em; font-weight: 500; color: #1a2e40; margin: 24px 0 32px;&lt;br /&gt;
}&lt;br /&gt;
.gr-home-grid { display: flex; flex-wrap: wrap; gap: 20px; margin-bottom: 32px; }&lt;br /&gt;
.gr-home-card {&lt;br /&gt;
  background: #fff; border: 1px solid #e8e4df; border-radius: 10px;&lt;br /&gt;
  box-shadow: 0 2px 8px rgba(0,0,0,0.07);&lt;br /&gt;
  padding: 18px 20px 20px; flex: 1 1 280px; min-width: 240px; max-width: 360px;&lt;br /&gt;
}&lt;br /&gt;
.gr-home-card-title {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif !important;&lt;br /&gt;
  font-size: 1em; font-weight: 600; color: #1a2e40; text-align: center;&lt;br /&gt;
  padding-bottom: 10px; margin-bottom: 12px; border-bottom: 1.5px solid #c0392b;&lt;br /&gt;
}&lt;br /&gt;
.gr-home-card ol { margin: 0; padding-left: 1.4em; list-style: decimal; }&lt;br /&gt;
.gr-home-card li { font-size: 0.95em; line-height: 1.85; color: #333; }&lt;br /&gt;
.gr-home-card li a { color: #c0392b; text-decoration: none; }&lt;br /&gt;
.gr-home-card li a:hover { text-decoration: underline; }&lt;br /&gt;
.gr-home-card li a.new { color: #c08080; }&lt;br /&gt;
.gr-home-note { font-size: 0.82em; color: #888; }&lt;br /&gt;
.gr-home-group-label {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif !important;&lt;br /&gt;
  font-size: 1.1em; font-weight: 600; color: #1a2e40; text-align: center;&lt;br /&gt;
  margin: 36px 0 16px; padding-bottom: 8px; border-bottom: 2px solid #c0392b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 26. TOGGLE BUTTONS ────────────────────────────────────────── */&lt;br /&gt;
.gr-home-toggle { display: flex; gap: 8px; margin: 0 0 24px; justify-content: center; }&lt;br /&gt;
.gr-toggle-btn {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  font-size: 0.88em; padding: 6px 20px; border: 1.5px solid #c0392b; border-radius: 20px;&lt;br /&gt;
  background: transparent; color: #c0392b; cursor: pointer; user-select: none; transition: background 0.15s, color 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gr-toggle-btn:hover { background: #fdf0ed; }&lt;br /&gt;
.gr-toggle-btn.gr-toggle-active { background: #c0392b; color: #fff; }&lt;br /&gt;
&lt;br /&gt;
/* ── 27. SCRIPT BAR ────────────────────────────────────────────── */&lt;br /&gt;
.gr-script-bar { margin: 0 0 20px; font-size: 0.8em; color: #888; display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }&lt;br /&gt;
.gr-script-label { font-family: system-ui, sans-serif; color: #aaa; }&lt;br /&gt;
.gr-script-btn { font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif; color: #c0392b !important; text-decoration: underline dotted !important; cursor: pointer; }&lt;br /&gt;
.gr-script-btn.active { color: #888 !important; text-decoration: none !important; cursor: default; }&lt;br /&gt;
&lt;br /&gt;
/* ── 28. MODALS ────────────────────────────────────────────────── */&lt;br /&gt;
.grantha-modal { position: fixed; inset: 0; background: rgba(0,0,0,0.35); display: flex; align-items: center; justify-content: center; z-index: 10000; }&lt;br /&gt;
.grantha-modal-box { background: white; padding: 20px; border-radius: 10px; width: 300px; }&lt;br /&gt;
.gm-title { font-weight: bold; margin-bottom: 10px; }&lt;br /&gt;
.gm-actions { display: flex; justify-content: flex-end; gap: 10px; margin-top: 12px; }&lt;br /&gt;
&lt;br /&gt;
/* ── 29. LOGIN PAGE ────────────────────────────────────────────── */&lt;br /&gt;
body.page-Special_UserLogin .vector-search-box,&lt;br /&gt;
body.page-Special_UserLogin #p-search { display: none !important; }&lt;br /&gt;
body.page-Special_UserLogin #content { max-width: 420px; margin: 40px auto !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 30. SPECIAL PAGES ─────────────────────────────────────────── */&lt;br /&gt;
body.ns-special #footer, body.ns-special .mw-footer,&lt;br /&gt;
body.ns-special .vector-footer { display: none !important; }&lt;br /&gt;
body.ns-special .vector-page-tools { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 31. MINERVA (mobile) ──────────────────────────────────────── */&lt;br /&gt;
.skin-minerva .mw-parser-output {&lt;br /&gt;
  font-size: 18px !important;&lt;br /&gt;
  line-height: 1.8 !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .mw-parser-output h2,&lt;br /&gt;
.skin-minerva .mw-parser-output .mw-heading2 h2 {&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .mw-parser-output h3,&lt;br /&gt;
.skin-minerva .mw-parser-output .mw-heading3 h3 {&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .bhashyam-block { margin-left: 16px !important; }&lt;br /&gt;
.skin-minerva .prasna-answer  { margin-left: 16px !important; }&lt;br /&gt;
.skin-minerva .padya-block    { margin-left: 16px !important; }&lt;br /&gt;
/* Home grid single column on Minerva */&lt;br /&gt;
.skin-minerva .gr-home-grid {&lt;br /&gt;
  flex-direction: column !important;&lt;br /&gt;
  flex-wrap: nowrap !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .gr-home-card {&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
  min-width: unset !important;&lt;br /&gt;
  flex: 0 0 auto !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
/* Hide things that should be hidden on mobile too */&lt;br /&gt;
.skin-minerva .catlinks,&lt;br /&gt;
.skin-minerva #catlinks { display: none !important; }&lt;br /&gt;
.skin-minerva .mw-editsection { display: none !important; }&lt;br /&gt;
/* Minerva already has its own TOC — hide our inline .toc */&lt;br /&gt;
.skin-minerva .toc { display: none !important; }&lt;br /&gt;
/* ReaderToolbar on Minerva */&lt;br /&gt;
.skin-minerva #gr-static-bar {&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  min-height: 52px !important;&lt;br /&gt;
  overflow-x: auto !important;&lt;br /&gt;
  overflow-y: hidden !important;&lt;br /&gt;
  scrollbar-width: none !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva #gr-static-bar::-webkit-scrollbar { display: none !important; }&lt;br /&gt;
.skin-minerva .gr-controls .gr-btn {&lt;br /&gt;
  height: 44px !important;&lt;br /&gt;
  min-width: 44px !important;&lt;br /&gt;
  font-size: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .gr-btn-staging { display: none !important; }&lt;br /&gt;
.skin-minerva .gr-controls .gr-sep { display: none !important; }&lt;br /&gt;
/* Minerva already shows page title — don&#039;t double-hide */&lt;br /&gt;
.skin-minerva h1.firstHeading { display: block !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 32. PRINT ─────────────────────────────────────────────────── */&lt;br /&gt;
@media print {&lt;br /&gt;
  #gr-static-bar, .gr-controls, .vector-header-container { display: none !important; }&lt;br /&gt;
  .mw-parser-output { font-size: 11pt !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 33. TYPOGRAPHY CLASSES ────────────────────────────────────── */&lt;br /&gt;
&lt;br /&gt;
/* Heading — center, maroon, AdishilaDevGuru */&lt;br /&gt;
.gr-heading {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  font-size: 1.09em;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  color: #be100e;&lt;br /&gt;
  font-family: &#039;AdishilaDevGuru&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  line-height: 1.4;&lt;br /&gt;
  margin: 0.45em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Sub-heading — center, orange, AdishilaDevGuru */&lt;br /&gt;
.gr-sub-heading {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  font-size: 0.73em;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  color: #e65100;&lt;br /&gt;
  font-family: &#039;AdishilaDevGuru&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
  margin: 0.5em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Chapter Heading — center, maroon, AdishilaDevGuru */&lt;br /&gt;
.gr-chapter-heading {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  font-size: 0.82em;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  color: #be100e;&lt;br /&gt;
  font-family: &#039;AdishilaDevGuru&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
  margin: 0.5em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* M.Veda Shloka — left, bold, maroon, AdishilaVed, 5mm indent */&lt;br /&gt;
.gr-mv-shloka {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: left;&lt;br /&gt;
  font-size: 0.82em;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  color: #be100e;&lt;br /&gt;
  font-family: &#039;AdishilaVed&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  padding-left: 0.86em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.75;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* M.Veda Gadya — justify, bold, maroon, AdishilaVed */&lt;br /&gt;
.gr-mv-gadya {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: justify;&lt;br /&gt;
  font-size: 0.82em;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  color: #be100e;&lt;br /&gt;
  font-family: &#039;AdishilaVed&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  text-indent: 1.18em;&lt;br /&gt;
  padding-left: 0.36em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.75;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* M.Shloka — left, bold, orange, AdishilaDev, 5mm indent */&lt;br /&gt;
.gr-m-shloka {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: left;&lt;br /&gt;
  font-size: 0.82em;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  color: #e65100;&lt;br /&gt;
  font-family: &#039;AdishilaDev&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  padding-left: 0.86em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.75;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* B.Shloka / TK.Shloka / TP.Shloka — left, black, AdishilaDev, 10mm indent */&lt;br /&gt;
.gr-b-shloka,&lt;br /&gt;
.gr-tp-shloka {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: left;&lt;br /&gt;
  font-size: 0.73em;&lt;br /&gt;
  font-weight: normal;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  font-family: &#039;AdishilaDev&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  padding-left: 1.73em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.75;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Reference — orange, AdishilaDev */&lt;br /&gt;
.gr-reference {&lt;br /&gt;
  color: #e65100;&lt;br /&gt;
  font-family: &#039;AdishilaDev&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Custom tag span — subtle dashed underline only */&lt;br /&gt;
.gr-custom {&lt;br /&gt;
  border-bottom: 1px dashed #b5451b;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 34. MINERVA HEADER — orange theme + sticky ────────────────── */&lt;br /&gt;
&lt;br /&gt;
/* Kill space above header */&lt;br /&gt;
.skin-minerva body { margin-top: 0 !important; padding-top: 0 !important; }&lt;br /&gt;
.skin-minerva #mw-mf-viewport,&lt;br /&gt;
.skin-minerva #mw-mf-page-center { margin-top: 0 !important; padding-top: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* Header — orange, sticky */&lt;br /&gt;
.skin-minerva header.header-container {&lt;br /&gt;
  background: #b5451b !important;&lt;br /&gt;
  position: sticky !important;&lt;br /&gt;
  top: 0 !important;&lt;br /&gt;
  z-index: 200 !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  color: #ffffff;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .minerva-header {&lt;br /&gt;
  background: #b5451b !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  min-height: 54px !important;&lt;br /&gt;
  padding: 0 12px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.minerva-icon {&lt;br /&gt;
 &lt;br /&gt;
 filter: brightness(0) saturate(100%) invert(100%) sepia(4%) saturate(1%) hue-rotate(296deg) brightness(104%) contrast(100%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Site name text */&lt;br /&gt;
.skin-minerva .branding-box { background: transparent !important; }&lt;br /&gt;
.skin-minerva .branding-box a {&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .branding-box a span {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-size: 18px !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  font-family: system-ui, -apple-system, sans-serif !important;&lt;br /&gt;
  white-space: nowrap !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hamburger + search icons — white */&lt;br /&gt;
.skin-minerva .minerva-header label,&lt;br /&gt;
.skin-minerva .minerva-header .search-toggle {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .minerva-header svg path,&lt;br /&gt;
.skin-minerva .minerva-header svg rect,&lt;br /&gt;
.skin-minerva .minerva-header svg circle {&lt;br /&gt;
  fill: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .minerva-header .mw-ui-icon:before {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  filter: brightness(10) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Reader toolbar below Minerva header */&lt;br /&gt;
.skin-minerva #gr-static-bar {&lt;br /&gt;
  position: sticky !important;&lt;br /&gt;
  top: 54px !important;&lt;br /&gt;
  z-index: 100 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 35. MINERVA — auto-expand sections ────────────────────────── */&lt;br /&gt;
.skin-minerva .collapsible-block,&lt;br /&gt;
.skin-minerva .collapsible-heading + .collapsible-block {&lt;br /&gt;
  display: block !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .mf-section-0,&lt;br /&gt;
.skin-minerva .mf-section-1,&lt;br /&gt;
.skin-minerva .mf-section-2,&lt;br /&gt;
.skin-minerva .mf-section-3,&lt;br /&gt;
.skin-minerva .mf-section-4,&lt;br /&gt;
.skin-minerva .mf-section-5,&lt;br /&gt;
.skin-minerva .mf-section-6,&lt;br /&gt;
.skin-minerva .mf-section-7,&lt;br /&gt;
.skin-minerva .mf-section-8,&lt;br /&gt;
.skin-minerva .mf-section-9 {&lt;br /&gt;
  display: block !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .section-heading {&lt;br /&gt;
  pointer-events: none !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .section-heading .indicator {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* ── Hide MediaWiki default header user/account controls (desktop) ── */&lt;br /&gt;
#pt-userpage-2,&lt;br /&gt;
#p-vector-user-menu-userpage,&lt;br /&gt;
/* Hide the right-side person-icon dropdown */&lt;br /&gt;
#vector-user-links-dropdown,&lt;br /&gt;
.vector-user-links-dropdown,&lt;br /&gt;
#p-personal-more,&lt;br /&gt;
.vector-user-menu,&lt;br /&gt;
.mw-portlet-vector-user-menu-overflow,&lt;br /&gt;
#pt-watchlist-2, #pt-watchlist {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Hide original userpage text link */&lt;br /&gt;
#p-vector-user-menu-userpage { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* Hide the right-side person-icon user menu dropdown */&lt;br /&gt;
#vector-user-links-dropdown { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Custom username dropdown ── */&lt;br /&gt;
#gr-user-dropdown {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    font-family: system-ui, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
#gr-user-trigger {&lt;br /&gt;
    display: inline-flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    gap: 6px;&lt;br /&gt;
    background: rgba(255,255,255,0.12);&lt;br /&gt;
    border: none;&lt;br /&gt;
    color: #fff;&lt;br /&gt;
    font-size: 0.9em;&lt;br /&gt;
    font-weight: 500;&lt;br /&gt;
    padding: 6px 12px;&lt;br /&gt;
    border-radius: 6px;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
#gr-user-trigger:hover { background: rgba(255,255,255,0.2); }&lt;br /&gt;
#gr-user-trigger .gr-caret { font-size: 0.7em; opacity: 0.8; }&lt;br /&gt;
&lt;br /&gt;
#gr-user-menu {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: calc(100% + 6px);&lt;br /&gt;
    right: 0;&lt;br /&gt;
    min-width: 180px;&lt;br /&gt;
    background: #fff;&lt;br /&gt;
    border: 1px solid #e0d8d2;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
    box-shadow: 0 6px 24px rgba(0,0,0,0.14);&lt;br /&gt;
    padding: 6px;&lt;br /&gt;
    z-index: 1000;&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
#gr-user-menu.gr-open { display: block; }&lt;br /&gt;
#gr-user-menu a {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    gap: 10px;&lt;br /&gt;
    padding: 10px 12px;&lt;br /&gt;
    color: #2c1810;&lt;br /&gt;
    text-decoration: none;&lt;br /&gt;
    font-size: 0.92em;&lt;br /&gt;
    border-radius: 6px;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
#gr-user-menu a:hover { background: #f7f1ed; }&lt;br /&gt;
.vector-user-links a {&lt;br /&gt;
    color: #1C1A17 !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-user-links-main  {&lt;br /&gt;
 display: none !important;&lt;br /&gt;
}&lt;br /&gt;
.gr-phone-row { margin-bottom: 12px; }&lt;br /&gt;
.gr-phone-label {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
    font-size: 0.875rem;&lt;br /&gt;
    margin-bottom: 6px;&lt;br /&gt;
}&lt;br /&gt;
.gr-phone-inputs {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    gap: 8px;&lt;br /&gt;
    align-items: stretch;&lt;br /&gt;
    height: 48px;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    font-family: &amp;quot;Noto Sans Devanagari&amp;quot;, system-ui, -apple-system, BlinkMacSystemFont, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
.gr-phone-country { width: 101px; border-radius: 12px; padding: 12px; gap: 8px; border: 1px solid #CED4DA;}&lt;br /&gt;
.gr-phone-national { flex: 1; border-radius: 12px; padding: 12px; border: 1px solid #CED4DA;}&lt;br /&gt;
&lt;br /&gt;
/* ── Country trigger button ── */&lt;br /&gt;
.gr-country-trigger {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    gap: 8px;&lt;br /&gt;
    width: 101px;&lt;br /&gt;
    border-radius: 12px;&lt;br /&gt;
    padding: 12px;&lt;br /&gt;
    border: 1px solid #CED4DA;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
    background: #fff;&lt;br /&gt;
}&lt;br /&gt;
.gr-country-trigger:hover { border-color: #72777d; }&lt;br /&gt;
.gr-trigger-flag { font-size: 1.3rem; line-height: 1; }&lt;br /&gt;
.gr-trigger-dial { font-size: 0.9rem; color: #54595d; }&lt;br /&gt;
.gr-trigger-caret { font-size: 0.7rem; color: #54595d; }&lt;br /&gt;
&lt;br /&gt;
/* ── Dropdown ── */&lt;br /&gt;
.gr-country-dropdown {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: calc(100% + 4px); left: 0;&lt;br /&gt;
    z-index: 9999;&lt;br /&gt;
    width: 280px;&lt;br /&gt;
    background: #fff;&lt;br /&gt;
    border: 1px solid #a2a9b1;&lt;br /&gt;
    border-radius: 4px;&lt;br /&gt;
    box-shadow: 0 4px 16px rgba(0,0,0,0.12);&lt;br /&gt;
}&lt;br /&gt;
.gr-country-search {&lt;br /&gt;
    width: 100%; box-sizing: border-box;&lt;br /&gt;
    padding: 8px 12px;&lt;br /&gt;
    border: none; border-bottom: 1px solid #eee;&lt;br /&gt;
    font-size: 0.9rem; outline: none;&lt;br /&gt;
}&lt;br /&gt;
.gr-country-list { max-height: 240px; overflow-y: auto; }&lt;br /&gt;
.gr-country-option {&lt;br /&gt;
    display: flex; align-items: center; gap: 8px;&lt;br /&gt;
    padding: 8px 12px; cursor: pointer; font-size: 0.9rem;&lt;br /&gt;
}&lt;br /&gt;
.gr-country-option:hover { background: #f8f9fa; }&lt;br /&gt;
.gr-country-flag { font-size: 1.2rem; flex-shrink: 0; }&lt;br /&gt;
.gr-country-name { flex: 1; color: #202122; }&lt;br /&gt;
.gr-country-dial { color: #54595d; font-size: 0.85rem; }&lt;br /&gt;
&lt;br /&gt;
.gr-phone-national:focus {&lt;br /&gt;
    outline: none; border-color: #4A433A;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Gadget-GrAnnotations.js&amp;diff=6219</id>
		<title>MediaWiki:Gadget-GrAnnotations.js</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Gadget-GrAnnotations.js&amp;diff=6219"/>
		<updated>2026-06-12T19:07:44Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/**&lt;br /&gt;
 * gr_annotations.js  —  grantha.io inline Notes + Bookmarks + Feedback  (v6 + Strategy B)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* global mw, $ */&lt;br /&gt;
( function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  var CONTENT_SEL   = &#039;#mw-content-text&#039;;&lt;br /&gt;
  var BM_LS_KEY     = &#039;grantha_bm_&#039;  + ( ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039; ) ) || &#039;&#039; );&lt;br /&gt;
  var NT_LS_KEY     = &#039;grantha_nt_&#039;  + ( ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039; ) ) || &#039;&#039; );&lt;br /&gt;
  var pageTitle     = ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039; ) ) || &#039;&#039;;&lt;br /&gt;
  var currentUser   = ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgUserName&#039; ) ) || &#039;&#039;;&lt;br /&gt;
  var userInitial   = currentUser ? currentUser.charAt( 0 ).toUpperCase() : &#039;?&#039;;&lt;br /&gt;
  var currentUserEmail = &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  if ( currentUser &amp;amp;&amp;amp; window.mw ) {&lt;br /&gt;
    new mw.Api().get({ action: &#039;query&#039;, meta: &#039;userinfo&#039;, uiprop: &#039;email&#039;, formatversion: 2 })&lt;br /&gt;
      .then( function (data) {&lt;br /&gt;
        var info = data &amp;amp;&amp;amp; data.query &amp;amp;&amp;amp; data.query.userinfo;&lt;br /&gt;
        if ( info &amp;amp;&amp;amp; info.email ) currentUserEmail = info.email;&lt;br /&gt;
      } ).catch( function () {} );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ( window.mw ) {&lt;br /&gt;
    var ns = mw.config.get( &#039;wgNamespaceNumber&#039; );&lt;br /&gt;
    if ( ns &amp;lt; 0 ) return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var _selRange   = null;&lt;br /&gt;
  var _selText    = &#039;&#039;;&lt;br /&gt;
  var _selRect    = null;&lt;br /&gt;
  var _notes      = [];&lt;br /&gt;
  var _bookmarks  = [];&lt;br /&gt;
  var _activeTab  = &#039;notes&#039;;&lt;br /&gt;
  var _selVersion = 0;&lt;br /&gt;
  var _fabSelVer  = -1;&lt;br /&gt;
  var _mobile     = window.innerWidth &amp;lt; 768 || &#039;ontouchstart&#039; in window;&lt;br /&gt;
  var _fabTouched = false;  // flag to prevent hideActions when tapping fab&lt;br /&gt;
&lt;br /&gt;
  function uid() { return &#039;gra_&#039; + Date.now() + &#039;_&#039; + Math.random().toString(36).slice(2,7); }&lt;br /&gt;
  function esc(s) {&lt;br /&gt;
    return String(s||&#039;&#039;).replace(/&amp;amp;/g,&#039;&amp;amp;amp;&#039;).replace(/&amp;lt;/g,&#039;&amp;amp;lt;&#039;)&lt;br /&gt;
                        .replace(/&amp;gt;/g,&#039;&amp;amp;gt;&#039;).replace(/&amp;quot;/g,&#039;&amp;amp;quot;&#039;);&lt;br /&gt;
  }&lt;br /&gt;
  function nowIso() { return new Date().toISOString().replace(/\.\d{3}Z$/,&#039;Z&#039;); }&lt;br /&gt;
  function fmtTs(ts) {&lt;br /&gt;
    try {&lt;br /&gt;
      var d = new Date(ts);&lt;br /&gt;
      return d.toLocaleDateString(&#039;en-IN&#039;,{day:&#039;numeric&#039;,month:&#039;short&#039;,year:&#039;numeric&#039;})&lt;br /&gt;
           + &#039; &#039; + d.toLocaleTimeString(&#039;en-IN&#039;,{hour:&#039;2-digit&#039;,minute:&#039;2-digit&#039;,hour12:false});&lt;br /&gt;
    } catch(e){ return ts; }&lt;br /&gt;
  }&lt;br /&gt;
  function clamp(v,lo,hi){ return Math.max(lo,Math.min(hi,v)); }&lt;br /&gt;
  function isMobile() { return _mobile; }&lt;br /&gt;
&lt;br /&gt;
  var $fab, $mobileBar, $panel, $backdrop;&lt;br /&gt;
  var $ntComposer, $ntInput, $ntSubmit;&lt;br /&gt;
  var $bmComposer, $bmInput, $bmSubmit;&lt;br /&gt;
  var $fbComposer, $fbIssueType, $fbText, $fbEmail, $fbSubmit, $fbQuote;&lt;br /&gt;
  var $tabNotes, $tabBookmarks, $paneNotes, $paneBookmarks;&lt;br /&gt;
&lt;br /&gt;
  function buildDom() {&lt;br /&gt;
    $fab = $( [&lt;br /&gt;
      &#039;&amp;lt;div id=&amp;quot;gra-fab&amp;quot; role=&amp;quot;toolbar&amp;quot; aria-label=&amp;quot;Feedback / Notes / Bookmark&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;button class=&amp;quot;gra-fab-btn&amp;quot; id=&amp;quot;gra-fab-note&amp;quot; type=&amp;quot;button&amp;quot; aria-label=&amp;quot;Note&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-icon gra-icon-note&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-fab-btn-label&amp;quot;&amp;gt;Note&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;button class=&amp;quot;gra-fab-btn&amp;quot; id=&amp;quot;gra-fab-bookmark&amp;quot; type=&amp;quot;button&amp;quot; aria-label=&amp;quot;Mark&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-icon gra-icon-bookmark&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-fab-btn-label&amp;quot;&amp;gt;Mark&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;button class=&amp;quot;gra-fab-btn&amp;quot; id=&amp;quot;gra-fab-feedback&amp;quot; type=&amp;quot;button&amp;quot; aria-label=&amp;quot;Feedback&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-icon gra-icon-feedback&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-fab-btn-label&amp;quot;&amp;gt;Feedback&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;button class=&amp;quot;gra-fab-btn&amp;quot; id=&amp;quot;gra-fab-search&amp;quot; type=&amp;quot;button&amp;quot; aria-label=&amp;quot;Search&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-icon gra-icon-search&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-fab-btn-label&amp;quot;&amp;gt;Search&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;button class=&amp;quot;gra-fab-btn gra-fab-btn-dismiss&amp;quot; id=&amp;quot;gra-fab-dismiss&amp;quot; type=&amp;quot;button&amp;quot; aria-label=&amp;quot;Dismiss&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-icon gra-icon-dismiss&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-fab-btn-label&amp;quot;&amp;gt;Close&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
    ].join(&#039;&#039;) );&lt;br /&gt;
    $(&#039;body&#039;).append($fab);&lt;br /&gt;
&lt;br /&gt;
    $mobileBar = $(&#039;&amp;lt;div id=&amp;quot;gra-mobile-bar&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
    $(&#039;body&#039;).append($mobileBar);&lt;br /&gt;
&lt;br /&gt;
    $fbComposer = $( [&lt;br /&gt;
      &#039;&amp;lt;div class=&amp;quot;gra-composer&amp;quot; id=&amp;quot;gra-fb-composer&amp;quot; role=&amp;quot;dialog&amp;quot; aria-label=&amp;quot;Send feedback&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-composer-header&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-icon gra-icon-feedback&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;strong&amp;gt;Feedback&amp;lt;/strong&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button class=&amp;quot;gra-btn-x&amp;quot; id=&amp;quot;gra-fb-close&amp;quot; title=&amp;quot;Close&amp;quot;&amp;gt;✕&amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-fb-quote-label&amp;quot;&amp;gt;Selected text:&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-fb-quote&amp;quot; id=&amp;quot;gra-fb-quote&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-fb-field-label&amp;quot;&amp;gt;Issue type&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;select class=&amp;quot;gra-fb-select&amp;quot; id=&amp;quot;gra-fb-issue&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;option value=&amp;quot;&amp;quot;&amp;gt;— Choose —&amp;lt;/option&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;option value=&amp;quot;wrong_text&amp;quot;&amp;gt;Formatting error&amp;lt;/option&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;option value=&amp;quot;reference_issue&amp;quot;&amp;gt;Reference issue&amp;lt;/option&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;option value=&amp;quot;spelling_mistake&amp;quot;&amp;gt;Spelling mistake&amp;lt;/option&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;option value=&amp;quot;other&amp;quot;&amp;gt;Other&amp;lt;/option&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/select&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-fb-field-label&amp;quot;&amp;gt;Details (optional)&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;textarea class=&amp;quot;gra-composer-input&amp;quot; id=&amp;quot;gra-fb-text&amp;quot; placeholder=&amp;quot;Describe the issue…&amp;quot; rows=&amp;quot;3&amp;quot;&amp;gt;&amp;lt;/textarea&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-fb-field-label&amp;quot;&amp;gt;Your email (optional)&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;input class=&amp;quot;gra-composer-input gra-fb-email-input&amp;quot; id=&amp;quot;gra-fb-email&amp;quot; type=&amp;quot;email&amp;quot; placeholder=&amp;quot;you@example.com&amp;quot; autocomplete=&amp;quot;email&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-composer-actions&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button class=&amp;quot;gra-btn-cancel&amp;quot; id=&amp;quot;gra-fb-cancel&amp;quot;&amp;gt;Cancel&amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button class=&amp;quot;gra-btn-submit&amp;quot; id=&amp;quot;gra-fb-submit&amp;quot; disabled&amp;gt;Send&amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-fb-status&amp;quot; id=&amp;quot;gra-fb-status&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
    ].join(&#039;&#039;) );&lt;br /&gt;
    $(&#039;body&#039;).append($fbComposer);&lt;br /&gt;
&lt;br /&gt;
    $ntComposer = $( [&lt;br /&gt;
      &#039;&amp;lt;div class=&amp;quot;gra-composer&amp;quot; id=&amp;quot;gra-nt-composer&amp;quot; role=&amp;quot;dialog&amp;quot; aria-label=&amp;quot;Add note&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-composer-user&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;div class=&amp;quot;gra-avatar&amp;quot;&amp;gt;&#039; + esc(currentUser ? userInitial : &#039;✎&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;div class=&amp;quot;gra-composer-uname&amp;quot;&amp;gt;&#039; + esc(currentUser || &#039;Notes&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;textarea class=&amp;quot;gra-composer-input&amp;quot; id=&amp;quot;gra-nt-input&amp;quot; placeholder=&amp;quot;Write a note…&amp;quot; rows=&amp;quot;3&amp;quot;&amp;gt;&amp;lt;/textarea&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-composer-actions&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button class=&amp;quot;gra-btn-cancel&amp;quot; id=&amp;quot;gra-nt-cancel&amp;quot;&amp;gt;Cancel&amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button class=&amp;quot;gra-btn-submit&amp;quot; id=&amp;quot;gra-nt-submit&amp;quot; disabled&amp;gt;Save Note&amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
    ].join(&#039;&#039;) );&lt;br /&gt;
    $(&#039;body&#039;).append($ntComposer);&lt;br /&gt;
&lt;br /&gt;
    $bmComposer = $( [&lt;br /&gt;
      &#039;&amp;lt;div class=&amp;quot;gra-bm-composer&amp;quot; id=&amp;quot;gra-bm-composer&amp;quot; role=&amp;quot;dialog&amp;quot; aria-label=&amp;quot;Bookmark&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-bm-composer-label&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-icon gra-icon-bookmark&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;    Save bookmark&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;input class=&amp;quot;gra-composer-input&amp;quot; id=&amp;quot;gra-bm-input&amp;quot; type=&amp;quot;text&amp;quot; placeholder=&amp;quot;Name this bookmark…&amp;quot; autocomplete=&amp;quot;off&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-composer-actions&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button class=&amp;quot;gra-btn-cancel&amp;quot; id=&amp;quot;gra-bm-cancel&amp;quot;&amp;gt;Cancel&amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button class=&amp;quot;gra-btn-submit&amp;quot; id=&amp;quot;gra-bm-submit&amp;quot;&amp;gt;Save&amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
    ].join(&#039;&#039;) );&lt;br /&gt;
    $(&#039;body&#039;).append($bmComposer);&lt;br /&gt;
&lt;br /&gt;
    $panel = $( [&lt;br /&gt;
      &#039;&amp;lt;div id=&amp;quot;gra-panel&amp;quot; role=&amp;quot;complementary&amp;quot; aria-label=&amp;quot;Notes&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div id=&amp;quot;gra-panel-head&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;div id=&amp;quot;gra-panel-title&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button id=&amp;quot;gra-panel-close&amp;quot; title=&amp;quot;Close&amp;quot;&amp;gt;✕&amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div id=&amp;quot;gra-tabs&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button class=&amp;quot;gra-tab gra-tab-active&amp;quot; id=&amp;quot;gra-tab-notes&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;      &amp;lt;span class=&amp;quot;gra-icon gra-icon-note&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; Notes&#039;,&lt;br /&gt;
      &#039;    &amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button class=&amp;quot;gra-tab&amp;quot; id=&amp;quot;gra-tab-bookmarks&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;      &amp;lt;span class=&amp;quot;gra-icon gra-icon-bookmark&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; Bookmarks&#039;,&lt;br /&gt;
      &#039;    &amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div id=&amp;quot;gra-panel-body&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;div class=&amp;quot;gra-pane gra-pane-active&amp;quot; id=&amp;quot;gra-pane-notes&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;div class=&amp;quot;gra-pane&amp;quot; id=&amp;quot;gra-pane-bookmarks&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
    ].join(&#039;&#039;) );&lt;br /&gt;
    $(&#039;body&#039;).append($panel);&lt;br /&gt;
&lt;br /&gt;
    $backdrop = $(&#039;&amp;lt;div id=&amp;quot;gra-backdrop&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
    $(&#039;body&#039;).append($backdrop);&lt;br /&gt;
&lt;br /&gt;
    var $toggle = $( [&lt;br /&gt;
      &#039;&amp;lt;button id=&amp;quot;gra-toggle&amp;quot; aria-label=&amp;quot;Notes&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;span class=&amp;quot;gra-icon gra-icon-note&amp;quot; id=&amp;quot;gra-toggle-icon&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;span id=&amp;quot;gra-toggle-badge&amp;quot; aria-live=&amp;quot;polite&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;&amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
    ].join(&#039;&#039;) );&lt;br /&gt;
    $(&#039;body&#039;).append($toggle);&lt;br /&gt;
    $toggle.on(&#039;click&#039;, function() {&lt;br /&gt;
      $panel.hasClass(&#039;gra-panel-open&#039;) ? closePanel() : openPanel(_activeTab);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    $(&#039;#gra-panel-title&#039;).text(pageTitle.replace(/_/g,&#039; &#039;).split(&#039;/&#039;)[0].slice(0,30));&lt;br /&gt;
    $tabNotes     = $(&#039;#gra-tab-notes&#039;);&lt;br /&gt;
    $tabBookmarks = $(&#039;#gra-tab-bookmarks&#039;);&lt;br /&gt;
    $paneNotes    = $(&#039;#gra-pane-notes&#039;);&lt;br /&gt;
    $paneBookmarks= $(&#039;#gra-pane-bookmarks&#039;);&lt;br /&gt;
    $ntInput      = $(&#039;#gra-nt-input&#039;);&lt;br /&gt;
    $ntSubmit     = $(&#039;#gra-nt-submit&#039;);&lt;br /&gt;
    $bmInput      = $(&#039;#gra-bm-input&#039;);&lt;br /&gt;
    $bmSubmit     = $(&#039;#gra-bm-submit&#039;);&lt;br /&gt;
    $fbIssueType  = $(&#039;#gra-fb-issue&#039;);&lt;br /&gt;
    $fbText       = $(&#039;#gra-fb-text&#039;);&lt;br /&gt;
    $fbEmail      = $(&#039;#gra-fb-email&#039;);&lt;br /&gt;
    $fbSubmit     = $(&#039;#gra-fb-submit&#039;);&lt;br /&gt;
    $fbQuote      = $(&#039;#gra-fb-quote&#039;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function captureSelection() {&lt;br /&gt;
    var sel = window.getSelection();&lt;br /&gt;
    if (!sel || sel.isCollapsed || !sel.rangeCount) return false;&lt;br /&gt;
    var range = sel.getRangeAt(0);&lt;br /&gt;
    var text  = sel.toString().trim();&lt;br /&gt;
    if (!text || text.length &amp;lt; 2) return false;&lt;br /&gt;
    var contentEl = document.querySelector(CONTENT_SEL);&lt;br /&gt;
    if (!contentEl) return false;&lt;br /&gt;
    var ancestor = range.commonAncestorContainer;&lt;br /&gt;
    if (ancestor.nodeType === 3) ancestor = ancestor.parentNode;&lt;br /&gt;
    if (!ancestor || !contentEl.contains(ancestor)) return false;&lt;br /&gt;
    var _editorEl = document.getElementById(&#039;se-surface&#039;) ||&lt;br /&gt;
                    document.querySelector(&#039;.se-outer&#039;);&lt;br /&gt;
    if ( _editorEl &amp;amp;&amp;amp; _editorEl.contains(ancestor) ) return false;&lt;br /&gt;
    _selText  = text;&lt;br /&gt;
    _selRect  = range.getBoundingClientRect();&lt;br /&gt;
    try { _selRange = range.cloneRange(); }&lt;br /&gt;
    catch(e){ _selRange = null; }&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function reCaptureFromDOM() {&lt;br /&gt;
    if (!_selText) return false;&lt;br /&gt;
    var contentEl = document.querySelector(CONTENT_SEL);&lt;br /&gt;
    if (!contentEl) return false;&lt;br /&gt;
    var found = findTextInContent(contentEl, _selText.slice(0,80).replace(/…$/,&#039;&#039;).trim());&lt;br /&gt;
    if (!found) return false;&lt;br /&gt;
    _selRange = found;&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function tryShowActions() {&lt;br /&gt;
    if ($fbComposer &amp;amp;&amp;amp; $fbComposer.hasClass(&#039;gra-composer-visible&#039;)) return;&lt;br /&gt;
    if ($ntComposer &amp;amp;&amp;amp; $ntComposer.hasClass(&#039;gra-composer-visible&#039;)) return;&lt;br /&gt;
    if ($bmComposer &amp;amp;&amp;amp; $bmComposer.hasClass(&#039;gra-composer-visible&#039;)) return;&lt;br /&gt;
    if (!captureSelection()) { hideActions(); return; }&lt;br /&gt;
    _fabSelVer = _selVersion;&lt;br /&gt;
    showFab(_selRect);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function showFab(rect) {&lt;br /&gt;
    if (!rect) return;&lt;br /&gt;
    var fabW, fabH, top, left;&lt;br /&gt;
    if (_mobile) {&lt;br /&gt;
      /* Docked as a fixed bar below the reader toolbar.&lt;br /&gt;
         All positioning is handled by CSS via .gra-fab-mobile-docked,&lt;br /&gt;
         so it never collides with the native selection menu and never&lt;br /&gt;
         clips at screen edges or causes horizontal scroll. */&lt;br /&gt;
      $fab.css({ position: &#039;&#039;, top: &#039;&#039;, left: &#039;&#039;, visibility: &#039;&#039; })&lt;br /&gt;
          .addClass(&#039;gra-fab-visible gra-fab-mobile-docked&#039;);&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    fabW = 46; fabH = 126;&lt;br /&gt;
    top  = rect.top + (rect.height / 2) - (fabH / 2);&lt;br /&gt;
    left = rect.right + 10;&lt;br /&gt;
    if (left + fabW &amp;gt; window.innerWidth - 8) left = rect.left - fabW - 10;&lt;br /&gt;
    top  = clamp(top,  8, window.innerHeight - fabH - 8);&lt;br /&gt;
    left = clamp(left, 8, window.innerWidth  - fabW - 8);&lt;br /&gt;
    $fab.css({ top: top + &#039;px&#039;, left: left + &#039;px&#039; }).addClass(&#039;gra-fab-visible&#039;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function hideFab() { $fab.removeClass(&#039;gra-fab-visible gra-fab-mobile-docked&#039;); }&lt;br /&gt;
  function hideActions() { hideFab(); }&lt;br /&gt;
&lt;br /&gt;
  function wrapSelection(id, cssClass) {&lt;br /&gt;
    var range = _selRange;&lt;br /&gt;
    _selRange = null;&lt;br /&gt;
    if (!range) return null;&lt;br /&gt;
    try {&lt;br /&gt;
      if (!document.contains(range.startContainer) ||&lt;br /&gt;
          !document.contains(range.endContainer)) return null;&lt;br /&gt;
    } catch(e) { return null; }&lt;br /&gt;
    function makeSpan() {&lt;br /&gt;
      var sp = document.createElement(&#039;span&#039;);&lt;br /&gt;
      sp.className = cssClass;&lt;br /&gt;
      sp.setAttribute(&#039;data-gra-id&#039;, id);&lt;br /&gt;
      return sp;&lt;br /&gt;
    }&lt;br /&gt;
    try {&lt;br /&gt;
      var span = makeSpan();&lt;br /&gt;
      range.surroundContents(span);&lt;br /&gt;
      if (span.parentNode) return span;&lt;br /&gt;
    } catch(e) {}&lt;br /&gt;
    try {&lt;br /&gt;
      var frag = range.extractContents();&lt;br /&gt;
      var sp2  = makeSpan();&lt;br /&gt;
      sp2.appendChild(frag);&lt;br /&gt;
      range.insertNode(sp2);&lt;br /&gt;
      if (sp2 &amp;amp;&amp;amp; sp2.parentNode) return sp2;&lt;br /&gt;
    } catch(e2) {}&lt;br /&gt;
    return null;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function openFeedbackComposer() {&lt;br /&gt;
    hideActions();&lt;br /&gt;
    $fbQuote.text(_selText.slice(0,200) + (_selText.length &amp;gt; 200 ? &#039;…&#039; : &#039;&#039;));&lt;br /&gt;
    $fbIssueType.val(&#039;&#039;);&lt;br /&gt;
    $fbText.val(&#039;&#039;);&lt;br /&gt;
    $fbSubmit.prop(&#039;disabled&#039;, true);&lt;br /&gt;
    $(&#039;#gra-fb-status&#039;).text(&#039;&#039;).removeClass(&#039;gra-fb-ok gra-fb-err&#039;);&lt;br /&gt;
    if (currentUserEmail) $fbEmail.val(currentUserEmail);&lt;br /&gt;
    else $fbEmail.val(&#039;&#039;);&lt;br /&gt;
    if (!_mobile) $fbComposer.css({top:&#039;&#039;, left:&#039;&#039;, transform:&#039;&#039;});&lt;br /&gt;
    $fbComposer.addClass(&#039;gra-composer-visible&#039;);&lt;br /&gt;
    $backdrop.addClass(&#039;gra-backdrop-visible&#039;);&lt;br /&gt;
    setTimeout(function(){ $fbIssueType.focus(); }, isMobile() ? 300 : 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function closeFeedbackComposer() {&lt;br /&gt;
    $fbComposer.removeClass(&#039;gra-composer-visible&#039;);&lt;br /&gt;
    $backdrop.removeClass(&#039;gra-backdrop-visible&#039;);&lt;br /&gt;
    _selRange = null; _selText = &#039;&#039;; _selRect = null;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function submitFeedback() {&lt;br /&gt;
    var issueType = $fbIssueType.val();&lt;br /&gt;
    var details   = $fbText.val().trim();&lt;br /&gt;
    var email     = $fbEmail.val().trim();&lt;br /&gt;
    var quote     = $fbQuote.text();&lt;br /&gt;
    if (!issueType) return;&lt;br /&gt;
    $fbSubmit.prop(&#039;disabled&#039;, true).text(&#039;Sending…&#039;);&lt;br /&gt;
    $(&#039;#gra-fb-status&#039;).text(&#039;&#039;).removeClass(&#039;gra-fb-ok gra-fb-err&#039;);&lt;br /&gt;
    var issueLabels = {&lt;br /&gt;
      wrong_text: &#039;Formatting error&#039;, reference_issue: &#039;Reference issue&#039;,&lt;br /&gt;
      spelling_mistake: &#039;Spelling mistake&#039;, other: &#039;Other&#039;&lt;br /&gt;
    };&lt;br /&gt;
    var payload = new FormData();&lt;br /&gt;
    payload.append(&#039;issue_type&#039;,    issueLabels[issueType] || issueType);&lt;br /&gt;
    payload.append(&#039;page&#039;,          pageTitle.replace(/_/g,&#039; &#039;));&lt;br /&gt;
    payload.append(&#039;url&#039;,           window.location.href);&lt;br /&gt;
    payload.append(&#039;selected_text&#039;, quote);&lt;br /&gt;
    payload.append(&#039;details&#039;,       details || &#039;&#039;);&lt;br /&gt;
    payload.append(&#039;user_email&#039;,    email || currentUserEmail || &#039;&#039;);&lt;br /&gt;
    payload.append(&#039;wiki_user&#039;,     currentUser || &#039;anonymous&#039;);&lt;br /&gt;
    fetch(&#039;/feedback.php&#039;, {method:&#039;POST&#039;, body:payload})&lt;br /&gt;
      .then(function(r){ return r.json(); })&lt;br /&gt;
      .then(function(data){&lt;br /&gt;
        if (data &amp;amp;&amp;amp; data.ok) showFeedbackSuccess();&lt;br /&gt;
        else showFeedbackError(data &amp;amp;&amp;amp; data.error ? data.error : &#039;Could not send.&#039;);&lt;br /&gt;
      })&lt;br /&gt;
      .catch(function(){ showFeedbackError(&#039;Network error. Please try again.&#039;); });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function showFeedbackSuccess() {&lt;br /&gt;
    $fbSubmit.prop(&#039;disabled&#039;, false).text(&#039;Send&#039;);&lt;br /&gt;
    $(&#039;#gra-fb-status&#039;).text(&#039;✓ Feedback sent. Thank you!&#039;).addClass(&#039;gra-fb-ok&#039;);&lt;br /&gt;
    setTimeout(closeFeedbackComposer, 2500);&lt;br /&gt;
  }&lt;br /&gt;
  function showFeedbackError(msg) {&lt;br /&gt;
    $fbSubmit.prop(&#039;disabled&#039;, false).text(&#039;Send&#039;);&lt;br /&gt;
    $(&#039;#gra-fb-status&#039;).text(&#039;✗ &#039; + msg).addClass(&#039;gra-fb-err&#039;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function openNoteComposer() {&lt;br /&gt;
    hideActions();&lt;br /&gt;
    if (!_mobile) $ntComposer.css({ top: &#039;&#039;, left: &#039;&#039;, transform: &#039;&#039; });&lt;br /&gt;
    $ntComposer.addClass(&#039;gra-composer-visible&#039;);&lt;br /&gt;
    $backdrop.addClass(&#039;gra-backdrop-visible&#039;);&lt;br /&gt;
    setTimeout(function(){ $ntInput.focus(); }, isMobile() ? 300 : 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function closeNoteComposer() {&lt;br /&gt;
    $ntComposer.removeClass(&#039;gra-composer-visible&#039;);&lt;br /&gt;
    $backdrop.removeClass(&#039;gra-backdrop-visible&#039;);&lt;br /&gt;
    $ntInput.val(&#039;&#039;);&lt;br /&gt;
    $ntSubmit.prop(&#039;disabled&#039;, true);&lt;br /&gt;
    _selRange = null; _selText = &#039;&#039;; _selRect = null;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function submitNote() {&lt;br /&gt;
    var text = $ntInput.val().trim();&lt;br /&gt;
    if (!text) return;&lt;br /&gt;
    var id    = uid();&lt;br /&gt;
    var ts    = nowIso();&lt;br /&gt;
    var quote = _selText.slice(0,120) + (_selText.length &amp;gt; 120 ? &#039;…&#039; : &#039;&#039;);&lt;br /&gt;
    if (!_selRange &amp;amp;&amp;amp; _selText) reCaptureFromDOM();&lt;br /&gt;
    var span  = wrapSelection(id, &#039;gra-note-highlight&#039;);&lt;br /&gt;
    if (span) span.setAttribute(&#039;data-gra-quote&#039;, quote);&lt;br /&gt;
    _notes.push({id:id, ts:ts, quote:quote, text:text});&lt;br /&gt;
    persistNotes();&lt;br /&gt;
    persistNoteHighlight(id, quote);&lt;br /&gt;
    renderNoteCards();&lt;br /&gt;
    closeNoteComposer();&lt;br /&gt;
    openPanel(&#039;notes&#039;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function persistNotes() {&lt;br /&gt;
    try { localStorage.setItem(NT_LS_KEY, JSON.stringify(_notes)); } catch(e){}&lt;br /&gt;
  }&lt;br /&gt;
  function loadNotes() {&lt;br /&gt;
    try { var r = localStorage.getItem(NT_LS_KEY); if (r) _notes = JSON.parse(r)||[]; } catch(e){}&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function openBookmarkComposer() {&lt;br /&gt;
    hideActions();&lt;br /&gt;
    if (!_mobile) $bmComposer.css({ top: &#039;&#039;, left: &#039;&#039;, transform: &#039;&#039; });&lt;br /&gt;
    $bmComposer.addClass(&#039;gra-composer-visible&#039;);&lt;br /&gt;
    $backdrop.addClass(&#039;gra-backdrop-visible&#039;);&lt;br /&gt;
    setTimeout(function(){ $bmInput.focus(); }, isMobile() ? 300 : 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function closeBookmarkComposer() {&lt;br /&gt;
    $bmComposer.removeClass(&#039;gra-composer-visible&#039;);&lt;br /&gt;
    $backdrop.removeClass(&#039;gra-backdrop-visible&#039;);&lt;br /&gt;
    $bmInput.val(&#039;&#039;);&lt;br /&gt;
    _selRange = null; _selText = &#039;&#039;; _selRect = null;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function submitBookmark() {&lt;br /&gt;
    var name  = $bmInput.val().trim() || (&#039;Bookmark &#039; + (_bookmarks.length+1));&lt;br /&gt;
    var id    = uid();&lt;br /&gt;
    var quote = _selText.slice(0,120) + (_selText.length &amp;gt; 120 ? &#039;…&#039; : &#039;&#039;);&lt;br /&gt;
    if (!_selRange &amp;amp;&amp;amp; _selText) reCaptureFromDOM();&lt;br /&gt;
    var span  = wrapSelection(id, &#039;gra-bookmark-highlight&#039;);&lt;br /&gt;
    if (span) { span.setAttribute(&#039;data-gra-id&#039;, id); span.setAttribute(&#039;data-gra-name&#039;, name); }&lt;br /&gt;
    _bookmarks.push({id:id, name:name, quote:quote, ts:nowIso()});&lt;br /&gt;
    persistBookmarks();&lt;br /&gt;
    renderBookmarkCards();&lt;br /&gt;
    closeBookmarkComposer();&lt;br /&gt;
    openPanel(&#039;bookmarks&#039;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function deleteBookmark(id) {&lt;br /&gt;
    _bookmarks = _bookmarks.filter(function(b){ return b.id !== id; });&lt;br /&gt;
    var span = document.querySelector(&#039;[data-gra-id=&amp;quot;&#039;+id+&#039;&amp;quot;].gra-bookmark-highlight&#039;);&lt;br /&gt;
    if (span &amp;amp;&amp;amp; span.parentNode) {&lt;br /&gt;
      var p = span.parentNode;&lt;br /&gt;
      while (span.firstChild) p.insertBefore(span.firstChild, span);&lt;br /&gt;
      p.removeChild(span);&lt;br /&gt;
    }&lt;br /&gt;
    persistBookmarks(); renderBookmarkCards();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function persistBookmarks() {&lt;br /&gt;
    try { localStorage.setItem(BM_LS_KEY, JSON.stringify(_bookmarks)); } catch(e){}&lt;br /&gt;
  }&lt;br /&gt;
  function loadBookmarks() {&lt;br /&gt;
    try { var r = localStorage.getItem(BM_LS_KEY); if (r) _bookmarks = JSON.parse(r)||[]; } catch(e){}&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function openPanel(tab) {&lt;br /&gt;
    _activeTab = tab || _activeTab;&lt;br /&gt;
    switchTab(_activeTab);&lt;br /&gt;
    $panel.addClass(&#039;gra-panel-open&#039;);&lt;br /&gt;
    $backdrop.addClass(&#039;gra-backdrop-visible&#039;);&lt;br /&gt;
  }&lt;br /&gt;
  function closePanel() {&lt;br /&gt;
    $panel.removeClass(&#039;gra-panel-open&#039;);&lt;br /&gt;
    $backdrop.removeClass(&#039;gra-backdrop-visible&#039;);&lt;br /&gt;
  }&lt;br /&gt;
  function switchTab(tab) {&lt;br /&gt;
    _activeTab = tab;&lt;br /&gt;
    $tabNotes.toggleClass(&#039;gra-tab-active&#039;, tab===&#039;notes&#039;);&lt;br /&gt;
    $tabBookmarks.toggleClass(&#039;gra-tab-active&#039;, tab===&#039;bookmarks&#039;);&lt;br /&gt;
    $paneNotes.toggleClass(&#039;gra-pane-active&#039;, tab===&#039;notes&#039;);&lt;br /&gt;
    $paneBookmarks.toggleClass(&#039;gra-pane-active&#039;, tab===&#039;bookmarks&#039;);&lt;br /&gt;
    if (tab===&#039;notes&#039;) renderNoteCards();&lt;br /&gt;
    else renderBookmarkCards();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function renderNoteCards() {&lt;br /&gt;
    if (!_notes.length) {&lt;br /&gt;
      $paneNotes.html(&#039;&amp;lt;div class=&amp;quot;gra-empty-state&amp;quot;&amp;gt;No notes yet.&amp;lt;br&amp;gt;Select text and tap ✎ to add one.&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    var html = &#039;&#039;;&lt;br /&gt;
    _notes.slice().reverse().forEach(function(n){&lt;br /&gt;
      html += &#039;&amp;lt;div class=&amp;quot;gra-note-card&amp;quot; data-gra-id=&amp;quot;&#039;+esc(n.id)+&#039;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;div class=&amp;quot;gra-card-header&amp;quot;&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;span class=&amp;quot;gra-icon gra-icon-note&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;div class=&amp;quot;gra-card-meta&amp;quot;&amp;gt;&#039;&lt;br /&gt;
            + (n.ts ? &#039;&amp;lt;div class=&amp;quot;gra-card-ts&amp;quot;&amp;gt;&#039;+esc(fmtTs(n.ts))+&#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039;)&lt;br /&gt;
            + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;button class=&amp;quot;gra-note-del&amp;quot; data-del-id=&amp;quot;&#039;+esc(n.id)+&#039;&amp;quot; title=&amp;quot;Delete&amp;quot;&amp;gt;×&amp;lt;/button&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
            + (n.quote ? &#039;&amp;lt;div class=&amp;quot;gra-card-quote&amp;quot;&amp;gt;&#039;+esc(n.quote)+&#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039;)&lt;br /&gt;
            + &#039;&amp;lt;div class=&amp;quot;gra-card-text&amp;quot;&amp;gt;&#039;+esc(n.text)+&#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    });&lt;br /&gt;
    $paneNotes.html(html);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function deleteNote(id) {&lt;br /&gt;
    _notes = _notes.filter(function(n){ return n.id !== id; });&lt;br /&gt;
    var span = document.querySelector(&#039;[data-gra-id=&amp;quot;&#039;+id+&#039;&amp;quot;].gra-note-highlight&#039;);&lt;br /&gt;
    if (span &amp;amp;&amp;amp; span.parentNode) {&lt;br /&gt;
      var p = span.parentNode;&lt;br /&gt;
      while (span.firstChild) p.insertBefore(span.firstChild, span);&lt;br /&gt;
      p.removeChild(span);&lt;br /&gt;
    }&lt;br /&gt;
    try {&lt;br /&gt;
      var s = JSON.parse(localStorage.getItem(NT_LS_KEY+&#039;_hl&#039;)||&#039;[]&#039;);&lt;br /&gt;
      s = s.filter(function(h){ return h.id !== id; });&lt;br /&gt;
      localStorage.setItem(NT_LS_KEY+&#039;_hl&#039;, JSON.stringify(s));&lt;br /&gt;
    } catch(e){}&lt;br /&gt;
    persistNotes(); renderNoteCards();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function renderBookmarkCards() {&lt;br /&gt;
    if (!_bookmarks.length) {&lt;br /&gt;
      $paneBookmarks.html(&#039;&amp;lt;div class=&amp;quot;gra-empty-state&amp;quot;&amp;gt;No bookmarks yet.&amp;lt;br&amp;gt;Select text and tap 🔖 to save one.&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    var html = &#039;&#039;;&lt;br /&gt;
    _bookmarks.slice().reverse().forEach(function(b){&lt;br /&gt;
      html += &#039;&amp;lt;div class=&amp;quot;gra-bookmark-card&amp;quot; data-gra-id=&amp;quot;&#039;+esc(b.id)+&#039;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;span class=&amp;quot;gra-icon gra-icon-bookmark&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;div class=&amp;quot;gra-bookmark-info&amp;quot;&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;div class=&amp;quot;gra-bookmark-name&amp;quot;&amp;gt;&#039;+esc(b.name)+&#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
            + (b.quote ? &#039;&amp;lt;div class=&amp;quot;gra-bookmark-quote&amp;quot;&amp;gt;&#039;+esc(b.quote)+&#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039;)&lt;br /&gt;
            + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;button class=&amp;quot;gra-bookmark-del&amp;quot; data-del-id=&amp;quot;&#039;+esc(b.id)+&#039;&amp;quot; title=&amp;quot;Remove&amp;quot;&amp;gt;×&amp;lt;/button&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    });&lt;br /&gt;
    $paneBookmarks.html(html);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function scrollToHighlight(id) {&lt;br /&gt;
    var el = document.querySelector(&#039;[data-gra-id=&amp;quot;&#039;+id+&#039;&amp;quot;]&#039;);&lt;br /&gt;
    if (!el) return;&lt;br /&gt;
    el.scrollIntoView({behavior:&#039;smooth&#039;, block:&#039;center&#039;});&lt;br /&gt;
    el.classList.add(&#039;gra-hl-active&#039;);&lt;br /&gt;
    setTimeout(function(){ el.classList.remove(&#039;gra-hl-active&#039;); }, 2000);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function wireEvents() {&lt;br /&gt;
&lt;br /&gt;
    /* Suppress native context menu inside article content (Android/desktop) */&lt;br /&gt;
    document.addEventListener(&#039;contextmenu&#039;, function(e) {&lt;br /&gt;
      var tag = e.target.tagName;&lt;br /&gt;
      if (tag === &#039;INPUT&#039; || tag === &#039;TEXTAREA&#039; || tag === &#039;SELECT&#039;) return;&lt;br /&gt;
      var c = document.querySelector(CONTENT_SEL);&lt;br /&gt;
      if (c &amp;amp;&amp;amp; c.contains(e.target)) e.preventDefault();&lt;br /&gt;
    }, { passive: false });&lt;br /&gt;
&lt;br /&gt;
    /* Desktop mouseup */&lt;br /&gt;
    $(document).on(&#039;mouseup&#039;, function(e){&lt;br /&gt;
      if (e.button !== 0) return;&lt;br /&gt;
      if (_mobile) return;&lt;br /&gt;
      setTimeout(tryShowActions, 20);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    /* Separate timers so mobile + desktop never clobber each other */&lt;br /&gt;
    var _selTimer    = null;  /* desktop debounce */&lt;br /&gt;
    var _mobShowTimer = null; /* mobile show-on-touchend */&lt;br /&gt;
&lt;br /&gt;
    /* Mobile: show fab quickly after finger lifts (selection settled).&lt;br /&gt;
       180ms feels instant while still letting the range stabilise. */&lt;br /&gt;
    document.addEventListener(&#039;touchend&#039;, function(e) {&lt;br /&gt;
      if (!_mobile) return;&lt;br /&gt;
      if ($fab[0] &amp;amp;&amp;amp; $fab[0].contains(e.target)) return;&lt;br /&gt;
      clearTimeout(_mobShowTimer);&lt;br /&gt;
      _mobShowTimer = setTimeout(function() {&lt;br /&gt;
        var sel = window.getSelection();&lt;br /&gt;
        if (!sel || sel.isCollapsed || !sel.toString().trim()) return;&lt;br /&gt;
        tryShowActions();&lt;br /&gt;
      }, 180);&lt;br /&gt;
    }, { passive: true });&lt;br /&gt;
&lt;br /&gt;
    /* Mobile: only HIDE the fab when selection is cleared while it&#039;s visible.&lt;br /&gt;
       (Reposition isn&#039;t needed now that the bar is docked, and re-running&lt;br /&gt;
       showFab here was causing the lag/flicker.) */&lt;br /&gt;
    document.addEventListener(&#039;selectionchange&#039;, function() {&lt;br /&gt;
      if (!_mobile) return;&lt;br /&gt;
      if (!$fab.hasClass(&#039;gra-fab-visible&#039;)) return;&lt;br /&gt;
      var sel = window.getSelection();&lt;br /&gt;
      if (!sel || sel.isCollapsed || !sel.toString().trim()) {&lt;br /&gt;
        clearTimeout(_mobShowTimer);&lt;br /&gt;
        hideActions();&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    /* selectionchange debounced (desktop only) */&lt;br /&gt;
    document.addEventListener(&#039;selectionchange&#039;, function() {&lt;br /&gt;
      if (_mobile) return;&lt;br /&gt;
      _selVersion++;&lt;br /&gt;
      clearTimeout(_selTimer);&lt;br /&gt;
      var v = _selVersion;&lt;br /&gt;
      _selTimer = setTimeout(function(){&lt;br /&gt;
        if (v !== _selVersion) return;&lt;br /&gt;
        if (_fabSelVer === v) return;&lt;br /&gt;
        tryShowActions();&lt;br /&gt;
      }, 600);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    /* ── KEY FIX: fab touchstart sets flag to prevent hideActions ── */&lt;br /&gt;
    $fab[0].addEventListener(&#039;touchstart&#039;, function(e) {&lt;br /&gt;
      _fabTouched = true;&lt;br /&gt;
      /* Don&#039;t propagate to document handler */&lt;br /&gt;
      e.stopPropagation();&lt;br /&gt;
    }, { passive: true });&lt;br /&gt;
&lt;br /&gt;
    /* Click outside → hide actions (blocked if fab was touched) */&lt;br /&gt;
    $(document).on(&#039;mousedown touchstart&#039;, function(e){&lt;br /&gt;
      if (_fabTouched) { _fabTouched = false; return; }&lt;br /&gt;
      var t = e.target;&lt;br /&gt;
      if ($fab[0]        &amp;amp;&amp;amp; $fab[0].contains(t))        return;&lt;br /&gt;
      if ($fbComposer[0] &amp;amp;&amp;amp; $fbComposer[0].contains(t)) return;&lt;br /&gt;
      if ($ntComposer[0] &amp;amp;&amp;amp; $ntComposer[0].contains(t)) return;&lt;br /&gt;
      if ($bmComposer[0] &amp;amp;&amp;amp; $bmComposer[0].contains(t)) return;&lt;br /&gt;
      hideActions();&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    /* ── FAB buttons — use touchend for mobile, click for desktop ── */&lt;br /&gt;
    function fabAction(btnId, action) {&lt;br /&gt;
      var el = document.getElementById(btnId);&lt;br /&gt;
      if (!el) return;&lt;br /&gt;
      /* touchend: fires before document touchstart clears _selRange */&lt;br /&gt;
      el.addEventListener(&#039;touchend&#039;, function(e) {&lt;br /&gt;
        e.preventDefault();&lt;br /&gt;
        e.stopPropagation();&lt;br /&gt;
        if (!_selRange &amp;amp;&amp;amp; !reCaptureFromDOM()) return;&lt;br /&gt;
        action();&lt;br /&gt;
      }, { passive: false });&lt;br /&gt;
      /* click: for desktop */&lt;br /&gt;
      el.addEventListener(&#039;click&#039;, function(e) {&lt;br /&gt;
        e.preventDefault();&lt;br /&gt;
        e.stopPropagation();&lt;br /&gt;
        if (!_selRange &amp;amp;&amp;amp; !reCaptureFromDOM()) return;&lt;br /&gt;
        action();&lt;br /&gt;
      });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    fabAction(&#039;gra-fab-note&#039;,     openNoteComposer);&lt;br /&gt;
    fabAction(&#039;gra-fab-bookmark&#039;, openBookmarkComposer);&lt;br /&gt;
    fabAction(&#039;gra-fab-feedback&#039;, openFeedbackComposer);&lt;br /&gt;
&lt;br /&gt;
    document.getElementById(&#039;gra-fab-search&#039;).addEventListener(&#039;touchend&#039;, function(e) {&lt;br /&gt;
      e.preventDefault(); e.stopPropagation();&lt;br /&gt;
      var q = _selText;&lt;br /&gt;
      hideActions();&lt;br /&gt;
      _selRange = null; _selText = &#039;&#039;; _selRect = null;&lt;br /&gt;
      if (q &amp;amp;&amp;amp; window.showSearchDialog) { window.showSearchDialog(q); }&lt;br /&gt;
    }, { passive: false });&lt;br /&gt;
    document.getElementById(&#039;gra-fab-search&#039;).addEventListener(&#039;click&#039;, function(e) {&lt;br /&gt;
      e.preventDefault(); e.stopPropagation();&lt;br /&gt;
      var q = _selText;&lt;br /&gt;
      hideActions();&lt;br /&gt;
      _selRange = null; _selText = &#039;&#039;; _selRect = null;&lt;br /&gt;
      if (q &amp;amp;&amp;amp; window.showSearchDialog) { window.showSearchDialog(q); }&lt;br /&gt;
      else if (q) { $(document).trigger($.Event(&#039;keydown&#039;, {ctrlKey:true, key:&#039;k&#039;, keyCode:75})); }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    /* ── Dismiss button: hide toolbar + clear selection (mobile) ── */&lt;br /&gt;
    (function () {&lt;br /&gt;
      var dismissEl = document.getElementById(&#039;gra-fab-dismiss&#039;);&lt;br /&gt;
      if (!dismissEl) return;&lt;br /&gt;
      function doDismiss(e) {&lt;br /&gt;
        e.preventDefault(); e.stopPropagation();&lt;br /&gt;
        hideActions();&lt;br /&gt;
        _selRange = null; _selText = &#039;&#039;; _selRect = null;&lt;br /&gt;
        if (window.getSelection) {&lt;br /&gt;
          var s = window.getSelection();&lt;br /&gt;
          if (s &amp;amp;&amp;amp; s.removeAllRanges) s.removeAllRanges();&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      dismissEl.addEventListener(&#039;touchend&#039;, doDismiss, { passive: false });&lt;br /&gt;
      dismissEl.addEventListener(&#039;click&#039;, doDismiss);&lt;br /&gt;
    }());&lt;br /&gt;
&lt;br /&gt;
    /* Feedback composer */&lt;br /&gt;
    $fbIssueType.on(&#039;change&#039;, function(){ $fbSubmit.prop(&#039;disabled&#039;, !$(this).val()); });&lt;br /&gt;
    $(&#039;#gra-fb-cancel, #gra-fb-close&#039;).on(&#039;click&#039;, closeFeedbackComposer);&lt;br /&gt;
    $fbSubmit.on(&#039;click&#039;, submitFeedback);&lt;br /&gt;
    $fbText.on(&#039;keydown&#039;, function(e){ if(e.key===&#039;Escape&#039;) closeFeedbackComposer(); });&lt;br /&gt;
&lt;br /&gt;
    /* Note composer */&lt;br /&gt;
    $ntInput.on(&#039;input&#039;, function(){ $ntSubmit.prop(&#039;disabled&#039;, !$(this).val().trim()); });&lt;br /&gt;
    $(&#039;#gra-nt-cancel&#039;).on(&#039;click&#039;, closeNoteComposer);&lt;br /&gt;
    $ntSubmit.on(&#039;click&#039;, submitNote);&lt;br /&gt;
    $ntInput.on(&#039;keydown&#039;, function(e){&lt;br /&gt;
      if ((e.ctrlKey||e.metaKey) &amp;amp;&amp;amp; e.key===&#039;Enter&#039;) submitNote();&lt;br /&gt;
      if (e.key===&#039;Escape&#039;) closeNoteComposer();&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    /* Bookmark composer */&lt;br /&gt;
    $(&#039;#gra-bm-cancel&#039;).on(&#039;click&#039;, closeBookmarkComposer);&lt;br /&gt;
    $bmSubmit.on(&#039;click&#039;, submitBookmark);&lt;br /&gt;
    $bmInput.on(&#039;keydown&#039;, function(e){&lt;br /&gt;
      if (e.key===&#039;Enter&#039;) submitBookmark();&lt;br /&gt;
      if (e.key===&#039;Escape&#039;) closeBookmarkComposer();&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    /* Panel */&lt;br /&gt;
    $(&#039;#gra-panel-close&#039;).on(&#039;click&#039;, closePanel);&lt;br /&gt;
    $backdrop.on(&#039;click touchend&#039;, function(e){&lt;br /&gt;
      e.preventDefault();&lt;br /&gt;
      if ($fbComposer.hasClass(&#039;gra-composer-visible&#039;)) closeFeedbackComposer();&lt;br /&gt;
      else if ($ntComposer.hasClass(&#039;gra-composer-visible&#039;)) closeNoteComposer();&lt;br /&gt;
      else if ($bmComposer.hasClass(&#039;gra-composer-visible&#039;)) closeBookmarkComposer();&lt;br /&gt;
      else closePanel();&lt;br /&gt;
    });&lt;br /&gt;
    $tabNotes.on(&#039;click&#039;, function(){ switchTab(&#039;notes&#039;); });&lt;br /&gt;
    $tabBookmarks.on(&#039;click&#039;, function(){ switchTab(&#039;bookmarks&#039;); });&lt;br /&gt;
&lt;br /&gt;
    $paneNotes.on(&#039;click&#039;, &#039;.gra-note-card&#039;, function(e){&lt;br /&gt;
      if ($(e.target).hasClass(&#039;gra-note-del&#039;)) return;&lt;br /&gt;
      var id = $(this).attr(&#039;data-gra-id&#039;);&lt;br /&gt;
      if (id) { closePanel(); scrollToHighlight(id); }&lt;br /&gt;
    });&lt;br /&gt;
    $paneNotes.on(&#039;click&#039;, &#039;.gra-note-del&#039;, function(e){&lt;br /&gt;
      e.stopPropagation();&lt;br /&gt;
      var id = $(this).attr(&#039;data-del-id&#039;);&lt;br /&gt;
      if (id) deleteNote(id);&lt;br /&gt;
    });&lt;br /&gt;
    $paneBookmarks.on(&#039;click&#039;, &#039;.gra-bookmark-card&#039;, function(e){&lt;br /&gt;
      if ($(e.target).hasClass(&#039;gra-bookmark-del&#039;)) return;&lt;br /&gt;
      var id = $(this).attr(&#039;data-gra-id&#039;);&lt;br /&gt;
      if (id) { closePanel(); scrollToHighlight(id); }&lt;br /&gt;
    });&lt;br /&gt;
    $paneBookmarks.on(&#039;click&#039;, &#039;.gra-bookmark-del&#039;, function(e){&lt;br /&gt;
      e.stopPropagation();&lt;br /&gt;
      var id = $(this).attr(&#039;data-del-id&#039;);&lt;br /&gt;
      if (id) deleteBookmark(id);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    $(CONTENT_SEL).on(&#039;click&#039;, &#039;.gra-note-highlight&#039;, function(){&lt;br /&gt;
      var id = $(this).attr(&#039;data-gra-id&#039;);&lt;br /&gt;
      openPanel(&#039;notes&#039;);&lt;br /&gt;
      setTimeout(function(){&lt;br /&gt;
        var $card = $paneNotes.find(&#039;[data-gra-id=&amp;quot;&#039;+id+&#039;&amp;quot;]&#039;);&lt;br /&gt;
        if ($card.length) {&lt;br /&gt;
          $card.addClass(&#039;gra-card-active&#039;);&lt;br /&gt;
          $card[0].scrollIntoView({behavior:&#039;smooth&#039;, block:&#039;nearest&#039;});&lt;br /&gt;
          setTimeout(function(){ $card.removeClass(&#039;gra-card-active&#039;); }, 2000);&lt;br /&gt;
        }&lt;br /&gt;
      }, 100);&lt;br /&gt;
    });&lt;br /&gt;
    $(CONTENT_SEL).on(&#039;click&#039;, &#039;.gra-bookmark-highlight&#039;, function(){&lt;br /&gt;
      var id = $(this).attr(&#039;data-gra-id&#039;);&lt;br /&gt;
      openPanel(&#039;bookmarks&#039;);&lt;br /&gt;
      setTimeout(function(){&lt;br /&gt;
        var $card = $paneBookmarks.find(&#039;[data-gra-id=&amp;quot;&#039;+id+&#039;&amp;quot;]&#039;);&lt;br /&gt;
        if ($card.length) $card[0].scrollIntoView({behavior:&#039;smooth&#039;, block:&#039;nearest&#039;});&lt;br /&gt;
      }, 100);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    $(document).on(&#039;keydown&#039;, function(e){&lt;br /&gt;
      if (e.key !== &#039;Escape&#039;) return;&lt;br /&gt;
      if ($fbComposer.hasClass(&#039;gra-composer-visible&#039;)) closeFeedbackComposer();&lt;br /&gt;
      else if ($ntComposer.hasClass(&#039;gra-composer-visible&#039;)) closeNoteComposer();&lt;br /&gt;
      else if ($bmComposer.hasClass(&#039;gra-composer-visible&#039;)) closeBookmarkComposer();&lt;br /&gt;
      else closePanel();&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function persistNoteHighlight(id, quote) {&lt;br /&gt;
    try {&lt;br /&gt;
      var s = JSON.parse(localStorage.getItem(NT_LS_KEY+&#039;_hl&#039;)||&#039;[]&#039;);&lt;br /&gt;
      s = s.filter(function(h){ return h.id !== id; });&lt;br /&gt;
      s.push({id:id, quote:quote});&lt;br /&gt;
      localStorage.setItem(NT_LS_KEY+&#039;_hl&#039;, JSON.stringify(s));&lt;br /&gt;
    } catch(e){}&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function restoreNoteHighlights() {&lt;br /&gt;
    var s = [];&lt;br /&gt;
    try { s = JSON.parse(localStorage.getItem(NT_LS_KEY+&#039;_hl&#039;)||&#039;[]&#039;); } catch(e){}&lt;br /&gt;
    s.forEach(function(h){&lt;br /&gt;
      if (!h.quote || !h.id) return;&lt;br /&gt;
      if (document.querySelector(&#039;[data-gra-id=&amp;quot;&#039;+h.id+&#039;&amp;quot;].gra-note-highlight&#039;)) return;&lt;br /&gt;
      var needle = h.quote.replace(/…$/,&#039;&#039;).trim().slice(0,80);&lt;br /&gt;
      if (!needle) return;&lt;br /&gt;
      var range = findTextInContent(document.querySelector(CONTENT_SEL), needle);&lt;br /&gt;
      if (!range) return;&lt;br /&gt;
      var sp = document.createElement(&#039;span&#039;);&lt;br /&gt;
      sp.className = &#039;gra-note-highlight&#039;;&lt;br /&gt;
      sp.setAttribute(&#039;data-gra-id&#039;, h.id);&lt;br /&gt;
      try { range.surroundContents(sp); } catch(e){}&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function restoreBookmarkHighlights() {&lt;br /&gt;
    _bookmarks.forEach(function(b){&lt;br /&gt;
      if (!b.quote) return;&lt;br /&gt;
      if (document.querySelector(&#039;[data-gra-id=&amp;quot;&#039;+b.id+&#039;&amp;quot;].gra-bookmark-highlight&#039;)) return;&lt;br /&gt;
      var needle = b.quote.replace(/…$/,&#039;&#039;).trim().slice(0,60);&lt;br /&gt;
      if (!needle) return;&lt;br /&gt;
      var found = findTextInContent(document.querySelector(CONTENT_SEL), needle);&lt;br /&gt;
      if (!found) return;&lt;br /&gt;
      var sp = document.createElement(&#039;span&#039;);&lt;br /&gt;
      sp.className = &#039;gra-bookmark-highlight&#039;;&lt;br /&gt;
      sp.setAttribute(&#039;data-gra-id&#039;, b.id);&lt;br /&gt;
      sp.setAttribute(&#039;data-gra-name&#039;, b.name);&lt;br /&gt;
      try { found.surroundContents(sp); } catch(e){}&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function findTextInContent(root, needle) {&lt;br /&gt;
    if (!root || !needle) return null;&lt;br /&gt;
    var text = root.textContent || &#039;&#039;;&lt;br /&gt;
    var idx  = text.indexOf(needle);&lt;br /&gt;
    if (idx &amp;lt; 0) return null;&lt;br /&gt;
    var iter = document.createNodeIterator(root, NodeFilter.SHOW_TEXT, null, false);&lt;br /&gt;
    var pos = 0, node, startNode, startOffset, endNode, endOffset;&lt;br /&gt;
    while ((node = iter.nextNode())) {&lt;br /&gt;
      var len = node.nodeValue.length;&lt;br /&gt;
      if (!startNode &amp;amp;&amp;amp; pos + len &amp;gt; idx) { startNode = node; startOffset = idx - pos; }&lt;br /&gt;
      var endIdx = idx + needle.length;&lt;br /&gt;
      if (startNode &amp;amp;&amp;amp; pos + len &amp;gt;= endIdx) { endNode = node; endOffset = endIdx - pos; break; }&lt;br /&gt;
      pos += len;&lt;br /&gt;
    }&lt;br /&gt;
    if (!startNode || !endNode) return null;&lt;br /&gt;
    try {&lt;br /&gt;
      var r = document.createRange();&lt;br /&gt;
      r.setStart(startNode, startOffset);&lt;br /&gt;
      r.setEnd(endNode, endOffset);&lt;br /&gt;
      return r;&lt;br /&gt;
    } catch(e){ return null; }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  $(function() {&lt;br /&gt;
    _mobile = window.innerWidth &amp;lt; 768 || &#039;ontouchstart&#039; in window;&lt;br /&gt;
    window.addEventListener(&#039;resize&#039;, function(){&lt;br /&gt;
      _mobile = window.innerWidth &amp;lt; 768 || &#039;ontouchstart&#039; in window;&lt;br /&gt;
    });&lt;br /&gt;
    buildDom();&lt;br /&gt;
    wireEvents();&lt;br /&gt;
    loadNotes();&lt;br /&gt;
    loadBookmarks();&lt;br /&gt;
    setTimeout(function(){&lt;br /&gt;
      try { restoreNoteHighlights(); } catch(e){}&lt;br /&gt;
      try { restoreBookmarkHighlights(); } catch(e){}&lt;br /&gt;
    }, 500);&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Gadget-GrAnnotations.js&amp;diff=6218</id>
		<title>MediaWiki:Gadget-GrAnnotations.js</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Gadget-GrAnnotations.js&amp;diff=6218"/>
		<updated>2026-06-12T19:07:00Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/**&lt;br /&gt;
 * gr_annotations.js  —  grantha.io inline Notes + Bookmarks + Feedback  (v6 + Strategy B)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* global mw, $ */&lt;br /&gt;
( function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  var CONTENT_SEL   = &#039;#mw-content-text&#039;;&lt;br /&gt;
  var BM_LS_KEY     = &#039;grantha_bm_&#039;  + ( ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039; ) ) || &#039;&#039; );&lt;br /&gt;
  var NT_LS_KEY     = &#039;grantha_nt_&#039;  + ( ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039; ) ) || &#039;&#039; );&lt;br /&gt;
  var pageTitle     = ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039; ) ) || &#039;&#039;;&lt;br /&gt;
  var currentUser   = ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgUserName&#039; ) ) || &#039;&#039;;&lt;br /&gt;
  var userInitial   = currentUser ? currentUser.charAt( 0 ).toUpperCase() : &#039;?&#039;;&lt;br /&gt;
  var currentUserEmail = &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  if ( currentUser &amp;amp;&amp;amp; window.mw ) {&lt;br /&gt;
    new mw.Api().get({ action: &#039;query&#039;, meta: &#039;userinfo&#039;, uiprop: &#039;email&#039;, formatversion: 2 })&lt;br /&gt;
      .then( function (data) {&lt;br /&gt;
        var info = data &amp;amp;&amp;amp; data.query &amp;amp;&amp;amp; data.query.userinfo;&lt;br /&gt;
        if ( info &amp;amp;&amp;amp; info.email ) currentUserEmail = info.email;&lt;br /&gt;
      } ).catch( function () {} );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ( window.mw ) {&lt;br /&gt;
    var ns = mw.config.get( &#039;wgNamespaceNumber&#039; );&lt;br /&gt;
    if ( ns &amp;lt; 0 ) return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var _selRange   = null;&lt;br /&gt;
  var _selText    = &#039;&#039;;&lt;br /&gt;
  var _selRect    = null;&lt;br /&gt;
  var _notes      = [];&lt;br /&gt;
  var _bookmarks  = [];&lt;br /&gt;
  var _activeTab  = &#039;notes&#039;;&lt;br /&gt;
  var _selVersion = 0;&lt;br /&gt;
  var _fabSelVer  = -1;&lt;br /&gt;
  var _mobile     = window.innerWidth &amp;lt; 768 || &#039;ontouchstart&#039; in window;&lt;br /&gt;
  var _fabTouched = false;  // flag to prevent hideActions when tapping fab&lt;br /&gt;
&lt;br /&gt;
  function uid() { return &#039;gra_&#039; + Date.now() + &#039;_&#039; + Math.random().toString(36).slice(2,7); }&lt;br /&gt;
  function esc(s) {&lt;br /&gt;
    return String(s||&#039;&#039;).replace(/&amp;amp;/g,&#039;&amp;amp;amp;&#039;).replace(/&amp;lt;/g,&#039;&amp;amp;lt;&#039;)&lt;br /&gt;
                        .replace(/&amp;gt;/g,&#039;&amp;amp;gt;&#039;).replace(/&amp;quot;/g,&#039;&amp;amp;quot;&#039;);&lt;br /&gt;
  }&lt;br /&gt;
  function nowIso() { return new Date().toISOString().replace(/\.\d{3}Z$/,&#039;Z&#039;); }&lt;br /&gt;
  function fmtTs(ts) {&lt;br /&gt;
    try {&lt;br /&gt;
      var d = new Date(ts);&lt;br /&gt;
      return d.toLocaleDateString(&#039;en-IN&#039;,{day:&#039;numeric&#039;,month:&#039;short&#039;,year:&#039;numeric&#039;})&lt;br /&gt;
           + &#039; &#039; + d.toLocaleTimeString(&#039;en-IN&#039;,{hour:&#039;2-digit&#039;,minute:&#039;2-digit&#039;,hour12:false});&lt;br /&gt;
    } catch(e){ return ts; }&lt;br /&gt;
  }&lt;br /&gt;
  function clamp(v,lo,hi){ return Math.max(lo,Math.min(hi,v)); }&lt;br /&gt;
  function isMobile() { return _mobile; }&lt;br /&gt;
&lt;br /&gt;
  var $fab, $mobileBar, $panel, $backdrop;&lt;br /&gt;
  var $ntComposer, $ntInput, $ntSubmit;&lt;br /&gt;
  var $bmComposer, $bmInput, $bmSubmit;&lt;br /&gt;
  var $fbComposer, $fbIssueType, $fbText, $fbEmail, $fbSubmit, $fbQuote;&lt;br /&gt;
  var $tabNotes, $tabBookmarks, $paneNotes, $paneBookmarks;&lt;br /&gt;
&lt;br /&gt;
  function buildDom() {&lt;br /&gt;
    $fab = $( [&lt;br /&gt;
      &#039;&amp;lt;div id=&amp;quot;gra-fab&amp;quot; role=&amp;quot;toolbar&amp;quot; aria-label=&amp;quot;Feedback / Notes / Bookmark&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;button class=&amp;quot;gra-fab-btn&amp;quot; id=&amp;quot;gra-fab-note&amp;quot; type=&amp;quot;button&amp;quot; aria-label=&amp;quot;Note&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-icon gra-icon-note&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-fab-btn-label&amp;quot;&amp;gt;Note&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;button class=&amp;quot;gra-fab-btn&amp;quot; id=&amp;quot;gra-fab-bookmark&amp;quot; type=&amp;quot;button&amp;quot; aria-label=&amp;quot;Mark&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-icon gra-icon-bookmark&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-fab-btn-label&amp;quot;&amp;gt;Mark&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;button class=&amp;quot;gra-fab-btn&amp;quot; id=&amp;quot;gra-fab-feedback&amp;quot; type=&amp;quot;button&amp;quot; aria-label=&amp;quot;Feedback&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-icon gra-icon-feedback&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-fab-btn-label&amp;quot;&amp;gt;Feedback&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;button class=&amp;quot;gra-fab-btn&amp;quot; id=&amp;quot;gra-fab-search&amp;quot; type=&amp;quot;button&amp;quot; aria-label=&amp;quot;Search&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-icon gra-icon-search&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-fab-btn-label&amp;quot;&amp;gt;Search&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;button class=&amp;quot;gra-fab-btn gra-fab-btn-dismiss&amp;quot; id=&amp;quot;gra-fab-dismiss&amp;quot; type=&amp;quot;button&amp;quot; aria-label=&amp;quot;Dismiss&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-icon gra-icon-dismiss&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-fab-btn-label&amp;quot;&amp;gt;Close&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
    ].join(&#039;&#039;) );&lt;br /&gt;
    $(&#039;body&#039;).append($fab);&lt;br /&gt;
&lt;br /&gt;
    $mobileBar = $(&#039;&amp;lt;div id=&amp;quot;gra-mobile-bar&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
    $(&#039;body&#039;).append($mobileBar);&lt;br /&gt;
&lt;br /&gt;
    $fbComposer = $( [&lt;br /&gt;
      &#039;&amp;lt;div class=&amp;quot;gra-composer&amp;quot; id=&amp;quot;gra-fb-composer&amp;quot; role=&amp;quot;dialog&amp;quot; aria-label=&amp;quot;Send feedback&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-composer-header&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-icon gra-icon-feedback&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;strong&amp;gt;Feedback&amp;lt;/strong&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button class=&amp;quot;gra-btn-x&amp;quot; id=&amp;quot;gra-fb-close&amp;quot; title=&amp;quot;Close&amp;quot;&amp;gt;✕&amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-fb-quote-label&amp;quot;&amp;gt;Selected text:&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-fb-quote&amp;quot; id=&amp;quot;gra-fb-quote&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-fb-field-label&amp;quot;&amp;gt;Issue type&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;select class=&amp;quot;gra-fb-select&amp;quot; id=&amp;quot;gra-fb-issue&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;option value=&amp;quot;&amp;quot;&amp;gt;— Choose —&amp;lt;/option&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;option value=&amp;quot;wrong_text&amp;quot;&amp;gt;Formatting error&amp;lt;/option&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;option value=&amp;quot;reference_issue&amp;quot;&amp;gt;Reference issue&amp;lt;/option&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;option value=&amp;quot;spelling_mistake&amp;quot;&amp;gt;Spelling mistake&amp;lt;/option&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;option value=&amp;quot;other&amp;quot;&amp;gt;Other&amp;lt;/option&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/select&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-fb-field-label&amp;quot;&amp;gt;Details (optional)&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;textarea class=&amp;quot;gra-composer-input&amp;quot; id=&amp;quot;gra-fb-text&amp;quot; placeholder=&amp;quot;Describe the issue…&amp;quot; rows=&amp;quot;3&amp;quot;&amp;gt;&amp;lt;/textarea&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-fb-field-label&amp;quot;&amp;gt;Your email (optional)&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;input class=&amp;quot;gra-composer-input gra-fb-email-input&amp;quot; id=&amp;quot;gra-fb-email&amp;quot; type=&amp;quot;email&amp;quot; placeholder=&amp;quot;you@example.com&amp;quot; autocomplete=&amp;quot;email&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-composer-actions&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button class=&amp;quot;gra-btn-cancel&amp;quot; id=&amp;quot;gra-fb-cancel&amp;quot;&amp;gt;Cancel&amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button class=&amp;quot;gra-btn-submit&amp;quot; id=&amp;quot;gra-fb-submit&amp;quot; disabled&amp;gt;Send&amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-fb-status&amp;quot; id=&amp;quot;gra-fb-status&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
    ].join(&#039;&#039;) );&lt;br /&gt;
    $(&#039;body&#039;).append($fbComposer);&lt;br /&gt;
&lt;br /&gt;
    $ntComposer = $( [&lt;br /&gt;
      &#039;&amp;lt;div class=&amp;quot;gra-composer&amp;quot; id=&amp;quot;gra-nt-composer&amp;quot; role=&amp;quot;dialog&amp;quot; aria-label=&amp;quot;Add note&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-composer-user&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;div class=&amp;quot;gra-avatar&amp;quot;&amp;gt;&#039; + esc(currentUser ? userInitial : &#039;✎&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;div class=&amp;quot;gra-composer-uname&amp;quot;&amp;gt;&#039; + esc(currentUser || &#039;Notes&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;textarea class=&amp;quot;gra-composer-input&amp;quot; id=&amp;quot;gra-nt-input&amp;quot; placeholder=&amp;quot;Write a note…&amp;quot; rows=&amp;quot;3&amp;quot;&amp;gt;&amp;lt;/textarea&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-composer-actions&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button class=&amp;quot;gra-btn-cancel&amp;quot; id=&amp;quot;gra-nt-cancel&amp;quot;&amp;gt;Cancel&amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button class=&amp;quot;gra-btn-submit&amp;quot; id=&amp;quot;gra-nt-submit&amp;quot; disabled&amp;gt;Save Note&amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
    ].join(&#039;&#039;) );&lt;br /&gt;
    $(&#039;body&#039;).append($ntComposer);&lt;br /&gt;
&lt;br /&gt;
    $bmComposer = $( [&lt;br /&gt;
      &#039;&amp;lt;div class=&amp;quot;gra-bm-composer&amp;quot; id=&amp;quot;gra-bm-composer&amp;quot; role=&amp;quot;dialog&amp;quot; aria-label=&amp;quot;Bookmark&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-bm-composer-label&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-icon gra-icon-bookmark&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;    Save bookmark&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;input class=&amp;quot;gra-composer-input&amp;quot; id=&amp;quot;gra-bm-input&amp;quot; type=&amp;quot;text&amp;quot; placeholder=&amp;quot;Name this bookmark…&amp;quot; autocomplete=&amp;quot;off&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-composer-actions&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button class=&amp;quot;gra-btn-cancel&amp;quot; id=&amp;quot;gra-bm-cancel&amp;quot;&amp;gt;Cancel&amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button class=&amp;quot;gra-btn-submit&amp;quot; id=&amp;quot;gra-bm-submit&amp;quot;&amp;gt;Save&amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
    ].join(&#039;&#039;) );&lt;br /&gt;
    $(&#039;body&#039;).append($bmComposer);&lt;br /&gt;
&lt;br /&gt;
    $panel = $( [&lt;br /&gt;
      &#039;&amp;lt;div id=&amp;quot;gra-panel&amp;quot; role=&amp;quot;complementary&amp;quot; aria-label=&amp;quot;Notes&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div id=&amp;quot;gra-panel-head&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;div id=&amp;quot;gra-panel-title&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button id=&amp;quot;gra-panel-close&amp;quot; title=&amp;quot;Close&amp;quot;&amp;gt;✕&amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div id=&amp;quot;gra-tabs&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button class=&amp;quot;gra-tab gra-tab-active&amp;quot; id=&amp;quot;gra-tab-notes&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;      &amp;lt;span class=&amp;quot;gra-icon gra-icon-note&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; Notes&#039;,&lt;br /&gt;
      &#039;    &amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button class=&amp;quot;gra-tab&amp;quot; id=&amp;quot;gra-tab-bookmarks&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;      &amp;lt;span class=&amp;quot;gra-icon gra-icon-bookmark&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; Bookmarks&#039;,&lt;br /&gt;
      &#039;    &amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div id=&amp;quot;gra-panel-body&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;div class=&amp;quot;gra-pane gra-pane-active&amp;quot; id=&amp;quot;gra-pane-notes&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;div class=&amp;quot;gra-pane&amp;quot; id=&amp;quot;gra-pane-bookmarks&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
    ].join(&#039;&#039;) );&lt;br /&gt;
    $(&#039;body&#039;).append($panel);&lt;br /&gt;
&lt;br /&gt;
    $backdrop = $(&#039;&amp;lt;div id=&amp;quot;gra-backdrop&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
    $(&#039;body&#039;).append($backdrop);&lt;br /&gt;
&lt;br /&gt;
    var $toggle = $( [&lt;br /&gt;
      &#039;&amp;lt;button id=&amp;quot;gra-toggle&amp;quot; aria-label=&amp;quot;Notes&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;span class=&amp;quot;gra-icon gra-icon-note&amp;quot; id=&amp;quot;gra-toggle-icon&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;span id=&amp;quot;gra-toggle-badge&amp;quot; aria-live=&amp;quot;polite&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;&amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
    ].join(&#039;&#039;) );&lt;br /&gt;
    $(&#039;body&#039;).append($toggle);&lt;br /&gt;
    $toggle.on(&#039;click&#039;, function() {&lt;br /&gt;
      $panel.hasClass(&#039;gra-panel-open&#039;) ? closePanel() : openPanel(_activeTab);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    $(&#039;#gra-panel-title&#039;).text(pageTitle.replace(/_/g,&#039; &#039;).split(&#039;/&#039;)[0].slice(0,30));&lt;br /&gt;
    $tabNotes     = $(&#039;#gra-tab-notes&#039;);&lt;br /&gt;
    $tabBookmarks = $(&#039;#gra-tab-bookmarks&#039;);&lt;br /&gt;
    $paneNotes    = $(&#039;#gra-pane-notes&#039;);&lt;br /&gt;
    $paneBookmarks= $(&#039;#gra-pane-bookmarks&#039;);&lt;br /&gt;
    $ntInput      = $(&#039;#gra-nt-input&#039;);&lt;br /&gt;
    $ntSubmit     = $(&#039;#gra-nt-submit&#039;);&lt;br /&gt;
    $bmInput      = $(&#039;#gra-bm-input&#039;);&lt;br /&gt;
    $bmSubmit     = $(&#039;#gra-bm-submit&#039;);&lt;br /&gt;
    $fbIssueType  = $(&#039;#gra-fb-issue&#039;);&lt;br /&gt;
    $fbText       = $(&#039;#gra-fb-text&#039;);&lt;br /&gt;
    $fbEmail      = $(&#039;#gra-fb-email&#039;);&lt;br /&gt;
    $fbSubmit     = $(&#039;#gra-fb-submit&#039;);&lt;br /&gt;
    $fbQuote      = $(&#039;#gra-fb-quote&#039;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function captureSelection() {&lt;br /&gt;
    var sel = window.getSelection();&lt;br /&gt;
    if (!sel || sel.isCollapsed || !sel.rangeCount) return false;&lt;br /&gt;
    var range = sel.getRangeAt(0);&lt;br /&gt;
    var text  = sel.toString().trim();&lt;br /&gt;
    if (!text || text.length &amp;lt; 2) return false;&lt;br /&gt;
    var contentEl = document.querySelector(CONTENT_SEL);&lt;br /&gt;
    if (!contentEl) return false;&lt;br /&gt;
    var ancestor = range.commonAncestorContainer;&lt;br /&gt;
    if (ancestor.nodeType === 3) ancestor = ancestor.parentNode;&lt;br /&gt;
    if (!ancestor || !contentEl.contains(ancestor)) return false;&lt;br /&gt;
    var _editorEl = document.getElementById(&#039;se-surface&#039;) ||&lt;br /&gt;
                    document.querySelector(&#039;.se-outer&#039;);&lt;br /&gt;
    if ( _editorEl &amp;amp;&amp;amp; _editorEl.contains(ancestor) ) return false;&lt;br /&gt;
    _selText  = text;&lt;br /&gt;
    _selRect  = range.getBoundingClientRect();&lt;br /&gt;
    try { _selRange = range.cloneRange(); }&lt;br /&gt;
    catch(e){ _selRange = null; }&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function reCaptureFromDOM() {&lt;br /&gt;
    if (!_selText) return false;&lt;br /&gt;
    var contentEl = document.querySelector(CONTENT_SEL);&lt;br /&gt;
    if (!contentEl) return false;&lt;br /&gt;
    var found = findTextInContent(contentEl, _selText.slice(0,80).replace(/…$/,&#039;&#039;).trim());&lt;br /&gt;
    if (!found) return false;&lt;br /&gt;
    _selRange = found;&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function tryShowActions() {&lt;br /&gt;
    if ($fbComposer &amp;amp;&amp;amp; $fbComposer.hasClass(&#039;gra-composer-visible&#039;)) return;&lt;br /&gt;
    if ($ntComposer &amp;amp;&amp;amp; $ntComposer.hasClass(&#039;gra-composer-visible&#039;)) return;&lt;br /&gt;
    if ($bmComposer &amp;amp;&amp;amp; $bmComposer.hasClass(&#039;gra-composer-visible&#039;)) return;&lt;br /&gt;
    if (!captureSelection()) { hideActions(); return; }&lt;br /&gt;
    _fabSelVer = _selVersion;&lt;br /&gt;
    showFab(_selRect);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function showFab(rect) {&lt;br /&gt;
    if (!rect) return;&lt;br /&gt;
    var fabW, fabH, top, left;&lt;br /&gt;
    if (_mobile) {&lt;br /&gt;
      /* Docked as a fixed bar below the reader toolbar.&lt;br /&gt;
         All positioning is handled by CSS via .gra-fab-mobile-docked,&lt;br /&gt;
         so it never collides with the native selection menu and never&lt;br /&gt;
         clips at screen edges or causes horizontal scroll. */&lt;br /&gt;
      $fab.css({ position: &#039;&#039;, top: &#039;&#039;, left: &#039;&#039;, visibility: &#039;&#039; })&lt;br /&gt;
          .addClass(&#039;gra-fab-visible gra-fab-mobile-docked&#039;);&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    fabW = 46; fabH = 126;&lt;br /&gt;
    top  = rect.top + (rect.height / 2) - (fabH / 2);&lt;br /&gt;
    left = rect.right + 10;&lt;br /&gt;
    if (left + fabW &amp;gt; window.innerWidth - 8) left = rect.left - fabW - 10;&lt;br /&gt;
    top  = clamp(top,  8, window.innerHeight - fabH - 8);&lt;br /&gt;
    left = clamp(left, 8, window.innerWidth  - fabW - 8);&lt;br /&gt;
    $fab.css({ top: top + &#039;px&#039;, left: left + &#039;px&#039; }).addClass(&#039;gra-fab-visible&#039;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function hideFab() { $fab.removeClass(&#039;gra-fab-visible gra-fab-mobile-docked&#039;); }&lt;br /&gt;
  function hideActions() { hideFab(); }&lt;br /&gt;
&lt;br /&gt;
  function wrapSelection(id, cssClass) {&lt;br /&gt;
    var range = _selRange;&lt;br /&gt;
    _selRange = null;&lt;br /&gt;
    if (!range) return null;&lt;br /&gt;
    try {&lt;br /&gt;
      if (!document.contains(range.startContainer) ||&lt;br /&gt;
          !document.contains(range.endContainer)) return null;&lt;br /&gt;
    } catch(e) { return null; }&lt;br /&gt;
    function makeSpan() {&lt;br /&gt;
      var sp = document.createElement(&#039;span&#039;);&lt;br /&gt;
      sp.className = cssClass;&lt;br /&gt;
      sp.setAttribute(&#039;data-gra-id&#039;, id);&lt;br /&gt;
      return sp;&lt;br /&gt;
    }&lt;br /&gt;
    try {&lt;br /&gt;
      var span = makeSpan();&lt;br /&gt;
      range.surroundContents(span);&lt;br /&gt;
      if (span.parentNode) return span;&lt;br /&gt;
    } catch(e) {}&lt;br /&gt;
    try {&lt;br /&gt;
      var frag = range.extractContents();&lt;br /&gt;
      var sp2  = makeSpan();&lt;br /&gt;
      sp2.appendChild(frag);&lt;br /&gt;
      range.insertNode(sp2);&lt;br /&gt;
      if (sp2 &amp;amp;&amp;amp; sp2.parentNode) return sp2;&lt;br /&gt;
    } catch(e2) {}&lt;br /&gt;
    return null;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function openFeedbackComposer() {&lt;br /&gt;
    hideActions();&lt;br /&gt;
    $fbQuote.text(_selText.slice(0,200) + (_selText.length &amp;gt; 200 ? &#039;…&#039; : &#039;&#039;));&lt;br /&gt;
    $fbIssueType.val(&#039;&#039;);&lt;br /&gt;
    $fbText.val(&#039;&#039;);&lt;br /&gt;
    $fbSubmit.prop(&#039;disabled&#039;, true);&lt;br /&gt;
    $(&#039;#gra-fb-status&#039;).text(&#039;&#039;).removeClass(&#039;gra-fb-ok gra-fb-err&#039;);&lt;br /&gt;
    if (currentUserEmail) $fbEmail.val(currentUserEmail);&lt;br /&gt;
    else $fbEmail.val(&#039;&#039;);&lt;br /&gt;
    if (!_mobile) $fbComposer.css({top:&#039;&#039;, left:&#039;&#039;, transform:&#039;&#039;});&lt;br /&gt;
    $fbComposer.addClass(&#039;gra-composer-visible&#039;);&lt;br /&gt;
    $backdrop.addClass(&#039;gra-backdrop-visible&#039;);&lt;br /&gt;
    setTimeout(function(){ $fbIssueType.focus(); }, isMobile() ? 300 : 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function closeFeedbackComposer() {&lt;br /&gt;
    $fbComposer.removeClass(&#039;gra-composer-visible&#039;);&lt;br /&gt;
    $backdrop.removeClass(&#039;gra-backdrop-visible&#039;);&lt;br /&gt;
    _selRange = null; _selText = &#039;&#039;; _selRect = null;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function submitFeedback() {&lt;br /&gt;
    var issueType = $fbIssueType.val();&lt;br /&gt;
    var details   = $fbText.val().trim();&lt;br /&gt;
    var email     = $fbEmail.val().trim();&lt;br /&gt;
    var quote     = $fbQuote.text();&lt;br /&gt;
    if (!issueType) return;&lt;br /&gt;
    $fbSubmit.prop(&#039;disabled&#039;, true).text(&#039;Sending…&#039;);&lt;br /&gt;
    $(&#039;#gra-fb-status&#039;).text(&#039;&#039;).removeClass(&#039;gra-fb-ok gra-fb-err&#039;);&lt;br /&gt;
    var issueLabels = {&lt;br /&gt;
      wrong_text: &#039;Formatting error&#039;, reference_issue: &#039;Reference issue&#039;,&lt;br /&gt;
      spelling_mistake: &#039;Spelling mistake&#039;, other: &#039;Other&#039;&lt;br /&gt;
    };&lt;br /&gt;
    var payload = new FormData();&lt;br /&gt;
    payload.append(&#039;issue_type&#039;,    issueLabels[issueType] || issueType);&lt;br /&gt;
    payload.append(&#039;page&#039;,          pageTitle.replace(/_/g,&#039; &#039;));&lt;br /&gt;
    payload.append(&#039;url&#039;,           window.location.href);&lt;br /&gt;
    payload.append(&#039;selected_text&#039;, quote);&lt;br /&gt;
    payload.append(&#039;details&#039;,       details || &#039;&#039;);&lt;br /&gt;
    payload.append(&#039;user_email&#039;,    email || currentUserEmail || &#039;&#039;);&lt;br /&gt;
    payload.append(&#039;wiki_user&#039;,     currentUser || &#039;anonymous&#039;);&lt;br /&gt;
    fetch(&#039;/feedback.php&#039;, {method:&#039;POST&#039;, body:payload})&lt;br /&gt;
      .then(function(r){ return r.json(); })&lt;br /&gt;
      .then(function(data){&lt;br /&gt;
        if (data &amp;amp;&amp;amp; data.ok) showFeedbackSuccess();&lt;br /&gt;
        else showFeedbackError(data &amp;amp;&amp;amp; data.error ? data.error : &#039;Could not send.&#039;);&lt;br /&gt;
      })&lt;br /&gt;
      .catch(function(){ showFeedbackError(&#039;Network error. Please try again.&#039;); });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function showFeedbackSuccess() {&lt;br /&gt;
    $fbSubmit.prop(&#039;disabled&#039;, false).text(&#039;Send&#039;);&lt;br /&gt;
    $(&#039;#gra-fb-status&#039;).text(&#039;✓ Feedback sent. Thank you!&#039;).addClass(&#039;gra-fb-ok&#039;);&lt;br /&gt;
    setTimeout(closeFeedbackComposer, 2500);&lt;br /&gt;
  }&lt;br /&gt;
  function showFeedbackError(msg) {&lt;br /&gt;
    $fbSubmit.prop(&#039;disabled&#039;, false).text(&#039;Send&#039;);&lt;br /&gt;
    $(&#039;#gra-fb-status&#039;).text(&#039;✗ &#039; + msg).addClass(&#039;gra-fb-err&#039;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function openNoteComposer() {&lt;br /&gt;
    hideActions();&lt;br /&gt;
    if (!_mobile) $ntComposer.css({ top: &#039;&#039;, left: &#039;&#039;, transform: &#039;&#039; });&lt;br /&gt;
    $ntComposer.addClass(&#039;gra-composer-visible&#039;);&lt;br /&gt;
    $backdrop.addClass(&#039;gra-backdrop-visible&#039;);&lt;br /&gt;
    setTimeout(function(){ $ntInput.focus(); }, isMobile() ? 300 : 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function closeNoteComposer() {&lt;br /&gt;
    $ntComposer.removeClass(&#039;gra-composer-visible&#039;);&lt;br /&gt;
    $backdrop.removeClass(&#039;gra-backdrop-visible&#039;);&lt;br /&gt;
    $ntInput.val(&#039;&#039;);&lt;br /&gt;
    $ntSubmit.prop(&#039;disabled&#039;, true);&lt;br /&gt;
    _selRange = null; _selText = &#039;&#039;; _selRect = null;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function submitNote() {&lt;br /&gt;
    var text = $ntInput.val().trim();&lt;br /&gt;
    if (!text) return;&lt;br /&gt;
    var id    = uid();&lt;br /&gt;
    var ts    = nowIso();&lt;br /&gt;
    var quote = _selText.slice(0,120) + (_selText.length &amp;gt; 120 ? &#039;…&#039; : &#039;&#039;);&lt;br /&gt;
    if (!_selRange &amp;amp;&amp;amp; _selText) reCaptureFromDOM();&lt;br /&gt;
    var span  = wrapSelection(id, &#039;gra-note-highlight&#039;);&lt;br /&gt;
    if (span) span.setAttribute(&#039;data-gra-quote&#039;, quote);&lt;br /&gt;
    _notes.push({id:id, ts:ts, quote:quote, text:text});&lt;br /&gt;
    persistNotes();&lt;br /&gt;
    persistNoteHighlight(id, quote);&lt;br /&gt;
    renderNoteCards();&lt;br /&gt;
    closeNoteComposer();&lt;br /&gt;
    openPanel(&#039;notes&#039;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function persistNotes() {&lt;br /&gt;
    try { localStorage.setItem(NT_LS_KEY, JSON.stringify(_notes)); } catch(e){}&lt;br /&gt;
  }&lt;br /&gt;
  function loadNotes() {&lt;br /&gt;
    try { var r = localStorage.getItem(NT_LS_KEY); if (r) _notes = JSON.parse(r)||[]; } catch(e){}&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function openBookmarkComposer() {&lt;br /&gt;
    hideActions();&lt;br /&gt;
    if (!_mobile) $bmComposer.css({ top: &#039;&#039;, left: &#039;&#039;, transform: &#039;&#039; });&lt;br /&gt;
    $bmComposer.addClass(&#039;gra-composer-visible&#039;);&lt;br /&gt;
    $backdrop.addClass(&#039;gra-backdrop-visible&#039;);&lt;br /&gt;
    setTimeout(function(){ $bmInput.focus(); }, isMobile() ? 300 : 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function closeBookmarkComposer() {&lt;br /&gt;
    $bmComposer.removeClass(&#039;gra-composer-visible&#039;);&lt;br /&gt;
    $backdrop.removeClass(&#039;gra-backdrop-visible&#039;);&lt;br /&gt;
    $bmInput.val(&#039;&#039;);&lt;br /&gt;
    _selRange = null; _selText = &#039;&#039;; _selRect = null;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function submitBookmark() {&lt;br /&gt;
    var name  = $bmInput.val().trim() || (&#039;Bookmark &#039; + (_bookmarks.length+1));&lt;br /&gt;
    var id    = uid();&lt;br /&gt;
    var quote = _selText.slice(0,120) + (_selText.length &amp;gt; 120 ? &#039;…&#039; : &#039;&#039;);&lt;br /&gt;
    if (!_selRange &amp;amp;&amp;amp; _selText) reCaptureFromDOM();&lt;br /&gt;
    var span  = wrapSelection(id, &#039;gra-bookmark-highlight&#039;);&lt;br /&gt;
    if (span) { span.setAttribute(&#039;data-gra-id&#039;, id); span.setAttribute(&#039;data-gra-name&#039;, name); }&lt;br /&gt;
    _bookmarks.push({id:id, name:name, quote:quote, ts:nowIso()});&lt;br /&gt;
    persistBookmarks();&lt;br /&gt;
    renderBookmarkCards();&lt;br /&gt;
    closeBookmarkComposer();&lt;br /&gt;
    openPanel(&#039;bookmarks&#039;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function deleteBookmark(id) {&lt;br /&gt;
    _bookmarks = _bookmarks.filter(function(b){ return b.id !== id; });&lt;br /&gt;
    var span = document.querySelector(&#039;[data-gra-id=&amp;quot;&#039;+id+&#039;&amp;quot;].gra-bookmark-highlight&#039;);&lt;br /&gt;
    if (span &amp;amp;&amp;amp; span.parentNode) {&lt;br /&gt;
      var p = span.parentNode;&lt;br /&gt;
      while (span.firstChild) p.insertBefore(span.firstChild, span);&lt;br /&gt;
      p.removeChild(span);&lt;br /&gt;
    }&lt;br /&gt;
    persistBookmarks(); renderBookmarkCards();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function persistBookmarks() {&lt;br /&gt;
    try { localStorage.setItem(BM_LS_KEY, JSON.stringify(_bookmarks)); } catch(e){}&lt;br /&gt;
  }&lt;br /&gt;
  function loadBookmarks() {&lt;br /&gt;
    try { var r = localStorage.getItem(BM_LS_KEY); if (r) _bookmarks = JSON.parse(r)||[]; } catch(e){}&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function openPanel(tab) {&lt;br /&gt;
    _activeTab = tab || _activeTab;&lt;br /&gt;
    switchTab(_activeTab);&lt;br /&gt;
    $panel.addClass(&#039;gra-panel-open&#039;);&lt;br /&gt;
    $backdrop.addClass(&#039;gra-backdrop-visible&#039;);&lt;br /&gt;
  }&lt;br /&gt;
  function closePanel() {&lt;br /&gt;
    $panel.removeClass(&#039;gra-panel-open&#039;);&lt;br /&gt;
    $backdrop.removeClass(&#039;gra-backdrop-visible&#039;);&lt;br /&gt;
  }&lt;br /&gt;
  function switchTab(tab) {&lt;br /&gt;
    _activeTab = tab;&lt;br /&gt;
    $tabNotes.toggleClass(&#039;gra-tab-active&#039;, tab===&#039;notes&#039;);&lt;br /&gt;
    $tabBookmarks.toggleClass(&#039;gra-tab-active&#039;, tab===&#039;bookmarks&#039;);&lt;br /&gt;
    $paneNotes.toggleClass(&#039;gra-pane-active&#039;, tab===&#039;notes&#039;);&lt;br /&gt;
    $paneBookmarks.toggleClass(&#039;gra-pane-active&#039;, tab===&#039;bookmarks&#039;);&lt;br /&gt;
    if (tab===&#039;notes&#039;) renderNoteCards();&lt;br /&gt;
    else renderBookmarkCards();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function renderNoteCards() {&lt;br /&gt;
    if (!_notes.length) {&lt;br /&gt;
      $paneNotes.html(&#039;&amp;lt;div class=&amp;quot;gra-empty-state&amp;quot;&amp;gt;No notes yet.&amp;lt;br&amp;gt;Select text and tap ✎ to add one.&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    var html = &#039;&#039;;&lt;br /&gt;
    _notes.slice().reverse().forEach(function(n){&lt;br /&gt;
      html += &#039;&amp;lt;div class=&amp;quot;gra-note-card&amp;quot; data-gra-id=&amp;quot;&#039;+esc(n.id)+&#039;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;div class=&amp;quot;gra-card-header&amp;quot;&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;span class=&amp;quot;gra-icon gra-icon-bookmark&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;div class=&amp;quot;gra-card-meta&amp;quot;&amp;gt;&#039;&lt;br /&gt;
            + (n.ts ? &#039;&amp;lt;div class=&amp;quot;gra-card-ts&amp;quot;&amp;gt;&#039;+esc(fmtTs(n.ts))+&#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039;)&lt;br /&gt;
            + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;button class=&amp;quot;gra-note-del&amp;quot; data-del-id=&amp;quot;&#039;+esc(n.id)+&#039;&amp;quot; title=&amp;quot;Delete&amp;quot;&amp;gt;×&amp;lt;/button&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
            + (n.quote ? &#039;&amp;lt;div class=&amp;quot;gra-card-quote&amp;quot;&amp;gt;&#039;+esc(n.quote)+&#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039;)&lt;br /&gt;
            + &#039;&amp;lt;div class=&amp;quot;gra-card-text&amp;quot;&amp;gt;&#039;+esc(n.text)+&#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    });&lt;br /&gt;
    $paneNotes.html(html);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function deleteNote(id) {&lt;br /&gt;
    _notes = _notes.filter(function(n){ return n.id !== id; });&lt;br /&gt;
    var span = document.querySelector(&#039;[data-gra-id=&amp;quot;&#039;+id+&#039;&amp;quot;].gra-note-highlight&#039;);&lt;br /&gt;
    if (span &amp;amp;&amp;amp; span.parentNode) {&lt;br /&gt;
      var p = span.parentNode;&lt;br /&gt;
      while (span.firstChild) p.insertBefore(span.firstChild, span);&lt;br /&gt;
      p.removeChild(span);&lt;br /&gt;
    }&lt;br /&gt;
    try {&lt;br /&gt;
      var s = JSON.parse(localStorage.getItem(NT_LS_KEY+&#039;_hl&#039;)||&#039;[]&#039;);&lt;br /&gt;
      s = s.filter(function(h){ return h.id !== id; });&lt;br /&gt;
      localStorage.setItem(NT_LS_KEY+&#039;_hl&#039;, JSON.stringify(s));&lt;br /&gt;
    } catch(e){}&lt;br /&gt;
    persistNotes(); renderNoteCards();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function renderBookmarkCards() {&lt;br /&gt;
    if (!_bookmarks.length) {&lt;br /&gt;
      $paneBookmarks.html(&#039;&amp;lt;div class=&amp;quot;gra-empty-state&amp;quot;&amp;gt;No bookmarks yet.&amp;lt;br&amp;gt;Select text and tap 🔖 to save one.&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    var html = &#039;&#039;;&lt;br /&gt;
    _bookmarks.slice().reverse().forEach(function(b){&lt;br /&gt;
      html += &#039;&amp;lt;div class=&amp;quot;gra-bookmark-card&amp;quot; data-gra-id=&amp;quot;&#039;+esc(b.id)+&#039;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;span class=&amp;quot;gra-icon gra-icon-bookmark&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;div class=&amp;quot;gra-bookmark-info&amp;quot;&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;div class=&amp;quot;gra-bookmark-name&amp;quot;&amp;gt;&#039;+esc(b.name)+&#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
            + (b.quote ? &#039;&amp;lt;div class=&amp;quot;gra-bookmark-quote&amp;quot;&amp;gt;&#039;+esc(b.quote)+&#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039;)&lt;br /&gt;
            + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;button class=&amp;quot;gra-bookmark-del&amp;quot; data-del-id=&amp;quot;&#039;+esc(b.id)+&#039;&amp;quot; title=&amp;quot;Remove&amp;quot;&amp;gt;×&amp;lt;/button&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    });&lt;br /&gt;
    $paneBookmarks.html(html);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function scrollToHighlight(id) {&lt;br /&gt;
    var el = document.querySelector(&#039;[data-gra-id=&amp;quot;&#039;+id+&#039;&amp;quot;]&#039;);&lt;br /&gt;
    if (!el) return;&lt;br /&gt;
    el.scrollIntoView({behavior:&#039;smooth&#039;, block:&#039;center&#039;});&lt;br /&gt;
    el.classList.add(&#039;gra-hl-active&#039;);&lt;br /&gt;
    setTimeout(function(){ el.classList.remove(&#039;gra-hl-active&#039;); }, 2000);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function wireEvents() {&lt;br /&gt;
&lt;br /&gt;
    /* Suppress native context menu inside article content (Android/desktop) */&lt;br /&gt;
    document.addEventListener(&#039;contextmenu&#039;, function(e) {&lt;br /&gt;
      var tag = e.target.tagName;&lt;br /&gt;
      if (tag === &#039;INPUT&#039; || tag === &#039;TEXTAREA&#039; || tag === &#039;SELECT&#039;) return;&lt;br /&gt;
      var c = document.querySelector(CONTENT_SEL);&lt;br /&gt;
      if (c &amp;amp;&amp;amp; c.contains(e.target)) e.preventDefault();&lt;br /&gt;
    }, { passive: false });&lt;br /&gt;
&lt;br /&gt;
    /* Desktop mouseup */&lt;br /&gt;
    $(document).on(&#039;mouseup&#039;, function(e){&lt;br /&gt;
      if (e.button !== 0) return;&lt;br /&gt;
      if (_mobile) return;&lt;br /&gt;
      setTimeout(tryShowActions, 20);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    /* Separate timers so mobile + desktop never clobber each other */&lt;br /&gt;
    var _selTimer    = null;  /* desktop debounce */&lt;br /&gt;
    var _mobShowTimer = null; /* mobile show-on-touchend */&lt;br /&gt;
&lt;br /&gt;
    /* Mobile: show fab quickly after finger lifts (selection settled).&lt;br /&gt;
       180ms feels instant while still letting the range stabilise. */&lt;br /&gt;
    document.addEventListener(&#039;touchend&#039;, function(e) {&lt;br /&gt;
      if (!_mobile) return;&lt;br /&gt;
      if ($fab[0] &amp;amp;&amp;amp; $fab[0].contains(e.target)) return;&lt;br /&gt;
      clearTimeout(_mobShowTimer);&lt;br /&gt;
      _mobShowTimer = setTimeout(function() {&lt;br /&gt;
        var sel = window.getSelection();&lt;br /&gt;
        if (!sel || sel.isCollapsed || !sel.toString().trim()) return;&lt;br /&gt;
        tryShowActions();&lt;br /&gt;
      }, 180);&lt;br /&gt;
    }, { passive: true });&lt;br /&gt;
&lt;br /&gt;
    /* Mobile: only HIDE the fab when selection is cleared while it&#039;s visible.&lt;br /&gt;
       (Reposition isn&#039;t needed now that the bar is docked, and re-running&lt;br /&gt;
       showFab here was causing the lag/flicker.) */&lt;br /&gt;
    document.addEventListener(&#039;selectionchange&#039;, function() {&lt;br /&gt;
      if (!_mobile) return;&lt;br /&gt;
      if (!$fab.hasClass(&#039;gra-fab-visible&#039;)) return;&lt;br /&gt;
      var sel = window.getSelection();&lt;br /&gt;
      if (!sel || sel.isCollapsed || !sel.toString().trim()) {&lt;br /&gt;
        clearTimeout(_mobShowTimer);&lt;br /&gt;
        hideActions();&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    /* selectionchange debounced (desktop only) */&lt;br /&gt;
    document.addEventListener(&#039;selectionchange&#039;, function() {&lt;br /&gt;
      if (_mobile) return;&lt;br /&gt;
      _selVersion++;&lt;br /&gt;
      clearTimeout(_selTimer);&lt;br /&gt;
      var v = _selVersion;&lt;br /&gt;
      _selTimer = setTimeout(function(){&lt;br /&gt;
        if (v !== _selVersion) return;&lt;br /&gt;
        if (_fabSelVer === v) return;&lt;br /&gt;
        tryShowActions();&lt;br /&gt;
      }, 600);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    /* ── KEY FIX: fab touchstart sets flag to prevent hideActions ── */&lt;br /&gt;
    $fab[0].addEventListener(&#039;touchstart&#039;, function(e) {&lt;br /&gt;
      _fabTouched = true;&lt;br /&gt;
      /* Don&#039;t propagate to document handler */&lt;br /&gt;
      e.stopPropagation();&lt;br /&gt;
    }, { passive: true });&lt;br /&gt;
&lt;br /&gt;
    /* Click outside → hide actions (blocked if fab was touched) */&lt;br /&gt;
    $(document).on(&#039;mousedown touchstart&#039;, function(e){&lt;br /&gt;
      if (_fabTouched) { _fabTouched = false; return; }&lt;br /&gt;
      var t = e.target;&lt;br /&gt;
      if ($fab[0]        &amp;amp;&amp;amp; $fab[0].contains(t))        return;&lt;br /&gt;
      if ($fbComposer[0] &amp;amp;&amp;amp; $fbComposer[0].contains(t)) return;&lt;br /&gt;
      if ($ntComposer[0] &amp;amp;&amp;amp; $ntComposer[0].contains(t)) return;&lt;br /&gt;
      if ($bmComposer[0] &amp;amp;&amp;amp; $bmComposer[0].contains(t)) return;&lt;br /&gt;
      hideActions();&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    /* ── FAB buttons — use touchend for mobile, click for desktop ── */&lt;br /&gt;
    function fabAction(btnId, action) {&lt;br /&gt;
      var el = document.getElementById(btnId);&lt;br /&gt;
      if (!el) return;&lt;br /&gt;
      /* touchend: fires before document touchstart clears _selRange */&lt;br /&gt;
      el.addEventListener(&#039;touchend&#039;, function(e) {&lt;br /&gt;
        e.preventDefault();&lt;br /&gt;
        e.stopPropagation();&lt;br /&gt;
        if (!_selRange &amp;amp;&amp;amp; !reCaptureFromDOM()) return;&lt;br /&gt;
        action();&lt;br /&gt;
      }, { passive: false });&lt;br /&gt;
      /* click: for desktop */&lt;br /&gt;
      el.addEventListener(&#039;click&#039;, function(e) {&lt;br /&gt;
        e.preventDefault();&lt;br /&gt;
        e.stopPropagation();&lt;br /&gt;
        if (!_selRange &amp;amp;&amp;amp; !reCaptureFromDOM()) return;&lt;br /&gt;
        action();&lt;br /&gt;
      });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    fabAction(&#039;gra-fab-note&#039;,     openNoteComposer);&lt;br /&gt;
    fabAction(&#039;gra-fab-bookmark&#039;, openBookmarkComposer);&lt;br /&gt;
    fabAction(&#039;gra-fab-feedback&#039;, openFeedbackComposer);&lt;br /&gt;
&lt;br /&gt;
    document.getElementById(&#039;gra-fab-search&#039;).addEventListener(&#039;touchend&#039;, function(e) {&lt;br /&gt;
      e.preventDefault(); e.stopPropagation();&lt;br /&gt;
      var q = _selText;&lt;br /&gt;
      hideActions();&lt;br /&gt;
      _selRange = null; _selText = &#039;&#039;; _selRect = null;&lt;br /&gt;
      if (q &amp;amp;&amp;amp; window.showSearchDialog) { window.showSearchDialog(q); }&lt;br /&gt;
    }, { passive: false });&lt;br /&gt;
    document.getElementById(&#039;gra-fab-search&#039;).addEventListener(&#039;click&#039;, function(e) {&lt;br /&gt;
      e.preventDefault(); e.stopPropagation();&lt;br /&gt;
      var q = _selText;&lt;br /&gt;
      hideActions();&lt;br /&gt;
      _selRange = null; _selText = &#039;&#039;; _selRect = null;&lt;br /&gt;
      if (q &amp;amp;&amp;amp; window.showSearchDialog) { window.showSearchDialog(q); }&lt;br /&gt;
      else if (q) { $(document).trigger($.Event(&#039;keydown&#039;, {ctrlKey:true, key:&#039;k&#039;, keyCode:75})); }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    /* ── Dismiss button: hide toolbar + clear selection (mobile) ── */&lt;br /&gt;
    (function () {&lt;br /&gt;
      var dismissEl = document.getElementById(&#039;gra-fab-dismiss&#039;);&lt;br /&gt;
      if (!dismissEl) return;&lt;br /&gt;
      function doDismiss(e) {&lt;br /&gt;
        e.preventDefault(); e.stopPropagation();&lt;br /&gt;
        hideActions();&lt;br /&gt;
        _selRange = null; _selText = &#039;&#039;; _selRect = null;&lt;br /&gt;
        if (window.getSelection) {&lt;br /&gt;
          var s = window.getSelection();&lt;br /&gt;
          if (s &amp;amp;&amp;amp; s.removeAllRanges) s.removeAllRanges();&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      dismissEl.addEventListener(&#039;touchend&#039;, doDismiss, { passive: false });&lt;br /&gt;
      dismissEl.addEventListener(&#039;click&#039;, doDismiss);&lt;br /&gt;
    }());&lt;br /&gt;
&lt;br /&gt;
    /* Feedback composer */&lt;br /&gt;
    $fbIssueType.on(&#039;change&#039;, function(){ $fbSubmit.prop(&#039;disabled&#039;, !$(this).val()); });&lt;br /&gt;
    $(&#039;#gra-fb-cancel, #gra-fb-close&#039;).on(&#039;click&#039;, closeFeedbackComposer);&lt;br /&gt;
    $fbSubmit.on(&#039;click&#039;, submitFeedback);&lt;br /&gt;
    $fbText.on(&#039;keydown&#039;, function(e){ if(e.key===&#039;Escape&#039;) closeFeedbackComposer(); });&lt;br /&gt;
&lt;br /&gt;
    /* Note composer */&lt;br /&gt;
    $ntInput.on(&#039;input&#039;, function(){ $ntSubmit.prop(&#039;disabled&#039;, !$(this).val().trim()); });&lt;br /&gt;
    $(&#039;#gra-nt-cancel&#039;).on(&#039;click&#039;, closeNoteComposer);&lt;br /&gt;
    $ntSubmit.on(&#039;click&#039;, submitNote);&lt;br /&gt;
    $ntInput.on(&#039;keydown&#039;, function(e){&lt;br /&gt;
      if ((e.ctrlKey||e.metaKey) &amp;amp;&amp;amp; e.key===&#039;Enter&#039;) submitNote();&lt;br /&gt;
      if (e.key===&#039;Escape&#039;) closeNoteComposer();&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    /* Bookmark composer */&lt;br /&gt;
    $(&#039;#gra-bm-cancel&#039;).on(&#039;click&#039;, closeBookmarkComposer);&lt;br /&gt;
    $bmSubmit.on(&#039;click&#039;, submitBookmark);&lt;br /&gt;
    $bmInput.on(&#039;keydown&#039;, function(e){&lt;br /&gt;
      if (e.key===&#039;Enter&#039;) submitBookmark();&lt;br /&gt;
      if (e.key===&#039;Escape&#039;) closeBookmarkComposer();&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    /* Panel */&lt;br /&gt;
    $(&#039;#gra-panel-close&#039;).on(&#039;click&#039;, closePanel);&lt;br /&gt;
    $backdrop.on(&#039;click touchend&#039;, function(e){&lt;br /&gt;
      e.preventDefault();&lt;br /&gt;
      if ($fbComposer.hasClass(&#039;gra-composer-visible&#039;)) closeFeedbackComposer();&lt;br /&gt;
      else if ($ntComposer.hasClass(&#039;gra-composer-visible&#039;)) closeNoteComposer();&lt;br /&gt;
      else if ($bmComposer.hasClass(&#039;gra-composer-visible&#039;)) closeBookmarkComposer();&lt;br /&gt;
      else closePanel();&lt;br /&gt;
    });&lt;br /&gt;
    $tabNotes.on(&#039;click&#039;, function(){ switchTab(&#039;notes&#039;); });&lt;br /&gt;
    $tabBookmarks.on(&#039;click&#039;, function(){ switchTab(&#039;bookmarks&#039;); });&lt;br /&gt;
&lt;br /&gt;
    $paneNotes.on(&#039;click&#039;, &#039;.gra-note-card&#039;, function(e){&lt;br /&gt;
      if ($(e.target).hasClass(&#039;gra-note-del&#039;)) return;&lt;br /&gt;
      var id = $(this).attr(&#039;data-gra-id&#039;);&lt;br /&gt;
      if (id) { closePanel(); scrollToHighlight(id); }&lt;br /&gt;
    });&lt;br /&gt;
    $paneNotes.on(&#039;click&#039;, &#039;.gra-note-del&#039;, function(e){&lt;br /&gt;
      e.stopPropagation();&lt;br /&gt;
      var id = $(this).attr(&#039;data-del-id&#039;);&lt;br /&gt;
      if (id) deleteNote(id);&lt;br /&gt;
    });&lt;br /&gt;
    $paneBookmarks.on(&#039;click&#039;, &#039;.gra-bookmark-card&#039;, function(e){&lt;br /&gt;
      if ($(e.target).hasClass(&#039;gra-bookmark-del&#039;)) return;&lt;br /&gt;
      var id = $(this).attr(&#039;data-gra-id&#039;);&lt;br /&gt;
      if (id) { closePanel(); scrollToHighlight(id); }&lt;br /&gt;
    });&lt;br /&gt;
    $paneBookmarks.on(&#039;click&#039;, &#039;.gra-bookmark-del&#039;, function(e){&lt;br /&gt;
      e.stopPropagation();&lt;br /&gt;
      var id = $(this).attr(&#039;data-del-id&#039;);&lt;br /&gt;
      if (id) deleteBookmark(id);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    $(CONTENT_SEL).on(&#039;click&#039;, &#039;.gra-note-highlight&#039;, function(){&lt;br /&gt;
      var id = $(this).attr(&#039;data-gra-id&#039;);&lt;br /&gt;
      openPanel(&#039;notes&#039;);&lt;br /&gt;
      setTimeout(function(){&lt;br /&gt;
        var $card = $paneNotes.find(&#039;[data-gra-id=&amp;quot;&#039;+id+&#039;&amp;quot;]&#039;);&lt;br /&gt;
        if ($card.length) {&lt;br /&gt;
          $card.addClass(&#039;gra-card-active&#039;);&lt;br /&gt;
          $card[0].scrollIntoView({behavior:&#039;smooth&#039;, block:&#039;nearest&#039;});&lt;br /&gt;
          setTimeout(function(){ $card.removeClass(&#039;gra-card-active&#039;); }, 2000);&lt;br /&gt;
        }&lt;br /&gt;
      }, 100);&lt;br /&gt;
    });&lt;br /&gt;
    $(CONTENT_SEL).on(&#039;click&#039;, &#039;.gra-bookmark-highlight&#039;, function(){&lt;br /&gt;
      var id = $(this).attr(&#039;data-gra-id&#039;);&lt;br /&gt;
      openPanel(&#039;bookmarks&#039;);&lt;br /&gt;
      setTimeout(function(){&lt;br /&gt;
        var $card = $paneBookmarks.find(&#039;[data-gra-id=&amp;quot;&#039;+id+&#039;&amp;quot;]&#039;);&lt;br /&gt;
        if ($card.length) $card[0].scrollIntoView({behavior:&#039;smooth&#039;, block:&#039;nearest&#039;});&lt;br /&gt;
      }, 100);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    $(document).on(&#039;keydown&#039;, function(e){&lt;br /&gt;
      if (e.key !== &#039;Escape&#039;) return;&lt;br /&gt;
      if ($fbComposer.hasClass(&#039;gra-composer-visible&#039;)) closeFeedbackComposer();&lt;br /&gt;
      else if ($ntComposer.hasClass(&#039;gra-composer-visible&#039;)) closeNoteComposer();&lt;br /&gt;
      else if ($bmComposer.hasClass(&#039;gra-composer-visible&#039;)) closeBookmarkComposer();&lt;br /&gt;
      else closePanel();&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function persistNoteHighlight(id, quote) {&lt;br /&gt;
    try {&lt;br /&gt;
      var s = JSON.parse(localStorage.getItem(NT_LS_KEY+&#039;_hl&#039;)||&#039;[]&#039;);&lt;br /&gt;
      s = s.filter(function(h){ return h.id !== id; });&lt;br /&gt;
      s.push({id:id, quote:quote});&lt;br /&gt;
      localStorage.setItem(NT_LS_KEY+&#039;_hl&#039;, JSON.stringify(s));&lt;br /&gt;
    } catch(e){}&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function restoreNoteHighlights() {&lt;br /&gt;
    var s = [];&lt;br /&gt;
    try { s = JSON.parse(localStorage.getItem(NT_LS_KEY+&#039;_hl&#039;)||&#039;[]&#039;); } catch(e){}&lt;br /&gt;
    s.forEach(function(h){&lt;br /&gt;
      if (!h.quote || !h.id) return;&lt;br /&gt;
      if (document.querySelector(&#039;[data-gra-id=&amp;quot;&#039;+h.id+&#039;&amp;quot;].gra-note-highlight&#039;)) return;&lt;br /&gt;
      var needle = h.quote.replace(/…$/,&#039;&#039;).trim().slice(0,80);&lt;br /&gt;
      if (!needle) return;&lt;br /&gt;
      var range = findTextInContent(document.querySelector(CONTENT_SEL), needle);&lt;br /&gt;
      if (!range) return;&lt;br /&gt;
      var sp = document.createElement(&#039;span&#039;);&lt;br /&gt;
      sp.className = &#039;gra-note-highlight&#039;;&lt;br /&gt;
      sp.setAttribute(&#039;data-gra-id&#039;, h.id);&lt;br /&gt;
      try { range.surroundContents(sp); } catch(e){}&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function restoreBookmarkHighlights() {&lt;br /&gt;
    _bookmarks.forEach(function(b){&lt;br /&gt;
      if (!b.quote) return;&lt;br /&gt;
      if (document.querySelector(&#039;[data-gra-id=&amp;quot;&#039;+b.id+&#039;&amp;quot;].gra-bookmark-highlight&#039;)) return;&lt;br /&gt;
      var needle = b.quote.replace(/…$/,&#039;&#039;).trim().slice(0,60);&lt;br /&gt;
      if (!needle) return;&lt;br /&gt;
      var found = findTextInContent(document.querySelector(CONTENT_SEL), needle);&lt;br /&gt;
      if (!found) return;&lt;br /&gt;
      var sp = document.createElement(&#039;span&#039;);&lt;br /&gt;
      sp.className = &#039;gra-bookmark-highlight&#039;;&lt;br /&gt;
      sp.setAttribute(&#039;data-gra-id&#039;, b.id);&lt;br /&gt;
      sp.setAttribute(&#039;data-gra-name&#039;, b.name);&lt;br /&gt;
      try { found.surroundContents(sp); } catch(e){}&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function findTextInContent(root, needle) {&lt;br /&gt;
    if (!root || !needle) return null;&lt;br /&gt;
    var text = root.textContent || &#039;&#039;;&lt;br /&gt;
    var idx  = text.indexOf(needle);&lt;br /&gt;
    if (idx &amp;lt; 0) return null;&lt;br /&gt;
    var iter = document.createNodeIterator(root, NodeFilter.SHOW_TEXT, null, false);&lt;br /&gt;
    var pos = 0, node, startNode, startOffset, endNode, endOffset;&lt;br /&gt;
    while ((node = iter.nextNode())) {&lt;br /&gt;
      var len = node.nodeValue.length;&lt;br /&gt;
      if (!startNode &amp;amp;&amp;amp; pos + len &amp;gt; idx) { startNode = node; startOffset = idx - pos; }&lt;br /&gt;
      var endIdx = idx + needle.length;&lt;br /&gt;
      if (startNode &amp;amp;&amp;amp; pos + len &amp;gt;= endIdx) { endNode = node; endOffset = endIdx - pos; break; }&lt;br /&gt;
      pos += len;&lt;br /&gt;
    }&lt;br /&gt;
    if (!startNode || !endNode) return null;&lt;br /&gt;
    try {&lt;br /&gt;
      var r = document.createRange();&lt;br /&gt;
      r.setStart(startNode, startOffset);&lt;br /&gt;
      r.setEnd(endNode, endOffset);&lt;br /&gt;
      return r;&lt;br /&gt;
    } catch(e){ return null; }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  $(function() {&lt;br /&gt;
    _mobile = window.innerWidth &amp;lt; 768 || &#039;ontouchstart&#039; in window;&lt;br /&gt;
    window.addEventListener(&#039;resize&#039;, function(){&lt;br /&gt;
      _mobile = window.innerWidth &amp;lt; 768 || &#039;ontouchstart&#039; in window;&lt;br /&gt;
    });&lt;br /&gt;
    buildDom();&lt;br /&gt;
    wireEvents();&lt;br /&gt;
    loadNotes();&lt;br /&gt;
    loadBookmarks();&lt;br /&gt;
    setTimeout(function(){&lt;br /&gt;
      try { restoreNoteHighlights(); } catch(e){}&lt;br /&gt;
      try { restoreBookmarkHighlights(); } catch(e){}&lt;br /&gt;
    }, 500);&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.js&amp;diff=6217</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.js&amp;diff=6217"/>
		<updated>2026-06-12T17:47:52Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* MediaWiki:Common.js — grantha.io  (v7) */&lt;br /&gt;
&lt;br /&gt;
(function () {&lt;br /&gt;
&lt;br /&gt;
    var LS_SCRIPT_KEY = &#039;grantha_reader_script&#039;;&lt;br /&gt;
    var currentScript = &#039;deva&#039;;&lt;br /&gt;
&lt;br /&gt;
    function devanagariToIAST(text) {&lt;br /&gt;
        var CONSONANTS = {&lt;br /&gt;
            &#039;क&#039;: &#039;k&#039;, &#039;ख&#039;: &#039;kh&#039;, &#039;ग&#039;: &#039;g&#039;, &#039;घ&#039;: &#039;gh&#039;, &#039;ङ&#039;: &#039;ṅ&#039;,&lt;br /&gt;
            &#039;च&#039;: &#039;c&#039;, &#039;छ&#039;: &#039;ch&#039;, &#039;ज&#039;: &#039;j&#039;, &#039;झ&#039;: &#039;jh&#039;, &#039;ञ&#039;: &#039;ñ&#039;,&lt;br /&gt;
            &#039;ट&#039;: &#039;ṭ&#039;, &#039;ठ&#039;: &#039;ṭh&#039;, &#039;ड&#039;: &#039;ḍ&#039;, &#039;ढ&#039;: &#039;ḍh&#039;, &#039;ण&#039;: &#039;ṇ&#039;,&lt;br /&gt;
            &#039;त&#039;: &#039;t&#039;, &#039;थ&#039;: &#039;th&#039;, &#039;द&#039;: &#039;d&#039;, &#039;ध&#039;: &#039;dh&#039;, &#039;न&#039;: &#039;n&#039;,&lt;br /&gt;
            &#039;प&#039;: &#039;p&#039;, &#039;फ&#039;: &#039;ph&#039;, &#039;ब&#039;: &#039;b&#039;, &#039;भ&#039;: &#039;bh&#039;, &#039;म&#039;: &#039;m&#039;,&lt;br /&gt;
            &#039;य&#039;: &#039;y&#039;, &#039;र&#039;: &#039;r&#039;, &#039;ल&#039;: &#039;l&#039;, &#039;ळ&#039;: &#039;ḷ&#039;, &#039;व&#039;: &#039;v&#039;,&lt;br /&gt;
            &#039;श&#039;: &#039;ś&#039;, &#039;ष&#039;: &#039;ṣ&#039;, &#039;स&#039;: &#039;s&#039;, &#039;ह&#039;: &#039;h&#039;&lt;br /&gt;
        };&lt;br /&gt;
        var DIACRITICS = {&lt;br /&gt;
            &#039;ा&#039;: &#039;ā&#039;, &#039;ि&#039;: &#039;i&#039;, &#039;ी&#039;: &#039;ī&#039;, &#039;ु&#039;: &#039;u&#039;, &#039;ू&#039;: &#039;ū&#039;,&lt;br /&gt;
            &#039;ृ&#039;: &#039;ṛ&#039;, &#039;ॄ&#039;: &#039;ṝ&#039;, &#039;े&#039;: &#039;e&#039;, &#039;ै&#039;: &#039;ai&#039;, &#039;ो&#039;: &#039;o&#039;, &#039;ौ&#039;: &#039;au&#039;&lt;br /&gt;
        };&lt;br /&gt;
        var VOWELS = {&lt;br /&gt;
            &#039;अ&#039;: &#039;a&#039;, &#039;आ&#039;: &#039;ā&#039;, &#039;इ&#039;: &#039;i&#039;, &#039;ई&#039;: &#039;ī&#039;, &#039;उ&#039;: &#039;u&#039;, &#039;ऊ&#039;: &#039;ū&#039;,&lt;br /&gt;
            &#039;ऋ&#039;: &#039;ṛ&#039;, &#039;ॠ&#039;: &#039;ṝ&#039;, &#039;ए&#039;: &#039;e&#039;, &#039;ऐ&#039;: &#039;ai&#039;, &#039;ओ&#039;: &#039;o&#039;, &#039;औ&#039;: &#039;au&#039;, &#039;ऽ&#039;: &amp;quot;&#039;&amp;quot;&lt;br /&gt;
        };&lt;br /&gt;
        var MISC = {&lt;br /&gt;
            &#039;ं&#039;: &#039;ṃ&#039;, &#039;ः&#039;: &#039;ḥ&#039;, &#039;ँ&#039;: &#039;m̐&#039;, &#039;ॐ&#039;: &#039;oṃ&#039;,&lt;br /&gt;
            &#039;०&#039;: &#039;0&#039;, &#039;१&#039;: &#039;1&#039;, &#039;२&#039;: &#039;2&#039;, &#039;३&#039;: &#039;3&#039;, &#039;४&#039;: &#039;4&#039;,&lt;br /&gt;
            &#039;५&#039;: &#039;5&#039;, &#039;६&#039;: &#039;6&#039;, &#039;७&#039;: &#039;7&#039;, &#039;८&#039;: &#039;8&#039;, &#039;९&#039;: &#039;9&#039;&lt;br /&gt;
        };&lt;br /&gt;
        var HALANTA = &#039;्&#039;;&lt;br /&gt;
        var chars = Array.from(text);&lt;br /&gt;
        var result = &#039;&#039;;&lt;br /&gt;
        var i = 0;&lt;br /&gt;
        while (i &amp;lt; chars.length) {&lt;br /&gt;
            var ch = chars[i];&lt;br /&gt;
            var next = chars[i + 1];&lt;br /&gt;
            if (CONSONANTS[ch]) {&lt;br /&gt;
                var base = CONSONANTS[ch];&lt;br /&gt;
                if (next === HALANTA) { result += base; i += 2; }&lt;br /&gt;
                else if (DIACRITICS[next]) { result += base + DIACRITICS[next]; i += 2; }&lt;br /&gt;
                else if (next === &#039;ं&#039; || next === &#039;ः&#039;) { result += base + &#039;a&#039; + MISC[next]; i += 2; }&lt;br /&gt;
                else { result += base + &#039;a&#039;; i++; }&lt;br /&gt;
            } else if (VOWELS[ch]) { result += VOWELS[ch]; i++; }&lt;br /&gt;
            else if (DIACRITICS[ch]) { result += DIACRITICS[ch]; i++; }&lt;br /&gt;
            else if (MISC[ch]) { result += MISC[ch]; i++; }&lt;br /&gt;
            else { result += ch; i++; }&lt;br /&gt;
        }&lt;br /&gt;
        return result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var SCRIPT_MAP = {&lt;br /&gt;
        kn: {&lt;br /&gt;
            &#039;अ&#039;: &#039;ಅ&#039;, &#039;आ&#039;: &#039;ಆ&#039;, &#039;इ&#039;: &#039;ಇ&#039;, &#039;ई&#039;: &#039;ಈ&#039;, &#039;उ&#039;: &#039;ಉ&#039;, &#039;ऊ&#039;: &#039;ಊ&#039;, &#039;ऋ&#039;: &#039;ಋ&#039;,&lt;br /&gt;
            &#039;ए&#039;: &#039;ಏ&#039;, &#039;ऐ&#039;: &#039;ಐ&#039;, &#039;ओ&#039;: &#039;ಓ&#039;, &#039;औ&#039;: &#039;ಔ&#039;, &#039;ऽ&#039;: &#039;ಽ&#039;,&lt;br /&gt;
            &#039;क&#039;: &#039;ಕ&#039;, &#039;ख&#039;: &#039;ಖ&#039;, &#039;ग&#039;: &#039;ಗ&#039;, &#039;घ&#039;: &#039;ಘ&#039;, &#039;ङ&#039;: &#039;ಙ&#039;,&lt;br /&gt;
            &#039;च&#039;: &#039;ಚ&#039;, &#039;छ&#039;: &#039;ಛ&#039;, &#039;ज&#039;: &#039;ಜ&#039;, &#039;झ&#039;: &#039;ಝ&#039;, &#039;ञ&#039;: &#039;ಞ&#039;,&lt;br /&gt;
            &#039;ट&#039;: &#039;ಟ&#039;, &#039;ठ&#039;: &#039;ಠ&#039;, &#039;ड&#039;: &#039;ಡ&#039;, &#039;ढ&#039;: &#039;ಢ&#039;, &#039;ण&#039;: &#039;ಣ&#039;,&lt;br /&gt;
            &#039;त&#039;: &#039;ತ&#039;, &#039;थ&#039;: &#039;ಥ&#039;, &#039;द&#039;: &#039;ದ&#039;, &#039;ध&#039;: &#039;ಧ&#039;, &#039;न&#039;: &#039;ನ&#039;,&lt;br /&gt;
            &#039;प&#039;: &#039;ಪ&#039;, &#039;फ&#039;: &#039;ಫ&#039;, &#039;ब&#039;: &#039;ಬ&#039;, &#039;भ&#039;: &#039;ಭ&#039;, &#039;म&#039;: &#039;ಮ&#039;,&lt;br /&gt;
            &#039;य&#039;: &#039;ಯ&#039;, &#039;र&#039;: &#039;ರ&#039;, &#039;ल&#039;: &#039;ಲ&#039;, &#039;व&#039;: &#039;ವ&#039;,&lt;br /&gt;
            &#039;श&#039;: &#039;ಶ&#039;, &#039;ष&#039;: &#039;ಷ&#039;, &#039;स&#039;: &#039;ಸ&#039;, &#039;ह&#039;: &#039;ಹ&#039;,&lt;br /&gt;
            &#039;ा&#039;: &#039;ಾ&#039;, &#039;ि&#039;: &#039;ಿ&#039;, &#039;ी&#039;: &#039;ೀ&#039;, &#039;ु&#039;: &#039;ು&#039;, &#039;ू&#039;: &#039;ೂ&#039;,&lt;br /&gt;
            &#039;ृ&#039;: &#039;ೃ&#039;, &#039;े&#039;: &#039;ೇ&#039;, &#039;ै&#039;: &#039;ೈ&#039;, &#039;ो&#039;: &#039;ೋ&#039;, &#039;ौ&#039;: &#039;ೌ&#039;,&lt;br /&gt;
            &#039;ं&#039;: &#039;ಂ&#039;, &#039;ः&#039;: &#039;ಃ&#039;, &#039;्&#039;: &#039;್&#039;,&lt;br /&gt;
            &#039;०&#039;: &#039;೦&#039;, &#039;१&#039;: &#039;೧&#039;, &#039;२&#039;: &#039;೨&#039;, &#039;३&#039;: &#039;೩&#039;, &#039;४&#039;: &#039;೪&#039;,&lt;br /&gt;
            &#039;५&#039;: &#039;೫&#039;, &#039;६&#039;: &#039;೬&#039;, &#039;७&#039;: &#039;೭&#039;, &#039;८&#039;: &#039;೮&#039;, &#039;९&#039;: &#039;೯&#039;&lt;br /&gt;
        },&lt;br /&gt;
        ta: {&lt;br /&gt;
            &#039;अ&#039;: &#039;அ&#039;, &#039;आ&#039;: &#039;ஆ&#039;, &#039;इ&#039;: &#039;இ&#039;, &#039;ई&#039;: &#039;ஈ&#039;, &#039;उ&#039;: &#039;உ&#039;, &#039;ऊ&#039;: &#039;ஊ&#039;,&lt;br /&gt;
            &#039;ऋ&#039;: &#039;ரு&#039;, &#039;ॠ&#039;: &#039;ரூ&#039;,&lt;br /&gt;
            &#039;ए&#039;: &#039;ஏ&#039;, &#039;ऐ&#039;: &#039;ஐ&#039;, &#039;ओ&#039;: &#039;ஓ&#039;, &#039;औ&#039;: &#039;ஔ&#039;,&lt;br /&gt;
            &#039;क&#039;: &#039;க&#039;, &#039;ख&#039;: &#039;க&#039;, &#039;ग&#039;: &#039;க&#039;, &#039;घ&#039;: &#039;க&#039;, &#039;ङ&#039;: &#039;ங&#039;,&lt;br /&gt;
            &#039;च&#039;: &#039;ச&#039;, &#039;छ&#039;: &#039;ச&#039;, &#039;ज&#039;: &#039;ஜ&#039;, &#039;झ&#039;: &#039;ஜ&#039;, &#039;ञ&#039;: &#039;ஞ&#039;,&lt;br /&gt;
            &#039;ட&#039;: &#039;ட&#039;, &#039;ठ&#039;: &#039;ட&#039;, &#039;ड&#039;: &#039;ட&#039;, &#039;ढ&#039;: &#039;ட&#039;, &#039;ண&#039;: &#039;ண&#039;,&lt;br /&gt;
            &#039;त&#039;: &#039;த&#039;, &#039;थ&#039;: &#039;த&#039;, &#039;द&#039;: &#039;த&#039;, &#039;ध&#039;: &#039;த&#039;, &#039;न&#039;: &#039;ந&#039;,&lt;br /&gt;
            &#039;प&#039;: &#039;ப&#039;, &#039;फ&#039;: &#039;ப&#039;, &#039;ब&#039;: &#039;ப&#039;, &#039;भ&#039;: &#039;ப&#039;, &#039;म&#039;: &#039;ம&#039;,&lt;br /&gt;
            &#039;य&#039;: &#039;ய&#039;, &#039;र&#039;: &#039;ர&#039;, &#039;ल&#039;: &#039;ல&#039;, &#039;ळ&#039;: &#039;ழ&#039;, &#039;व&#039;: &#039;வ&#039;,&lt;br /&gt;
            &#039;श&#039;: &#039;ஶ&#039;, &#039;ष&#039;: &#039;ஷ&#039;, &#039;स&#039;: &#039;ஸ&#039;, &#039;ह&#039;: &#039;ஹ&#039;,&lt;br /&gt;
            &#039;ा&#039;: &#039;ா&#039;, &#039;ि&#039;: &#039;ி&#039;, &#039;ी&#039;: &#039;ீ&#039;, &#039;ु&#039;: &#039;ு&#039;, &#039;ू&#039;: &#039;ூ&#039;,&lt;br /&gt;
            &#039;ृ&#039;: &#039;ு&#039;, &#039;ॄ&#039;: &#039;ூ&#039;,&lt;br /&gt;
            &#039;े&#039;: &#039;ே&#039;, &#039;ை&#039;: &#039;ை&#039;, &#039;ो&#039;: &#039;ோ&#039;, &#039;ौ&#039;: &#039;ௌ&#039;,&lt;br /&gt;
            &#039;ं&#039;: &#039;ம்&#039;, &#039;ः&#039;: &#039;:&#039;, &#039;ँ&#039;: &#039;ம்&#039;, &#039;्&#039;: &#039;்&#039;, &#039;ॐ&#039;: &#039;ௐ&#039;, &#039;ऽ&#039;: &#039;ௗ&#039;,&lt;br /&gt;
            &#039;०&#039;: &#039;0&#039;, &#039;१&#039;: &#039;1&#039;, &#039;२&#039;: &#039;2&#039;, &#039;३&#039;: &#039;3&#039;, &#039;४&#039;: &#039;4&#039;,&lt;br /&gt;
            &#039;५&#039;: &#039;5&#039;, &#039;६&#039;: &#039;6&#039;, &#039;७&#039;: &#039;7&#039;, &#039;८&#039;: &#039;8&#039;, &#039;९&#039;: &#039;9&#039;&lt;br /&gt;
        }&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    var PRE = [&lt;br /&gt;
        [/ङ्क/g, &#039;ंक&#039;], [/ङ्ख/g, &#039;ंख&#039;], [/ङ्ग/g, &#039;ंग&#039;], [/ङ्घ/g, &#039;ंघ&#039;],&lt;br /&gt;
        [/ञ्च/g, &#039;ंच&#039;], [/ञ्ज/g, &#039;ंज&#039;], [/ण्ट/g, &#039;ंट&#039;], [/ण्ड/g, &#039;ंड&#039;],&lt;br /&gt;
        [/न्त/g, &#039;ंत&#039;], [/न्द/g, &#039;ंद&#039;], [/म्ब/g, &#039;ंब&#039;], [/म्भ/g, &#039;ंभ&#039;]&lt;br /&gt;
    ];&lt;br /&gt;
&lt;br /&gt;
    function transliterateText(text, script) {&lt;br /&gt;
        if (script === &#039;en&#039;) return devanagariToIAST(text);&lt;br /&gt;
        var map = SCRIPT_MAP[script];&lt;br /&gt;
        if (!map) return text;&lt;br /&gt;
        var t = text;&lt;br /&gt;
        PRE.forEach(function (p) { t = t.replace(p[0], p[1]); });&lt;br /&gt;
        return Array.from(t).map(function (ch) {&lt;br /&gt;
            return map[ch] !== undefined ? map[ch] : ch;&lt;br /&gt;
        }).join(&#039;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var translatableSpans = [];&lt;br /&gt;
&lt;br /&gt;
    function tagTextNodes() {&lt;br /&gt;
        var content = document.querySelector(&#039;.mw-parser-output&#039;);&lt;br /&gt;
        if (content) {&lt;br /&gt;
            var walker = document.createTreeWalker(content, NodeFilter.SHOW_TEXT);&lt;br /&gt;
            var nodes = [];&lt;br /&gt;
            while (walker.nextNode()) nodes.push(walker.currentNode);&lt;br /&gt;
            nodes.forEach(function (node) {&lt;br /&gt;
                var p = node.parentNode;&lt;br /&gt;
                if (!p) return;&lt;br /&gt;
                if (p.hasAttribute &amp;amp;&amp;amp; p.hasAttribute(&#039;data-deva&#039;)) return;&lt;br /&gt;
                if (p.closest) {&lt;br /&gt;
                    if (p.closest(&#039;.gr-controls&#039;)) return;&lt;br /&gt;
                    if (p.closest(&#039;.mw-editsection&#039;)) return;&lt;br /&gt;
                }&lt;br /&gt;
                var orig = node.textContent;&lt;br /&gt;
                if (!orig.trim()) return;&lt;br /&gt;
                var span = document.createElement(&#039;span&#039;);&lt;br /&gt;
                span.setAttribute(&#039;data-deva&#039;, orig);&lt;br /&gt;
                span.textContent = orig;&lt;br /&gt;
                p.replaceChild(span, node);&lt;br /&gt;
                translatableSpans.push(span);&lt;br /&gt;
            });&lt;br /&gt;
        }&lt;br /&gt;
        document.querySelectorAll(&#039;.vector-toc .vector-toc-text&#039;).forEach(function (span) {&lt;br /&gt;
            if (span.hasAttribute(&#039;data-deva&#039;)) return;&lt;br /&gt;
            var orig = span.textContent;&lt;br /&gt;
            if (!orig.trim()) return;&lt;br /&gt;
            span.setAttribute(&#039;data-deva&#039;, orig);&lt;br /&gt;
            translatableSpans.push(span);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function applyScript(script) {&lt;br /&gt;
        currentScript = script;&lt;br /&gt;
        translatableSpans.forEach(function (span) {&lt;br /&gt;
            if (!span.parentNode) return;&lt;br /&gt;
            var orig = span.getAttribute(&#039;data-deva&#039;);&lt;br /&gt;
            if (!orig) return;&lt;br /&gt;
            span.textContent = (script === &#039;deva&#039;)&lt;br /&gt;
                ? orig&lt;br /&gt;
                : transliterateText(orig, script);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function _isNoTocPage() {&lt;br /&gt;
        var pn = (window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get(&#039;wgPageName&#039;)) || &#039;&#039;;&lt;br /&gt;
        return pn === &#039;Main_Page&#039; || /^[A-Za-z0-9_]+:About$/.test(pn);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function renameTocTitle() {&lt;br /&gt;
        if (_isNoTocPage()) return;&lt;br /&gt;
        var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
        if (!toc) return;&lt;br /&gt;
        var titleEl = toc.querySelector(&#039;.vector-toc-title&#039;) || toc.querySelector(&#039;.vector-pinnable-header-label&#039;);&lt;br /&gt;
        if (!titleEl) return;&lt;br /&gt;
        var LABEL = &#039;विषयसूची&#039;;&lt;br /&gt;
        var span = titleEl.querySelector(&#039;.gr-toc-title&#039;);&lt;br /&gt;
        if (!span) {&lt;br /&gt;
            titleEl.innerHTML = &#039;&#039;;&lt;br /&gt;
            span = document.createElement(&#039;span&#039;);&lt;br /&gt;
            span.className = &#039;gr-toc-title&#039;;&lt;br /&gt;
            span.setAttribute(&#039;data-deva&#039;, LABEL);&lt;br /&gt;
            titleEl.appendChild(span);&lt;br /&gt;
            translatableSpans.push(span);&lt;br /&gt;
        }&lt;br /&gt;
        span.textContent = currentScript === &#039;deva&#039; ? LABEL : transliterateText(LABEL, currentScript);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function removeTocBeginning() {&lt;br /&gt;
        if (_isNoTocPage()) return;&lt;br /&gt;
        var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
        if (!toc) return;&lt;br /&gt;
        var el = toc.querySelector(&#039;#vector-toc-beginning&#039;);&lt;br /&gt;
        if (!el) {&lt;br /&gt;
            var items = toc.querySelectorAll(&#039;.vector-toc-list-item&#039;);&lt;br /&gt;
            for (var i = 0; i &amp;lt; items.length; i++) {&lt;br /&gt;
                var a = items[i].querySelector(&#039;a&#039;);&lt;br /&gt;
                if (a) {&lt;br /&gt;
                    var href = a.getAttribute(&#039;href&#039;) || &#039;&#039;;&lt;br /&gt;
                    if (href.indexOf(&#039;#&#039;) === -1) { el = items[i]; break; }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        if (el &amp;amp;&amp;amp; el.parentNode) el.parentNode.removeChild(el);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function expandTocSections() {&lt;br /&gt;
        if (_isNoTocPage()) return;&lt;br /&gt;
        var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
        if (!toc) return;&lt;br /&gt;
        toc.querySelectorAll(&#039;.vector-toc-list-item-collapsed&#039;).forEach(function (li) {&lt;br /&gt;
            li.classList.remove(&#039;vector-toc-list-item-collapsed&#039;);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function injectTocDocNav() {&lt;br /&gt;
        if (_isNoTocPage()) return;&lt;br /&gt;
        var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
        if (!toc) return;&lt;br /&gt;
        if (document.getElementById(&#039;gr-toc-doc-nav&#039;)) return;&lt;br /&gt;
        var artPath = (window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get(&#039;wgArticlePath&#039;)) || &#039;/wiki/$1&#039;;&lt;br /&gt;
        var pageTitle = (window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get(&#039;wgPageName&#039;)) || &#039;&#039;;&lt;br /&gt;
        var teekaPage = document.querySelector(&#039;.gr-teeka-page&#039;);&lt;br /&gt;
        var primarySlug = teekaPage ? (teekaPage.getAttribute(&#039;data-primary&#039;) || &#039;&#039;) : &#039;&#039;;&lt;br /&gt;
        if (!primarySlug) { primarySlug = pageTitle.split(&#039;/&#039;)[0]; }&lt;br /&gt;
        if (!primarySlug) return;&lt;br /&gt;
        function wikiUrl(slug) {&lt;br /&gt;
            if (window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl) return mw.util.getUrl(slug);&lt;br /&gt;
            return artPath.replace(&#039;$1&#039;, encodeURIComponent(slug).replace(/%2F/g, &#039;/&#039;));&lt;br /&gt;
        }&lt;br /&gt;
        var docTitleEl = document.querySelector(&#039;.gr-doc-title&#039;);&lt;br /&gt;
        var hasMoolaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute(&#039;data-has-moola&#039;) === &#039;1&#039;;&lt;br /&gt;
        var hasUllekhaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute(&#039;data-has-ullekha&#039;) === &#039;1&#039;;&lt;br /&gt;
        var showMoolaPage = !teekaPage &amp;amp;&amp;amp; hasMoolaPage;&lt;br /&gt;
        var showMoolaBack = !!teekaPage;&lt;br /&gt;
        var showUllekha = hasUllekhaPage || !!teekaPage;&lt;br /&gt;
        if (!showMoolaPage &amp;amp;&amp;amp; !showMoolaBack &amp;amp;&amp;amp; !showUllekha) return;&lt;br /&gt;
        var nav = document.createElement(&#039;div&#039;);&lt;br /&gt;
        nav.id = &#039;gr-toc-doc-nav&#039;;&lt;br /&gt;
        nav.setAttribute(&#039;class&#039;, &#039;toc-main-links&#039;);&lt;br /&gt;
        function makeBtn(href, label) {&lt;br /&gt;
            var a = document.createElement(&#039;a&#039;);&lt;br /&gt;
            a.href = href;&lt;br /&gt;
            a.setAttribute(&#039;class&#039;, &#039;toc-main-link-item&#039;);&lt;br /&gt;
            var lspan = document.createElement(&#039;span&#039;);&lt;br /&gt;
            lspan.setAttribute(&#039;data-deva&#039;, label);&lt;br /&gt;
            lspan.textContent = (currentScript &amp;amp;&amp;amp; currentScript !== &#039;deva&#039;) ? transliterateText(label, currentScript) : label;&lt;br /&gt;
            translatableSpans.push(lspan);&lt;br /&gt;
            a.appendChild(lspan);&lt;br /&gt;
            a.addEventListener(&#039;mouseover&#039;, function () { this.style.opacity = &#039;0.72&#039;; });&lt;br /&gt;
            a.addEventListener(&#039;mouseout&#039;, function () { this.style.opacity = &#039;1&#039;; });&lt;br /&gt;
            return a;&lt;br /&gt;
        }&lt;br /&gt;
        if (showMoolaPage) nav.appendChild(makeBtn(wikiUrl(primarySlug + &#039;/Moola&#039;), &#039;मूलम्&#039;));&lt;br /&gt;
        if (showMoolaBack) nav.appendChild(makeBtn(wikiUrl(primarySlug), &#039;मूल&#039;));&lt;br /&gt;
        if (showUllekha) nav.appendChild(makeBtn(wikiUrl(primarySlug + &#039;/Ullekha&#039;), &#039;उल्लेख&#039;));&lt;br /&gt;
        var tocContents = toc.querySelector(&#039;.vector-toc-contents&#039;);&lt;br /&gt;
        if (tocContents) toc.insertBefore(nav, tocContents);&lt;br /&gt;
        else toc.appendChild(nav);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var _headingObserver = null;&lt;br /&gt;
&lt;br /&gt;
    function attachHeadingObserver() {&lt;br /&gt;
        if (_isNoTocPage()) return;&lt;br /&gt;
        if (_headingObserver) return;&lt;br /&gt;
        if (!window.IntersectionObserver) return;&lt;br /&gt;
        var ACTIVE_COLOR = &#039;#f57c00&#039;;&lt;br /&gt;
        var _activeId = null;&lt;br /&gt;
        var content = document.querySelector(&#039;.mw-parser-output&#039;);&lt;br /&gt;
        if (!content) return;&lt;br /&gt;
        var headings = Array.from(content.querySelectorAll(&#039;h1[id],h2[id],h3[id],h4[id],h5[id],h6[id]&#039;));&lt;br /&gt;
        if (!headings.length) return;&lt;br /&gt;
        var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
        if (!toc) return;&lt;br /&gt;
        function getTocLink(id) { return toc.querySelector(&#039;a[href=&amp;quot;#&#039; + CSS.escape(id) + &#039;&amp;quot;]&#039;); }&lt;br /&gt;
        function getTocLi(id) { var a = getTocLink(id); return a ? a.closest(&#039;.vector-toc-list-item&#039;) : null; }&lt;br /&gt;
        function clearActive() {&lt;br /&gt;
            toc.querySelectorAll(&#039;.vector-toc-list-item&#039;).forEach(function (li) {&lt;br /&gt;
                li.classList.remove(&#039;vector-toc-list-item-active&#039;);&lt;br /&gt;
                var lnk = li.querySelector(&#039;.vector-toc-link&#039;);&lt;br /&gt;
                if (!lnk) return;&lt;br /&gt;
                lnk.style.removeProperty(&#039;color&#039;);&lt;br /&gt;
                lnk.style.setProperty(&#039;font-weight&#039;, &#039;400&#039;, &#039;important&#039;);&lt;br /&gt;
                lnk.querySelectorAll(&#039;*&#039;).forEach(function (el) { el.style.removeProperty(&#039;color&#039;); el.style.setProperty(&#039;font-weight&#039;, &#039;400&#039;, &#039;important&#039;); });&lt;br /&gt;
            });&lt;br /&gt;
        }&lt;br /&gt;
        function setActive(id) {&lt;br /&gt;
            if (_activeId === id) return;&lt;br /&gt;
            _activeId = id;&lt;br /&gt;
            clearActive();&lt;br /&gt;
            if (!id) return;&lt;br /&gt;
            var li = getTocLi(id);&lt;br /&gt;
            if (!li) return;&lt;br /&gt;
            li.classList.add(&#039;vector-toc-list-item-active&#039;);&lt;br /&gt;
            var hasActiveChild = !!li.querySelector(&#039;.vector-toc-list-item .vector-toc-list-item-active&#039;);&lt;br /&gt;
            if (!hasActiveChild) {&lt;br /&gt;
                var lnk = li.querySelector(&#039;.vector-toc-link&#039;);&lt;br /&gt;
                if (lnk) {&lt;br /&gt;
                    lnk.style.setProperty(&#039;color&#039;, ACTIVE_COLOR, &#039;important&#039;);&lt;br /&gt;
                    lnk.style.setProperty(&#039;font-weight&#039;, &#039;700&#039;, &#039;important&#039;);&lt;br /&gt;
                    lnk.querySelectorAll(&#039;*&#039;).forEach(function (el) { el.style.setProperty(&#039;color&#039;, ACTIVE_COLOR, &#039;important&#039;); el.style.setProperty(&#039;font-weight&#039;, &#039;700&#039;, &#039;important&#039;); });&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            var anc = li.parentNode;&lt;br /&gt;
            while (anc &amp;amp;&amp;amp; anc !== toc) {&lt;br /&gt;
                if (anc.classList) anc.classList.remove(&#039;vector-toc-list-item-collapsed&#039;);&lt;br /&gt;
                if (anc.tagName === &#039;UL&#039; || anc.tagName === &#039;LI&#039;) anc.style.removeProperty(&#039;display&#039;);&lt;br /&gt;
                anc = anc.parentNode;&lt;br /&gt;
            }&lt;br /&gt;
            var sticky = document.querySelector(&#039;.vector-sticky-pinned-container&#039;);&lt;br /&gt;
            var scrollEl = sticky || toc;&lt;br /&gt;
            if (scrollEl.scrollHeight &amp;gt; scrollEl.clientHeight) {&lt;br /&gt;
                var lr = li.getBoundingClientRect();&lt;br /&gt;
                var cr = scrollEl.getBoundingClientRect();&lt;br /&gt;
                if (lr.top &amp;lt; cr.top + 8 || lr.bottom &amp;gt; cr.bottom - 8) {&lt;br /&gt;
                    scrollEl.scrollTop += lr.top - cr.top - scrollEl.clientHeight / 2 + li.offsetHeight / 2;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        var _visible = new Set();&lt;br /&gt;
        _headingObserver = new IntersectionObserver(function (entries) {&lt;br /&gt;
            entries.forEach(function (entry) {&lt;br /&gt;
                if (entry.isIntersecting) _visible.add(entry.target.id);&lt;br /&gt;
                else _visible.delete(entry.target.id);&lt;br /&gt;
            });&lt;br /&gt;
            var topId = null, topY = Infinity;&lt;br /&gt;
            _visible.forEach(function (id) {&lt;br /&gt;
                var el = document.getElementById(id);&lt;br /&gt;
                if (el) { var y = el.getBoundingClientRect().top; if (y &amp;gt;= 0 &amp;amp;&amp;amp; y &amp;lt; topY) { topY = y; topId = id; } }&lt;br /&gt;
            });&lt;br /&gt;
            if (!topId) {&lt;br /&gt;
                var bestY = -Infinity;&lt;br /&gt;
                headings.forEach(function (h) { var y = h.getBoundingClientRect().top; if (y &amp;lt; 0 &amp;amp;&amp;amp; y &amp;gt; bestY) { bestY = y; topId = h.id; } });&lt;br /&gt;
            }&lt;br /&gt;
            setActive(topId || null);&lt;br /&gt;
        }, { rootMargin: &#039;-60px 0px -65% 0px&#039;, threshold: 0 });&lt;br /&gt;
        headings.forEach(function (h) { _headingObserver.observe(h); });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function setupToc() {&lt;br /&gt;
        if (_isNoTocPage()) return;&lt;br /&gt;
        var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
        if (!toc) return;&lt;br /&gt;
        removeTocBeginning();&lt;br /&gt;
        renameTocTitle();&lt;br /&gt;
        expandTocSections();&lt;br /&gt;
        injectTocDocNav();&lt;br /&gt;
        attachHeadingObserver();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function init() {&lt;br /&gt;
        var HIDE_IDS = [&#039;vector-appearance&#039;, &#039;vector-appearance-pinned-container&#039;, &#039;vector-appearance-unpinned-container&#039;];&lt;br /&gt;
        function removeHiddenEls() {&lt;br /&gt;
            HIDE_IDS.forEach(function (id) { var el = document.getElementById(id); if (el &amp;amp;&amp;amp; el.parentNode) el.parentNode.removeChild(el); });&lt;br /&gt;
            var pt = document.getElementById(&#039;vector-page-tools&#039;) || document.querySelector(&#039;.vector-page-tools-pinned-container&#039;);&lt;br /&gt;
            if (pt) pt.querySelectorAll(&#039;[aria-controls=&amp;quot;vector-appearance&amp;quot;]&#039;).forEach(function (el) { if (el.parentNode) el.parentNode.removeChild(el); });&lt;br /&gt;
        }&lt;br /&gt;
        removeHiddenEls();&lt;br /&gt;
        (function detectTeekaMode() {&lt;br /&gt;
            var tp = document.querySelector(&#039;.gr-teeka-page&#039;);&lt;br /&gt;
            if (!tp) return;&lt;br /&gt;
            var primary = tp.getAttribute(&#039;data-primary&#039;) || &#039;&#039;;&lt;br /&gt;
            var artPath = (window.mw &amp;amp;&amp;amp; mw.config.get(&#039;wgArticlePath&#039;)) || &#039;/wiki/$1&#039;;&lt;br /&gt;
            var mainUrl = artPath.replace(&#039;$1&#039;, primary);&lt;br /&gt;
            var refParam = window.location.search.match(/[?&amp;amp;]ref=([01])/);&lt;br /&gt;
            if (refParam) { document.body.classList.add(refParam[1] === &#039;1&#039; ? &#039;gr-ref-mode&#039; : &#039;gr-standalone&#039;); return; }&lt;br /&gt;
            var ref = document.referrer || &#039;&#039;;&lt;br /&gt;
            document.body.classList.add((ref &amp;amp;&amp;amp; primary &amp;amp;&amp;amp; ref.indexOf(mainUrl) !== -1) ? &#039;gr-ref-mode&#039; : &#039;gr-standalone&#039;);&lt;br /&gt;
        }());&lt;br /&gt;
        if (window.MutationObserver) {&lt;br /&gt;
            var hideObs = new MutationObserver(function (mutations) {&lt;br /&gt;
                var dirty = false;&lt;br /&gt;
                mutations.forEach(function (m) { if (m.addedNodes.length) dirty = true; });&lt;br /&gt;
                if (dirty) removeHiddenEls();&lt;br /&gt;
            });&lt;br /&gt;
            hideObs.observe(document.body, { childList: true, subtree: false });&lt;br /&gt;
            setTimeout(function () { hideObs.disconnect(); }, 6000);&lt;br /&gt;
        }&lt;br /&gt;
        var content = document.querySelector(&#039;.mw-parser-output&#039;);&lt;br /&gt;
        var alreadyTagged = content &amp;amp;&amp;amp; content.querySelector(&#039;[data-deva]&#039;);&lt;br /&gt;
        if (!alreadyTagged) { translatableSpans = []; tagTextNodes(); }&lt;br /&gt;
        else {&lt;br /&gt;
            document.querySelectorAll(&#039;.vector-toc .vector-toc-text:not([data-deva])&#039;).forEach(function (span) {&lt;br /&gt;
                var orig = span.textContent; if (!orig.trim()) return;&lt;br /&gt;
                span.setAttribute(&#039;data-deva&#039;, orig); translatableSpans.push(span);&lt;br /&gt;
            });&lt;br /&gt;
        }&lt;br /&gt;
        var saved = (function () { try { return localStorage.getItem(LS_SCRIPT_KEY); } catch (e) { return null; } }());&lt;br /&gt;
        if (saved &amp;amp;&amp;amp; saved !== &#039;deva&#039;) { applyScript(saved); } else { currentScript = &#039;deva&#039;; }&lt;br /&gt;
        setTimeout(setupToc, 200);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    window.addEventListener(&#039;gr-script-change&#039;, function (e) {&lt;br /&gt;
        var script = e &amp;amp;&amp;amp; e.detail &amp;amp;&amp;amp; e.detail.script;&lt;br /&gt;
        if (script) applyScript(script);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    window.addEventListener(&#039;gr-new-content&#039;, function (e) {&lt;br /&gt;
        var container = e &amp;amp;&amp;amp; e.detail &amp;amp;&amp;amp; e.detail.container;&lt;br /&gt;
        if (!container) return;&lt;br /&gt;
        var walker = document.createTreeWalker(container, NodeFilter.SHOW_TEXT);&lt;br /&gt;
        var nodes = [];&lt;br /&gt;
        while (walker.nextNode()) nodes.push(walker.currentNode);&lt;br /&gt;
        nodes.forEach(function (node) {&lt;br /&gt;
            var p = node.parentNode;&lt;br /&gt;
            if (!p || (p.hasAttribute &amp;amp;&amp;amp; p.hasAttribute(&#039;data-deva&#039;))) return;&lt;br /&gt;
            var orig = node.textContent;&lt;br /&gt;
            if (!orig.trim()) return;&lt;br /&gt;
            var span = document.createElement(&#039;span&#039;);&lt;br /&gt;
            span.setAttribute(&#039;data-deva&#039;, orig);&lt;br /&gt;
            span.textContent = currentScript !== &#039;deva&#039; ? transliterateText(orig, currentScript) : orig;&lt;br /&gt;
            p.replaceChild(span, node);&lt;br /&gt;
            translatableSpans.push(span);&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    try {&lt;br /&gt;
        var _grBC = new BroadcastChannel(&#039;gr-script&#039;);&lt;br /&gt;
        _grBC.onmessage = function (e) {&lt;br /&gt;
            var script = e &amp;amp;&amp;amp; e.data &amp;amp;&amp;amp; e.data.script;&lt;br /&gt;
            if (script) { currentScript = script; var sel = document.querySelector(&#039;.gr-script-sel&#039;); if (sel) sel.value = script; applyScript(script); }&lt;br /&gt;
        };&lt;br /&gt;
    } catch (e) { }&lt;br /&gt;
&lt;br /&gt;
    if (window.mw) {&lt;br /&gt;
        mw.hook(&#039;wikipage.content&#039;).add(function () {&lt;br /&gt;
            setTimeout(function () {&lt;br /&gt;
                var content = document.querySelector(&#039;.mw-parser-output&#039;);&lt;br /&gt;
                var alreadyTagged = content &amp;amp;&amp;amp; content.querySelector(&#039;[data-deva]&#039;);&lt;br /&gt;
                if (!alreadyTagged) { translatableSpans = []; tagTextNodes(); }&lt;br /&gt;
                else {&lt;br /&gt;
                    document.querySelectorAll(&#039;.vector-toc .vector-toc-text:not([data-deva])&#039;).forEach(function (span) {&lt;br /&gt;
                        var orig = span.textContent; if (!orig.trim()) return;&lt;br /&gt;
                        span.setAttribute(&#039;data-deva&#039;, orig); translatableSpans.push(span);&lt;br /&gt;
                    });&lt;br /&gt;
                }&lt;br /&gt;
                if (currentScript !== &#039;deva&#039;) applyScript(currentScript);&lt;br /&gt;
                setupToc();&lt;br /&gt;
            }, 150);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) { document.addEventListener(&#039;DOMContentLoaded&#039;, init); }&lt;br /&gt;
    else { init(); }&lt;br /&gt;
&lt;br /&gt;
}());   /* ← end of main IIFE */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Inject &amp;quot;Help&amp;quot; and &amp;quot;About&amp;quot; links into the header ─────────────────&lt;br /&gt;
(function () {&lt;br /&gt;
    function wikiHref(title) {&lt;br /&gt;
        if (window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl) return mw.util.getUrl(title);&lt;br /&gt;
        var ap = (window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get(&#039;wgArticlePath&#039;)) || &#039;/wiki/$1&#039;;&lt;br /&gt;
        return ap.replace(&#039;$1&#039;, title);&lt;br /&gt;
    }&lt;br /&gt;
    var linkStyle = [&#039;color:rgba(255,255,255,0.88)&#039;, &#039;font-size:0.88em&#039;, &#039;font-family:system-ui,sans-serif&#039;, &#039;font-weight:500&#039;, &#039;text-decoration:none&#039;, &#039;padding:4px 10px&#039;, &#039;border-radius:4px&#039;, &#039;margin-right:4px&#039;, &#039;transition:color 0.15s,background 0.15s&#039;, &#039;white-space:nowrap&#039;].join(&#039;;&#039;);&lt;br /&gt;
    function makeHeaderLink(id, href, label) {&lt;br /&gt;
        var a = document.createElement(&#039;a&#039;);&lt;br /&gt;
        a.id = id; a.href = href; a.textContent = label; a.style.cssText = linkStyle;&lt;br /&gt;
        a.addEventListener(&#039;mouseover&#039;, function () { this.style.color = &#039;#fff&#039;; this.style.background = &#039;rgba(255,255,255,0.12)&#039;; });&lt;br /&gt;
        a.addEventListener(&#039;mouseout&#039;, function () { this.style.color = &#039;rgba(255,255,255,0.88)&#039;; this.style.background = &#039;transparent&#039;; });&lt;br /&gt;
        return a;&lt;br /&gt;
    }&lt;br /&gt;
    function injectHeaderLinks() {&lt;br /&gt;
        if (document.getElementById(&#039;gr-about-link&#039;)) return;&lt;br /&gt;
        var headerEnd = document.querySelector(&#039;.vector-header-end&#039;) || document.querySelector(&#039;#vector-user-links&#039;) || document.querySelector(&#039;.mw-header&#039;);&lt;br /&gt;
        if (!headerEnd) return;&lt;br /&gt;
        var helpLink = makeHeaderLink(&#039;gr-help-link&#039;, wikiHref(&#039;My_wiki:Help&#039;), &#039;Help&#039;);&lt;br /&gt;
        var aboutLink = makeHeaderLink(&#039;gr-about-link&#039;, wikiHref(&#039;My_wiki:About&#039;), &#039;About&#039;);&lt;br /&gt;
&lt;br /&gt;
        var userName = window.mw ? mw.config.get(&#039;wgUserName&#039;) : null;&lt;br /&gt;
        var isAnon = !userName || (window.mw &amp;amp;&amp;amp; mw.config.get(&#039;wgUserId&#039;) === null);&lt;br /&gt;
&lt;br /&gt;
        // Build the trailing auth element (Login link for anon, dropdown for logged-in)&lt;br /&gt;
        var authEl = null;&lt;br /&gt;
        if (isAnon) {&lt;br /&gt;
            if (!document.getElementById(&#039;gr-header-login&#039;)) {&lt;br /&gt;
                authEl = makeHeaderLink(&#039;gr-header-login&#039;, wikiHref(&#039;Special:UserLogin&#039;), &#039;Login&#039;);&lt;br /&gt;
            }&lt;br /&gt;
        } else if (!document.getElementById(&#039;gr-header-user&#039;)) {&lt;br /&gt;
            authEl = buildHeaderUserDropdown(userName);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var ul = document.querySelector(&#039;.vector-user-links&#039;) || document.querySelector(&#039;#pt-userpage&#039;);&lt;br /&gt;
        if (ul &amp;amp;&amp;amp; ul.parentNode === headerEnd) {&lt;br /&gt;
            if (authEl) headerEnd.insertBefore(authEl, ul);&lt;br /&gt;
            headerEnd.insertBefore(aboutLink, authEl || ul);&lt;br /&gt;
            headerEnd.insertBefore(helpLink, aboutLink);&lt;br /&gt;
        } else {&lt;br /&gt;
            headerEnd.appendChild(helpLink);&lt;br /&gt;
            headerEnd.appendChild(aboutLink);&lt;br /&gt;
            if (authEl) headerEnd.appendChild(authEl);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function buildHeaderUserDropdown(userName) {&lt;br /&gt;
        var wrap = document.createElement(&#039;div&#039;);&lt;br /&gt;
        wrap.id = &#039;gr-header-user&#039;;&lt;br /&gt;
        wrap.style.cssText = &#039;position:relative;display:inline-block;margin-right:4px;&#039;;&lt;br /&gt;
&lt;br /&gt;
        var trigger = document.createElement(&#039;button&#039;);&lt;br /&gt;
        trigger.id = &#039;gr-header-user-trigger&#039;;&lt;br /&gt;
        trigger.type = &#039;button&#039;;&lt;br /&gt;
        trigger.setAttribute(&#039;aria-haspopup&#039;, &#039;true&#039;);&lt;br /&gt;
        trigger.setAttribute(&#039;aria-expanded&#039;, &#039;false&#039;);&lt;br /&gt;
        trigger.style.cssText = [&lt;br /&gt;
            &#039;display:inline-flex&#039;, &#039;align-items:center&#039;, &#039;gap:5px&#039;,&lt;br /&gt;
            &#039;color:rgba(255,255,255,0.88)&#039;, &#039;font-size:0.88em&#039;,&lt;br /&gt;
            &#039;font-family:system-ui,sans-serif&#039;, &#039;font-weight:500&#039;,&lt;br /&gt;
            &#039;background:transparent&#039;, &#039;border:none&#039;, &#039;cursor:pointer&#039;,&lt;br /&gt;
            &#039;padding:4px 10px&#039;, &#039;border-radius:4px&#039;, &#039;white-space:nowrap&#039;,&lt;br /&gt;
            &#039;transition:color 0.15s,background 0.15s&#039;&lt;br /&gt;
        ].join(&#039;;&#039;);&lt;br /&gt;
        trigger.innerHTML =&lt;br /&gt;
            &#039;&amp;lt;span&amp;gt;&#039; + userName.replace(/&amp;lt;/g, &#039;&amp;amp;lt;&#039;) + &#039;&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
            &#039;&amp;lt;span id=&amp;quot;gr-header-caret&amp;quot; style=&amp;quot;font-size:0.8em;transition:transform 0.2s;&amp;quot;&amp;gt;\u25be&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
        trigger.addEventListener(&#039;mouseover&#039;, function () { this.style.color = &#039;#fff&#039;; this.style.background = &#039;rgba(255,255,255,0.12)&#039;; });&lt;br /&gt;
        trigger.addEventListener(&#039;mouseout&#039;, function () { if (menu.style.display === &#039;none&#039;) { this.style.color = &#039;rgba(255,255,255,0.88)&#039;; this.style.background = &#039;transparent&#039;; } });&lt;br /&gt;
&lt;br /&gt;
        var menu = document.createElement(&#039;div&#039;);&lt;br /&gt;
        menu.id = &#039;gr-header-user-menu&#039;;&lt;br /&gt;
        menu.setAttribute(&#039;role&#039;, &#039;menu&#039;);&lt;br /&gt;
        menu.style.cssText = [&lt;br /&gt;
            &#039;display:none&#039;, &#039;position:absolute&#039;, &#039;top:100%&#039;, &#039;right:0&#039;, &#039;margin-top:4px&#039;,&lt;br /&gt;
            &#039;min-width:150px&#039;, &#039;background:#fff&#039;, &#039;border-radius:6px&#039;,&lt;br /&gt;
            &#039;box-shadow:0 4px 16px rgba(0,0,0,0.18)&#039;, &#039;overflow:hidden&#039;, &#039;z-index:1000&#039;&lt;br /&gt;
        ].join(&#039;;&#039;);&lt;br /&gt;
&lt;br /&gt;
        var itemStyle = &#039;display:block;padding:10px 16px;font-size:0.9em;color:#2c1810;text-decoration:none;font-family:system-ui,sans-serif;background:#fff;&#039;;&lt;br /&gt;
        function makeMenuItem(href, label, id) {&lt;br /&gt;
            var a = document.createElement(&#039;a&#039;);&lt;br /&gt;
            a.href = href; a.setAttribute(&#039;role&#039;, &#039;menuitem&#039;);&lt;br /&gt;
            a.textContent = label; a.style.cssText = itemStyle;&lt;br /&gt;
            if (id) a.id = id;&lt;br /&gt;
            a.addEventListener(&#039;mouseover&#039;, function () { this.style.background = &#039;#f5efe9&#039;; });&lt;br /&gt;
            a.addEventListener(&#039;mouseout&#039;, function () { this.style.background = &#039;#fff&#039;; });&lt;br /&gt;
            return a;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        menu.appendChild(makeMenuItem(wikiHref(&#039;Special:Profile&#039;), &#039;Profile&#039;));&lt;br /&gt;
        menu.appendChild(makeMenuItem(&#039;#&#039;, &#039;Log out&#039;, &#039;gr-header-logout&#039;));&lt;br /&gt;
&lt;br /&gt;
        function setOpen(open) {&lt;br /&gt;
            menu.style.display = open ? &#039;block&#039; : &#039;none&#039;;&lt;br /&gt;
            trigger.setAttribute(&#039;aria-expanded&#039;, open ? &#039;true&#039; : &#039;false&#039;);&lt;br /&gt;
            var caret = document.getElementById(&#039;gr-header-caret&#039;);&lt;br /&gt;
            if (caret) caret.style.transform = open ? &#039;rotate(180deg)&#039; : &#039;&#039;;&lt;br /&gt;
            if (open) { trigger.style.color = &#039;#fff&#039;; trigger.style.background = &#039;rgba(255,255,255,0.12)&#039;; }&lt;br /&gt;
            else { trigger.style.color = &#039;rgba(255,255,255,0.88)&#039;; trigger.style.background = &#039;transparent&#039;; }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        trigger.addEventListener(&#039;click&#039;, function (e) {&lt;br /&gt;
            e.stopPropagation();&lt;br /&gt;
            setOpen(menu.style.display === &#039;none&#039;);&lt;br /&gt;
        });&lt;br /&gt;
        document.addEventListener(&#039;click&#039;, function (e) {&lt;br /&gt;
            if (!wrap.contains(e.target)) setOpen(false);&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        // Logout: POST with CSRF token (same approach as the desktop dropdown)&lt;br /&gt;
        menu.querySelector(&#039;#gr-header-logout&#039;).addEventListener(&#039;click&#039;, function (e) {&lt;br /&gt;
            e.preventDefault();&lt;br /&gt;
            if (window.mw &amp;amp;&amp;amp; mw.user &amp;amp;&amp;amp; mw.user.tokens) {&lt;br /&gt;
                var t = mw.user.tokens.get(&#039;csrfToken&#039;);&lt;br /&gt;
                if (t) {&lt;br /&gt;
                    var script = (mw.util &amp;amp;&amp;amp; mw.util.wikiScript) ? mw.util.wikiScript() : &#039;/index.php&#039;;&lt;br /&gt;
                    var form = document.createElement(&#039;form&#039;);&lt;br /&gt;
                    form.method = &#039;post&#039;;&lt;br /&gt;
                    form.action = script + &#039;?title=Special:UserLogout&#039;;&lt;br /&gt;
                    form.style.display = &#039;none&#039;;&lt;br /&gt;
                    form.innerHTML =&lt;br /&gt;
                        &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;wpEditToken&amp;quot; value=&amp;quot;&#039; + String(t).replace(/&amp;quot;/g, &#039;&amp;amp;quot;&#039;) + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
                        &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;title&amp;quot; value=&amp;quot;Special:UserLogout&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
                        &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;returnto&amp;quot; value=&amp;quot;Main Page&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
                    document.body.appendChild(form);&lt;br /&gt;
                    form.submit();&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            if (window.mw &amp;amp;&amp;amp; mw.Api) {&lt;br /&gt;
                new mw.Api().postWithToken(&#039;csrf&#039;, { action: &#039;logout&#039; })&lt;br /&gt;
                    .done(function () { location.href = &#039;/Main_Page&#039;; })&lt;br /&gt;
                    .fail(function () { location.href = &#039;/index.php?title=Special:UserLogout&#039;; });&lt;br /&gt;
            } else {&lt;br /&gt;
                location.href = &#039;/index.php?title=Special:UserLogout&#039;;&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        wrap.appendChild(trigger);&lt;br /&gt;
        wrap.appendChild(menu);&lt;br /&gt;
        return wrap;&lt;br /&gt;
    }&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) document.addEventListener(&#039;DOMContentLoaded&#039;, injectHeaderLinks);&lt;br /&gt;
    else injectHeaderLinks();&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Main page: by-Grantha / by-Author toggle ──────────────────────&lt;br /&gt;
(function () {&lt;br /&gt;
    function grHomeView(v) {&lt;br /&gt;
        var gView = document.getElementById(&#039;gr-view-grantha&#039;);&lt;br /&gt;
        var aView = document.getElementById(&#039;gr-view-author&#039;);&lt;br /&gt;
        var gBtn = document.getElementById(&#039;gr-toggle-grantha&#039;);&lt;br /&gt;
        var aBtn = document.getElementById(&#039;gr-toggle-author&#039;);&lt;br /&gt;
        if (!gView || !aView || !gBtn || !aBtn) return;&lt;br /&gt;
        gView.style.display = (v === &#039;grantha&#039;) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
        aView.style.display = (v === &#039;author&#039;) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
        gBtn.className = &#039;gr-toggle-btn&#039; + (v === &#039;grantha&#039; ? &#039; gr-toggle-active&#039; : &#039;&#039;);&lt;br /&gt;
        aBtn.className = &#039;gr-toggle-btn&#039; + (v === &#039;author&#039; ? &#039; gr-toggle-active&#039; : &#039;&#039;);&lt;br /&gt;
        try { localStorage.setItem(&#039;gr_home_view&#039;, v); } catch (e) { }&lt;br /&gt;
    }&lt;br /&gt;
    function initHomeToggle() {&lt;br /&gt;
        var gBtn = document.getElementById(&#039;gr-toggle-grantha&#039;);&lt;br /&gt;
        var aBtn = document.getElementById(&#039;gr-toggle-author&#039;);&lt;br /&gt;
        if (!gBtn || !aBtn) return;&lt;br /&gt;
        gBtn.addEventListener(&#039;click&#039;, function () { grHomeView(&#039;grantha&#039;); });&lt;br /&gt;
        aBtn.addEventListener(&#039;click&#039;, function () { grHomeView(&#039;author&#039;); });&lt;br /&gt;
        [gBtn, aBtn].forEach(function (btn) { btn.addEventListener(&#039;keydown&#039;, function (e) { if (e.key === &#039;Enter&#039; || e.key === &#039; &#039;) btn.click(); }); });&lt;br /&gt;
        var saved; try { saved = localStorage.getItem(&#039;gr_home_view&#039;); } catch (e) { }&lt;br /&gt;
        if (saved === &#039;author&#039;) grHomeView(&#039;author&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) document.addEventListener(&#039;DOMContentLoaded&#039;, initHomeToggle);&lt;br /&gt;
    else initHomeToggle();&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Ullekha reference link handler ─────────────────────────────────&lt;br /&gt;
(function () {&lt;br /&gt;
    function highlightOnArrival() {&lt;br /&gt;
        var search = window.location.search;&lt;br /&gt;
        if (!search) return;&lt;br /&gt;
        var m = search.match(/[?&amp;amp;]hlUllekha=([^&amp;amp;]+)/);&lt;br /&gt;
        if (!m) return;&lt;br /&gt;
        var needle;&lt;br /&gt;
        try { needle = decodeURIComponent(m[1]); } catch (e) { return; }&lt;br /&gt;
        if (!needle || needle.length &amp;lt; 4) return;&lt;br /&gt;
        function doHighlight() {&lt;br /&gt;
            var content = document.querySelector(&#039;.mw-parser-output&#039;);&lt;br /&gt;
            if (!content) return;&lt;br /&gt;
            var snippet = needle.slice(0, 40);&lt;br /&gt;
            var found = false;&lt;br /&gt;
            var spans = content.querySelectorAll(&#039;[data-deva]&#039;);&lt;br /&gt;
            for (var i = 0; i &amp;lt; spans.length &amp;amp;&amp;amp; !found; i++) {&lt;br /&gt;
                var spanEl = spans[i];&lt;br /&gt;
                var orig = spanEl.getAttribute(&#039;data-deva&#039;) || &#039;&#039;;&lt;br /&gt;
                if (orig.indexOf(snippet) === -1) continue;&lt;br /&gt;
                var idx = orig.indexOf(snippet);&lt;br /&gt;
                var hlText = orig.slice(idx, Math.min(idx + needle.length, orig.length));&lt;br /&gt;
                var mark = document.createElement(&#039;mark&#039;);&lt;br /&gt;
                mark.className = &#039;gr-ullekha-highlight&#039;;&lt;br /&gt;
                mark.style.cssText = &#039;background:#fff176;border-radius:2px;padding:0 2px;&#039;;&lt;br /&gt;
                mark.textContent = hlText;&lt;br /&gt;
                var parent = spanEl.parentNode;&lt;br /&gt;
                if (!parent) continue;&lt;br /&gt;
                var before = document.createTextNode(orig.slice(0, idx));&lt;br /&gt;
                var after = document.createTextNode(orig.slice(idx + hlText.length));&lt;br /&gt;
                parent.insertBefore(before, spanEl); parent.insertBefore(mark, spanEl); parent.insertBefore(after, spanEl); parent.removeChild(spanEl);&lt;br /&gt;
                setTimeout(function () { mark.scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; }); }, 100);&lt;br /&gt;
                found = true;&lt;br /&gt;
            }&lt;br /&gt;
            if (!found) {&lt;br /&gt;
                var walker = document.createTreeWalker(content, NodeFilter.SHOW_TEXT);&lt;br /&gt;
                while (walker.nextNode() &amp;amp;&amp;amp; !found) {&lt;br /&gt;
                    var node = walker.currentNode;&lt;br /&gt;
                    var txt = node.textContent || &#039;&#039;;&lt;br /&gt;
                    if (txt.indexOf(snippet) === -1) continue;&lt;br /&gt;
                    var idx2 = txt.indexOf(snippet);&lt;br /&gt;
                    var mark2 = document.createElement(&#039;mark&#039;);&lt;br /&gt;
                    mark2.className = &#039;gr-ullekha-highlight&#039;;&lt;br /&gt;
                    mark2.style.cssText = &#039;background:#fff176;border-radius:2px;padding:0 2px;&#039;;&lt;br /&gt;
                    mark2.textContent = txt.slice(idx2, Math.min(idx2 + needle.length, txt.length));&lt;br /&gt;
                    var p = node.parentNode;&lt;br /&gt;
                    p.insertBefore(document.createTextNode(txt.slice(0, idx2)), node);&lt;br /&gt;
                    p.insertBefore(mark2, node);&lt;br /&gt;
                    p.insertBefore(document.createTextNode(txt.slice(idx2 + mark2.textContent.length)), node);&lt;br /&gt;
                    p.removeChild(node);&lt;br /&gt;
                    setTimeout(function () { mark2.scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; }); }, 100);&lt;br /&gt;
                    found = true;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        doHighlight();&lt;br /&gt;
    }&lt;br /&gt;
    function wireUllekhaLinks() {&lt;br /&gt;
        document.querySelectorAll(&#039;.gr-ullekha-ref-link&#039;).forEach(function (wrap) {&lt;br /&gt;
            var anchor = wrap.getAttribute(&#039;data-anchor&#039;) || &#039;&#039;;&lt;br /&gt;
            var hl = wrap.getAttribute(&#039;data-hl&#039;) || &#039;&#039;;&lt;br /&gt;
            var a = wrap.querySelector(&#039;a&#039;);&lt;br /&gt;
            if (!a) return;&lt;br /&gt;
            var base = a.href.split(&#039;#&#039;)[0];&lt;br /&gt;
            var encoded = encodeURIComponent(hl);&lt;br /&gt;
            a.href = base + (hl ? &#039;?hlUllekha=&#039; + encoded : &#039;&#039;) + (anchor ? &#039;#&#039; + anchor : &#039;&#039;);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) { document.addEventListener(&#039;DOMContentLoaded&#039;, function () { highlightOnArrival(); wireUllekhaLinks(); }); }&lt;br /&gt;
    else { highlightOnArrival(); wireUllekhaLinks(); }&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
/* ── Search result highlight ──────────────────────────────────── */&lt;br /&gt;
/* EXACT REPLACEMENT for the search highlight IIFE in MediaWiki:Common.js.&lt;br /&gt;
 * Only changes from the original working version:&lt;br /&gt;
 *  - Mobile bar: full-width terracotta bottom bar instead of floating pill&lt;br /&gt;
 *  - showDismissBar: guard added (if !count return) to prevent empty bar&lt;br /&gt;
 * Everything else (storeQueryForLink, applyHighlight, wrapMatches) is&lt;br /&gt;
 * identical to the version that was working.&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
&lt;br /&gt;
    function storeQueryForLink(url, query) {&lt;br /&gt;
        try {&lt;br /&gt;
            var a = document.createElement(&#039;a&#039;);&lt;br /&gt;
            a.href = url;&lt;br /&gt;
            sessionStorage.setItem(&#039;gr_search_hl&#039;, JSON.stringify({&lt;br /&gt;
                query: query,&lt;br /&gt;
                pathname: a.pathname&lt;br /&gt;
            }));&lt;br /&gt;
        } catch (e) { }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function applyHighlight() {&lt;br /&gt;
        var stored;&lt;br /&gt;
        try {&lt;br /&gt;
            stored = JSON.parse(sessionStorage.getItem(&#039;gr_search_hl&#039;) || &#039;null&#039;);&lt;br /&gt;
        } catch (e) { return; }&lt;br /&gt;
        if (!stored || !stored.query) return;&lt;br /&gt;
&lt;br /&gt;
        var currentPath = window.location.pathname;&lt;br /&gt;
        var storedPath = stored.pathname || &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
        function normPath(p) { return decodeURIComponent(p).replace(/\/+$/, &#039;&#039;); }&lt;br /&gt;
        if (storedPath &amp;amp;&amp;amp; normPath(storedPath) !== normPath(currentPath)) {&lt;br /&gt;
            try { sessionStorage.removeItem(&#039;gr_search_hl&#039;); } catch (e) { }&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var query = stored.query.trim();&lt;br /&gt;
        if (!query) return;&lt;br /&gt;
&lt;br /&gt;
        try { sessionStorage.removeItem(&#039;gr_search_hl&#039;); } catch (e) { }&lt;br /&gt;
&lt;br /&gt;
        var delays = [0, 200, 600];&lt;br /&gt;
        delays.forEach(function (ms) {&lt;br /&gt;
            setTimeout(function () {&lt;br /&gt;
                if (document.querySelector(&#039;.gr-search-hl&#039;)) return;&lt;br /&gt;
                highlightText(query);&lt;br /&gt;
            }, ms);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function highlightText(query) {&lt;br /&gt;
        var content = document.querySelector(&#039;#mw-content-text .mw-parser-output&#039;);&lt;br /&gt;
        if (!content) return;&lt;br /&gt;
&lt;br /&gt;
        var raw = query.replace(/^&amp;quot;|&amp;quot;$/g, &#039;&#039;).trim();&lt;br /&gt;
        if (!raw) return;&lt;br /&gt;
&lt;br /&gt;
        var patterns = [];&lt;br /&gt;
        patterns.push(escapeRegex(raw));&lt;br /&gt;
        raw.split(/\s+/).forEach(function (w) {&lt;br /&gt;
            if (w.length &amp;gt;= 2) patterns.push(escapeRegex(w));&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        var matched = false;&lt;br /&gt;
        for (var pi = 0; pi &amp;lt; patterns.length; pi++) {&lt;br /&gt;
            var re;&lt;br /&gt;
            try { re = new RegExp(&#039;(&#039; + patterns[pi] + &#039;)&#039;, &#039;gi&#039;); }&lt;br /&gt;
            catch (e) { continue; }&lt;br /&gt;
            var count = wrapMatches(content, re);&lt;br /&gt;
            if (count &amp;gt; 0) { matched = true; break; }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if (!matched) return;&lt;br /&gt;
&lt;br /&gt;
        var first = document.querySelector(&#039;.gr-search-hl&#039;);&lt;br /&gt;
        if (first) {&lt;br /&gt;
            first.scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; });&lt;br /&gt;
            first.classList.add(&#039;gr-search-hl-pulse&#039;);&lt;br /&gt;
            setTimeout(function () { first.classList.remove(&#039;gr-search-hl-pulse&#039;); }, 2000);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        showDismissBar(query);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function escapeRegex(s) {&lt;br /&gt;
        return s.replace(/[.*+?^${}()|[\]\\]/g, &#039;\\$&amp;amp;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function wrapMatches(root, re) {&lt;br /&gt;
        var count = 0;&lt;br /&gt;
        var walker = document.createTreeWalker(&lt;br /&gt;
            root, NodeFilter.SHOW_TEXT, {&lt;br /&gt;
            acceptNode: function (node) {&lt;br /&gt;
                var p = node.parentElement;&lt;br /&gt;
                if (!p) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
                var tag = p.tagName.toUpperCase();&lt;br /&gt;
                if (tag === &#039;SCRIPT&#039; || tag === &#039;STYLE&#039; || tag === &#039;NOSCRIPT&#039;) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
                if (p.classList.contains(&#039;gr-search-hl&#039;)) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
                return NodeFilter.FILTER_ACCEPT;&lt;br /&gt;
            }&lt;br /&gt;
        }, false&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
        var nodes = [];&lt;br /&gt;
        var node;&lt;br /&gt;
        while ((node = walker.nextNode())) nodes.push(node);&lt;br /&gt;
&lt;br /&gt;
        nodes.forEach(function (textNode) {&lt;br /&gt;
            var val = textNode.nodeValue;&lt;br /&gt;
            if (!re.test(val)) return;&lt;br /&gt;
            re.lastIndex = 0;&lt;br /&gt;
&lt;br /&gt;
            var frag = document.createDocumentFragment();&lt;br /&gt;
            var last = 0;&lt;br /&gt;
            var m;&lt;br /&gt;
            while ((m = re.exec(val)) !== null) {&lt;br /&gt;
                if (m.index &amp;gt; last) {&lt;br /&gt;
                    frag.appendChild(document.createTextNode(val.slice(last, m.index)));&lt;br /&gt;
                }&lt;br /&gt;
                var span = document.createElement(&#039;span&#039;);&lt;br /&gt;
                span.className = &#039;gr-search-hl&#039;;&lt;br /&gt;
                span.textContent = m[0];&lt;br /&gt;
                frag.appendChild(span);&lt;br /&gt;
                last = m.index + m[0].length;&lt;br /&gt;
                count++;&lt;br /&gt;
            }&lt;br /&gt;
            if (last &amp;lt; val.length) {&lt;br /&gt;
                frag.appendChild(document.createTextNode(val.slice(last)));&lt;br /&gt;
            }&lt;br /&gt;
            textNode.parentNode.replaceChild(frag, textNode);&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        return count;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function showDismissBar(query) {&lt;br /&gt;
        var existing = document.getElementById(&#039;gr-hl-bar&#039;);&lt;br /&gt;
        if (existing) existing.remove();&lt;br /&gt;
&lt;br /&gt;
        var count = document.querySelectorAll(&#039;.gr-search-hl&#039;).length;&lt;br /&gt;
        if (!count) return;&lt;br /&gt;
&lt;br /&gt;
        var isMob = window.innerWidth &amp;lt; 768 || !!document.getElementById(&#039;mw-mf-viewport&#039;);&lt;br /&gt;
        var bar = document.createElement(&#039;div&#039;);&lt;br /&gt;
        bar.id = &#039;gr-hl-bar&#039;;&lt;br /&gt;
&lt;br /&gt;
        if (isMob) {&lt;br /&gt;
            bar.style.cssText = [&lt;br /&gt;
                &#039;position:fixed&#039;, &#039;bottom:0&#039;, &#039;left:0&#039;, &#039;right:0&#039;,&lt;br /&gt;
                &#039;z-index:10200&#039;, &#039;background:#b5451b&#039;, &#039;color:#fff&#039;,&lt;br /&gt;
                &#039;padding:0&#039;, &#039;display:flex&#039;, &#039;align-items:stretch&#039;,&lt;br /&gt;
                &#039;font-family:system-ui,sans-serif&#039;,&lt;br /&gt;
                &#039;box-shadow:0 -2px 12px rgba(0,0,0,0.25)&#039;, &#039;height:56px&#039;&lt;br /&gt;
            ].join(&#039;;&#039;);&lt;br /&gt;
&lt;br /&gt;
            var mbs = &#039;flex:1;display:flex;flex-direction:column;align-items:center;&#039; +&lt;br /&gt;
                &#039;justify-content:center;background:none;border:none;color:#fff;cursor:pointer;&#039; +&lt;br /&gt;
                &#039;padding:6px 4px;font-family:system-ui,sans-serif;font-size:11px;font-weight:500;&#039; +&lt;br /&gt;
                &#039;gap:3px;-webkit-tap-highlight-color:rgba(0,0,0,0.12);&#039;;&lt;br /&gt;
&lt;br /&gt;
            bar.innerHTML =&lt;br /&gt;
                &#039;&amp;lt;button id=&amp;quot;gr-hl-prev&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;polyline points=&amp;quot;15 18 9 12 15 6&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;span&amp;gt;Prev&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;button id=&amp;quot;gr-hl-next&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;polyline points=&amp;quot;9 18 15 12 9 6&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;span&amp;gt;Next&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;button id=&amp;quot;gr-hl-results&amp;quot; style=&amp;quot;&#039; + mbs + &#039;flex:1.6;border-left:1px solid rgba(255,255,255,0.2);border-right:1px solid rgba(255,255,255,0.2);&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;circle cx=&amp;quot;11&amp;quot; cy=&amp;quot;11&amp;quot; r=&amp;quot;7&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;16.5&amp;quot; y1=&amp;quot;16.5&amp;quot; x2=&amp;quot;22&amp;quot; y2=&amp;quot;22&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;span&amp;gt;&#039; + count + &#039; match&#039; + (count === 1 ? &#039;&#039; : &#039;es&#039;) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;button id=&amp;quot;gr-hl-dismiss&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;line x1=&amp;quot;18&amp;quot; y1=&amp;quot;6&amp;quot; x2=&amp;quot;6&amp;quot; y2=&amp;quot;18&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;6&amp;quot; y1=&amp;quot;6&amp;quot; x2=&amp;quot;18&amp;quot; y2=&amp;quot;18&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;span&amp;gt;Close&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
        } else {&lt;br /&gt;
            bar.style.cssText = [&lt;br /&gt;
                &#039;position:fixed&#039;, &#039;bottom:0&#039;, &#039;left:0&#039;, &#039;right:0&#039;, &#039;z-index:10200&#039;,&lt;br /&gt;
                &#039;background:#b5451b&#039;, &#039;color:#fff&#039;, &#039;padding:10px 16px&#039;,&lt;br /&gt;
                &#039;display:flex&#039;, &#039;align-items:center&#039;, &#039;justify-content:space-between&#039;,&lt;br /&gt;
                &#039;font-family:system-ui,sans-serif&#039;, &#039;font-size:14px&#039;,&lt;br /&gt;
                &#039;box-shadow:0 -2px 8px rgba(0,0,0,0.2)&#039;&lt;br /&gt;
            ].join(&#039;;&#039;);&lt;br /&gt;
&lt;br /&gt;
            var nav = document.createElement(&#039;div&#039;);&lt;br /&gt;
            nav.style.cssText = &#039;display:flex;align-items:center;gap:12px;&#039;;&lt;br /&gt;
            nav.innerHTML =&lt;br /&gt;
                &#039;&amp;lt;span&amp;gt;🔍 &amp;lt;strong&amp;gt;&#039; + escHtml(query) + &#039;&amp;lt;/strong&amp;gt; — &#039; + count + &#039; match&#039; + (count === 1 ? &#039;&#039; : &#039;es&#039;) + &#039;&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;button id=&amp;quot;gr-hl-prev&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;↑ Prev&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;button id=&amp;quot;gr-hl-next&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;↓ Next&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;button id=&amp;quot;gr-hl-results&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;← Results&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
            bar.appendChild(nav);&lt;br /&gt;
&lt;br /&gt;
            var db = document.createElement(&#039;button&#039;);&lt;br /&gt;
            db.id = &#039;gr-hl-dismiss&#039;; db.textContent = &#039;✕ Close&#039;;&lt;br /&gt;
            db.style.cssText = &#039;background:rgba(255,255,255,0.15);border:none;color:#fff;padding:4px 12px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&#039;;&lt;br /&gt;
            bar.appendChild(db);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        document.body.appendChild(bar);&lt;br /&gt;
&lt;br /&gt;
        var hlEls = Array.from(document.querySelectorAll(&#039;.gr-search-hl&#039;));&lt;br /&gt;
        var current = 0;&lt;br /&gt;
&lt;br /&gt;
        function goTo(idx) {&lt;br /&gt;
            hlEls.forEach(function (el) { el.classList.remove(&#039;gr-search-hl-current&#039;); });&lt;br /&gt;
            current = ((idx % hlEls.length) + hlEls.length) % hlEls.length;&lt;br /&gt;
            hlEls[current].classList.add(&#039;gr-search-hl-current&#039;);&lt;br /&gt;
            hlEls[current].scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; });&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function dismiss() { clearHighlights(); bar.remove(); }&lt;br /&gt;
&lt;br /&gt;
        var nb = document.getElementById(&#039;gr-hl-next&#039;);&lt;br /&gt;
        var pb = document.getElementById(&#039;gr-hl-prev&#039;);&lt;br /&gt;
        var rb = document.getElementById(&#039;gr-hl-results&#039;);&lt;br /&gt;
        var db2 = document.getElementById(&#039;gr-hl-dismiss&#039;);&lt;br /&gt;
        if (nb) nb.onclick = function () { goTo(current + 1); };&lt;br /&gt;
        if (pb) pb.onclick = function () { goTo(current - 1); };&lt;br /&gt;
        if (db2) db2.onclick = dismiss;&lt;br /&gt;
        if (rb) rb.onclick = function () {&lt;br /&gt;
            bar.remove(); clearHighlights();&lt;br /&gt;
            if (window.showSearchDialog) window.showSearchDialog(query);&lt;br /&gt;
        };&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function clearHighlights() {&lt;br /&gt;
        document.querySelectorAll(&#039;.gr-search-hl&#039;).forEach(function (span) {&lt;br /&gt;
            var p = span.parentNode; if (!p) return;&lt;br /&gt;
            while (span.firstChild) p.insertBefore(span.firstChild, span);&lt;br /&gt;
            p.removeChild(span);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function escHtml(s) {&lt;br /&gt;
        return String(s).replace(/&amp;amp;/g, &#039;&amp;amp;amp;&#039;).replace(/&amp;lt;/g, &#039;&amp;amp;lt;&#039;).replace(/&amp;gt;/g, &#039;&amp;amp;gt;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function injectHighlightCSS() {&lt;br /&gt;
        if (document.getElementById(&#039;gr-hl-css&#039;)) return;&lt;br /&gt;
        var s = document.createElement(&#039;style&#039;);&lt;br /&gt;
        s.id = &#039;gr-hl-css&#039;;&lt;br /&gt;
        s.textContent = [&lt;br /&gt;
            &#039;.gr-search-hl{background:#fff176;color:#1a1a1a;border-radius:2px;padding:0 1px;box-shadow:0 0 0 1px rgba(181,69,27,0.25);}&#039;,&lt;br /&gt;
            &#039;.gr-search-hl-current{background:#ffb300!important;box-shadow:0 0 0 2px #b5451b!important;}&#039;,&lt;br /&gt;
            &#039;@keyframes gr-hl-pulse{0%{background:#ffb300;}50%{background:#fff176;}100%{background:#fff176;}}&#039;,&lt;br /&gt;
            &#039;.gr-search-hl-pulse{animation:gr-hl-pulse 1.2s ease 2;}&#039;,&lt;br /&gt;
        ].join(&#039;&#039;);&lt;br /&gt;
        document.head.appendChild(s);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    injectHighlightCSS();&lt;br /&gt;
&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) {&lt;br /&gt;
        document.addEventListener(&#039;DOMContentLoaded&#039;, applyHighlight);&lt;br /&gt;
    } else {&lt;br /&gt;
        applyHighlight();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (window.mw) {&lt;br /&gt;
        mw.hook(&#039;wikipage.content&#039;).add(function () {&lt;br /&gt;
            setTimeout(applyHighlight, 100);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    window.grStoreSearchHL = storeQueryForLink;&lt;br /&gt;
&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
/* ═══════════════════════════════════════════════════════════════&lt;br /&gt;
   Mobile addon — only runs on Minerva (mobile) skin&lt;br /&gt;
   ═══════════════════════════════════════════════════════════════ */&lt;br /&gt;
(function () {&lt;br /&gt;
    if (!document.body.classList.contains(&#039;skin-minerva&#039;)) return;&lt;br /&gt;
    function injectCSS() {&lt;br /&gt;
        if (document.getElementById(&#039;gr-mob-css&#039;)) return;&lt;br /&gt;
        var s = document.createElement(&#039;style&#039;);&lt;br /&gt;
        s.id = &#039;gr-mob-css&#039;;&lt;br /&gt;
        s.textContent =&lt;br /&gt;
            &#039;body,#mw-mf-viewport,#mw-mf-page-center{padding-top:0!important;margin-top:0!important;}&#039; +&lt;br /&gt;
            &#039;html,body,#mw-mf-viewport,#mw-mf-page-center{overflow-x:hidden!important;max-width:100vw!important;}&#039; +&lt;br /&gt;
            &#039;header.header-container{background:#b5451b!important;position:sticky!important;top:0!important;z-index:300!important;}&#039; +&lt;br /&gt;
            &#039;.minerva-header{background:#b5451b!important;min-height:54px!important;}&#039; +&lt;br /&gt;
            &#039;.minerva-header .search-toggle,.minerva-header .minerva-user-notifications{display:none!important;}&#039; +&lt;br /&gt;
            &#039;.branding-box a{display:flex!important;align-items:center!important;text-decoration:none!important;max-width:calc(100vw - 80px)!important;}&#039; +&lt;br /&gt;
            &#039;.branding-box a::before{content:&amp;quot;&amp;quot;;display:block;width:30px;height:30px;flex-shrink:0;background:url(&amp;quot;/favicon.png&amp;quot;) center/contain no-repeat;margin-right:8px;}&#039; +&lt;br /&gt;
            &#039;.branding-box a span{color:#fff!important;font-size:16px!important;font-weight:700!important;font-family:system-ui,sans-serif!important;line-height:1.2!important;flex:1 1 auto!important;min-width:0!important;}&#039; +&lt;br /&gt;
            &#039;.minerva-header svg path,.minerva-header svg rect,.minerva-header svg circle{fill:#fff!important;}&#039; +&lt;br /&gt;
            &#039;.minerva-header label{color:#fff!important;}&#039; +&lt;br /&gt;
            &#039;.minerva-tabs,.mw-portlet-associated-pages,.page-actions-menu,#page-secondary-actions,.last-modified-bar,.minerva-anon-talk-link{display:none!important;}&#039; +&lt;br /&gt;
            &#039;#gr-mob-menu-items{display:block!important;}&#039; +&lt;br /&gt;
            &#039;.mw-footer.minerva-footer,.footer-places,.footer-info,.minerva-footer-logo,#footer-places-about,#footer-places-disclaimers,#footer-places-privacy{display:none!important;}&#039; +&lt;br /&gt;
            &#039;#gr-static-bar{position:sticky!important;top:54px!important;z-index:200!important;}&#039; +&lt;br /&gt;
            &#039;.mf-section-0,.mf-section-1,.mf-section-2,.mf-section-3,.mf-section-4,.mf-section-5,.mf-section-6,.mf-section-7,.mf-section-8,.mf-section-9,.mf-section-10{display:block!important;visibility:visible!important;}&#039; +&lt;br /&gt;
            &#039;.collapsible-block{display:block!important;}&#039; +&lt;br /&gt;
            &#039;.section-heading .indicator,.collapsible-heading .indicator{display:none!important;}&#039; +&lt;br /&gt;
            &#039;.section-heading,.collapsible-heading{pointer-events:none!important;}&#039; +&lt;br /&gt;
            &#039;.gr-home-grid{flex-direction:column!important;flex-wrap:nowrap!important;gap:12px!important;width:100%!important;}&#039; +&lt;br /&gt;
            &#039;.gr-home-card{width:100%!important;max-width:100%!important;min-width:unset!important;box-sizing:border-box!important;flex:none!important;}&#039; +&lt;br /&gt;
            &#039;.gr-home-toggle{flex-wrap:wrap!important;}&#039; +&lt;br /&gt;
            &#039;.mw-parser-output{font-size:18px!important;line-height:1.8!important;}&#039; +&lt;br /&gt;
            &#039;.mw-parser-output h2,.mw-parser-output h3{width:100%!important;}&#039; +&lt;br /&gt;
            &#039;.bhashyam-block{margin-left:8px!important;}&#039; +&lt;br /&gt;
            &#039;#footer,.mw-footer,.catlinks,#catlinks{display:none!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-panel{position:fixed!important;top:0!important;left:0!important;bottom:0!important;width:82vw!important;max-width:340px!important;background:#fff!important;z-index:10400!important;box-shadow:4px 0 28px rgba(0,0,0,0.22)!important;overflow-y:auto!important;padding:0 0 40px!important;transform:translateX(-110%)!important;transition:transform 0.26s cubic-bezier(0.4,0,0.2,1)!important;display:block!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-panel.open{transform:translateX(0)!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-backdrop{display:none!important;position:fixed!important;inset:0!important;background:rgba(0,0,0,0.4)!important;z-index:10399!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-backdrop.open{display:block!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-header{position:sticky!important;top:0!important;background:#fff!important;display:flex!important;align-items:center!important;justify-content:space-between!important;padding:16px 16px 12px!important;border-bottom:1px solid #f0ebe6!important;z-index:1!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-title{font-size:13px!important;font-weight:700!important;text-transform:uppercase!important;letter-spacing:0.08em!important;color:#b5451b!important;font-family:system-ui,sans-serif!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-close{background:none!important;border:none!important;font-size:22px!important;color:#999!important;cursor:pointer!important;padding:4px 8px!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-body{padding:12px 16px!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-body a{display:block!important;font-size:16px!important;line-height:1.6!important;color:#2c1810!important;text-decoration:none!important;padding:8px 0!important;border-bottom:1px solid #f5f0ed!important;}&#039;;&lt;br /&gt;
        document.head.appendChild(s);&lt;br /&gt;
    }&lt;br /&gt;
    function expandSections() {&lt;br /&gt;
        document.querySelectorAll(&#039;[class*=&amp;quot;mf-section-&amp;quot;], .collapsible-block&#039;).forEach(function (el) { el.removeAttribute(&#039;hidden&#039;); el.style.setProperty(&#039;display&#039;, &#039;block&#039;, &#039;important&#039;); el.style.setProperty(&#039;visibility&#039;, &#039;visible&#039;, &#039;important&#039;); el.removeAttribute(&#039;aria-hidden&#039;); });&lt;br /&gt;
        document.querySelectorAll(&#039;.section-heading, .collapsible-heading&#039;).forEach(function (el) { el.setAttribute(&#039;aria-expanded&#039;, &#039;true&#039;); el.style.setProperty(&#039;pointer-events&#039;, &#039;none&#039;, &#039;important&#039;); });&lt;br /&gt;
    }&lt;br /&gt;
    function watchSections() {&lt;br /&gt;
        var t = null;&lt;br /&gt;
        var obs = new MutationObserver(function (ms) { if (ms.some(function (m) { return m.attributeName === &#039;hidden&#039;; })) { clearTimeout(t); t = setTimeout(expandSections, 30); } });&lt;br /&gt;
        obs.observe(document.querySelector(&#039;#mw-content-text&#039;) || document.body, { subtree: true, attributes: true, attributeFilter: [&#039;hidden&#039;, &#039;aria-hidden&#039;] });&lt;br /&gt;
    }&lt;br /&gt;
    function watchBodyPadding() {&lt;br /&gt;
        new MutationObserver(function () { if (document.body.style.paddingTop &amp;amp;&amp;amp; document.body.style.paddingTop !== &#039;0px&#039;) document.body.style.paddingTop = &#039;&#039;; }).observe(document.body, { attributes: true, attributeFilter: [&#039;style&#039;] });&lt;br /&gt;
    }&lt;br /&gt;
    function injectMenuLinks() {&lt;br /&gt;
        if (document.getElementById(&#039;gr-mob-menu-items&#039;)) return;&lt;br /&gt;
        var navDrawer = document.querySelector(&#039;.navigation-drawer&#039;);&lt;br /&gt;
        if (!navDrawer) return;&lt;br /&gt;
        var wrap = document.createElement(&#039;div&#039;); wrap.id = &#039;gr-mob-menu-items&#039;; wrap.style.cssText = &#039;width:100%;background:#fff;margin-top:8px;&#039;;&lt;br /&gt;
        var itemStyle = &#039;display:flex;align-items:center;gap:14px;padding:15px 20px;font-size:16px;color:#2c1810;text-decoration:none;font-family:system-ui,sans-serif;border-bottom:1px solid #f0ebe6;background:#fff;&#039;;&lt;br /&gt;
        function makeItem(href, label) { var a = document.createElement(&#039;a&#039;); a.href = href; a.style.cssText = itemStyle; a.innerHTML = &#039;&amp;lt;span&amp;gt;&#039; + label + &#039;&amp;lt;/span&amp;gt;&#039;; return a; }&lt;br /&gt;
        wrap.appendChild(makeItem(&#039;/Main_Page&#039;, &#039;Home&#039;));&lt;br /&gt;
        wrap.appendChild(makeItem(&#039;/My_wiki:Help&#039;, &#039;Help&#039;));&lt;br /&gt;
        wrap.appendChild(makeItem(&#039;/My_wiki:About&#039;, &#039;About&#039;));&lt;br /&gt;
        var userName = window.mw ? mw.config.get(&#039;wgUserName&#039;) : null;&lt;br /&gt;
        if (userName) {&lt;br /&gt;
            wrap.appendChild(makeItem((window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl) ? mw.util.getUrl(&#039;Special:Profile&#039;) : &#039;/Special:Profile&#039;, &#039;Profile&#039;));&lt;br /&gt;
            var la = document.querySelector(&#039;a[href*=&amp;quot;action=logout&amp;quot;]&#039;);&lt;br /&gt;
            wrap.appendChild(makeItem(la ? la.href : &#039;/index.php?title=Special:UserLogout&#039;, &#039;Log out&#039;));&lt;br /&gt;
        }&lt;br /&gt;
        else wrap.appendChild(makeItem(&#039;/index.php?title=Special:UserLogin&#039;, &#039;Log in&#039;));&lt;br /&gt;
        var pageLeft = document.getElementById(&#039;mw-mf-page-left&#039;);&lt;br /&gt;
        if (pageLeft) { while (pageLeft.firstChild) pageLeft.removeChild(pageLeft.firstChild); pageLeft.style.removeProperty(&#039;display&#039;); pageLeft.appendChild(wrap); }&lt;br /&gt;
        else navDrawer.appendChild(wrap);&lt;br /&gt;
    }&lt;br /&gt;
    var _tocDone = false;&lt;br /&gt;
    function initToc() {&lt;br /&gt;
        if (_tocDone) return;&lt;br /&gt;
        var tocList = document.querySelector(&#039;.vector-toc-contents, .vector-toc .vector-toc-list&#039;);&lt;br /&gt;
        if (!tocList || !tocList.querySelector(&#039;li&#039;)) return;&lt;br /&gt;
        _tocDone = true;&lt;br /&gt;
        var bd = document.createElement(&#039;div&#039;); bd.className = &#039;gr-mob-toc-backdrop&#039;; document.body.appendChild(bd);&lt;br /&gt;
        var panel = document.createElement(&#039;div&#039;); panel.className = &#039;gr-mob-toc-panel&#039;;&lt;br /&gt;
        var hdr = document.createElement(&#039;div&#039;); hdr.className = &#039;gr-mob-toc-header&#039;;&lt;br /&gt;
        var ttl = document.createElement(&#039;div&#039;); ttl.className = &#039;gr-mob-toc-title&#039;; ttl.textContent = &#039;विषयसूची&#039;;&lt;br /&gt;
        var cls = document.createElement(&#039;button&#039;); cls.className = &#039;gr-mob-toc-close&#039;; cls.textContent = &#039;✕&#039;;&lt;br /&gt;
        hdr.appendChild(ttl); hdr.appendChild(cls); panel.appendChild(hdr);&lt;br /&gt;
        var body = document.createElement(&#039;div&#039;); body.className = &#039;gr-mob-toc-body&#039;; body.appendChild(tocList.cloneNode(true)); panel.appendChild(body); document.body.appendChild(panel);&lt;br /&gt;
        var btn = document.createElement(&#039;button&#039;); btn.id = &#039;gr-mob-toc-btn&#039;; btn.innerHTML = &#039;☰ &amp;amp;nbsp;Contents&#039;;&lt;br /&gt;
        btn.style.cssText = &#039;position:fixed;bottom:148px;left:16px;z-index:9100;background:#fff;border:1.5px solid #b5451b;border-radius:24px;padding:10px 16px;font-size:15px;font-family:system-ui,sans-serif;color:#b5451b;font-weight:600;box-shadow:0 3px 14px rgba(0,0,0,0.15);cursor:pointer;&#039;;&lt;br /&gt;
        document.body.appendChild(btn);&lt;br /&gt;
        function open() { panel.classList.add(&#039;open&#039;); bd.classList.add(&#039;open&#039;); document.body.style.overflow = &#039;hidden&#039;; }&lt;br /&gt;
        function close() { panel.classList.remove(&#039;open&#039;); bd.classList.remove(&#039;open&#039;); document.body.style.overflow = &#039;&#039;; }&lt;br /&gt;
        btn.onclick = open; cls.onclick = close; bd.onclick = close;&lt;br /&gt;
        body.querySelectorAll(&#039;a&#039;).forEach(function (a) { a.onclick = close; });&lt;br /&gt;
    }&lt;br /&gt;
    function injectMoolaUllekhaLinks() {&lt;br /&gt;
        if (document.getElementById(&#039;gr-mob-doc-nav&#039;)) return;&lt;br /&gt;
        var pageName = (window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get(&#039;wgPageName&#039;)) || &#039;&#039;;&lt;br /&gt;
        if (pageName === &#039;Main_Page&#039; || !pageName) return;&lt;br /&gt;
        function wikiUrl(slug) { if (window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl) return mw.util.getUrl(slug); return ((window.mw &amp;amp;&amp;amp; mw.config.get(&#039;wgArticlePath&#039;)) || &#039;/wiki/$1&#039;).replace(&#039;$1&#039;, encodeURIComponent(slug).replace(/%2F/g, &#039;/&#039;)); }&lt;br /&gt;
        var teekaPage = document.querySelector(&#039;.gr-teeka-page&#039;);&lt;br /&gt;
        var primarySlug = teekaPage ? (teekaPage.getAttribute(&#039;data-primary&#039;) || pageName.split(&#039;/&#039;)[0]) : pageName.split(&#039;/&#039;)[0];&lt;br /&gt;
        var docTitleEl = document.querySelector(&#039;.gr-doc-title&#039;);&lt;br /&gt;
        var hasMoolaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute(&#039;data-has-moola&#039;) === &#039;1&#039;;&lt;br /&gt;
        var hasUllekhaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute(&#039;data-has-ullekha&#039;) === &#039;1&#039;;&lt;br /&gt;
        var showMoolam = !!teekaPage || hasMoolaPage, showUllekha = hasUllekhaPage || !!teekaPage;&lt;br /&gt;
        if (!showMoolam &amp;amp;&amp;amp; !showUllekha) return;&lt;br /&gt;
        var nav = document.createElement(&#039;div&#039;); nav.id = &#039;gr-mob-doc-nav&#039;;&lt;br /&gt;
        nav.style.cssText = &#039;display:flex;gap:10px;padding:10px 16px 8px;background:#fdf8f5;border-bottom:1px solid #f0e0d6;font-family:system-ui,sans-serif;&#039;;&lt;br /&gt;
        function makeLink(href, label) { var a = document.createElement(&#039;a&#039;); a.href = href; a.textContent = label; a.style.cssText = &#039;display:inline-flex;align-items:center;padding:5px 16px;border-radius:20px;background:#fff;border:1.5px solid #e8cfc4;color:#b5451b;font-size:14px;font-weight:600;text-decoration:none;&#039;; return a; }&lt;br /&gt;
        if (teekaPage) nav.appendChild(makeLink(wikiUrl(primarySlug), &#039;मूल&#039;));&lt;br /&gt;
        else if (hasMoolaPage) nav.appendChild(makeLink(wikiUrl(primarySlug + &#039;/Moola&#039;), &#039;मूलम्&#039;));&lt;br /&gt;
        if (showUllekha) nav.appendChild(makeLink(wikiUrl(primarySlug + &#039;/Ullekha&#039;), &#039;उल्लेख&#039;));&lt;br /&gt;
        var h1 = document.getElementById(&#039;firstHeading&#039;) || document.querySelector(&#039;.page-heading, h1.firstHeading, .mw-first-heading&#039;);&lt;br /&gt;
        if (h1 &amp;amp;&amp;amp; h1.parentNode) h1.parentNode.insertBefore(nav, h1.nextSibling);&lt;br /&gt;
        else { var ct = document.getElementById(&#039;mw-content-text&#039;); if (ct) ct.insertBefore(nav, ct.firstChild); }&lt;br /&gt;
    }&lt;br /&gt;
    injectCSS(); watchBodyPadding();&lt;br /&gt;
    function boot() { expandSections(); watchSections(); injectMenuLinks(); injectMoolaUllekhaLinks();[100, 400, 900, 1800].forEach(function (ms) { setTimeout(expandSections, ms); }); setTimeout(initToc, 700); }&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) document.addEventListener(&#039;DOMContentLoaded&#039;, boot);&lt;br /&gt;
    else boot();&lt;br /&gt;
    if (window.mw) mw.hook(&#039;wikipage.content&#039;).add(function () { setTimeout(function () { expandSections(); injectMenuLinks(); injectMoolaUllekhaLinks(); initToc(); }, 300); });&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(function () {&lt;br /&gt;
    &#039;use strict&#039;;&lt;br /&gt;
    mw.hook(&#039;wikipage.content&#039;).add(function () {&lt;br /&gt;
        setTimeout(function () {&lt;br /&gt;
            var blocks = document.querySelectorAll(&#039;.collapsible-block, .toggle-list&#039;);&lt;br /&gt;
            Array.prototype.forEach.call(blocks, function (el) { if (!el.parentNode) { try { el.remove(); } catch (e) { } } });&lt;br /&gt;
        }, 0);&lt;br /&gt;
    });&lt;br /&gt;
    if (mw.config.get(&#039;wgPageName&#039;) !== &#039;Main_Page&#039;) return;&lt;br /&gt;
    mw.loader.using(&#039;mediawiki.util&#039;).done(function () {&lt;br /&gt;
        $(function () { applyHomeToggleOffset(); window.addEventListener(&#039;resize&#039;, applyHomeToggleOffset, { passive: true }); setTimeout(applyHomeToggleOffset, 300); setTimeout(applyHomeToggleOffset, 800); });&lt;br /&gt;
    });&lt;br /&gt;
    function applyHomeToggleOffset() {&lt;br /&gt;
        var bar = document.getElementById(&#039;gr-static-bar&#039;); if (!bar) return;&lt;br /&gt;
        var barBottom = Math.round(bar.getBoundingClientRect().bottom);&lt;br /&gt;
        [document.getElementById(&#039;gr-home&#039;), document.getElementById(&#039;gr-home-toggle&#039;), document.querySelector(&#039;#mw-content-text .mw-parser-output &amp;gt; .gr-home, #mw-content-text .mw-parser-output &amp;gt; *:first-child&#039;)].forEach(function (el) { if (el) el.style.scrollMarginTop = (barBottom + 4) + &#039;px&#039;; });&lt;br /&gt;
        var isMob = window.innerWidth &amp;lt; 768 || !!document.getElementById(&#039;mw-mf-viewport&#039;);&lt;br /&gt;
        if (isMob) { var toggleEl = document.getElementById(&#039;gr-home-toggle&#039;); if (toggleEl) { var tr = toggleEl.getBoundingClientRect(); if (tr.top &amp;lt; barBottom) { var cp = parseInt(window.getComputedStyle(document.body).paddingTop, 10) || 0; document.body.style.paddingTop = (cp + (barBottom - tr.top) + 4) + &#039;px&#039;; } } }&lt;br /&gt;
    }&lt;br /&gt;
    $(function () {&lt;br /&gt;
        var $toggle = $(&#039;#gr-home-toggle&#039;), $viewG = $(&#039;#gr-view-grantha&#039;), $viewA = $(&#039;#gr-view-author&#039;), $btnG = $(&#039;#gr-toggle-grantha&#039;), $btnA = $(&#039;#gr-toggle-author&#039;);&lt;br /&gt;
        if (!$toggle.length || !$viewG.length || !$viewA.length) return; if ($toggle.data(&#039;gr-wired&#039;)) return; $toggle.data(&#039;gr-wired&#039;, true);&lt;br /&gt;
        function showView(which) { if (which === &#039;grantha&#039;) { $viewG.show(); $viewA.hide(); $btnG.addClass(&#039;gr-toggle-active&#039;); $btnA.removeClass(&#039;gr-toggle-active&#039;); } else { $viewA.show(); $viewG.hide(); $btnA.addClass(&#039;gr-toggle-active&#039;); $btnG.removeClass(&#039;gr-toggle-active&#039;); } try { localStorage.setItem(&#039;grantha_home_tab&#039;, which); } catch (e) { } }&lt;br /&gt;
        $btnG.on(&#039;click keydown&#039;, function (e) { if (e.type === &#039;keydown&#039; &amp;amp;&amp;amp; e.key !== &#039;Enter&#039; &amp;amp;&amp;amp; e.key !== &#039; &#039;) return; showView(&#039;grantha&#039;); });&lt;br /&gt;
        $btnA.on(&#039;click keydown&#039;, function (e) { if (e.type === &#039;keydown&#039; &amp;amp;&amp;amp; e.key !== &#039;Enter&#039; &amp;amp;&amp;amp; e.key !== &#039; &#039;) return; showView(&#039;author&#039;); });&lt;br /&gt;
        try { var saved = localStorage.getItem(&#039;grantha_home_tab&#039;); if (saved === &#039;author&#039;) showView(&#039;author&#039;); else showView(&#039;grantha&#039;); } catch (e) { showView(&#039;grantha&#039;); }&lt;br /&gt;
    });&lt;br /&gt;
}());&lt;br /&gt;
// ── Replace MediaWiki user links with a single username dropdown (Profile + Logout) ──&lt;br /&gt;
(function () {&lt;br /&gt;
    function wikiHref(title) {&lt;br /&gt;
        if (window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl) return mw.util.getUrl(title);&lt;br /&gt;
        var ap = (window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get(&#039;wgArticlePath&#039;)) || &#039;/wiki/$1&#039;;&lt;br /&gt;
        return ap.replace(&#039;$1&#039;, title);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function buildLogoutForm(token) {&lt;br /&gt;
        token = token || &#039;&#039;;&lt;br /&gt;
        var esc = String(token).replace(/&amp;quot;/g, &#039;&amp;amp;quot;&#039;);&lt;br /&gt;
        var script = (window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.wikiScript) ? mw.util.wikiScript() : &#039;/index.php&#039;;&lt;br /&gt;
        var form = document.createElement(&#039;form&#039;);&lt;br /&gt;
        form.method = &#039;post&#039;;&lt;br /&gt;
        form.action = script + &#039;?title=Special:UserLogout&#039;;&lt;br /&gt;
        form.style.display = &#039;none&#039;;&lt;br /&gt;
        form.innerHTML =&lt;br /&gt;
            &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;wpEditToken&amp;quot; value=&amp;quot;&#039; + esc + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
            &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;title&amp;quot; value=&amp;quot;Special:UserLogout&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
            &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;returnto&amp;quot; value=&amp;quot;Main Page&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
        document.body.appendChild(form);&lt;br /&gt;
        return form;&lt;br /&gt;
    }&lt;br /&gt;
}());&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.js&amp;diff=6216</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.js&amp;diff=6216"/>
		<updated>2026-06-12T17:46:57Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* MediaWiki:Common.js — grantha.io  (v7) */&lt;br /&gt;
&lt;br /&gt;
(function () {&lt;br /&gt;
&lt;br /&gt;
    var LS_SCRIPT_KEY = &#039;grantha_reader_script&#039;;&lt;br /&gt;
    var currentScript = &#039;deva&#039;;&lt;br /&gt;
&lt;br /&gt;
    function devanagariToIAST(text) {&lt;br /&gt;
        var CONSONANTS = {&lt;br /&gt;
            &#039;क&#039;: &#039;k&#039;, &#039;ख&#039;: &#039;kh&#039;, &#039;ग&#039;: &#039;g&#039;, &#039;घ&#039;: &#039;gh&#039;, &#039;ङ&#039;: &#039;ṅ&#039;,&lt;br /&gt;
            &#039;च&#039;: &#039;c&#039;, &#039;छ&#039;: &#039;ch&#039;, &#039;ज&#039;: &#039;j&#039;, &#039;झ&#039;: &#039;jh&#039;, &#039;ञ&#039;: &#039;ñ&#039;,&lt;br /&gt;
            &#039;ट&#039;: &#039;ṭ&#039;, &#039;ठ&#039;: &#039;ṭh&#039;, &#039;ड&#039;: &#039;ḍ&#039;, &#039;ढ&#039;: &#039;ḍh&#039;, &#039;ण&#039;: &#039;ṇ&#039;,&lt;br /&gt;
            &#039;त&#039;: &#039;t&#039;, &#039;थ&#039;: &#039;th&#039;, &#039;द&#039;: &#039;d&#039;, &#039;ध&#039;: &#039;dh&#039;, &#039;न&#039;: &#039;n&#039;,&lt;br /&gt;
            &#039;प&#039;: &#039;p&#039;, &#039;फ&#039;: &#039;ph&#039;, &#039;ब&#039;: &#039;b&#039;, &#039;भ&#039;: &#039;bh&#039;, &#039;म&#039;: &#039;m&#039;,&lt;br /&gt;
            &#039;य&#039;: &#039;y&#039;, &#039;र&#039;: &#039;r&#039;, &#039;ल&#039;: &#039;l&#039;, &#039;ळ&#039;: &#039;ḷ&#039;, &#039;व&#039;: &#039;v&#039;,&lt;br /&gt;
            &#039;श&#039;: &#039;ś&#039;, &#039;ष&#039;: &#039;ṣ&#039;, &#039;स&#039;: &#039;s&#039;, &#039;ह&#039;: &#039;h&#039;&lt;br /&gt;
        };&lt;br /&gt;
        var DIACRITICS = {&lt;br /&gt;
            &#039;ा&#039;: &#039;ā&#039;, &#039;ि&#039;: &#039;i&#039;, &#039;ी&#039;: &#039;ī&#039;, &#039;ु&#039;: &#039;u&#039;, &#039;ू&#039;: &#039;ū&#039;,&lt;br /&gt;
            &#039;ृ&#039;: &#039;ṛ&#039;, &#039;ॄ&#039;: &#039;ṝ&#039;, &#039;े&#039;: &#039;e&#039;, &#039;ै&#039;: &#039;ai&#039;, &#039;ो&#039;: &#039;o&#039;, &#039;ौ&#039;: &#039;au&#039;&lt;br /&gt;
        };&lt;br /&gt;
        var VOWELS = {&lt;br /&gt;
            &#039;अ&#039;: &#039;a&#039;, &#039;आ&#039;: &#039;ā&#039;, &#039;इ&#039;: &#039;i&#039;, &#039;ई&#039;: &#039;ī&#039;, &#039;उ&#039;: &#039;u&#039;, &#039;ऊ&#039;: &#039;ū&#039;,&lt;br /&gt;
            &#039;ऋ&#039;: &#039;ṛ&#039;, &#039;ॠ&#039;: &#039;ṝ&#039;, &#039;ए&#039;: &#039;e&#039;, &#039;ऐ&#039;: &#039;ai&#039;, &#039;ओ&#039;: &#039;o&#039;, &#039;औ&#039;: &#039;au&#039;, &#039;ऽ&#039;: &amp;quot;&#039;&amp;quot;&lt;br /&gt;
        };&lt;br /&gt;
        var MISC = {&lt;br /&gt;
            &#039;ं&#039;: &#039;ṃ&#039;, &#039;ः&#039;: &#039;ḥ&#039;, &#039;ँ&#039;: &#039;m̐&#039;, &#039;ॐ&#039;: &#039;oṃ&#039;,&lt;br /&gt;
            &#039;०&#039;: &#039;0&#039;, &#039;१&#039;: &#039;1&#039;, &#039;२&#039;: &#039;2&#039;, &#039;३&#039;: &#039;3&#039;, &#039;४&#039;: &#039;4&#039;,&lt;br /&gt;
            &#039;५&#039;: &#039;5&#039;, &#039;६&#039;: &#039;6&#039;, &#039;७&#039;: &#039;7&#039;, &#039;८&#039;: &#039;8&#039;, &#039;९&#039;: &#039;9&#039;&lt;br /&gt;
        };&lt;br /&gt;
        var HALANTA = &#039;्&#039;;&lt;br /&gt;
        var chars = Array.from(text);&lt;br /&gt;
        var result = &#039;&#039;;&lt;br /&gt;
        var i = 0;&lt;br /&gt;
        while (i &amp;lt; chars.length) {&lt;br /&gt;
            var ch = chars[i];&lt;br /&gt;
            var next = chars[i + 1];&lt;br /&gt;
            if (CONSONANTS[ch]) {&lt;br /&gt;
                var base = CONSONANTS[ch];&lt;br /&gt;
                if (next === HALANTA) { result += base; i += 2; }&lt;br /&gt;
                else if (DIACRITICS[next]) { result += base + DIACRITICS[next]; i += 2; }&lt;br /&gt;
                else if (next === &#039;ं&#039; || next === &#039;ः&#039;) { result += base + &#039;a&#039; + MISC[next]; i += 2; }&lt;br /&gt;
                else { result += base + &#039;a&#039;; i++; }&lt;br /&gt;
            } else if (VOWELS[ch]) { result += VOWELS[ch]; i++; }&lt;br /&gt;
            else if (DIACRITICS[ch]) { result += DIACRITICS[ch]; i++; }&lt;br /&gt;
            else if (MISC[ch]) { result += MISC[ch]; i++; }&lt;br /&gt;
            else { result += ch; i++; }&lt;br /&gt;
        }&lt;br /&gt;
        return result;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var SCRIPT_MAP = {&lt;br /&gt;
        kn: {&lt;br /&gt;
            &#039;अ&#039;: &#039;ಅ&#039;, &#039;आ&#039;: &#039;ಆ&#039;, &#039;इ&#039;: &#039;ಇ&#039;, &#039;ई&#039;: &#039;ಈ&#039;, &#039;उ&#039;: &#039;ಉ&#039;, &#039;ऊ&#039;: &#039;ಊ&#039;, &#039;ऋ&#039;: &#039;ಋ&#039;,&lt;br /&gt;
            &#039;ए&#039;: &#039;ಏ&#039;, &#039;ऐ&#039;: &#039;ಐ&#039;, &#039;ओ&#039;: &#039;ಓ&#039;, &#039;औ&#039;: &#039;ಔ&#039;, &#039;ऽ&#039;: &#039;ಽ&#039;,&lt;br /&gt;
            &#039;क&#039;: &#039;ಕ&#039;, &#039;ख&#039;: &#039;ಖ&#039;, &#039;ग&#039;: &#039;ಗ&#039;, &#039;घ&#039;: &#039;ಘ&#039;, &#039;ङ&#039;: &#039;ಙ&#039;,&lt;br /&gt;
            &#039;च&#039;: &#039;ಚ&#039;, &#039;छ&#039;: &#039;ಛ&#039;, &#039;ज&#039;: &#039;ಜ&#039;, &#039;झ&#039;: &#039;ಝ&#039;, &#039;ञ&#039;: &#039;ಞ&#039;,&lt;br /&gt;
            &#039;ट&#039;: &#039;ಟ&#039;, &#039;ठ&#039;: &#039;ಠ&#039;, &#039;ड&#039;: &#039;ಡ&#039;, &#039;ढ&#039;: &#039;ಢ&#039;, &#039;ण&#039;: &#039;ಣ&#039;,&lt;br /&gt;
            &#039;त&#039;: &#039;ತ&#039;, &#039;थ&#039;: &#039;ಥ&#039;, &#039;द&#039;: &#039;ದ&#039;, &#039;ध&#039;: &#039;ಧ&#039;, &#039;न&#039;: &#039;ನ&#039;,&lt;br /&gt;
            &#039;प&#039;: &#039;ಪ&#039;, &#039;फ&#039;: &#039;ಫ&#039;, &#039;ब&#039;: &#039;ಬ&#039;, &#039;भ&#039;: &#039;ಭ&#039;, &#039;म&#039;: &#039;ಮ&#039;,&lt;br /&gt;
            &#039;य&#039;: &#039;ಯ&#039;, &#039;र&#039;: &#039;ರ&#039;, &#039;ल&#039;: &#039;ಲ&#039;, &#039;व&#039;: &#039;ವ&#039;,&lt;br /&gt;
            &#039;श&#039;: &#039;ಶ&#039;, &#039;ष&#039;: &#039;ಷ&#039;, &#039;स&#039;: &#039;ಸ&#039;, &#039;ह&#039;: &#039;ಹ&#039;,&lt;br /&gt;
            &#039;ा&#039;: &#039;ಾ&#039;, &#039;ि&#039;: &#039;ಿ&#039;, &#039;ी&#039;: &#039;ೀ&#039;, &#039;ु&#039;: &#039;ು&#039;, &#039;ू&#039;: &#039;ೂ&#039;,&lt;br /&gt;
            &#039;ृ&#039;: &#039;ೃ&#039;, &#039;े&#039;: &#039;ೇ&#039;, &#039;ै&#039;: &#039;ೈ&#039;, &#039;ो&#039;: &#039;ೋ&#039;, &#039;ौ&#039;: &#039;ೌ&#039;,&lt;br /&gt;
            &#039;ं&#039;: &#039;ಂ&#039;, &#039;ः&#039;: &#039;ಃ&#039;, &#039;्&#039;: &#039;್&#039;,&lt;br /&gt;
            &#039;०&#039;: &#039;೦&#039;, &#039;१&#039;: &#039;೧&#039;, &#039;२&#039;: &#039;೨&#039;, &#039;३&#039;: &#039;೩&#039;, &#039;४&#039;: &#039;೪&#039;,&lt;br /&gt;
            &#039;५&#039;: &#039;೫&#039;, &#039;६&#039;: &#039;೬&#039;, &#039;७&#039;: &#039;೭&#039;, &#039;८&#039;: &#039;೮&#039;, &#039;९&#039;: &#039;೯&#039;&lt;br /&gt;
        },&lt;br /&gt;
        ta: {&lt;br /&gt;
            &#039;अ&#039;: &#039;அ&#039;, &#039;आ&#039;: &#039;ஆ&#039;, &#039;इ&#039;: &#039;இ&#039;, &#039;ई&#039;: &#039;ஈ&#039;, &#039;उ&#039;: &#039;உ&#039;, &#039;ऊ&#039;: &#039;ஊ&#039;,&lt;br /&gt;
            &#039;ऋ&#039;: &#039;ரு&#039;, &#039;ॠ&#039;: &#039;ரூ&#039;,&lt;br /&gt;
            &#039;ए&#039;: &#039;ஏ&#039;, &#039;ऐ&#039;: &#039;ஐ&#039;, &#039;ओ&#039;: &#039;ஓ&#039;, &#039;औ&#039;: &#039;ஔ&#039;,&lt;br /&gt;
            &#039;क&#039;: &#039;க&#039;, &#039;ख&#039;: &#039;க&#039;, &#039;ग&#039;: &#039;க&#039;, &#039;घ&#039;: &#039;க&#039;, &#039;ङ&#039;: &#039;ங&#039;,&lt;br /&gt;
            &#039;च&#039;: &#039;ச&#039;, &#039;छ&#039;: &#039;ச&#039;, &#039;ज&#039;: &#039;ஜ&#039;, &#039;झ&#039;: &#039;ஜ&#039;, &#039;ञ&#039;: &#039;ஞ&#039;,&lt;br /&gt;
            &#039;ட&#039;: &#039;ட&#039;, &#039;ठ&#039;: &#039;ட&#039;, &#039;ड&#039;: &#039;ட&#039;, &#039;ढ&#039;: &#039;ட&#039;, &#039;ண&#039;: &#039;ண&#039;,&lt;br /&gt;
            &#039;त&#039;: &#039;த&#039;, &#039;थ&#039;: &#039;த&#039;, &#039;द&#039;: &#039;த&#039;, &#039;ध&#039;: &#039;த&#039;, &#039;न&#039;: &#039;ந&#039;,&lt;br /&gt;
            &#039;प&#039;: &#039;ப&#039;, &#039;फ&#039;: &#039;ப&#039;, &#039;ब&#039;: &#039;ப&#039;, &#039;भ&#039;: &#039;ப&#039;, &#039;म&#039;: &#039;ம&#039;,&lt;br /&gt;
            &#039;य&#039;: &#039;ய&#039;, &#039;र&#039;: &#039;ர&#039;, &#039;ल&#039;: &#039;ல&#039;, &#039;ळ&#039;: &#039;ழ&#039;, &#039;व&#039;: &#039;வ&#039;,&lt;br /&gt;
            &#039;श&#039;: &#039;ஶ&#039;, &#039;ष&#039;: &#039;ஷ&#039;, &#039;स&#039;: &#039;ஸ&#039;, &#039;ह&#039;: &#039;ஹ&#039;,&lt;br /&gt;
            &#039;ा&#039;: &#039;ா&#039;, &#039;ि&#039;: &#039;ி&#039;, &#039;ी&#039;: &#039;ீ&#039;, &#039;ु&#039;: &#039;ு&#039;, &#039;ू&#039;: &#039;ூ&#039;,&lt;br /&gt;
            &#039;ृ&#039;: &#039;ு&#039;, &#039;ॄ&#039;: &#039;ூ&#039;,&lt;br /&gt;
            &#039;े&#039;: &#039;ே&#039;, &#039;ை&#039;: &#039;ை&#039;, &#039;ो&#039;: &#039;ோ&#039;, &#039;ौ&#039;: &#039;ௌ&#039;,&lt;br /&gt;
            &#039;ं&#039;: &#039;ம்&#039;, &#039;ः&#039;: &#039;:&#039;, &#039;ँ&#039;: &#039;ம்&#039;, &#039;्&#039;: &#039;்&#039;, &#039;ॐ&#039;: &#039;ௐ&#039;, &#039;ऽ&#039;: &#039;ௗ&#039;,&lt;br /&gt;
            &#039;०&#039;: &#039;0&#039;, &#039;१&#039;: &#039;1&#039;, &#039;२&#039;: &#039;2&#039;, &#039;३&#039;: &#039;3&#039;, &#039;४&#039;: &#039;4&#039;,&lt;br /&gt;
            &#039;५&#039;: &#039;5&#039;, &#039;६&#039;: &#039;6&#039;, &#039;७&#039;: &#039;7&#039;, &#039;८&#039;: &#039;8&#039;, &#039;९&#039;: &#039;9&#039;&lt;br /&gt;
        }&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    var PRE = [&lt;br /&gt;
        [/ङ्क/g, &#039;ंक&#039;], [/ङ्ख/g, &#039;ंख&#039;], [/ङ्ग/g, &#039;ंग&#039;], [/ङ्घ/g, &#039;ंघ&#039;],&lt;br /&gt;
        [/ञ्च/g, &#039;ंच&#039;], [/ञ्ज/g, &#039;ंज&#039;], [/ण्ट/g, &#039;ंट&#039;], [/ण्ड/g, &#039;ंड&#039;],&lt;br /&gt;
        [/न्त/g, &#039;ंत&#039;], [/न्द/g, &#039;ंद&#039;], [/म्ब/g, &#039;ंब&#039;], [/म्भ/g, &#039;ंभ&#039;]&lt;br /&gt;
    ];&lt;br /&gt;
&lt;br /&gt;
    function transliterateText(text, script) {&lt;br /&gt;
        if (script === &#039;en&#039;) return devanagariToIAST(text);&lt;br /&gt;
        var map = SCRIPT_MAP[script];&lt;br /&gt;
        if (!map) return text;&lt;br /&gt;
        var t = text;&lt;br /&gt;
        PRE.forEach(function (p) { t = t.replace(p[0], p[1]); });&lt;br /&gt;
        return Array.from(t).map(function (ch) {&lt;br /&gt;
            return map[ch] !== undefined ? map[ch] : ch;&lt;br /&gt;
        }).join(&#039;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var translatableSpans = [];&lt;br /&gt;
&lt;br /&gt;
    function tagTextNodes() {&lt;br /&gt;
        var content = document.querySelector(&#039;.mw-parser-output&#039;);&lt;br /&gt;
        if (content) {&lt;br /&gt;
            var walker = document.createTreeWalker(content, NodeFilter.SHOW_TEXT);&lt;br /&gt;
            var nodes = [];&lt;br /&gt;
            while (walker.nextNode()) nodes.push(walker.currentNode);&lt;br /&gt;
            nodes.forEach(function (node) {&lt;br /&gt;
                var p = node.parentNode;&lt;br /&gt;
                if (!p) return;&lt;br /&gt;
                if (p.hasAttribute &amp;amp;&amp;amp; p.hasAttribute(&#039;data-deva&#039;)) return;&lt;br /&gt;
                if (p.closest) {&lt;br /&gt;
                    if (p.closest(&#039;.gr-controls&#039;)) return;&lt;br /&gt;
                    if (p.closest(&#039;.mw-editsection&#039;)) return;&lt;br /&gt;
                }&lt;br /&gt;
                var orig = node.textContent;&lt;br /&gt;
                if (!orig.trim()) return;&lt;br /&gt;
                var span = document.createElement(&#039;span&#039;);&lt;br /&gt;
                span.setAttribute(&#039;data-deva&#039;, orig);&lt;br /&gt;
                span.textContent = orig;&lt;br /&gt;
                p.replaceChild(span, node);&lt;br /&gt;
                translatableSpans.push(span);&lt;br /&gt;
            });&lt;br /&gt;
        }&lt;br /&gt;
        document.querySelectorAll(&#039;.vector-toc .vector-toc-text&#039;).forEach(function (span) {&lt;br /&gt;
            if (span.hasAttribute(&#039;data-deva&#039;)) return;&lt;br /&gt;
            var orig = span.textContent;&lt;br /&gt;
            if (!orig.trim()) return;&lt;br /&gt;
            span.setAttribute(&#039;data-deva&#039;, orig);&lt;br /&gt;
            translatableSpans.push(span);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function applyScript(script) {&lt;br /&gt;
        currentScript = script;&lt;br /&gt;
        translatableSpans.forEach(function (span) {&lt;br /&gt;
            if (!span.parentNode) return;&lt;br /&gt;
            var orig = span.getAttribute(&#039;data-deva&#039;);&lt;br /&gt;
            if (!orig) return;&lt;br /&gt;
            span.textContent = (script === &#039;deva&#039;)&lt;br /&gt;
                ? orig&lt;br /&gt;
                : transliterateText(orig, script);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function _isNoTocPage() {&lt;br /&gt;
        var pn = (window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get(&#039;wgPageName&#039;)) || &#039;&#039;;&lt;br /&gt;
        return pn === &#039;Main_Page&#039; || /^[A-Za-z0-9_]+:About$/.test(pn);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function renameTocTitle() {&lt;br /&gt;
        if (_isNoTocPage()) return;&lt;br /&gt;
        var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
        if (!toc) return;&lt;br /&gt;
        var titleEl = toc.querySelector(&#039;.vector-toc-title&#039;) || toc.querySelector(&#039;.vector-pinnable-header-label&#039;);&lt;br /&gt;
        if (!titleEl) return;&lt;br /&gt;
        var LABEL = &#039;विषयसूची&#039;;&lt;br /&gt;
        var span = titleEl.querySelector(&#039;.gr-toc-title&#039;);&lt;br /&gt;
        if (!span) {&lt;br /&gt;
            titleEl.innerHTML = &#039;&#039;;&lt;br /&gt;
            span = document.createElement(&#039;span&#039;);&lt;br /&gt;
            span.className = &#039;gr-toc-title&#039;;&lt;br /&gt;
            span.setAttribute(&#039;data-deva&#039;, LABEL);&lt;br /&gt;
            titleEl.appendChild(span);&lt;br /&gt;
            translatableSpans.push(span);&lt;br /&gt;
        }&lt;br /&gt;
        span.textContent = currentScript === &#039;deva&#039; ? LABEL : transliterateText(LABEL, currentScript);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function removeTocBeginning() {&lt;br /&gt;
        if (_isNoTocPage()) return;&lt;br /&gt;
        var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
        if (!toc) return;&lt;br /&gt;
        var el = toc.querySelector(&#039;#vector-toc-beginning&#039;);&lt;br /&gt;
        if (!el) {&lt;br /&gt;
            var items = toc.querySelectorAll(&#039;.vector-toc-list-item&#039;);&lt;br /&gt;
            for (var i = 0; i &amp;lt; items.length; i++) {&lt;br /&gt;
                var a = items[i].querySelector(&#039;a&#039;);&lt;br /&gt;
                if (a) {&lt;br /&gt;
                    var href = a.getAttribute(&#039;href&#039;) || &#039;&#039;;&lt;br /&gt;
                    if (href.indexOf(&#039;#&#039;) === -1) { el = items[i]; break; }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        if (el &amp;amp;&amp;amp; el.parentNode) el.parentNode.removeChild(el);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function expandTocSections() {&lt;br /&gt;
        if (_isNoTocPage()) return;&lt;br /&gt;
        var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
        if (!toc) return;&lt;br /&gt;
        toc.querySelectorAll(&#039;.vector-toc-list-item-collapsed&#039;).forEach(function (li) {&lt;br /&gt;
            li.classList.remove(&#039;vector-toc-list-item-collapsed&#039;);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function injectTocDocNav() {&lt;br /&gt;
        if (_isNoTocPage()) return;&lt;br /&gt;
        var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
        if (!toc) return;&lt;br /&gt;
        if (document.getElementById(&#039;gr-toc-doc-nav&#039;)) return;&lt;br /&gt;
        var artPath = (window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get(&#039;wgArticlePath&#039;)) || &#039;/wiki/$1&#039;;&lt;br /&gt;
        var pageTitle = (window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get(&#039;wgPageName&#039;)) || &#039;&#039;;&lt;br /&gt;
        var teekaPage = document.querySelector(&#039;.gr-teeka-page&#039;);&lt;br /&gt;
        var primarySlug = teekaPage ? (teekaPage.getAttribute(&#039;data-primary&#039;) || &#039;&#039;) : &#039;&#039;;&lt;br /&gt;
        if (!primarySlug) { primarySlug = pageTitle.split(&#039;/&#039;)[0]; }&lt;br /&gt;
        if (!primarySlug) return;&lt;br /&gt;
        function wikiUrl(slug) {&lt;br /&gt;
            if (window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl) return mw.util.getUrl(slug);&lt;br /&gt;
            return artPath.replace(&#039;$1&#039;, encodeURIComponent(slug).replace(/%2F/g, &#039;/&#039;));&lt;br /&gt;
        }&lt;br /&gt;
        var docTitleEl = document.querySelector(&#039;.gr-doc-title&#039;);&lt;br /&gt;
        var hasMoolaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute(&#039;data-has-moola&#039;) === &#039;1&#039;;&lt;br /&gt;
        var hasUllekhaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute(&#039;data-has-ullekha&#039;) === &#039;1&#039;;&lt;br /&gt;
        var showMoolaPage = !teekaPage &amp;amp;&amp;amp; hasMoolaPage;&lt;br /&gt;
        var showMoolaBack = !!teekaPage;&lt;br /&gt;
        var showUllekha = hasUllekhaPage || !!teekaPage;&lt;br /&gt;
        if (!showMoolaPage &amp;amp;&amp;amp; !showMoolaBack &amp;amp;&amp;amp; !showUllekha) return;&lt;br /&gt;
        var nav = document.createElement(&#039;div&#039;);&lt;br /&gt;
        nav.id = &#039;gr-toc-doc-nav&#039;;&lt;br /&gt;
        nav.setAttribute(&#039;class&#039;, &#039;toc-main-links&#039;);&lt;br /&gt;
        function makeBtn(href, label) {&lt;br /&gt;
            var a = document.createElement(&#039;a&#039;);&lt;br /&gt;
            a.href = href;&lt;br /&gt;
            a.setAttribute(&#039;class&#039;, &#039;toc-main-link-item&#039;);&lt;br /&gt;
            var lspan = document.createElement(&#039;span&#039;);&lt;br /&gt;
            lspan.setAttribute(&#039;data-deva&#039;, label);&lt;br /&gt;
            lspan.textContent = (currentScript &amp;amp;&amp;amp; currentScript !== &#039;deva&#039;) ? transliterateText(label, currentScript) : label;&lt;br /&gt;
            translatableSpans.push(lspan);&lt;br /&gt;
            a.appendChild(lspan);&lt;br /&gt;
            a.addEventListener(&#039;mouseover&#039;, function () { this.style.opacity = &#039;0.72&#039;; });&lt;br /&gt;
            a.addEventListener(&#039;mouseout&#039;, function () { this.style.opacity = &#039;1&#039;; });&lt;br /&gt;
            return a;&lt;br /&gt;
        }&lt;br /&gt;
        if (showMoolaPage) nav.appendChild(makeBtn(wikiUrl(primarySlug + &#039;/Moola&#039;), &#039;मूलम्&#039;));&lt;br /&gt;
        if (showMoolaBack) nav.appendChild(makeBtn(wikiUrl(primarySlug), &#039;मूल&#039;));&lt;br /&gt;
        if (showUllekha) nav.appendChild(makeBtn(wikiUrl(primarySlug + &#039;/Ullekha&#039;), &#039;उल्लेख&#039;));&lt;br /&gt;
        var tocContents = toc.querySelector(&#039;.vector-toc-contents&#039;);&lt;br /&gt;
        if (tocContents) toc.insertBefore(nav, tocContents);&lt;br /&gt;
        else toc.appendChild(nav);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var _headingObserver = null;&lt;br /&gt;
&lt;br /&gt;
    function attachHeadingObserver() {&lt;br /&gt;
        if (_isNoTocPage()) return;&lt;br /&gt;
        if (_headingObserver) return;&lt;br /&gt;
        if (!window.IntersectionObserver) return;&lt;br /&gt;
        var ACTIVE_COLOR = &#039;#f57c00&#039;;&lt;br /&gt;
        var _activeId = null;&lt;br /&gt;
        var content = document.querySelector(&#039;.mw-parser-output&#039;);&lt;br /&gt;
        if (!content) return;&lt;br /&gt;
        var headings = Array.from(content.querySelectorAll(&#039;h1[id],h2[id],h3[id],h4[id],h5[id],h6[id]&#039;));&lt;br /&gt;
        if (!headings.length) return;&lt;br /&gt;
        var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
        if (!toc) return;&lt;br /&gt;
        function getTocLink(id) { return toc.querySelector(&#039;a[href=&amp;quot;#&#039; + CSS.escape(id) + &#039;&amp;quot;]&#039;); }&lt;br /&gt;
        function getTocLi(id) { var a = getTocLink(id); return a ? a.closest(&#039;.vector-toc-list-item&#039;) : null; }&lt;br /&gt;
        function clearActive() {&lt;br /&gt;
            toc.querySelectorAll(&#039;.vector-toc-list-item&#039;).forEach(function (li) {&lt;br /&gt;
                li.classList.remove(&#039;vector-toc-list-item-active&#039;);&lt;br /&gt;
                var lnk = li.querySelector(&#039;.vector-toc-link&#039;);&lt;br /&gt;
                if (!lnk) return;&lt;br /&gt;
                lnk.style.removeProperty(&#039;color&#039;);&lt;br /&gt;
                lnk.style.setProperty(&#039;font-weight&#039;, &#039;400&#039;, &#039;important&#039;);&lt;br /&gt;
                lnk.querySelectorAll(&#039;*&#039;).forEach(function (el) { el.style.removeProperty(&#039;color&#039;); el.style.setProperty(&#039;font-weight&#039;, &#039;400&#039;, &#039;important&#039;); });&lt;br /&gt;
            });&lt;br /&gt;
        }&lt;br /&gt;
        function setActive(id) {&lt;br /&gt;
            if (_activeId === id) return;&lt;br /&gt;
            _activeId = id;&lt;br /&gt;
            clearActive();&lt;br /&gt;
            if (!id) return;&lt;br /&gt;
            var li = getTocLi(id);&lt;br /&gt;
            if (!li) return;&lt;br /&gt;
            li.classList.add(&#039;vector-toc-list-item-active&#039;);&lt;br /&gt;
            var hasActiveChild = !!li.querySelector(&#039;.vector-toc-list-item .vector-toc-list-item-active&#039;);&lt;br /&gt;
            if (!hasActiveChild) {&lt;br /&gt;
                var lnk = li.querySelector(&#039;.vector-toc-link&#039;);&lt;br /&gt;
                if (lnk) {&lt;br /&gt;
                    lnk.style.setProperty(&#039;color&#039;, ACTIVE_COLOR, &#039;important&#039;);&lt;br /&gt;
                    lnk.style.setProperty(&#039;font-weight&#039;, &#039;700&#039;, &#039;important&#039;);&lt;br /&gt;
                    lnk.querySelectorAll(&#039;*&#039;).forEach(function (el) { el.style.setProperty(&#039;color&#039;, ACTIVE_COLOR, &#039;important&#039;); el.style.setProperty(&#039;font-weight&#039;, &#039;700&#039;, &#039;important&#039;); });&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            var anc = li.parentNode;&lt;br /&gt;
            while (anc &amp;amp;&amp;amp; anc !== toc) {&lt;br /&gt;
                if (anc.classList) anc.classList.remove(&#039;vector-toc-list-item-collapsed&#039;);&lt;br /&gt;
                if (anc.tagName === &#039;UL&#039; || anc.tagName === &#039;LI&#039;) anc.style.removeProperty(&#039;display&#039;);&lt;br /&gt;
                anc = anc.parentNode;&lt;br /&gt;
            }&lt;br /&gt;
            var sticky = document.querySelector(&#039;.vector-sticky-pinned-container&#039;);&lt;br /&gt;
            var scrollEl = sticky || toc;&lt;br /&gt;
            if (scrollEl.scrollHeight &amp;gt; scrollEl.clientHeight) {&lt;br /&gt;
                var lr = li.getBoundingClientRect();&lt;br /&gt;
                var cr = scrollEl.getBoundingClientRect();&lt;br /&gt;
                if (lr.top &amp;lt; cr.top + 8 || lr.bottom &amp;gt; cr.bottom - 8) {&lt;br /&gt;
                    scrollEl.scrollTop += lr.top - cr.top - scrollEl.clientHeight / 2 + li.offsetHeight / 2;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        var _visible = new Set();&lt;br /&gt;
        _headingObserver = new IntersectionObserver(function (entries) {&lt;br /&gt;
            entries.forEach(function (entry) {&lt;br /&gt;
                if (entry.isIntersecting) _visible.add(entry.target.id);&lt;br /&gt;
                else _visible.delete(entry.target.id);&lt;br /&gt;
            });&lt;br /&gt;
            var topId = null, topY = Infinity;&lt;br /&gt;
            _visible.forEach(function (id) {&lt;br /&gt;
                var el = document.getElementById(id);&lt;br /&gt;
                if (el) { var y = el.getBoundingClientRect().top; if (y &amp;gt;= 0 &amp;amp;&amp;amp; y &amp;lt; topY) { topY = y; topId = id; } }&lt;br /&gt;
            });&lt;br /&gt;
            if (!topId) {&lt;br /&gt;
                var bestY = -Infinity;&lt;br /&gt;
                headings.forEach(function (h) { var y = h.getBoundingClientRect().top; if (y &amp;lt; 0 &amp;amp;&amp;amp; y &amp;gt; bestY) { bestY = y; topId = h.id; } });&lt;br /&gt;
            }&lt;br /&gt;
            setActive(topId || null);&lt;br /&gt;
        }, { rootMargin: &#039;-60px 0px -65% 0px&#039;, threshold: 0 });&lt;br /&gt;
        headings.forEach(function (h) { _headingObserver.observe(h); });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function setupToc() {&lt;br /&gt;
        if (_isNoTocPage()) return;&lt;br /&gt;
        var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
        if (!toc) return;&lt;br /&gt;
        removeTocBeginning();&lt;br /&gt;
        renameTocTitle();&lt;br /&gt;
        expandTocSections();&lt;br /&gt;
        injectTocDocNav();&lt;br /&gt;
        attachHeadingObserver();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function init() {&lt;br /&gt;
        var HIDE_IDS = [&#039;vector-appearance&#039;, &#039;vector-appearance-pinned-container&#039;, &#039;vector-appearance-unpinned-container&#039;];&lt;br /&gt;
        function removeHiddenEls() {&lt;br /&gt;
            HIDE_IDS.forEach(function (id) { var el = document.getElementById(id); if (el &amp;amp;&amp;amp; el.parentNode) el.parentNode.removeChild(el); });&lt;br /&gt;
            var pt = document.getElementById(&#039;vector-page-tools&#039;) || document.querySelector(&#039;.vector-page-tools-pinned-container&#039;);&lt;br /&gt;
            if (pt) pt.querySelectorAll(&#039;[aria-controls=&amp;quot;vector-appearance&amp;quot;]&#039;).forEach(function (el) { if (el.parentNode) el.parentNode.removeChild(el); });&lt;br /&gt;
        }&lt;br /&gt;
        removeHiddenEls();&lt;br /&gt;
        (function detectTeekaMode() {&lt;br /&gt;
            var tp = document.querySelector(&#039;.gr-teeka-page&#039;);&lt;br /&gt;
            if (!tp) return;&lt;br /&gt;
            var primary = tp.getAttribute(&#039;data-primary&#039;) || &#039;&#039;;&lt;br /&gt;
            var artPath = (window.mw &amp;amp;&amp;amp; mw.config.get(&#039;wgArticlePath&#039;)) || &#039;/wiki/$1&#039;;&lt;br /&gt;
            var mainUrl = artPath.replace(&#039;$1&#039;, primary);&lt;br /&gt;
            var refParam = window.location.search.match(/[?&amp;amp;]ref=([01])/);&lt;br /&gt;
            if (refParam) { document.body.classList.add(refParam[1] === &#039;1&#039; ? &#039;gr-ref-mode&#039; : &#039;gr-standalone&#039;); return; }&lt;br /&gt;
            var ref = document.referrer || &#039;&#039;;&lt;br /&gt;
            document.body.classList.add((ref &amp;amp;&amp;amp; primary &amp;amp;&amp;amp; ref.indexOf(mainUrl) !== -1) ? &#039;gr-ref-mode&#039; : &#039;gr-standalone&#039;);&lt;br /&gt;
        }());&lt;br /&gt;
        if (window.MutationObserver) {&lt;br /&gt;
            var hideObs = new MutationObserver(function (mutations) {&lt;br /&gt;
                var dirty = false;&lt;br /&gt;
                mutations.forEach(function (m) { if (m.addedNodes.length) dirty = true; });&lt;br /&gt;
                if (dirty) removeHiddenEls();&lt;br /&gt;
            });&lt;br /&gt;
            hideObs.observe(document.body, { childList: true, subtree: false });&lt;br /&gt;
            setTimeout(function () { hideObs.disconnect(); }, 6000);&lt;br /&gt;
        }&lt;br /&gt;
        var content = document.querySelector(&#039;.mw-parser-output&#039;);&lt;br /&gt;
        var alreadyTagged = content &amp;amp;&amp;amp; content.querySelector(&#039;[data-deva]&#039;);&lt;br /&gt;
        if (!alreadyTagged) { translatableSpans = []; tagTextNodes(); }&lt;br /&gt;
        else {&lt;br /&gt;
            document.querySelectorAll(&#039;.vector-toc .vector-toc-text:not([data-deva])&#039;).forEach(function (span) {&lt;br /&gt;
                var orig = span.textContent; if (!orig.trim()) return;&lt;br /&gt;
                span.setAttribute(&#039;data-deva&#039;, orig); translatableSpans.push(span);&lt;br /&gt;
            });&lt;br /&gt;
        }&lt;br /&gt;
        var saved = (function () { try { return localStorage.getItem(LS_SCRIPT_KEY); } catch (e) { return null; } }());&lt;br /&gt;
        if (saved &amp;amp;&amp;amp; saved !== &#039;deva&#039;) { applyScript(saved); } else { currentScript = &#039;deva&#039;; }&lt;br /&gt;
        setTimeout(setupToc, 200);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    window.addEventListener(&#039;gr-script-change&#039;, function (e) {&lt;br /&gt;
        var script = e &amp;amp;&amp;amp; e.detail &amp;amp;&amp;amp; e.detail.script;&lt;br /&gt;
        if (script) applyScript(script);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    window.addEventListener(&#039;gr-new-content&#039;, function (e) {&lt;br /&gt;
        var container = e &amp;amp;&amp;amp; e.detail &amp;amp;&amp;amp; e.detail.container;&lt;br /&gt;
        if (!container) return;&lt;br /&gt;
        var walker = document.createTreeWalker(container, NodeFilter.SHOW_TEXT);&lt;br /&gt;
        var nodes = [];&lt;br /&gt;
        while (walker.nextNode()) nodes.push(walker.currentNode);&lt;br /&gt;
        nodes.forEach(function (node) {&lt;br /&gt;
            var p = node.parentNode;&lt;br /&gt;
            if (!p || (p.hasAttribute &amp;amp;&amp;amp; p.hasAttribute(&#039;data-deva&#039;))) return;&lt;br /&gt;
            var orig = node.textContent;&lt;br /&gt;
            if (!orig.trim()) return;&lt;br /&gt;
            var span = document.createElement(&#039;span&#039;);&lt;br /&gt;
            span.setAttribute(&#039;data-deva&#039;, orig);&lt;br /&gt;
            span.textContent = currentScript !== &#039;deva&#039; ? transliterateText(orig, currentScript) : orig;&lt;br /&gt;
            p.replaceChild(span, node);&lt;br /&gt;
            translatableSpans.push(span);&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    try {&lt;br /&gt;
        var _grBC = new BroadcastChannel(&#039;gr-script&#039;);&lt;br /&gt;
        _grBC.onmessage = function (e) {&lt;br /&gt;
            var script = e &amp;amp;&amp;amp; e.data &amp;amp;&amp;amp; e.data.script;&lt;br /&gt;
            if (script) { currentScript = script; var sel = document.querySelector(&#039;.gr-script-sel&#039;); if (sel) sel.value = script; applyScript(script); }&lt;br /&gt;
        };&lt;br /&gt;
    } catch (e) { }&lt;br /&gt;
&lt;br /&gt;
    if (window.mw) {&lt;br /&gt;
        mw.hook(&#039;wikipage.content&#039;).add(function () {&lt;br /&gt;
            setTimeout(function () {&lt;br /&gt;
                var content = document.querySelector(&#039;.mw-parser-output&#039;);&lt;br /&gt;
                var alreadyTagged = content &amp;amp;&amp;amp; content.querySelector(&#039;[data-deva]&#039;);&lt;br /&gt;
                if (!alreadyTagged) { translatableSpans = []; tagTextNodes(); }&lt;br /&gt;
                else {&lt;br /&gt;
                    document.querySelectorAll(&#039;.vector-toc .vector-toc-text:not([data-deva])&#039;).forEach(function (span) {&lt;br /&gt;
                        var orig = span.textContent; if (!orig.trim()) return;&lt;br /&gt;
                        span.setAttribute(&#039;data-deva&#039;, orig); translatableSpans.push(span);&lt;br /&gt;
                    });&lt;br /&gt;
                }&lt;br /&gt;
                if (currentScript !== &#039;deva&#039;) applyScript(currentScript);&lt;br /&gt;
                setupToc();&lt;br /&gt;
            }, 150);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) { document.addEventListener(&#039;DOMContentLoaded&#039;, init); }&lt;br /&gt;
    else { init(); }&lt;br /&gt;
&lt;br /&gt;
}());   /* ← end of main IIFE */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Inject &amp;quot;Help&amp;quot; and &amp;quot;About&amp;quot; links into the header ─────────────────&lt;br /&gt;
(function () {&lt;br /&gt;
    function wikiHref(title) {&lt;br /&gt;
        if (window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl) return mw.util.getUrl(title);&lt;br /&gt;
        var ap = (window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get(&#039;wgArticlePath&#039;)) || &#039;/wiki/$1&#039;;&lt;br /&gt;
        return ap.replace(&#039;$1&#039;, title);&lt;br /&gt;
    }&lt;br /&gt;
    var linkStyle = [&#039;color:rgba(255,255,255,0.88)&#039;, &#039;font-size:0.88em&#039;, &#039;font-family:system-ui,sans-serif&#039;, &#039;font-weight:500&#039;, &#039;text-decoration:none&#039;, &#039;padding:4px 10px&#039;, &#039;border-radius:4px&#039;, &#039;margin-right:4px&#039;, &#039;transition:color 0.15s,background 0.15s&#039;, &#039;white-space:nowrap&#039;].join(&#039;;&#039;);&lt;br /&gt;
    function makeHeaderLink(id, href, label) {&lt;br /&gt;
        var a = document.createElement(&#039;a&#039;);&lt;br /&gt;
        a.id = id; a.href = href; a.textContent = label; a.style.cssText = linkStyle;&lt;br /&gt;
        a.addEventListener(&#039;mouseover&#039;, function () { this.style.color = &#039;#fff&#039;; this.style.background = &#039;rgba(255,255,255,0.12)&#039;; });&lt;br /&gt;
        a.addEventListener(&#039;mouseout&#039;, function () { this.style.color = &#039;rgba(255,255,255,0.88)&#039;; this.style.background = &#039;transparent&#039;; });&lt;br /&gt;
        return a;&lt;br /&gt;
    }&lt;br /&gt;
    function injectHeaderLinks() {&lt;br /&gt;
        if (document.getElementById(&#039;gr-about-link&#039;)) return;&lt;br /&gt;
        var headerEnd = document.querySelector(&#039;.vector-header-end&#039;) || document.querySelector(&#039;#vector-user-links&#039;) || document.querySelector(&#039;.mw-header&#039;);&lt;br /&gt;
        if (!headerEnd) return;&lt;br /&gt;
        var helpLink = makeHeaderLink(&#039;gr-help-link&#039;, wikiHref(&#039;My_wiki:Help&#039;), &#039;Help&#039;);&lt;br /&gt;
        var aboutLink = makeHeaderLink(&#039;gr-about-link&#039;, wikiHref(&#039;My_wiki:About&#039;), &#039;About&#039;);&lt;br /&gt;
&lt;br /&gt;
        var userName = window.mw ? mw.config.get(&#039;wgUserName&#039;) : null;&lt;br /&gt;
        var isAnon = !userName || (window.mw &amp;amp;&amp;amp; mw.config.get(&#039;wgUserId&#039;) === null);&lt;br /&gt;
&lt;br /&gt;
        // Build the trailing auth element (Login link for anon, dropdown for logged-in)&lt;br /&gt;
        var authEl = null;&lt;br /&gt;
        if (isAnon) {&lt;br /&gt;
            if (!document.getElementById(&#039;gr-header-login&#039;)) {&lt;br /&gt;
                authEl = makeHeaderLink(&#039;gr-header-login&#039;, wikiHref(&#039;Special:UserLogin&#039;), &#039;Login/Signup&#039;);&lt;br /&gt;
            }&lt;br /&gt;
        } else if (!document.getElementById(&#039;gr-header-user&#039;)) {&lt;br /&gt;
            authEl = buildHeaderUserDropdown(userName);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var ul = document.querySelector(&#039;.vector-user-links&#039;) || document.querySelector(&#039;#pt-userpage&#039;);&lt;br /&gt;
        if (ul &amp;amp;&amp;amp; ul.parentNode === headerEnd) {&lt;br /&gt;
            if (authEl) headerEnd.insertBefore(authEl, ul);&lt;br /&gt;
            headerEnd.insertBefore(aboutLink, authEl || ul);&lt;br /&gt;
            headerEnd.insertBefore(helpLink, aboutLink);&lt;br /&gt;
        } else {&lt;br /&gt;
            headerEnd.appendChild(helpLink);&lt;br /&gt;
            headerEnd.appendChild(aboutLink);&lt;br /&gt;
            if (authEl) headerEnd.appendChild(authEl);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function buildHeaderUserDropdown(userName) {&lt;br /&gt;
        var wrap = document.createElement(&#039;div&#039;);&lt;br /&gt;
        wrap.id = &#039;gr-header-user&#039;;&lt;br /&gt;
        wrap.style.cssText = &#039;position:relative;display:inline-block;margin-right:4px;&#039;;&lt;br /&gt;
&lt;br /&gt;
        var trigger = document.createElement(&#039;button&#039;);&lt;br /&gt;
        trigger.id = &#039;gr-header-user-trigger&#039;;&lt;br /&gt;
        trigger.type = &#039;button&#039;;&lt;br /&gt;
        trigger.setAttribute(&#039;aria-haspopup&#039;, &#039;true&#039;);&lt;br /&gt;
        trigger.setAttribute(&#039;aria-expanded&#039;, &#039;false&#039;);&lt;br /&gt;
        trigger.style.cssText = [&lt;br /&gt;
            &#039;display:inline-flex&#039;, &#039;align-items:center&#039;, &#039;gap:5px&#039;,&lt;br /&gt;
            &#039;color:rgba(255,255,255,0.88)&#039;, &#039;font-size:0.88em&#039;,&lt;br /&gt;
            &#039;font-family:system-ui,sans-serif&#039;, &#039;font-weight:500&#039;,&lt;br /&gt;
            &#039;background:transparent&#039;, &#039;border:none&#039;, &#039;cursor:pointer&#039;,&lt;br /&gt;
            &#039;padding:4px 10px&#039;, &#039;border-radius:4px&#039;, &#039;white-space:nowrap&#039;,&lt;br /&gt;
            &#039;transition:color 0.15s,background 0.15s&#039;&lt;br /&gt;
        ].join(&#039;;&#039;);&lt;br /&gt;
        trigger.innerHTML =&lt;br /&gt;
            &#039;&amp;lt;span&amp;gt;&#039; + userName.replace(/&amp;lt;/g, &#039;&amp;amp;lt;&#039;) + &#039;&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
            &#039;&amp;lt;span id=&amp;quot;gr-header-caret&amp;quot; style=&amp;quot;font-size:0.8em;transition:transform 0.2s;&amp;quot;&amp;gt;\u25be&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
        trigger.addEventListener(&#039;mouseover&#039;, function () { this.style.color = &#039;#fff&#039;; this.style.background = &#039;rgba(255,255,255,0.12)&#039;; });&lt;br /&gt;
        trigger.addEventListener(&#039;mouseout&#039;, function () { if (menu.style.display === &#039;none&#039;) { this.style.color = &#039;rgba(255,255,255,0.88)&#039;; this.style.background = &#039;transparent&#039;; } });&lt;br /&gt;
&lt;br /&gt;
        var menu = document.createElement(&#039;div&#039;);&lt;br /&gt;
        menu.id = &#039;gr-header-user-menu&#039;;&lt;br /&gt;
        menu.setAttribute(&#039;role&#039;, &#039;menu&#039;);&lt;br /&gt;
        menu.style.cssText = [&lt;br /&gt;
            &#039;display:none&#039;, &#039;position:absolute&#039;, &#039;top:100%&#039;, &#039;right:0&#039;, &#039;margin-top:4px&#039;,&lt;br /&gt;
            &#039;min-width:150px&#039;, &#039;background:#fff&#039;, &#039;border-radius:6px&#039;,&lt;br /&gt;
            &#039;box-shadow:0 4px 16px rgba(0,0,0,0.18)&#039;, &#039;overflow:hidden&#039;, &#039;z-index:1000&#039;&lt;br /&gt;
        ].join(&#039;;&#039;);&lt;br /&gt;
&lt;br /&gt;
        var itemStyle = &#039;display:block;padding:10px 16px;font-size:0.9em;color:#2c1810;text-decoration:none;font-family:system-ui,sans-serif;background:#fff;&#039;;&lt;br /&gt;
        function makeMenuItem(href, label, id) {&lt;br /&gt;
            var a = document.createElement(&#039;a&#039;);&lt;br /&gt;
            a.href = href; a.setAttribute(&#039;role&#039;, &#039;menuitem&#039;);&lt;br /&gt;
            a.textContent = label; a.style.cssText = itemStyle;&lt;br /&gt;
            if (id) a.id = id;&lt;br /&gt;
            a.addEventListener(&#039;mouseover&#039;, function () { this.style.background = &#039;#f5efe9&#039;; });&lt;br /&gt;
            a.addEventListener(&#039;mouseout&#039;, function () { this.style.background = &#039;#fff&#039;; });&lt;br /&gt;
            return a;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        menu.appendChild(makeMenuItem(wikiHref(&#039;Special:Profile&#039;), &#039;Profile&#039;));&lt;br /&gt;
        menu.appendChild(makeMenuItem(&#039;#&#039;, &#039;Log out&#039;, &#039;gr-header-logout&#039;));&lt;br /&gt;
&lt;br /&gt;
        function setOpen(open) {&lt;br /&gt;
            menu.style.display = open ? &#039;block&#039; : &#039;none&#039;;&lt;br /&gt;
            trigger.setAttribute(&#039;aria-expanded&#039;, open ? &#039;true&#039; : &#039;false&#039;);&lt;br /&gt;
            var caret = document.getElementById(&#039;gr-header-caret&#039;);&lt;br /&gt;
            if (caret) caret.style.transform = open ? &#039;rotate(180deg)&#039; : &#039;&#039;;&lt;br /&gt;
            if (open) { trigger.style.color = &#039;#fff&#039;; trigger.style.background = &#039;rgba(255,255,255,0.12)&#039;; }&lt;br /&gt;
            else { trigger.style.color = &#039;rgba(255,255,255,0.88)&#039;; trigger.style.background = &#039;transparent&#039;; }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        trigger.addEventListener(&#039;click&#039;, function (e) {&lt;br /&gt;
            e.stopPropagation();&lt;br /&gt;
            setOpen(menu.style.display === &#039;none&#039;);&lt;br /&gt;
        });&lt;br /&gt;
        document.addEventListener(&#039;click&#039;, function (e) {&lt;br /&gt;
            if (!wrap.contains(e.target)) setOpen(false);&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        // Logout: POST with CSRF token (same approach as the desktop dropdown)&lt;br /&gt;
        menu.querySelector(&#039;#gr-header-logout&#039;).addEventListener(&#039;click&#039;, function (e) {&lt;br /&gt;
            e.preventDefault();&lt;br /&gt;
            if (window.mw &amp;amp;&amp;amp; mw.user &amp;amp;&amp;amp; mw.user.tokens) {&lt;br /&gt;
                var t = mw.user.tokens.get(&#039;csrfToken&#039;);&lt;br /&gt;
                if (t) {&lt;br /&gt;
                    var script = (mw.util &amp;amp;&amp;amp; mw.util.wikiScript) ? mw.util.wikiScript() : &#039;/index.php&#039;;&lt;br /&gt;
                    var form = document.createElement(&#039;form&#039;);&lt;br /&gt;
                    form.method = &#039;post&#039;;&lt;br /&gt;
                    form.action = script + &#039;?title=Special:UserLogout&#039;;&lt;br /&gt;
                    form.style.display = &#039;none&#039;;&lt;br /&gt;
                    form.innerHTML =&lt;br /&gt;
                        &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;wpEditToken&amp;quot; value=&amp;quot;&#039; + String(t).replace(/&amp;quot;/g, &#039;&amp;amp;quot;&#039;) + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
                        &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;title&amp;quot; value=&amp;quot;Special:UserLogout&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
                        &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;returnto&amp;quot; value=&amp;quot;Main Page&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
                    document.body.appendChild(form);&lt;br /&gt;
                    form.submit();&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            if (window.mw &amp;amp;&amp;amp; mw.Api) {&lt;br /&gt;
                new mw.Api().postWithToken(&#039;csrf&#039;, { action: &#039;logout&#039; })&lt;br /&gt;
                    .done(function () { location.href = &#039;/Main_Page&#039;; })&lt;br /&gt;
                    .fail(function () { location.href = &#039;/index.php?title=Special:UserLogout&#039;; });&lt;br /&gt;
            } else {&lt;br /&gt;
                location.href = &#039;/index.php?title=Special:UserLogout&#039;;&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        wrap.appendChild(trigger);&lt;br /&gt;
        wrap.appendChild(menu);&lt;br /&gt;
        return wrap;&lt;br /&gt;
    }&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) document.addEventListener(&#039;DOMContentLoaded&#039;, injectHeaderLinks);&lt;br /&gt;
    else injectHeaderLinks();&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Main page: by-Grantha / by-Author toggle ──────────────────────&lt;br /&gt;
(function () {&lt;br /&gt;
    function grHomeView(v) {&lt;br /&gt;
        var gView = document.getElementById(&#039;gr-view-grantha&#039;);&lt;br /&gt;
        var aView = document.getElementById(&#039;gr-view-author&#039;);&lt;br /&gt;
        var gBtn = document.getElementById(&#039;gr-toggle-grantha&#039;);&lt;br /&gt;
        var aBtn = document.getElementById(&#039;gr-toggle-author&#039;);&lt;br /&gt;
        if (!gView || !aView || !gBtn || !aBtn) return;&lt;br /&gt;
        gView.style.display = (v === &#039;grantha&#039;) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
        aView.style.display = (v === &#039;author&#039;) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
        gBtn.className = &#039;gr-toggle-btn&#039; + (v === &#039;grantha&#039; ? &#039; gr-toggle-active&#039; : &#039;&#039;);&lt;br /&gt;
        aBtn.className = &#039;gr-toggle-btn&#039; + (v === &#039;author&#039; ? &#039; gr-toggle-active&#039; : &#039;&#039;);&lt;br /&gt;
        try { localStorage.setItem(&#039;gr_home_view&#039;, v); } catch (e) { }&lt;br /&gt;
    }&lt;br /&gt;
    function initHomeToggle() {&lt;br /&gt;
        var gBtn = document.getElementById(&#039;gr-toggle-grantha&#039;);&lt;br /&gt;
        var aBtn = document.getElementById(&#039;gr-toggle-author&#039;);&lt;br /&gt;
        if (!gBtn || !aBtn) return;&lt;br /&gt;
        gBtn.addEventListener(&#039;click&#039;, function () { grHomeView(&#039;grantha&#039;); });&lt;br /&gt;
        aBtn.addEventListener(&#039;click&#039;, function () { grHomeView(&#039;author&#039;); });&lt;br /&gt;
        [gBtn, aBtn].forEach(function (btn) { btn.addEventListener(&#039;keydown&#039;, function (e) { if (e.key === &#039;Enter&#039; || e.key === &#039; &#039;) btn.click(); }); });&lt;br /&gt;
        var saved; try { saved = localStorage.getItem(&#039;gr_home_view&#039;); } catch (e) { }&lt;br /&gt;
        if (saved === &#039;author&#039;) grHomeView(&#039;author&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) document.addEventListener(&#039;DOMContentLoaded&#039;, initHomeToggle);&lt;br /&gt;
    else initHomeToggle();&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Ullekha reference link handler ─────────────────────────────────&lt;br /&gt;
(function () {&lt;br /&gt;
    function highlightOnArrival() {&lt;br /&gt;
        var search = window.location.search;&lt;br /&gt;
        if (!search) return;&lt;br /&gt;
        var m = search.match(/[?&amp;amp;]hlUllekha=([^&amp;amp;]+)/);&lt;br /&gt;
        if (!m) return;&lt;br /&gt;
        var needle;&lt;br /&gt;
        try { needle = decodeURIComponent(m[1]); } catch (e) { return; }&lt;br /&gt;
        if (!needle || needle.length &amp;lt; 4) return;&lt;br /&gt;
        function doHighlight() {&lt;br /&gt;
            var content = document.querySelector(&#039;.mw-parser-output&#039;);&lt;br /&gt;
            if (!content) return;&lt;br /&gt;
            var snippet = needle.slice(0, 40);&lt;br /&gt;
            var found = false;&lt;br /&gt;
            var spans = content.querySelectorAll(&#039;[data-deva]&#039;);&lt;br /&gt;
            for (var i = 0; i &amp;lt; spans.length &amp;amp;&amp;amp; !found; i++) {&lt;br /&gt;
                var spanEl = spans[i];&lt;br /&gt;
                var orig = spanEl.getAttribute(&#039;data-deva&#039;) || &#039;&#039;;&lt;br /&gt;
                if (orig.indexOf(snippet) === -1) continue;&lt;br /&gt;
                var idx = orig.indexOf(snippet);&lt;br /&gt;
                var hlText = orig.slice(idx, Math.min(idx + needle.length, orig.length));&lt;br /&gt;
                var mark = document.createElement(&#039;mark&#039;);&lt;br /&gt;
                mark.className = &#039;gr-ullekha-highlight&#039;;&lt;br /&gt;
                mark.style.cssText = &#039;background:#fff176;border-radius:2px;padding:0 2px;&#039;;&lt;br /&gt;
                mark.textContent = hlText;&lt;br /&gt;
                var parent = spanEl.parentNode;&lt;br /&gt;
                if (!parent) continue;&lt;br /&gt;
                var before = document.createTextNode(orig.slice(0, idx));&lt;br /&gt;
                var after = document.createTextNode(orig.slice(idx + hlText.length));&lt;br /&gt;
                parent.insertBefore(before, spanEl); parent.insertBefore(mark, spanEl); parent.insertBefore(after, spanEl); parent.removeChild(spanEl);&lt;br /&gt;
                setTimeout(function () { mark.scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; }); }, 100);&lt;br /&gt;
                found = true;&lt;br /&gt;
            }&lt;br /&gt;
            if (!found) {&lt;br /&gt;
                var walker = document.createTreeWalker(content, NodeFilter.SHOW_TEXT);&lt;br /&gt;
                while (walker.nextNode() &amp;amp;&amp;amp; !found) {&lt;br /&gt;
                    var node = walker.currentNode;&lt;br /&gt;
                    var txt = node.textContent || &#039;&#039;;&lt;br /&gt;
                    if (txt.indexOf(snippet) === -1) continue;&lt;br /&gt;
                    var idx2 = txt.indexOf(snippet);&lt;br /&gt;
                    var mark2 = document.createElement(&#039;mark&#039;);&lt;br /&gt;
                    mark2.className = &#039;gr-ullekha-highlight&#039;;&lt;br /&gt;
                    mark2.style.cssText = &#039;background:#fff176;border-radius:2px;padding:0 2px;&#039;;&lt;br /&gt;
                    mark2.textContent = txt.slice(idx2, Math.min(idx2 + needle.length, txt.length));&lt;br /&gt;
                    var p = node.parentNode;&lt;br /&gt;
                    p.insertBefore(document.createTextNode(txt.slice(0, idx2)), node);&lt;br /&gt;
                    p.insertBefore(mark2, node);&lt;br /&gt;
                    p.insertBefore(document.createTextNode(txt.slice(idx2 + mark2.textContent.length)), node);&lt;br /&gt;
                    p.removeChild(node);&lt;br /&gt;
                    setTimeout(function () { mark2.scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; }); }, 100);&lt;br /&gt;
                    found = true;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        doHighlight();&lt;br /&gt;
    }&lt;br /&gt;
    function wireUllekhaLinks() {&lt;br /&gt;
        document.querySelectorAll(&#039;.gr-ullekha-ref-link&#039;).forEach(function (wrap) {&lt;br /&gt;
            var anchor = wrap.getAttribute(&#039;data-anchor&#039;) || &#039;&#039;;&lt;br /&gt;
            var hl = wrap.getAttribute(&#039;data-hl&#039;) || &#039;&#039;;&lt;br /&gt;
            var a = wrap.querySelector(&#039;a&#039;);&lt;br /&gt;
            if (!a) return;&lt;br /&gt;
            var base = a.href.split(&#039;#&#039;)[0];&lt;br /&gt;
            var encoded = encodeURIComponent(hl);&lt;br /&gt;
            a.href = base + (hl ? &#039;?hlUllekha=&#039; + encoded : &#039;&#039;) + (anchor ? &#039;#&#039; + anchor : &#039;&#039;);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) { document.addEventListener(&#039;DOMContentLoaded&#039;, function () { highlightOnArrival(); wireUllekhaLinks(); }); }&lt;br /&gt;
    else { highlightOnArrival(); wireUllekhaLinks(); }&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
/* ── Search result highlight ──────────────────────────────────── */&lt;br /&gt;
/* EXACT REPLACEMENT for the search highlight IIFE in MediaWiki:Common.js.&lt;br /&gt;
 * Only changes from the original working version:&lt;br /&gt;
 *  - Mobile bar: full-width terracotta bottom bar instead of floating pill&lt;br /&gt;
 *  - showDismissBar: guard added (if !count return) to prevent empty bar&lt;br /&gt;
 * Everything else (storeQueryForLink, applyHighlight, wrapMatches) is&lt;br /&gt;
 * identical to the version that was working.&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
&lt;br /&gt;
    function storeQueryForLink(url, query) {&lt;br /&gt;
        try {&lt;br /&gt;
            var a = document.createElement(&#039;a&#039;);&lt;br /&gt;
            a.href = url;&lt;br /&gt;
            sessionStorage.setItem(&#039;gr_search_hl&#039;, JSON.stringify({&lt;br /&gt;
                query: query,&lt;br /&gt;
                pathname: a.pathname&lt;br /&gt;
            }));&lt;br /&gt;
        } catch (e) { }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function applyHighlight() {&lt;br /&gt;
        var stored;&lt;br /&gt;
        try {&lt;br /&gt;
            stored = JSON.parse(sessionStorage.getItem(&#039;gr_search_hl&#039;) || &#039;null&#039;);&lt;br /&gt;
        } catch (e) { return; }&lt;br /&gt;
        if (!stored || !stored.query) return;&lt;br /&gt;
&lt;br /&gt;
        var currentPath = window.location.pathname;&lt;br /&gt;
        var storedPath = stored.pathname || &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
        function normPath(p) { return decodeURIComponent(p).replace(/\/+$/, &#039;&#039;); }&lt;br /&gt;
        if (storedPath &amp;amp;&amp;amp; normPath(storedPath) !== normPath(currentPath)) {&lt;br /&gt;
            try { sessionStorage.removeItem(&#039;gr_search_hl&#039;); } catch (e) { }&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var query = stored.query.trim();&lt;br /&gt;
        if (!query) return;&lt;br /&gt;
&lt;br /&gt;
        try { sessionStorage.removeItem(&#039;gr_search_hl&#039;); } catch (e) { }&lt;br /&gt;
&lt;br /&gt;
        var delays = [0, 200, 600];&lt;br /&gt;
        delays.forEach(function (ms) {&lt;br /&gt;
            setTimeout(function () {&lt;br /&gt;
                if (document.querySelector(&#039;.gr-search-hl&#039;)) return;&lt;br /&gt;
                highlightText(query);&lt;br /&gt;
            }, ms);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function highlightText(query) {&lt;br /&gt;
        var content = document.querySelector(&#039;#mw-content-text .mw-parser-output&#039;);&lt;br /&gt;
        if (!content) return;&lt;br /&gt;
&lt;br /&gt;
        var raw = query.replace(/^&amp;quot;|&amp;quot;$/g, &#039;&#039;).trim();&lt;br /&gt;
        if (!raw) return;&lt;br /&gt;
&lt;br /&gt;
        var patterns = [];&lt;br /&gt;
        patterns.push(escapeRegex(raw));&lt;br /&gt;
        raw.split(/\s+/).forEach(function (w) {&lt;br /&gt;
            if (w.length &amp;gt;= 2) patterns.push(escapeRegex(w));&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        var matched = false;&lt;br /&gt;
        for (var pi = 0; pi &amp;lt; patterns.length; pi++) {&lt;br /&gt;
            var re;&lt;br /&gt;
            try { re = new RegExp(&#039;(&#039; + patterns[pi] + &#039;)&#039;, &#039;gi&#039;); }&lt;br /&gt;
            catch (e) { continue; }&lt;br /&gt;
            var count = wrapMatches(content, re);&lt;br /&gt;
            if (count &amp;gt; 0) { matched = true; break; }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if (!matched) return;&lt;br /&gt;
&lt;br /&gt;
        var first = document.querySelector(&#039;.gr-search-hl&#039;);&lt;br /&gt;
        if (first) {&lt;br /&gt;
            first.scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; });&lt;br /&gt;
            first.classList.add(&#039;gr-search-hl-pulse&#039;);&lt;br /&gt;
            setTimeout(function () { first.classList.remove(&#039;gr-search-hl-pulse&#039;); }, 2000);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        showDismissBar(query);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function escapeRegex(s) {&lt;br /&gt;
        return s.replace(/[.*+?^${}()|[\]\\]/g, &#039;\\$&amp;amp;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function wrapMatches(root, re) {&lt;br /&gt;
        var count = 0;&lt;br /&gt;
        var walker = document.createTreeWalker(&lt;br /&gt;
            root, NodeFilter.SHOW_TEXT, {&lt;br /&gt;
            acceptNode: function (node) {&lt;br /&gt;
                var p = node.parentElement;&lt;br /&gt;
                if (!p) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
                var tag = p.tagName.toUpperCase();&lt;br /&gt;
                if (tag === &#039;SCRIPT&#039; || tag === &#039;STYLE&#039; || tag === &#039;NOSCRIPT&#039;) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
                if (p.classList.contains(&#039;gr-search-hl&#039;)) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
                return NodeFilter.FILTER_ACCEPT;&lt;br /&gt;
            }&lt;br /&gt;
        }, false&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
        var nodes = [];&lt;br /&gt;
        var node;&lt;br /&gt;
        while ((node = walker.nextNode())) nodes.push(node);&lt;br /&gt;
&lt;br /&gt;
        nodes.forEach(function (textNode) {&lt;br /&gt;
            var val = textNode.nodeValue;&lt;br /&gt;
            if (!re.test(val)) return;&lt;br /&gt;
            re.lastIndex = 0;&lt;br /&gt;
&lt;br /&gt;
            var frag = document.createDocumentFragment();&lt;br /&gt;
            var last = 0;&lt;br /&gt;
            var m;&lt;br /&gt;
            while ((m = re.exec(val)) !== null) {&lt;br /&gt;
                if (m.index &amp;gt; last) {&lt;br /&gt;
                    frag.appendChild(document.createTextNode(val.slice(last, m.index)));&lt;br /&gt;
                }&lt;br /&gt;
                var span = document.createElement(&#039;span&#039;);&lt;br /&gt;
                span.className = &#039;gr-search-hl&#039;;&lt;br /&gt;
                span.textContent = m[0];&lt;br /&gt;
                frag.appendChild(span);&lt;br /&gt;
                last = m.index + m[0].length;&lt;br /&gt;
                count++;&lt;br /&gt;
            }&lt;br /&gt;
            if (last &amp;lt; val.length) {&lt;br /&gt;
                frag.appendChild(document.createTextNode(val.slice(last)));&lt;br /&gt;
            }&lt;br /&gt;
            textNode.parentNode.replaceChild(frag, textNode);&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        return count;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function showDismissBar(query) {&lt;br /&gt;
        var existing = document.getElementById(&#039;gr-hl-bar&#039;);&lt;br /&gt;
        if (existing) existing.remove();&lt;br /&gt;
&lt;br /&gt;
        var count = document.querySelectorAll(&#039;.gr-search-hl&#039;).length;&lt;br /&gt;
        if (!count) return;&lt;br /&gt;
&lt;br /&gt;
        var isMob = window.innerWidth &amp;lt; 768 || !!document.getElementById(&#039;mw-mf-viewport&#039;);&lt;br /&gt;
        var bar = document.createElement(&#039;div&#039;);&lt;br /&gt;
        bar.id = &#039;gr-hl-bar&#039;;&lt;br /&gt;
&lt;br /&gt;
        if (isMob) {&lt;br /&gt;
            bar.style.cssText = [&lt;br /&gt;
                &#039;position:fixed&#039;, &#039;bottom:0&#039;, &#039;left:0&#039;, &#039;right:0&#039;,&lt;br /&gt;
                &#039;z-index:10200&#039;, &#039;background:#b5451b&#039;, &#039;color:#fff&#039;,&lt;br /&gt;
                &#039;padding:0&#039;, &#039;display:flex&#039;, &#039;align-items:stretch&#039;,&lt;br /&gt;
                &#039;font-family:system-ui,sans-serif&#039;,&lt;br /&gt;
                &#039;box-shadow:0 -2px 12px rgba(0,0,0,0.25)&#039;, &#039;height:56px&#039;&lt;br /&gt;
            ].join(&#039;;&#039;);&lt;br /&gt;
&lt;br /&gt;
            var mbs = &#039;flex:1;display:flex;flex-direction:column;align-items:center;&#039; +&lt;br /&gt;
                &#039;justify-content:center;background:none;border:none;color:#fff;cursor:pointer;&#039; +&lt;br /&gt;
                &#039;padding:6px 4px;font-family:system-ui,sans-serif;font-size:11px;font-weight:500;&#039; +&lt;br /&gt;
                &#039;gap:3px;-webkit-tap-highlight-color:rgba(0,0,0,0.12);&#039;;&lt;br /&gt;
&lt;br /&gt;
            bar.innerHTML =&lt;br /&gt;
                &#039;&amp;lt;button id=&amp;quot;gr-hl-prev&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;polyline points=&amp;quot;15 18 9 12 15 6&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;span&amp;gt;Prev&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;button id=&amp;quot;gr-hl-next&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;polyline points=&amp;quot;9 18 15 12 9 6&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;span&amp;gt;Next&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;button id=&amp;quot;gr-hl-results&amp;quot; style=&amp;quot;&#039; + mbs + &#039;flex:1.6;border-left:1px solid rgba(255,255,255,0.2);border-right:1px solid rgba(255,255,255,0.2);&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;circle cx=&amp;quot;11&amp;quot; cy=&amp;quot;11&amp;quot; r=&amp;quot;7&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;16.5&amp;quot; y1=&amp;quot;16.5&amp;quot; x2=&amp;quot;22&amp;quot; y2=&amp;quot;22&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;span&amp;gt;&#039; + count + &#039; match&#039; + (count === 1 ? &#039;&#039; : &#039;es&#039;) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;button id=&amp;quot;gr-hl-dismiss&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;line x1=&amp;quot;18&amp;quot; y1=&amp;quot;6&amp;quot; x2=&amp;quot;6&amp;quot; y2=&amp;quot;18&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;6&amp;quot; y1=&amp;quot;6&amp;quot; x2=&amp;quot;18&amp;quot; y2=&amp;quot;18&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;span&amp;gt;Close&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
        } else {&lt;br /&gt;
            bar.style.cssText = [&lt;br /&gt;
                &#039;position:fixed&#039;, &#039;bottom:0&#039;, &#039;left:0&#039;, &#039;right:0&#039;, &#039;z-index:10200&#039;,&lt;br /&gt;
                &#039;background:#b5451b&#039;, &#039;color:#fff&#039;, &#039;padding:10px 16px&#039;,&lt;br /&gt;
                &#039;display:flex&#039;, &#039;align-items:center&#039;, &#039;justify-content:space-between&#039;,&lt;br /&gt;
                &#039;font-family:system-ui,sans-serif&#039;, &#039;font-size:14px&#039;,&lt;br /&gt;
                &#039;box-shadow:0 -2px 8px rgba(0,0,0,0.2)&#039;&lt;br /&gt;
            ].join(&#039;;&#039;);&lt;br /&gt;
&lt;br /&gt;
            var nav = document.createElement(&#039;div&#039;);&lt;br /&gt;
            nav.style.cssText = &#039;display:flex;align-items:center;gap:12px;&#039;;&lt;br /&gt;
            nav.innerHTML =&lt;br /&gt;
                &#039;&amp;lt;span&amp;gt;🔍 &amp;lt;strong&amp;gt;&#039; + escHtml(query) + &#039;&amp;lt;/strong&amp;gt; — &#039; + count + &#039; match&#039; + (count === 1 ? &#039;&#039; : &#039;es&#039;) + &#039;&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;button id=&amp;quot;gr-hl-prev&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;↑ Prev&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;button id=&amp;quot;gr-hl-next&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;↓ Next&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
                &#039;&amp;lt;button id=&amp;quot;gr-hl-results&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;← Results&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
            bar.appendChild(nav);&lt;br /&gt;
&lt;br /&gt;
            var db = document.createElement(&#039;button&#039;);&lt;br /&gt;
            db.id = &#039;gr-hl-dismiss&#039;; db.textContent = &#039;✕ Close&#039;;&lt;br /&gt;
            db.style.cssText = &#039;background:rgba(255,255,255,0.15);border:none;color:#fff;padding:4px 12px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&#039;;&lt;br /&gt;
            bar.appendChild(db);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        document.body.appendChild(bar);&lt;br /&gt;
&lt;br /&gt;
        var hlEls = Array.from(document.querySelectorAll(&#039;.gr-search-hl&#039;));&lt;br /&gt;
        var current = 0;&lt;br /&gt;
&lt;br /&gt;
        function goTo(idx) {&lt;br /&gt;
            hlEls.forEach(function (el) { el.classList.remove(&#039;gr-search-hl-current&#039;); });&lt;br /&gt;
            current = ((idx % hlEls.length) + hlEls.length) % hlEls.length;&lt;br /&gt;
            hlEls[current].classList.add(&#039;gr-search-hl-current&#039;);&lt;br /&gt;
            hlEls[current].scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; });&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function dismiss() { clearHighlights(); bar.remove(); }&lt;br /&gt;
&lt;br /&gt;
        var nb = document.getElementById(&#039;gr-hl-next&#039;);&lt;br /&gt;
        var pb = document.getElementById(&#039;gr-hl-prev&#039;);&lt;br /&gt;
        var rb = document.getElementById(&#039;gr-hl-results&#039;);&lt;br /&gt;
        var db2 = document.getElementById(&#039;gr-hl-dismiss&#039;);&lt;br /&gt;
        if (nb) nb.onclick = function () { goTo(current + 1); };&lt;br /&gt;
        if (pb) pb.onclick = function () { goTo(current - 1); };&lt;br /&gt;
        if (db2) db2.onclick = dismiss;&lt;br /&gt;
        if (rb) rb.onclick = function () {&lt;br /&gt;
            bar.remove(); clearHighlights();&lt;br /&gt;
            if (window.showSearchDialog) window.showSearchDialog(query);&lt;br /&gt;
        };&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function clearHighlights() {&lt;br /&gt;
        document.querySelectorAll(&#039;.gr-search-hl&#039;).forEach(function (span) {&lt;br /&gt;
            var p = span.parentNode; if (!p) return;&lt;br /&gt;
            while (span.firstChild) p.insertBefore(span.firstChild, span);&lt;br /&gt;
            p.removeChild(span);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function escHtml(s) {&lt;br /&gt;
        return String(s).replace(/&amp;amp;/g, &#039;&amp;amp;amp;&#039;).replace(/&amp;lt;/g, &#039;&amp;amp;lt;&#039;).replace(/&amp;gt;/g, &#039;&amp;amp;gt;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function injectHighlightCSS() {&lt;br /&gt;
        if (document.getElementById(&#039;gr-hl-css&#039;)) return;&lt;br /&gt;
        var s = document.createElement(&#039;style&#039;);&lt;br /&gt;
        s.id = &#039;gr-hl-css&#039;;&lt;br /&gt;
        s.textContent = [&lt;br /&gt;
            &#039;.gr-search-hl{background:#fff176;color:#1a1a1a;border-radius:2px;padding:0 1px;box-shadow:0 0 0 1px rgba(181,69,27,0.25);}&#039;,&lt;br /&gt;
            &#039;.gr-search-hl-current{background:#ffb300!important;box-shadow:0 0 0 2px #b5451b!important;}&#039;,&lt;br /&gt;
            &#039;@keyframes gr-hl-pulse{0%{background:#ffb300;}50%{background:#fff176;}100%{background:#fff176;}}&#039;,&lt;br /&gt;
            &#039;.gr-search-hl-pulse{animation:gr-hl-pulse 1.2s ease 2;}&#039;,&lt;br /&gt;
        ].join(&#039;&#039;);&lt;br /&gt;
        document.head.appendChild(s);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    injectHighlightCSS();&lt;br /&gt;
&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) {&lt;br /&gt;
        document.addEventListener(&#039;DOMContentLoaded&#039;, applyHighlight);&lt;br /&gt;
    } else {&lt;br /&gt;
        applyHighlight();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (window.mw) {&lt;br /&gt;
        mw.hook(&#039;wikipage.content&#039;).add(function () {&lt;br /&gt;
            setTimeout(applyHighlight, 100);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    window.grStoreSearchHL = storeQueryForLink;&lt;br /&gt;
&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
/* ═══════════════════════════════════════════════════════════════&lt;br /&gt;
   Mobile addon — only runs on Minerva (mobile) skin&lt;br /&gt;
   ═══════════════════════════════════════════════════════════════ */&lt;br /&gt;
(function () {&lt;br /&gt;
    if (!document.body.classList.contains(&#039;skin-minerva&#039;)) return;&lt;br /&gt;
    function injectCSS() {&lt;br /&gt;
        if (document.getElementById(&#039;gr-mob-css&#039;)) return;&lt;br /&gt;
        var s = document.createElement(&#039;style&#039;);&lt;br /&gt;
        s.id = &#039;gr-mob-css&#039;;&lt;br /&gt;
        s.textContent =&lt;br /&gt;
            &#039;body,#mw-mf-viewport,#mw-mf-page-center{padding-top:0!important;margin-top:0!important;}&#039; +&lt;br /&gt;
            &#039;html,body,#mw-mf-viewport,#mw-mf-page-center{overflow-x:hidden!important;max-width:100vw!important;}&#039; +&lt;br /&gt;
            &#039;header.header-container{background:#b5451b!important;position:sticky!important;top:0!important;z-index:300!important;}&#039; +&lt;br /&gt;
            &#039;.minerva-header{background:#b5451b!important;min-height:54px!important;}&#039; +&lt;br /&gt;
            &#039;.minerva-header .search-toggle,.minerva-header .minerva-user-notifications{display:none!important;}&#039; +&lt;br /&gt;
            &#039;.branding-box a{display:flex!important;align-items:center!important;text-decoration:none!important;max-width:calc(100vw - 80px)!important;}&#039; +&lt;br /&gt;
            &#039;.branding-box a::before{content:&amp;quot;&amp;quot;;display:block;width:30px;height:30px;flex-shrink:0;background:url(&amp;quot;/favicon.png&amp;quot;) center/contain no-repeat;margin-right:8px;}&#039; +&lt;br /&gt;
            &#039;.branding-box a span{color:#fff!important;font-size:16px!important;font-weight:700!important;font-family:system-ui,sans-serif!important;line-height:1.2!important;flex:1 1 auto!important;min-width:0!important;}&#039; +&lt;br /&gt;
            &#039;.minerva-header svg path,.minerva-header svg rect,.minerva-header svg circle{fill:#fff!important;}&#039; +&lt;br /&gt;
            &#039;.minerva-header label{color:#fff!important;}&#039; +&lt;br /&gt;
            &#039;.minerva-tabs,.mw-portlet-associated-pages,.page-actions-menu,#page-secondary-actions,.last-modified-bar,.minerva-anon-talk-link{display:none!important;}&#039; +&lt;br /&gt;
            &#039;#gr-mob-menu-items{display:block!important;}&#039; +&lt;br /&gt;
            &#039;.mw-footer.minerva-footer,.footer-places,.footer-info,.minerva-footer-logo,#footer-places-about,#footer-places-disclaimers,#footer-places-privacy{display:none!important;}&#039; +&lt;br /&gt;
            &#039;#gr-static-bar{position:sticky!important;top:54px!important;z-index:200!important;}&#039; +&lt;br /&gt;
            &#039;.mf-section-0,.mf-section-1,.mf-section-2,.mf-section-3,.mf-section-4,.mf-section-5,.mf-section-6,.mf-section-7,.mf-section-8,.mf-section-9,.mf-section-10{display:block!important;visibility:visible!important;}&#039; +&lt;br /&gt;
            &#039;.collapsible-block{display:block!important;}&#039; +&lt;br /&gt;
            &#039;.section-heading .indicator,.collapsible-heading .indicator{display:none!important;}&#039; +&lt;br /&gt;
            &#039;.section-heading,.collapsible-heading{pointer-events:none!important;}&#039; +&lt;br /&gt;
            &#039;.gr-home-grid{flex-direction:column!important;flex-wrap:nowrap!important;gap:12px!important;width:100%!important;}&#039; +&lt;br /&gt;
            &#039;.gr-home-card{width:100%!important;max-width:100%!important;min-width:unset!important;box-sizing:border-box!important;flex:none!important;}&#039; +&lt;br /&gt;
            &#039;.gr-home-toggle{flex-wrap:wrap!important;}&#039; +&lt;br /&gt;
            &#039;.mw-parser-output{font-size:18px!important;line-height:1.8!important;}&#039; +&lt;br /&gt;
            &#039;.mw-parser-output h2,.mw-parser-output h3{width:100%!important;}&#039; +&lt;br /&gt;
            &#039;.bhashyam-block{margin-left:8px!important;}&#039; +&lt;br /&gt;
            &#039;#footer,.mw-footer,.catlinks,#catlinks{display:none!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-panel{position:fixed!important;top:0!important;left:0!important;bottom:0!important;width:82vw!important;max-width:340px!important;background:#fff!important;z-index:10400!important;box-shadow:4px 0 28px rgba(0,0,0,0.22)!important;overflow-y:auto!important;padding:0 0 40px!important;transform:translateX(-110%)!important;transition:transform 0.26s cubic-bezier(0.4,0,0.2,1)!important;display:block!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-panel.open{transform:translateX(0)!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-backdrop{display:none!important;position:fixed!important;inset:0!important;background:rgba(0,0,0,0.4)!important;z-index:10399!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-backdrop.open{display:block!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-header{position:sticky!important;top:0!important;background:#fff!important;display:flex!important;align-items:center!important;justify-content:space-between!important;padding:16px 16px 12px!important;border-bottom:1px solid #f0ebe6!important;z-index:1!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-title{font-size:13px!important;font-weight:700!important;text-transform:uppercase!important;letter-spacing:0.08em!important;color:#b5451b!important;font-family:system-ui,sans-serif!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-close{background:none!important;border:none!important;font-size:22px!important;color:#999!important;cursor:pointer!important;padding:4px 8px!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-body{padding:12px 16px!important;}&#039; +&lt;br /&gt;
            &#039;.gr-mob-toc-body a{display:block!important;font-size:16px!important;line-height:1.6!important;color:#2c1810!important;text-decoration:none!important;padding:8px 0!important;border-bottom:1px solid #f5f0ed!important;}&#039;;&lt;br /&gt;
        document.head.appendChild(s);&lt;br /&gt;
    }&lt;br /&gt;
    function expandSections() {&lt;br /&gt;
        document.querySelectorAll(&#039;[class*=&amp;quot;mf-section-&amp;quot;], .collapsible-block&#039;).forEach(function (el) { el.removeAttribute(&#039;hidden&#039;); el.style.setProperty(&#039;display&#039;, &#039;block&#039;, &#039;important&#039;); el.style.setProperty(&#039;visibility&#039;, &#039;visible&#039;, &#039;important&#039;); el.removeAttribute(&#039;aria-hidden&#039;); });&lt;br /&gt;
        document.querySelectorAll(&#039;.section-heading, .collapsible-heading&#039;).forEach(function (el) { el.setAttribute(&#039;aria-expanded&#039;, &#039;true&#039;); el.style.setProperty(&#039;pointer-events&#039;, &#039;none&#039;, &#039;important&#039;); });&lt;br /&gt;
    }&lt;br /&gt;
    function watchSections() {&lt;br /&gt;
        var t = null;&lt;br /&gt;
        var obs = new MutationObserver(function (ms) { if (ms.some(function (m) { return m.attributeName === &#039;hidden&#039;; })) { clearTimeout(t); t = setTimeout(expandSections, 30); } });&lt;br /&gt;
        obs.observe(document.querySelector(&#039;#mw-content-text&#039;) || document.body, { subtree: true, attributes: true, attributeFilter: [&#039;hidden&#039;, &#039;aria-hidden&#039;] });&lt;br /&gt;
    }&lt;br /&gt;
    function watchBodyPadding() {&lt;br /&gt;
        new MutationObserver(function () { if (document.body.style.paddingTop &amp;amp;&amp;amp; document.body.style.paddingTop !== &#039;0px&#039;) document.body.style.paddingTop = &#039;&#039;; }).observe(document.body, { attributes: true, attributeFilter: [&#039;style&#039;] });&lt;br /&gt;
    }&lt;br /&gt;
    function injectMenuLinks() {&lt;br /&gt;
        if (document.getElementById(&#039;gr-mob-menu-items&#039;)) return;&lt;br /&gt;
        var navDrawer = document.querySelector(&#039;.navigation-drawer&#039;);&lt;br /&gt;
        if (!navDrawer) return;&lt;br /&gt;
        var wrap = document.createElement(&#039;div&#039;); wrap.id = &#039;gr-mob-menu-items&#039;; wrap.style.cssText = &#039;width:100%;background:#fff;margin-top:8px;&#039;;&lt;br /&gt;
        var itemStyle = &#039;display:flex;align-items:center;gap:14px;padding:15px 20px;font-size:16px;color:#2c1810;text-decoration:none;font-family:system-ui,sans-serif;border-bottom:1px solid #f0ebe6;background:#fff;&#039;;&lt;br /&gt;
        function makeItem(href, label) { var a = document.createElement(&#039;a&#039;); a.href = href; a.style.cssText = itemStyle; a.innerHTML = &#039;&amp;lt;span&amp;gt;&#039; + label + &#039;&amp;lt;/span&amp;gt;&#039;; return a; }&lt;br /&gt;
        wrap.appendChild(makeItem(&#039;/Main_Page&#039;, &#039;Home&#039;));&lt;br /&gt;
        wrap.appendChild(makeItem(&#039;/My_wiki:Help&#039;, &#039;Help&#039;));&lt;br /&gt;
        wrap.appendChild(makeItem(&#039;/My_wiki:About&#039;, &#039;About&#039;));&lt;br /&gt;
        var userName = window.mw ? mw.config.get(&#039;wgUserName&#039;) : null;&lt;br /&gt;
        if (userName) {&lt;br /&gt;
            wrap.appendChild(makeItem((window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl) ? mw.util.getUrl(&#039;Special:Profile&#039;) : &#039;/Special:Profile&#039;, &#039;Profile&#039;));&lt;br /&gt;
            var la = document.querySelector(&#039;a[href*=&amp;quot;action=logout&amp;quot;]&#039;);&lt;br /&gt;
            wrap.appendChild(makeItem(la ? la.href : &#039;/index.php?title=Special:UserLogout&#039;, &#039;Log out&#039;));&lt;br /&gt;
        }&lt;br /&gt;
        else wrap.appendChild(makeItem(&#039;/index.php?title=Special:UserLogin&#039;, &#039;Log in&#039;));&lt;br /&gt;
        var pageLeft = document.getElementById(&#039;mw-mf-page-left&#039;);&lt;br /&gt;
        if (pageLeft) { while (pageLeft.firstChild) pageLeft.removeChild(pageLeft.firstChild); pageLeft.style.removeProperty(&#039;display&#039;); pageLeft.appendChild(wrap); }&lt;br /&gt;
        else navDrawer.appendChild(wrap);&lt;br /&gt;
    }&lt;br /&gt;
    var _tocDone = false;&lt;br /&gt;
    function initToc() {&lt;br /&gt;
        if (_tocDone) return;&lt;br /&gt;
        var tocList = document.querySelector(&#039;.vector-toc-contents, .vector-toc .vector-toc-list&#039;);&lt;br /&gt;
        if (!tocList || !tocList.querySelector(&#039;li&#039;)) return;&lt;br /&gt;
        _tocDone = true;&lt;br /&gt;
        var bd = document.createElement(&#039;div&#039;); bd.className = &#039;gr-mob-toc-backdrop&#039;; document.body.appendChild(bd);&lt;br /&gt;
        var panel = document.createElement(&#039;div&#039;); panel.className = &#039;gr-mob-toc-panel&#039;;&lt;br /&gt;
        var hdr = document.createElement(&#039;div&#039;); hdr.className = &#039;gr-mob-toc-header&#039;;&lt;br /&gt;
        var ttl = document.createElement(&#039;div&#039;); ttl.className = &#039;gr-mob-toc-title&#039;; ttl.textContent = &#039;विषयसूची&#039;;&lt;br /&gt;
        var cls = document.createElement(&#039;button&#039;); cls.className = &#039;gr-mob-toc-close&#039;; cls.textContent = &#039;✕&#039;;&lt;br /&gt;
        hdr.appendChild(ttl); hdr.appendChild(cls); panel.appendChild(hdr);&lt;br /&gt;
        var body = document.createElement(&#039;div&#039;); body.className = &#039;gr-mob-toc-body&#039;; body.appendChild(tocList.cloneNode(true)); panel.appendChild(body); document.body.appendChild(panel);&lt;br /&gt;
        var btn = document.createElement(&#039;button&#039;); btn.id = &#039;gr-mob-toc-btn&#039;; btn.innerHTML = &#039;☰ &amp;amp;nbsp;Contents&#039;;&lt;br /&gt;
        btn.style.cssText = &#039;position:fixed;bottom:148px;left:16px;z-index:9100;background:#fff;border:1.5px solid #b5451b;border-radius:24px;padding:10px 16px;font-size:15px;font-family:system-ui,sans-serif;color:#b5451b;font-weight:600;box-shadow:0 3px 14px rgba(0,0,0,0.15);cursor:pointer;&#039;;&lt;br /&gt;
        document.body.appendChild(btn);&lt;br /&gt;
        function open() { panel.classList.add(&#039;open&#039;); bd.classList.add(&#039;open&#039;); document.body.style.overflow = &#039;hidden&#039;; }&lt;br /&gt;
        function close() { panel.classList.remove(&#039;open&#039;); bd.classList.remove(&#039;open&#039;); document.body.style.overflow = &#039;&#039;; }&lt;br /&gt;
        btn.onclick = open; cls.onclick = close; bd.onclick = close;&lt;br /&gt;
        body.querySelectorAll(&#039;a&#039;).forEach(function (a) { a.onclick = close; });&lt;br /&gt;
    }&lt;br /&gt;
    function injectMoolaUllekhaLinks() {&lt;br /&gt;
        if (document.getElementById(&#039;gr-mob-doc-nav&#039;)) return;&lt;br /&gt;
        var pageName = (window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get(&#039;wgPageName&#039;)) || &#039;&#039;;&lt;br /&gt;
        if (pageName === &#039;Main_Page&#039; || !pageName) return;&lt;br /&gt;
        function wikiUrl(slug) { if (window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl) return mw.util.getUrl(slug); return ((window.mw &amp;amp;&amp;amp; mw.config.get(&#039;wgArticlePath&#039;)) || &#039;/wiki/$1&#039;).replace(&#039;$1&#039;, encodeURIComponent(slug).replace(/%2F/g, &#039;/&#039;)); }&lt;br /&gt;
        var teekaPage = document.querySelector(&#039;.gr-teeka-page&#039;);&lt;br /&gt;
        var primarySlug = teekaPage ? (teekaPage.getAttribute(&#039;data-primary&#039;) || pageName.split(&#039;/&#039;)[0]) : pageName.split(&#039;/&#039;)[0];&lt;br /&gt;
        var docTitleEl = document.querySelector(&#039;.gr-doc-title&#039;);&lt;br /&gt;
        var hasMoolaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute(&#039;data-has-moola&#039;) === &#039;1&#039;;&lt;br /&gt;
        var hasUllekhaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute(&#039;data-has-ullekha&#039;) === &#039;1&#039;;&lt;br /&gt;
        var showMoolam = !!teekaPage || hasMoolaPage, showUllekha = hasUllekhaPage || !!teekaPage;&lt;br /&gt;
        if (!showMoolam &amp;amp;&amp;amp; !showUllekha) return;&lt;br /&gt;
        var nav = document.createElement(&#039;div&#039;); nav.id = &#039;gr-mob-doc-nav&#039;;&lt;br /&gt;
        nav.style.cssText = &#039;display:flex;gap:10px;padding:10px 16px 8px;background:#fdf8f5;border-bottom:1px solid #f0e0d6;font-family:system-ui,sans-serif;&#039;;&lt;br /&gt;
        function makeLink(href, label) { var a = document.createElement(&#039;a&#039;); a.href = href; a.textContent = label; a.style.cssText = &#039;display:inline-flex;align-items:center;padding:5px 16px;border-radius:20px;background:#fff;border:1.5px solid #e8cfc4;color:#b5451b;font-size:14px;font-weight:600;text-decoration:none;&#039;; return a; }&lt;br /&gt;
        if (teekaPage) nav.appendChild(makeLink(wikiUrl(primarySlug), &#039;मूल&#039;));&lt;br /&gt;
        else if (hasMoolaPage) nav.appendChild(makeLink(wikiUrl(primarySlug + &#039;/Moola&#039;), &#039;मूलम्&#039;));&lt;br /&gt;
        if (showUllekha) nav.appendChild(makeLink(wikiUrl(primarySlug + &#039;/Ullekha&#039;), &#039;उल्लेख&#039;));&lt;br /&gt;
        var h1 = document.getElementById(&#039;firstHeading&#039;) || document.querySelector(&#039;.page-heading, h1.firstHeading, .mw-first-heading&#039;);&lt;br /&gt;
        if (h1 &amp;amp;&amp;amp; h1.parentNode) h1.parentNode.insertBefore(nav, h1.nextSibling);&lt;br /&gt;
        else { var ct = document.getElementById(&#039;mw-content-text&#039;); if (ct) ct.insertBefore(nav, ct.firstChild); }&lt;br /&gt;
    }&lt;br /&gt;
    injectCSS(); watchBodyPadding();&lt;br /&gt;
    function boot() { expandSections(); watchSections(); injectMenuLinks(); injectMoolaUllekhaLinks();[100, 400, 900, 1800].forEach(function (ms) { setTimeout(expandSections, ms); }); setTimeout(initToc, 700); }&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) document.addEventListener(&#039;DOMContentLoaded&#039;, boot);&lt;br /&gt;
    else boot();&lt;br /&gt;
    if (window.mw) mw.hook(&#039;wikipage.content&#039;).add(function () { setTimeout(function () { expandSections(); injectMenuLinks(); injectMoolaUllekhaLinks(); initToc(); }, 300); });&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(function () {&lt;br /&gt;
    &#039;use strict&#039;;&lt;br /&gt;
    mw.hook(&#039;wikipage.content&#039;).add(function () {&lt;br /&gt;
        setTimeout(function () {&lt;br /&gt;
            var blocks = document.querySelectorAll(&#039;.collapsible-block, .toggle-list&#039;);&lt;br /&gt;
            Array.prototype.forEach.call(blocks, function (el) { if (!el.parentNode) { try { el.remove(); } catch (e) { } } });&lt;br /&gt;
        }, 0);&lt;br /&gt;
    });&lt;br /&gt;
    if (mw.config.get(&#039;wgPageName&#039;) !== &#039;Main_Page&#039;) return;&lt;br /&gt;
    mw.loader.using(&#039;mediawiki.util&#039;).done(function () {&lt;br /&gt;
        $(function () { applyHomeToggleOffset(); window.addEventListener(&#039;resize&#039;, applyHomeToggleOffset, { passive: true }); setTimeout(applyHomeToggleOffset, 300); setTimeout(applyHomeToggleOffset, 800); });&lt;br /&gt;
    });&lt;br /&gt;
    function applyHomeToggleOffset() {&lt;br /&gt;
        var bar = document.getElementById(&#039;gr-static-bar&#039;); if (!bar) return;&lt;br /&gt;
        var barBottom = Math.round(bar.getBoundingClientRect().bottom);&lt;br /&gt;
        [document.getElementById(&#039;gr-home&#039;), document.getElementById(&#039;gr-home-toggle&#039;), document.querySelector(&#039;#mw-content-text .mw-parser-output &amp;gt; .gr-home, #mw-content-text .mw-parser-output &amp;gt; *:first-child&#039;)].forEach(function (el) { if (el) el.style.scrollMarginTop = (barBottom + 4) + &#039;px&#039;; });&lt;br /&gt;
        var isMob = window.innerWidth &amp;lt; 768 || !!document.getElementById(&#039;mw-mf-viewport&#039;);&lt;br /&gt;
        if (isMob) { var toggleEl = document.getElementById(&#039;gr-home-toggle&#039;); if (toggleEl) { var tr = toggleEl.getBoundingClientRect(); if (tr.top &amp;lt; barBottom) { var cp = parseInt(window.getComputedStyle(document.body).paddingTop, 10) || 0; document.body.style.paddingTop = (cp + (barBottom - tr.top) + 4) + &#039;px&#039;; } } }&lt;br /&gt;
    }&lt;br /&gt;
    $(function () {&lt;br /&gt;
        var $toggle = $(&#039;#gr-home-toggle&#039;), $viewG = $(&#039;#gr-view-grantha&#039;), $viewA = $(&#039;#gr-view-author&#039;), $btnG = $(&#039;#gr-toggle-grantha&#039;), $btnA = $(&#039;#gr-toggle-author&#039;);&lt;br /&gt;
        if (!$toggle.length || !$viewG.length || !$viewA.length) return; if ($toggle.data(&#039;gr-wired&#039;)) return; $toggle.data(&#039;gr-wired&#039;, true);&lt;br /&gt;
        function showView(which) { if (which === &#039;grantha&#039;) { $viewG.show(); $viewA.hide(); $btnG.addClass(&#039;gr-toggle-active&#039;); $btnA.removeClass(&#039;gr-toggle-active&#039;); } else { $viewA.show(); $viewG.hide(); $btnA.addClass(&#039;gr-toggle-active&#039;); $btnG.removeClass(&#039;gr-toggle-active&#039;); } try { localStorage.setItem(&#039;grantha_home_tab&#039;, which); } catch (e) { } }&lt;br /&gt;
        $btnG.on(&#039;click keydown&#039;, function (e) { if (e.type === &#039;keydown&#039; &amp;amp;&amp;amp; e.key !== &#039;Enter&#039; &amp;amp;&amp;amp; e.key !== &#039; &#039;) return; showView(&#039;grantha&#039;); });&lt;br /&gt;
        $btnA.on(&#039;click keydown&#039;, function (e) { if (e.type === &#039;keydown&#039; &amp;amp;&amp;amp; e.key !== &#039;Enter&#039; &amp;amp;&amp;amp; e.key !== &#039; &#039;) return; showView(&#039;author&#039;); });&lt;br /&gt;
        try { var saved = localStorage.getItem(&#039;grantha_home_tab&#039;); if (saved === &#039;author&#039;) showView(&#039;author&#039;); else showView(&#039;grantha&#039;); } catch (e) { showView(&#039;grantha&#039;); }&lt;br /&gt;
    });&lt;br /&gt;
}());&lt;br /&gt;
// ── Replace MediaWiki user links with a single username dropdown (Profile + Logout) ──&lt;br /&gt;
(function () {&lt;br /&gt;
    function wikiHref(title) {&lt;br /&gt;
        if (window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl) return mw.util.getUrl(title);&lt;br /&gt;
        var ap = (window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get(&#039;wgArticlePath&#039;)) || &#039;/wiki/$1&#039;;&lt;br /&gt;
        return ap.replace(&#039;$1&#039;, title);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function buildLogoutForm(token) {&lt;br /&gt;
        token = token || &#039;&#039;;&lt;br /&gt;
        var esc = String(token).replace(/&amp;quot;/g, &#039;&amp;amp;quot;&#039;);&lt;br /&gt;
        var script = (window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.wikiScript) ? mw.util.wikiScript() : &#039;/index.php&#039;;&lt;br /&gt;
        var form = document.createElement(&#039;form&#039;);&lt;br /&gt;
        form.method = &#039;post&#039;;&lt;br /&gt;
        form.action = script + &#039;?title=Special:UserLogout&#039;;&lt;br /&gt;
        form.style.display = &#039;none&#039;;&lt;br /&gt;
        form.innerHTML =&lt;br /&gt;
            &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;wpEditToken&amp;quot; value=&amp;quot;&#039; + esc + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
            &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;title&amp;quot; value=&amp;quot;Special:UserLogout&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
            &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;returnto&amp;quot; value=&amp;quot;Main Page&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
        document.body.appendChild(form);&lt;br /&gt;
        return form;&lt;br /&gt;
    }&lt;br /&gt;
}());&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.js&amp;diff=6215</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.js&amp;diff=6215"/>
		<updated>2026-06-12T17:35:29Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: Undo revision 6214 by Vaishnavi (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* MediaWiki:Common.js — grantha.io  (v7) */&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
  var LS_SCRIPT_KEY = &#039;grantha_reader_script&#039;;&lt;br /&gt;
  var currentScript = &#039;deva&#039;;&lt;br /&gt;
&lt;br /&gt;
  function devanagariToIAST( text ) {&lt;br /&gt;
    var CONSONANTS = {&lt;br /&gt;
      &#039;क&#039;:&#039;k&#039;,&#039;ख&#039;:&#039;kh&#039;,&#039;ग&#039;:&#039;g&#039;,&#039;घ&#039;:&#039;gh&#039;,&#039;ङ&#039;:&#039;ṅ&#039;,&lt;br /&gt;
      &#039;च&#039;:&#039;c&#039;,&#039;छ&#039;:&#039;ch&#039;,&#039;ज&#039;:&#039;j&#039;,&#039;झ&#039;:&#039;jh&#039;,&#039;ञ&#039;:&#039;ñ&#039;,&lt;br /&gt;
      &#039;ट&#039;:&#039;ṭ&#039;,&#039;ठ&#039;:&#039;ṭh&#039;,&#039;ड&#039;:&#039;ḍ&#039;,&#039;ढ&#039;:&#039;ḍh&#039;,&#039;ण&#039;:&#039;ṇ&#039;,&lt;br /&gt;
      &#039;त&#039;:&#039;t&#039;,&#039;थ&#039;:&#039;th&#039;,&#039;द&#039;:&#039;d&#039;,&#039;ध&#039;:&#039;dh&#039;,&#039;न&#039;:&#039;n&#039;,&lt;br /&gt;
      &#039;प&#039;:&#039;p&#039;,&#039;फ&#039;:&#039;ph&#039;,&#039;ब&#039;:&#039;b&#039;,&#039;भ&#039;:&#039;bh&#039;,&#039;म&#039;:&#039;m&#039;,&lt;br /&gt;
      &#039;य&#039;:&#039;y&#039;,&#039;र&#039;:&#039;r&#039;,&#039;ल&#039;:&#039;l&#039;,&#039;ळ&#039;:&#039;ḷ&#039;,&#039;व&#039;:&#039;v&#039;,&lt;br /&gt;
      &#039;श&#039;:&#039;ś&#039;,&#039;ष&#039;:&#039;ṣ&#039;,&#039;स&#039;:&#039;s&#039;,&#039;ह&#039;:&#039;h&#039;&lt;br /&gt;
    };&lt;br /&gt;
    var DIACRITICS = {&lt;br /&gt;
      &#039;ा&#039;:&#039;ā&#039;,&#039;ि&#039;:&#039;i&#039;,&#039;ी&#039;:&#039;ī&#039;,&#039;ु&#039;:&#039;u&#039;,&#039;ू&#039;:&#039;ū&#039;,&lt;br /&gt;
      &#039;ृ&#039;:&#039;ṛ&#039;,&#039;ॄ&#039;:&#039;ṝ&#039;,&#039;े&#039;:&#039;e&#039;,&#039;ै&#039;:&#039;ai&#039;,&#039;ो&#039;:&#039;o&#039;,&#039;ौ&#039;:&#039;au&#039;&lt;br /&gt;
    };&lt;br /&gt;
    var VOWELS = {&lt;br /&gt;
      &#039;अ&#039;:&#039;a&#039;,&#039;आ&#039;:&#039;ā&#039;,&#039;इ&#039;:&#039;i&#039;,&#039;ई&#039;:&#039;ī&#039;,&#039;उ&#039;:&#039;u&#039;,&#039;ऊ&#039;:&#039;ū&#039;,&lt;br /&gt;
      &#039;ऋ&#039;:&#039;ṛ&#039;,&#039;ॠ&#039;:&#039;ṝ&#039;,&#039;ए&#039;:&#039;e&#039;,&#039;ऐ&#039;:&#039;ai&#039;,&#039;ओ&#039;:&#039;o&#039;,&#039;औ&#039;:&#039;au&#039;,&#039;ऽ&#039;:&amp;quot;&#039;&amp;quot;&lt;br /&gt;
    };&lt;br /&gt;
    var MISC = {&lt;br /&gt;
      &#039;ं&#039;:&#039;ṃ&#039;,&#039;ः&#039;:&#039;ḥ&#039;,&#039;ँ&#039;:&#039;m̐&#039;,&#039;ॐ&#039;:&#039;oṃ&#039;,&lt;br /&gt;
      &#039;०&#039;:&#039;0&#039;,&#039;१&#039;:&#039;1&#039;,&#039;२&#039;:&#039;2&#039;,&#039;३&#039;:&#039;3&#039;,&#039;४&#039;:&#039;4&#039;,&lt;br /&gt;
      &#039;५&#039;:&#039;5&#039;,&#039;६&#039;:&#039;6&#039;,&#039;७&#039;:&#039;7&#039;,&#039;८&#039;:&#039;8&#039;,&#039;९&#039;:&#039;9&#039;&lt;br /&gt;
    };&lt;br /&gt;
    var HALANTA = &#039;्&#039;;&lt;br /&gt;
    var chars = Array.from( text );&lt;br /&gt;
    var result = &#039;&#039;;&lt;br /&gt;
    var i = 0;&lt;br /&gt;
    while ( i &amp;lt; chars.length ) {&lt;br /&gt;
      var ch   = chars[ i ];&lt;br /&gt;
      var next = chars[ i + 1 ];&lt;br /&gt;
      if ( CONSONANTS[ ch ] ) {&lt;br /&gt;
        var base = CONSONANTS[ ch ];&lt;br /&gt;
        if ( next === HALANTA )          { result += base;               i += 2; }&lt;br /&gt;
        else if ( DIACRITICS[ next ] )   { result += base + DIACRITICS[ next ]; i += 2; }&lt;br /&gt;
        else if ( next === &#039;ं&#039; || next === &#039;ः&#039; ) { result += base + &#039;a&#039; + MISC[ next ]; i += 2; }&lt;br /&gt;
        else                             { result += base + &#039;a&#039;;         i++;    }&lt;br /&gt;
      } else if ( VOWELS[ ch ] )         { result += VOWELS[ ch ];       i++; }&lt;br /&gt;
      else if ( DIACRITICS[ ch ] )       { result += DIACRITICS[ ch ];   i++; }&lt;br /&gt;
      else if ( MISC[ ch ] )             { result += MISC[ ch ];         i++; }&lt;br /&gt;
      else                               { result += ch;                 i++; }&lt;br /&gt;
    }&lt;br /&gt;
    return result;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var SCRIPT_MAP = {&lt;br /&gt;
    kn: {&lt;br /&gt;
      &#039;अ&#039;:&#039;ಅ&#039;,&#039;आ&#039;:&#039;ಆ&#039;,&#039;इ&#039;:&#039;ಇ&#039;,&#039;ई&#039;:&#039;ಈ&#039;,&#039;उ&#039;:&#039;ಉ&#039;,&#039;ऊ&#039;:&#039;ಊ&#039;,&#039;ऋ&#039;:&#039;ಋ&#039;,&lt;br /&gt;
      &#039;ए&#039;:&#039;ಏ&#039;,&#039;ऐ&#039;:&#039;ಐ&#039;,&#039;ओ&#039;:&#039;ಓ&#039;,&#039;औ&#039;:&#039;ಔ&#039;,&#039;ऽ&#039;:&#039;ಽ&#039;,&lt;br /&gt;
      &#039;क&#039;:&#039;ಕ&#039;,&#039;ख&#039;:&#039;ಖ&#039;,&#039;ग&#039;:&#039;ಗ&#039;,&#039;घ&#039;:&#039;ಘ&#039;,&#039;ङ&#039;:&#039;ಙ&#039;,&lt;br /&gt;
      &#039;च&#039;:&#039;ಚ&#039;,&#039;छ&#039;:&#039;ಛ&#039;,&#039;ज&#039;:&#039;ಜ&#039;,&#039;झ&#039;:&#039;ಝ&#039;,&#039;ञ&#039;:&#039;ಞ&#039;,&lt;br /&gt;
      &#039;ट&#039;:&#039;ಟ&#039;,&#039;ठ&#039;:&#039;ಠ&#039;,&#039;ड&#039;:&#039;ಡ&#039;,&#039;ढ&#039;:&#039;ಢ&#039;,&#039;ण&#039;:&#039;ಣ&#039;,&lt;br /&gt;
      &#039;त&#039;:&#039;ತ&#039;,&#039;थ&#039;:&#039;ಥ&#039;,&#039;द&#039;:&#039;ದ&#039;,&#039;ध&#039;:&#039;ಧ&#039;,&#039;न&#039;:&#039;ನ&#039;,&lt;br /&gt;
      &#039;प&#039;:&#039;ಪ&#039;,&#039;फ&#039;:&#039;ಫ&#039;,&#039;ब&#039;:&#039;ಬ&#039;,&#039;भ&#039;:&#039;ಭ&#039;,&#039;म&#039;:&#039;ಮ&#039;,&lt;br /&gt;
      &#039;य&#039;:&#039;ಯ&#039;,&#039;र&#039;:&#039;ರ&#039;,&#039;ल&#039;:&#039;ಲ&#039;,&#039;व&#039;:&#039;ವ&#039;,&lt;br /&gt;
      &#039;श&#039;:&#039;ಶ&#039;,&#039;ष&#039;:&#039;ಷ&#039;,&#039;स&#039;:&#039;ಸ&#039;,&#039;ह&#039;:&#039;ಹ&#039;,&lt;br /&gt;
      &#039;ा&#039;:&#039;ಾ&#039;,&#039;ि&#039;:&#039;ಿ&#039;,&#039;ी&#039;:&#039;ೀ&#039;,&#039;ु&#039;:&#039;ು&#039;,&#039;ू&#039;:&#039;ೂ&#039;,&lt;br /&gt;
      &#039;ृ&#039;:&#039;ೃ&#039;,&#039;े&#039;:&#039;ೇ&#039;,&#039;ै&#039;:&#039;ೈ&#039;,&#039;ो&#039;:&#039;ೋ&#039;,&#039;ौ&#039;:&#039;ೌ&#039;,&lt;br /&gt;
      &#039;ं&#039;:&#039;ಂ&#039;,&#039;ः&#039;:&#039;ಃ&#039;,&#039;्&#039;:&#039;್&#039;,&lt;br /&gt;
      &#039;०&#039;:&#039;೦&#039;,&#039;१&#039;:&#039;೧&#039;,&#039;२&#039;:&#039;೨&#039;,&#039;३&#039;:&#039;೩&#039;,&#039;४&#039;:&#039;೪&#039;,&lt;br /&gt;
      &#039;५&#039;:&#039;೫&#039;,&#039;६&#039;:&#039;೬&#039;,&#039;७&#039;:&#039;೭&#039;,&#039;८&#039;:&#039;೮&#039;,&#039;९&#039;:&#039;೯&#039;&lt;br /&gt;
    },&lt;br /&gt;
    ta: {&lt;br /&gt;
      &#039;अ&#039;:&#039;அ&#039;,&#039;आ&#039;:&#039;ஆ&#039;,&#039;इ&#039;:&#039;இ&#039;,&#039;ई&#039;:&#039;ஈ&#039;,&#039;उ&#039;:&#039;உ&#039;,&#039;ऊ&#039;:&#039;ஊ&#039;,&lt;br /&gt;
      &#039;ऋ&#039;:&#039;ரு&#039;,&#039;ॠ&#039;:&#039;ரூ&#039;,&lt;br /&gt;
      &#039;ए&#039;:&#039;ஏ&#039;,&#039;ऐ&#039;:&#039;ஐ&#039;,&#039;ओ&#039;:&#039;ஓ&#039;,&#039;औ&#039;:&#039;ஔ&#039;,&lt;br /&gt;
      &#039;क&#039;:&#039;க&#039;,&#039;ख&#039;:&#039;க&#039;,&#039;ग&#039;:&#039;க&#039;,&#039;घ&#039;:&#039;க&#039;,&#039;ङ&#039;:&#039;ங&#039;,&lt;br /&gt;
      &#039;च&#039;:&#039;ச&#039;,&#039;छ&#039;:&#039;ச&#039;,&#039;ज&#039;:&#039;ஜ&#039;,&#039;झ&#039;:&#039;ஜ&#039;,&#039;ञ&#039;:&#039;ஞ&#039;,&lt;br /&gt;
      &#039;ட&#039;:&#039;ட&#039;,&#039;ठ&#039;:&#039;ட&#039;,&#039;ड&#039;:&#039;ட&#039;,&#039;ढ&#039;:&#039;ட&#039;,&#039;ண&#039;:&#039;ண&#039;,&lt;br /&gt;
      &#039;त&#039;:&#039;த&#039;,&#039;थ&#039;:&#039;த&#039;,&#039;द&#039;:&#039;த&#039;,&#039;ध&#039;:&#039;த&#039;,&#039;न&#039;:&#039;ந&#039;,&lt;br /&gt;
      &#039;प&#039;:&#039;ப&#039;,&#039;फ&#039;:&#039;ப&#039;,&#039;ब&#039;:&#039;ப&#039;,&#039;भ&#039;:&#039;ப&#039;,&#039;म&#039;:&#039;ம&#039;,&lt;br /&gt;
      &#039;य&#039;:&#039;ய&#039;,&#039;र&#039;:&#039;ர&#039;,&#039;ल&#039;:&#039;ல&#039;,&#039;ळ&#039;:&#039;ழ&#039;,&#039;व&#039;:&#039;வ&#039;,&lt;br /&gt;
      &#039;श&#039;:&#039;ஶ&#039;,&#039;ष&#039;:&#039;ஷ&#039;,&#039;स&#039;:&#039;ஸ&#039;,&#039;ह&#039;:&#039;ஹ&#039;,&lt;br /&gt;
      &#039;ा&#039;:&#039;ா&#039;,&#039;ि&#039;:&#039;ி&#039;,&#039;ी&#039;:&#039;ீ&#039;,&#039;ु&#039;:&#039;ு&#039;,&#039;ू&#039;:&#039;ூ&#039;,&lt;br /&gt;
      &#039;ृ&#039;:&#039;ு&#039;,&#039;ॄ&#039;:&#039;ூ&#039;,&lt;br /&gt;
      &#039;े&#039;:&#039;ே&#039;,&#039;ை&#039;:&#039;ை&#039;,&#039;ो&#039;:&#039;ோ&#039;,&#039;ौ&#039;:&#039;ௌ&#039;,&lt;br /&gt;
      &#039;ं&#039;:&#039;ம்&#039;,&#039;ः&#039;:&#039;:&#039;,&#039;ँ&#039;:&#039;ம்&#039;,&#039;्&#039;:&#039;்&#039;,&#039;ॐ&#039;:&#039;ௐ&#039;,&#039;ऽ&#039;:&#039;ௗ&#039;,&lt;br /&gt;
      &#039;०&#039;:&#039;0&#039;,&#039;१&#039;:&#039;1&#039;,&#039;२&#039;:&#039;2&#039;,&#039;३&#039;:&#039;3&#039;,&#039;४&#039;:&#039;4&#039;,&lt;br /&gt;
      &#039;५&#039;:&#039;5&#039;,&#039;६&#039;:&#039;6&#039;,&#039;७&#039;:&#039;7&#039;,&#039;८&#039;:&#039;8&#039;,&#039;९&#039;:&#039;9&#039;&lt;br /&gt;
    }&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  var PRE = [&lt;br /&gt;
    [ /ङ्क/g, &#039;ंक&#039; ], [ /ङ्ख/g, &#039;ंख&#039; ], [ /ङ्ग/g, &#039;ंग&#039; ], [ /ङ्घ/g, &#039;ंघ&#039; ],&lt;br /&gt;
    [ /ञ्च/g, &#039;ंच&#039; ], [ /ञ्ज/g, &#039;ंज&#039; ], [ /ण्ट/g, &#039;ंट&#039; ], [ /ण्ड/g, &#039;ंड&#039; ],&lt;br /&gt;
    [ /न्त/g, &#039;ंत&#039; ], [ /न्द/g, &#039;ंद&#039; ], [ /म्ब/g, &#039;ंब&#039; ], [ /म्भ/g, &#039;ंभ&#039; ]&lt;br /&gt;
  ];&lt;br /&gt;
&lt;br /&gt;
  function transliterateText( text, script ) {&lt;br /&gt;
    if ( script === &#039;en&#039; ) return devanagariToIAST( text );&lt;br /&gt;
    var map = SCRIPT_MAP[ script ];&lt;br /&gt;
    if ( !map ) return text;&lt;br /&gt;
    var t = text;&lt;br /&gt;
    PRE.forEach( function ( p ) { t = t.replace( p[ 0 ], p[ 1 ] ); } );&lt;br /&gt;
    return Array.from( t ).map( function ( ch ) {&lt;br /&gt;
      return map[ ch ] !== undefined ? map[ ch ] : ch;&lt;br /&gt;
    } ).join( &#039;&#039; );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var translatableSpans = [];&lt;br /&gt;
&lt;br /&gt;
  function tagTextNodes() {&lt;br /&gt;
    var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
    if ( content ) {&lt;br /&gt;
      var walker = document.createTreeWalker( content, NodeFilter.SHOW_TEXT );&lt;br /&gt;
      var nodes  = [];&lt;br /&gt;
      while ( walker.nextNode() ) nodes.push( walker.currentNode );&lt;br /&gt;
      nodes.forEach( function ( node ) {&lt;br /&gt;
        var p = node.parentNode;&lt;br /&gt;
        if ( !p ) return;&lt;br /&gt;
        if ( p.hasAttribute &amp;amp;&amp;amp; p.hasAttribute( &#039;data-deva&#039; ) ) return;&lt;br /&gt;
        if ( p.closest ) {&lt;br /&gt;
          if ( p.closest( &#039;.gr-controls&#039; )    ) return;&lt;br /&gt;
          if ( p.closest( &#039;.mw-editsection&#039; ) ) return;&lt;br /&gt;
        }&lt;br /&gt;
        var orig = node.textContent;&lt;br /&gt;
        if ( !orig.trim() ) return;&lt;br /&gt;
        var span = document.createElement( &#039;span&#039; );&lt;br /&gt;
        span.setAttribute( &#039;data-deva&#039;, orig );&lt;br /&gt;
        span.textContent = orig;&lt;br /&gt;
        p.replaceChild( span, node );&lt;br /&gt;
        translatableSpans.push( span );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
    document.querySelectorAll( &#039;.vector-toc .vector-toc-text&#039; ).forEach( function ( span ) {&lt;br /&gt;
      if ( span.hasAttribute( &#039;data-deva&#039; ) ) return;&lt;br /&gt;
      var orig = span.textContent;&lt;br /&gt;
      if ( !orig.trim() ) return;&lt;br /&gt;
      span.setAttribute( &#039;data-deva&#039;, orig );&lt;br /&gt;
      translatableSpans.push( span );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function applyScript( script ) {&lt;br /&gt;
    currentScript = script;&lt;br /&gt;
    translatableSpans.forEach( function ( span ) {&lt;br /&gt;
      if ( !span.parentNode ) return;&lt;br /&gt;
      var orig = span.getAttribute( &#039;data-deva&#039; );&lt;br /&gt;
      if ( !orig ) return;&lt;br /&gt;
      span.textContent = ( script === &#039;deva&#039; )&lt;br /&gt;
        ? orig&lt;br /&gt;
        : transliterateText( orig, script );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function _isNoTocPage() {&lt;br /&gt;
    var pn = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039; ) ) || &#039;&#039;;&lt;br /&gt;
    return pn === &#039;Main_Page&#039; || /^[A-Za-z0-9_]+:About$/.test( pn );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function renameTocTitle() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    var titleEl = toc.querySelector(&#039;.vector-toc-title&#039;) || toc.querySelector(&#039;.vector-pinnable-header-label&#039;);&lt;br /&gt;
    if ( !titleEl ) return;&lt;br /&gt;
    var LABEL = &#039;विषयसूची&#039;;&lt;br /&gt;
    var span = titleEl.querySelector(&#039;.gr-toc-title&#039;);&lt;br /&gt;
    if ( !span ) {&lt;br /&gt;
      titleEl.innerHTML = &#039;&#039;;&lt;br /&gt;
      span = document.createElement(&#039;span&#039;);&lt;br /&gt;
      span.className = &#039;gr-toc-title&#039;;&lt;br /&gt;
      span.setAttribute(&#039;data-deva&#039;, LABEL);&lt;br /&gt;
      titleEl.appendChild(span);&lt;br /&gt;
      translatableSpans.push(span);&lt;br /&gt;
    }&lt;br /&gt;
    span.textContent = currentScript === &#039;deva&#039; ? LABEL : transliterateText(LABEL, currentScript);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function removeTocBeginning() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    var el = toc.querySelector( &#039;#vector-toc-beginning&#039; );&lt;br /&gt;
    if ( !el ) {&lt;br /&gt;
      var items = toc.querySelectorAll( &#039;.vector-toc-list-item&#039; );&lt;br /&gt;
      for ( var i = 0; i &amp;lt; items.length; i++ ) {&lt;br /&gt;
        var a = items[ i ].querySelector( &#039;a&#039; );&lt;br /&gt;
        if ( a ) {&lt;br /&gt;
          var href = a.getAttribute( &#039;href&#039; ) || &#039;&#039;;&lt;br /&gt;
          if ( href.indexOf( &#039;#&#039; ) === -1 ) { el = items[ i ]; break; }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if ( el &amp;amp;&amp;amp; el.parentNode ) el.parentNode.removeChild( el );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function expandTocSections() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    toc.querySelectorAll( &#039;.vector-toc-list-item-collapsed&#039; ).forEach( function ( li ) {&lt;br /&gt;
      li.classList.remove( &#039;vector-toc-list-item-collapsed&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function injectTocDocNav() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    if ( document.getElementById( &#039;gr-toc-doc-nav&#039; ) ) return;&lt;br /&gt;
    var artPath   = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
    var pageTitle = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039;   ) ) || &#039;&#039;;&lt;br /&gt;
    var teekaPage   = document.querySelector( &#039;.gr-teeka-page&#039; );&lt;br /&gt;
    var primarySlug = teekaPage ? ( teekaPage.getAttribute( &#039;data-primary&#039; ) || &#039;&#039; ) : &#039;&#039;;&lt;br /&gt;
    if ( !primarySlug ) { primarySlug = pageTitle.split( &#039;/&#039; )[ 0 ]; }&lt;br /&gt;
    if ( !primarySlug ) return;&lt;br /&gt;
    function wikiUrl( slug ) {&lt;br /&gt;
      if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( slug );&lt;br /&gt;
      return artPath.replace( &#039;$1&#039;, encodeURIComponent( slug ).replace( /%2F/g, &#039;/&#039; ) );&lt;br /&gt;
    }&lt;br /&gt;
    var docTitleEl     = document.querySelector( &#039;.gr-doc-title&#039; );&lt;br /&gt;
    var hasMoolaPage   = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-moola&#039; )   === &#039;1&#039;;&lt;br /&gt;
    var hasUllekhaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-ullekha&#039; ) === &#039;1&#039;;&lt;br /&gt;
    var showMoolaPage  = !teekaPage &amp;amp;&amp;amp; hasMoolaPage;&lt;br /&gt;
    var showMoolaBack  = !!teekaPage;&lt;br /&gt;
    var showUllekha    = hasUllekhaPage || !!teekaPage;&lt;br /&gt;
    if ( !showMoolaPage &amp;amp;&amp;amp; !showMoolaBack &amp;amp;&amp;amp; !showUllekha ) return;&lt;br /&gt;
    var nav = document.createElement( &#039;div&#039; );&lt;br /&gt;
    nav.id = &#039;gr-toc-doc-nav&#039;;&lt;br /&gt;
    nav.setAttribute( &#039;class&#039;, &#039;toc-main-links&#039; );&lt;br /&gt;
    function makeBtn( href, label ) {&lt;br /&gt;
      var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
      a.href = href;&lt;br /&gt;
      a.setAttribute( &#039;class&#039;, &#039;toc-main-link-item&#039; );&lt;br /&gt;
      var lspan = document.createElement( &#039;span&#039; );&lt;br /&gt;
      lspan.setAttribute( &#039;data-deva&#039;, label );&lt;br /&gt;
      lspan.textContent = ( currentScript &amp;amp;&amp;amp; currentScript !== &#039;deva&#039; ) ? transliterateText( label, currentScript ) : label;&lt;br /&gt;
      translatableSpans.push( lspan );&lt;br /&gt;
      a.appendChild( lspan );&lt;br /&gt;
      a.addEventListener( &#039;mouseover&#039;, function () { this.style.opacity = &#039;0.72&#039;; } );&lt;br /&gt;
      a.addEventListener( &#039;mouseout&#039;,  function () { this.style.opacity = &#039;1&#039;;    } );&lt;br /&gt;
      return a;&lt;br /&gt;
    }&lt;br /&gt;
    if ( showMoolaPage ) nav.appendChild( makeBtn( wikiUrl( primarySlug + &#039;/Moola&#039; ), &#039;मूलम्&#039; ) );&lt;br /&gt;
    if ( showMoolaBack ) nav.appendChild( makeBtn( wikiUrl( primarySlug ),            &#039;मूल&#039;   ) );&lt;br /&gt;
    if ( showUllekha   ) nav.appendChild( makeBtn( wikiUrl( primarySlug + &#039;/Ullekha&#039;), &#039;उल्लेख&#039;) );&lt;br /&gt;
    var tocContents = toc.querySelector( &#039;.vector-toc-contents&#039; );&lt;br /&gt;
    if ( tocContents ) toc.insertBefore( nav, tocContents );&lt;br /&gt;
    else               toc.appendChild( nav );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var _headingObserver = null;&lt;br /&gt;
&lt;br /&gt;
  function attachHeadingObserver() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    if ( _headingObserver ) return;&lt;br /&gt;
    if ( !window.IntersectionObserver ) return;&lt;br /&gt;
    var ACTIVE_COLOR = &#039;#f57c00&#039;;&lt;br /&gt;
    var _activeId    = null;&lt;br /&gt;
    var content  = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
    if ( !content ) return;&lt;br /&gt;
    var headings = Array.from( content.querySelectorAll( &#039;h1[id],h2[id],h3[id],h4[id],h5[id],h6[id]&#039; ) );&lt;br /&gt;
    if ( !headings.length ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    function getTocLink( id ) { return toc.querySelector( &#039;a[href=&amp;quot;#&#039; + CSS.escape( id ) + &#039;&amp;quot;]&#039; ); }&lt;br /&gt;
    function getTocLi( id ) { var a = getTocLink( id ); return a ? a.closest( &#039;.vector-toc-list-item&#039; ) : null; }&lt;br /&gt;
    function clearActive() {&lt;br /&gt;
      toc.querySelectorAll( &#039;.vector-toc-list-item&#039; ).forEach( function ( li ) {&lt;br /&gt;
        li.classList.remove( &#039;vector-toc-list-item-active&#039; );&lt;br /&gt;
        var lnk = li.querySelector( &#039;.vector-toc-link&#039; );&lt;br /&gt;
        if ( !lnk ) return;&lt;br /&gt;
        lnk.style.removeProperty( &#039;color&#039; );&lt;br /&gt;
        lnk.style.setProperty( &#039;font-weight&#039;, &#039;400&#039;, &#039;important&#039; );&lt;br /&gt;
        lnk.querySelectorAll( &#039;*&#039; ).forEach( function ( el ) { el.style.removeProperty( &#039;color&#039; ); el.style.setProperty( &#039;font-weight&#039;, &#039;400&#039;, &#039;important&#039; ); } );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
    function setActive( id ) {&lt;br /&gt;
      if ( _activeId === id ) return;&lt;br /&gt;
      _activeId = id;&lt;br /&gt;
      clearActive();&lt;br /&gt;
      if ( !id ) return;&lt;br /&gt;
      var li = getTocLi( id );&lt;br /&gt;
      if ( !li ) return;&lt;br /&gt;
      li.classList.add( &#039;vector-toc-list-item-active&#039; );&lt;br /&gt;
      var hasActiveChild = !!li.querySelector( &#039;.vector-toc-list-item .vector-toc-list-item-active&#039; );&lt;br /&gt;
      if ( !hasActiveChild ) {&lt;br /&gt;
        var lnk = li.querySelector( &#039;.vector-toc-link&#039; );&lt;br /&gt;
        if ( lnk ) {&lt;br /&gt;
          lnk.style.setProperty( &#039;color&#039;, ACTIVE_COLOR, &#039;important&#039; );&lt;br /&gt;
          lnk.style.setProperty( &#039;font-weight&#039;, &#039;700&#039;, &#039;important&#039; );&lt;br /&gt;
          lnk.querySelectorAll( &#039;*&#039; ).forEach( function ( el ) { el.style.setProperty( &#039;color&#039;, ACTIVE_COLOR, &#039;important&#039; ); el.style.setProperty( &#039;font-weight&#039;, &#039;700&#039;, &#039;important&#039; ); } );&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      var anc = li.parentNode;&lt;br /&gt;
      while ( anc &amp;amp;&amp;amp; anc !== toc ) {&lt;br /&gt;
        if ( anc.classList ) anc.classList.remove( &#039;vector-toc-list-item-collapsed&#039; );&lt;br /&gt;
        if ( anc.tagName === &#039;UL&#039; || anc.tagName === &#039;LI&#039; ) anc.style.removeProperty( &#039;display&#039; );&lt;br /&gt;
        anc = anc.parentNode;&lt;br /&gt;
      }&lt;br /&gt;
      var sticky = document.querySelector( &#039;.vector-sticky-pinned-container&#039; );&lt;br /&gt;
      var scrollEl = sticky || toc;&lt;br /&gt;
      if ( scrollEl.scrollHeight &amp;gt; scrollEl.clientHeight ) {&lt;br /&gt;
        var lr = li.getBoundingClientRect();&lt;br /&gt;
        var cr = scrollEl.getBoundingClientRect();&lt;br /&gt;
        if ( lr.top &amp;lt; cr.top + 8 || lr.bottom &amp;gt; cr.bottom - 8 ) {&lt;br /&gt;
          scrollEl.scrollTop += lr.top - cr.top - scrollEl.clientHeight / 2 + li.offsetHeight / 2;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    var _visible = new Set();&lt;br /&gt;
    _headingObserver = new IntersectionObserver( function ( entries ) {&lt;br /&gt;
      entries.forEach( function ( entry ) {&lt;br /&gt;
        if ( entry.isIntersecting ) _visible.add( entry.target.id );&lt;br /&gt;
        else _visible.delete( entry.target.id );&lt;br /&gt;
      } );&lt;br /&gt;
      var topId = null, topY = Infinity;&lt;br /&gt;
      _visible.forEach( function ( id ) {&lt;br /&gt;
        var el = document.getElementById( id );&lt;br /&gt;
        if ( el ) { var y = el.getBoundingClientRect().top; if ( y &amp;gt;= 0 &amp;amp;&amp;amp; y &amp;lt; topY ) { topY = y; topId = id; } }&lt;br /&gt;
      } );&lt;br /&gt;
      if ( !topId ) {&lt;br /&gt;
        var bestY = -Infinity;&lt;br /&gt;
        headings.forEach( function ( h ) { var y = h.getBoundingClientRect().top; if ( y &amp;lt; 0 &amp;amp;&amp;amp; y &amp;gt; bestY ) { bestY = y; topId = h.id; } } );&lt;br /&gt;
      }&lt;br /&gt;
      setActive( topId || null );&lt;br /&gt;
    }, { rootMargin: &#039;-60px 0px -65% 0px&#039;, threshold: 0 } );&lt;br /&gt;
    headings.forEach( function ( h ) { _headingObserver.observe( h ); } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function setupToc() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    removeTocBeginning();&lt;br /&gt;
    renameTocTitle();&lt;br /&gt;
    expandTocSections();&lt;br /&gt;
    injectTocDocNav();&lt;br /&gt;
    attachHeadingObserver();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function init() {&lt;br /&gt;
    var HIDE_IDS = [ &#039;vector-appearance&#039;, &#039;vector-appearance-pinned-container&#039;, &#039;vector-appearance-unpinned-container&#039; ];&lt;br /&gt;
    function removeHiddenEls() {&lt;br /&gt;
      HIDE_IDS.forEach( function ( id ) { var el = document.getElementById( id ); if ( el &amp;amp;&amp;amp; el.parentNode ) el.parentNode.removeChild( el ); } );&lt;br /&gt;
      var pt = document.getElementById( &#039;vector-page-tools&#039; ) || document.querySelector( &#039;.vector-page-tools-pinned-container&#039; );&lt;br /&gt;
      if ( pt ) pt.querySelectorAll( &#039;[aria-controls=&amp;quot;vector-appearance&amp;quot;]&#039; ).forEach( function ( el ) { if ( el.parentNode ) el.parentNode.removeChild( el ); } );&lt;br /&gt;
    }&lt;br /&gt;
    removeHiddenEls();&lt;br /&gt;
    ( function detectTeekaMode() {&lt;br /&gt;
      var tp = document.querySelector( &#039;.gr-teeka-page&#039; );&lt;br /&gt;
      if ( !tp ) return;&lt;br /&gt;
      var primary = tp.getAttribute( &#039;data-primary&#039; ) || &#039;&#039;;&lt;br /&gt;
      var artPath = ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
      var mainUrl = artPath.replace( &#039;$1&#039;, primary );&lt;br /&gt;
      var refParam = window.location.search.match( /[?&amp;amp;]ref=([01])/ );&lt;br /&gt;
      if ( refParam ) { document.body.classList.add( refParam[1] === &#039;1&#039; ? &#039;gr-ref-mode&#039; : &#039;gr-standalone&#039; ); return; }&lt;br /&gt;
      var ref = document.referrer || &#039;&#039;;&lt;br /&gt;
      document.body.classList.add( ( ref &amp;amp;&amp;amp; primary &amp;amp;&amp;amp; ref.indexOf( mainUrl ) !== -1 ) ? &#039;gr-ref-mode&#039; : &#039;gr-standalone&#039; );&lt;br /&gt;
    }() );&lt;br /&gt;
    if ( window.MutationObserver ) {&lt;br /&gt;
      var hideObs = new MutationObserver( function ( mutations ) {&lt;br /&gt;
        var dirty = false;&lt;br /&gt;
        mutations.forEach( function ( m ) { if ( m.addedNodes.length ) dirty = true; } );&lt;br /&gt;
        if ( dirty ) removeHiddenEls();&lt;br /&gt;
      } );&lt;br /&gt;
      hideObs.observe( document.body, { childList: true, subtree: false } );&lt;br /&gt;
      setTimeout( function () { hideObs.disconnect(); }, 6000 );&lt;br /&gt;
    }&lt;br /&gt;
    var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
    var alreadyTagged = content &amp;amp;&amp;amp; content.querySelector( &#039;[data-deva]&#039; );&lt;br /&gt;
    if ( !alreadyTagged ) { translatableSpans = []; tagTextNodes(); }&lt;br /&gt;
    else {&lt;br /&gt;
      document.querySelectorAll( &#039;.vector-toc .vector-toc-text:not([data-deva])&#039; ).forEach( function ( span ) {&lt;br /&gt;
        var orig = span.textContent; if ( !orig.trim() ) return;&lt;br /&gt;
        span.setAttribute( &#039;data-deva&#039;, orig ); translatableSpans.push( span );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
    var saved = ( function () { try { return localStorage.getItem( LS_SCRIPT_KEY ); } catch ( e ) { return null; } }() );&lt;br /&gt;
    if ( saved &amp;amp;&amp;amp; saved !== &#039;deva&#039; ) { applyScript( saved ); } else { currentScript = &#039;deva&#039;; }&lt;br /&gt;
    setTimeout( setupToc, 200 );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  window.addEventListener( &#039;gr-script-change&#039;, function ( e ) {&lt;br /&gt;
    var script = e &amp;amp;&amp;amp; e.detail &amp;amp;&amp;amp; e.detail.script;&lt;br /&gt;
    if ( script ) applyScript( script );&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
  window.addEventListener( &#039;gr-new-content&#039;, function ( e ) {&lt;br /&gt;
    var container = e &amp;amp;&amp;amp; e.detail &amp;amp;&amp;amp; e.detail.container;&lt;br /&gt;
    if ( !container ) return;&lt;br /&gt;
    var walker = document.createTreeWalker( container, NodeFilter.SHOW_TEXT );&lt;br /&gt;
    var nodes = [];&lt;br /&gt;
    while ( walker.nextNode() ) nodes.push( walker.currentNode );&lt;br /&gt;
    nodes.forEach( function ( node ) {&lt;br /&gt;
      var p = node.parentNode;&lt;br /&gt;
      if ( !p || ( p.hasAttribute &amp;amp;&amp;amp; p.hasAttribute( &#039;data-deva&#039; ) ) ) return;&lt;br /&gt;
      var orig = node.textContent;&lt;br /&gt;
      if ( !orig.trim() ) return;&lt;br /&gt;
      var span = document.createElement( &#039;span&#039; );&lt;br /&gt;
      span.setAttribute( &#039;data-deva&#039;, orig );&lt;br /&gt;
      span.textContent = currentScript !== &#039;deva&#039; ? transliterateText( orig, currentScript ) : orig;&lt;br /&gt;
      p.replaceChild( span, node );&lt;br /&gt;
      translatableSpans.push( span );&lt;br /&gt;
    } );&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
  try {&lt;br /&gt;
    var _grBC = new BroadcastChannel( &#039;gr-script&#039; );&lt;br /&gt;
    _grBC.onmessage = function ( e ) {&lt;br /&gt;
      var script = e &amp;amp;&amp;amp; e.data &amp;amp;&amp;amp; e.data.script;&lt;br /&gt;
      if ( script ) { currentScript = script; var sel = document.querySelector( &#039;.gr-script-sel&#039; ); if ( sel ) sel.value = script; applyScript( script ); }&lt;br /&gt;
    };&lt;br /&gt;
  } catch ( e ) {}&lt;br /&gt;
&lt;br /&gt;
  if ( window.mw ) {&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
      setTimeout( function () {&lt;br /&gt;
        var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
        var alreadyTagged = content &amp;amp;&amp;amp; content.querySelector( &#039;[data-deva]&#039; );&lt;br /&gt;
        if ( !alreadyTagged ) { translatableSpans = []; tagTextNodes(); }&lt;br /&gt;
        else {&lt;br /&gt;
          document.querySelectorAll( &#039;.vector-toc .vector-toc-text:not([data-deva])&#039; ).forEach( function ( span ) {&lt;br /&gt;
            var orig = span.textContent; if ( !orig.trim() ) return;&lt;br /&gt;
            span.setAttribute( &#039;data-deva&#039;, orig ); translatableSpans.push( span );&lt;br /&gt;
          } );&lt;br /&gt;
        }&lt;br /&gt;
        if ( currentScript !== &#039;deva&#039; ) applyScript( currentScript );&lt;br /&gt;
        setupToc();&lt;br /&gt;
      }, 150 );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) { document.addEventListener( &#039;DOMContentLoaded&#039;, init ); }&lt;br /&gt;
  else { init(); }&lt;br /&gt;
&lt;br /&gt;
}() );   /* ← end of main IIFE */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Inject &amp;quot;Help&amp;quot; and &amp;quot;About&amp;quot; links into the header ─────────────────&lt;br /&gt;
( function () {&lt;br /&gt;
  function wikiHref( title ) {&lt;br /&gt;
    if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( title );&lt;br /&gt;
    var ap = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
    return ap.replace( &#039;$1&#039;, title );&lt;br /&gt;
  }&lt;br /&gt;
  var linkStyle = [ &#039;color:rgba(255,255,255,0.88)&#039;,&#039;font-size:0.88em&#039;,&#039;font-family:system-ui,sans-serif&#039;,&#039;font-weight:500&#039;,&#039;text-decoration:none&#039;,&#039;padding:4px 10px&#039;,&#039;border-radius:4px&#039;,&#039;margin-right:4px&#039;,&#039;transition:color 0.15s,background 0.15s&#039;,&#039;white-space:nowrap&#039; ].join( &#039;;&#039; );&lt;br /&gt;
  function makeHeaderLink( id, href, label ) {&lt;br /&gt;
    var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
    a.id = id; a.href = href; a.textContent = label; a.style.cssText = linkStyle;&lt;br /&gt;
    a.addEventListener( &#039;mouseover&#039;, function () { this.style.color = &#039;#fff&#039;; this.style.background = &#039;rgba(255,255,255,0.12)&#039;; } );&lt;br /&gt;
    a.addEventListener( &#039;mouseout&#039;,  function () { this.style.color = &#039;rgba(255,255,255,0.88)&#039;; this.style.background = &#039;transparent&#039;; } );&lt;br /&gt;
    return a;&lt;br /&gt;
  }&lt;br /&gt;
  function injectHeaderLinks() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-about-link&#039; ) ) return;&lt;br /&gt;
    var headerEnd = document.querySelector( &#039;.vector-header-end&#039; ) || document.querySelector( &#039;#vector-user-links&#039; ) || document.querySelector( &#039;.mw-header&#039; );&lt;br /&gt;
    if ( !headerEnd ) return;&lt;br /&gt;
    var helpLink  = makeHeaderLink( &#039;gr-help-link&#039;,  wikiHref( &#039;My_wiki:Help&#039;  ), &#039;Help&#039;  );&lt;br /&gt;
    var aboutLink = makeHeaderLink( &#039;gr-about-link&#039;, wikiHref( &#039;My_wiki:About&#039; ), &#039;About&#039; );&lt;br /&gt;
    var ul = document.querySelector( &#039;.vector-user-links&#039; ) || document.querySelector( &#039;#pt-userpage&#039; );&lt;br /&gt;
    if ( ul &amp;amp;&amp;amp; ul.parentNode === headerEnd ) { headerEnd.insertBefore( aboutLink, ul ); headerEnd.insertBefore( helpLink, aboutLink ); }&lt;br /&gt;
    else { headerEnd.appendChild( helpLink ); headerEnd.appendChild( aboutLink ); }&lt;br /&gt;
  }&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) document.addEventListener( &#039;DOMContentLoaded&#039;, injectHeaderLinks );&lt;br /&gt;
  else injectHeaderLinks();&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Main page: by-Grantha / by-Author toggle ──────────────────────&lt;br /&gt;
( function () {&lt;br /&gt;
  function grHomeView( v ) {&lt;br /&gt;
    var gView = document.getElementById( &#039;gr-view-grantha&#039; );&lt;br /&gt;
    var aView = document.getElementById( &#039;gr-view-author&#039; );&lt;br /&gt;
    var gBtn  = document.getElementById( &#039;gr-toggle-grantha&#039; );&lt;br /&gt;
    var aBtn  = document.getElementById( &#039;gr-toggle-author&#039; );&lt;br /&gt;
    if ( !gView || !aView || !gBtn || !aBtn ) return;&lt;br /&gt;
    gView.style.display = ( v === &#039;grantha&#039; ) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
    aView.style.display = ( v === &#039;author&#039;  ) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
    gBtn.className = &#039;gr-toggle-btn&#039; + ( v === &#039;grantha&#039; ? &#039; gr-toggle-active&#039; : &#039;&#039; );&lt;br /&gt;
    aBtn.className = &#039;gr-toggle-btn&#039; + ( v === &#039;author&#039;  ? &#039; gr-toggle-active&#039; : &#039;&#039; );&lt;br /&gt;
    try { localStorage.setItem( &#039;gr_home_view&#039;, v ); } catch ( e ) {}&lt;br /&gt;
  }&lt;br /&gt;
  function initHomeToggle() {&lt;br /&gt;
    var gBtn = document.getElementById( &#039;gr-toggle-grantha&#039; );&lt;br /&gt;
    var aBtn = document.getElementById( &#039;gr-toggle-author&#039; );&lt;br /&gt;
    if ( !gBtn || !aBtn ) return;&lt;br /&gt;
    gBtn.addEventListener( &#039;click&#039;, function () { grHomeView( &#039;grantha&#039; ); } );&lt;br /&gt;
    aBtn.addEventListener( &#039;click&#039;, function () { grHomeView( &#039;author&#039; );  } );&lt;br /&gt;
    [ gBtn, aBtn ].forEach( function ( btn ) { btn.addEventListener( &#039;keydown&#039;, function ( e ) { if ( e.key === &#039;Enter&#039; || e.key === &#039; &#039; ) btn.click(); } ); } );&lt;br /&gt;
    var saved; try { saved = localStorage.getItem( &#039;gr_home_view&#039; ); } catch ( e ) {}&lt;br /&gt;
    if ( saved === &#039;author&#039; ) grHomeView( &#039;author&#039; );&lt;br /&gt;
  }&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) document.addEventListener( &#039;DOMContentLoaded&#039;, initHomeToggle );&lt;br /&gt;
  else initHomeToggle();&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Ullekha reference link handler ─────────────────────────────────&lt;br /&gt;
( function () {&lt;br /&gt;
  function highlightOnArrival() {&lt;br /&gt;
    var search = window.location.search;&lt;br /&gt;
    if ( !search ) return;&lt;br /&gt;
    var m = search.match( /[?&amp;amp;]hlUllekha=([^&amp;amp;]+)/ );&lt;br /&gt;
    if ( !m ) return;&lt;br /&gt;
    var needle;&lt;br /&gt;
    try { needle = decodeURIComponent( m[ 1 ] ); } catch ( e ) { return; }&lt;br /&gt;
    if ( !needle || needle.length &amp;lt; 4 ) return;&lt;br /&gt;
    function doHighlight() {&lt;br /&gt;
      var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
      if ( !content ) return;&lt;br /&gt;
      var snippet = needle.slice( 0, 40 );&lt;br /&gt;
      var found   = false;&lt;br /&gt;
      var spans = content.querySelectorAll( &#039;[data-deva]&#039; );&lt;br /&gt;
      for ( var i = 0; i &amp;lt; spans.length &amp;amp;&amp;amp; !found; i++ ) {&lt;br /&gt;
        var spanEl = spans[ i ];&lt;br /&gt;
        var orig   = spanEl.getAttribute( &#039;data-deva&#039; ) || &#039;&#039;;&lt;br /&gt;
        if ( orig.indexOf( snippet ) === -1 ) continue;&lt;br /&gt;
        var idx    = orig.indexOf( snippet );&lt;br /&gt;
        var hlText = orig.slice( idx, Math.min( idx + needle.length, orig.length ) );&lt;br /&gt;
        var mark   = document.createElement( &#039;mark&#039; );&lt;br /&gt;
        mark.className = &#039;gr-ullekha-highlight&#039;;&lt;br /&gt;
        mark.style.cssText = &#039;background:#fff176;border-radius:2px;padding:0 2px;&#039;;&lt;br /&gt;
        mark.textContent = hlText;&lt;br /&gt;
        var parent = spanEl.parentNode;&lt;br /&gt;
        if ( !parent ) continue;&lt;br /&gt;
        var before = document.createTextNode( orig.slice( 0, idx ) );&lt;br /&gt;
        var after  = document.createTextNode( orig.slice( idx + hlText.length ) );&lt;br /&gt;
        parent.insertBefore( before, spanEl ); parent.insertBefore( mark, spanEl ); parent.insertBefore( after, spanEl ); parent.removeChild( spanEl );&lt;br /&gt;
        setTimeout( function () { mark.scrollIntoView( { behavior: &#039;smooth&#039;, block: &#039;center&#039; } ); }, 100 );&lt;br /&gt;
        found = true;&lt;br /&gt;
      }&lt;br /&gt;
      if ( !found ) {&lt;br /&gt;
        var walker = document.createTreeWalker( content, NodeFilter.SHOW_TEXT );&lt;br /&gt;
        while ( walker.nextNode() &amp;amp;&amp;amp; !found ) {&lt;br /&gt;
          var node = walker.currentNode;&lt;br /&gt;
          var txt  = node.textContent || &#039;&#039;;&lt;br /&gt;
          if ( txt.indexOf( snippet ) === -1 ) continue;&lt;br /&gt;
          var idx2  = txt.indexOf( snippet );&lt;br /&gt;
          var mark2 = document.createElement( &#039;mark&#039; );&lt;br /&gt;
          mark2.className = &#039;gr-ullekha-highlight&#039;;&lt;br /&gt;
          mark2.style.cssText = &#039;background:#fff176;border-radius:2px;padding:0 2px;&#039;;&lt;br /&gt;
          mark2.textContent = txt.slice( idx2, Math.min( idx2 + needle.length, txt.length ) );&lt;br /&gt;
          var p = node.parentNode;&lt;br /&gt;
          p.insertBefore( document.createTextNode( txt.slice( 0, idx2 ) ), node );&lt;br /&gt;
          p.insertBefore( mark2, node );&lt;br /&gt;
          p.insertBefore( document.createTextNode( txt.slice( idx2 + mark2.textContent.length ) ), node );&lt;br /&gt;
          p.removeChild( node );&lt;br /&gt;
          setTimeout( function () { mark2.scrollIntoView( { behavior: &#039;smooth&#039;, block: &#039;center&#039; } ); }, 100 );&lt;br /&gt;
          found = true;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    doHighlight();&lt;br /&gt;
  }&lt;br /&gt;
  function wireUllekhaLinks() {&lt;br /&gt;
    document.querySelectorAll( &#039;.gr-ullekha-ref-link&#039; ).forEach( function ( wrap ) {&lt;br /&gt;
      var anchor = wrap.getAttribute( &#039;data-anchor&#039; ) || &#039;&#039;;&lt;br /&gt;
      var hl     = wrap.getAttribute( &#039;data-hl&#039; )     || &#039;&#039;;&lt;br /&gt;
      var a = wrap.querySelector( &#039;a&#039; );&lt;br /&gt;
      if ( !a ) return;&lt;br /&gt;
      var base = a.href.split( &#039;#&#039; )[ 0 ];&lt;br /&gt;
      var encoded = encodeURIComponent( hl );&lt;br /&gt;
      a.href = base + ( hl ? &#039;?hlUllekha=&#039; + encoded : &#039;&#039; ) + ( anchor ? &#039;#&#039; + anchor : &#039;&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) { document.addEventListener( &#039;DOMContentLoaded&#039;, function () { highlightOnArrival(); wireUllekhaLinks(); } ); }&lt;br /&gt;
  else { highlightOnArrival(); wireUllekhaLinks(); }&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
/* ── Search result highlight ──────────────────────────────────── */&lt;br /&gt;
/* EXACT REPLACEMENT for the search highlight IIFE in MediaWiki:Common.js.&lt;br /&gt;
 * Only changes from the original working version:&lt;br /&gt;
 *  - Mobile bar: full-width terracotta bottom bar instead of floating pill&lt;br /&gt;
 *  - showDismissBar: guard added (if !count return) to prevent empty bar&lt;br /&gt;
 * Everything else (storeQueryForLink, applyHighlight, wrapMatches) is&lt;br /&gt;
 * identical to the version that was working.&lt;br /&gt;
 */&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
  function storeQueryForLink( url, query ) {&lt;br /&gt;
    try {&lt;br /&gt;
      var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
      a.href = url;&lt;br /&gt;
      sessionStorage.setItem( &#039;gr_search_hl&#039;, JSON.stringify({&lt;br /&gt;
        query:    query,&lt;br /&gt;
        pathname: a.pathname&lt;br /&gt;
      }) );&lt;br /&gt;
    } catch(e) {}&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function applyHighlight() {&lt;br /&gt;
    var stored;&lt;br /&gt;
    try {&lt;br /&gt;
      stored = JSON.parse( sessionStorage.getItem( &#039;gr_search_hl&#039; ) || &#039;null&#039; );&lt;br /&gt;
    } catch(e) { return; }&lt;br /&gt;
    if ( !stored || !stored.query ) return;&lt;br /&gt;
&lt;br /&gt;
    var currentPath = window.location.pathname;&lt;br /&gt;
    var storedPath  = stored.pathname || &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
    function normPath(p) { return decodeURIComponent(p).replace(/\/+$/, &#039;&#039;); }&lt;br /&gt;
    if ( storedPath &amp;amp;&amp;amp; normPath(storedPath) !== normPath(currentPath) ) {&lt;br /&gt;
      try { sessionStorage.removeItem( &#039;gr_search_hl&#039; ); } catch(e) {}&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var query = stored.query.trim();&lt;br /&gt;
    if ( !query ) return;&lt;br /&gt;
&lt;br /&gt;
    try { sessionStorage.removeItem( &#039;gr_search_hl&#039; ); } catch(e) {}&lt;br /&gt;
&lt;br /&gt;
    var delays = [ 0, 200, 600 ];&lt;br /&gt;
    delays.forEach( function(ms) {&lt;br /&gt;
      setTimeout( function() {&lt;br /&gt;
        if ( document.querySelector( &#039;.gr-search-hl&#039; ) ) return;&lt;br /&gt;
        highlightText( query );&lt;br /&gt;
      }, ms );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function highlightText( query ) {&lt;br /&gt;
    var content = document.querySelector( &#039;#mw-content-text .mw-parser-output&#039; );&lt;br /&gt;
    if ( !content ) return;&lt;br /&gt;
&lt;br /&gt;
    var raw = query.replace( /^&amp;quot;|&amp;quot;$/g, &#039;&#039; ).trim();&lt;br /&gt;
    if ( !raw ) return;&lt;br /&gt;
&lt;br /&gt;
    var patterns = [];&lt;br /&gt;
    patterns.push( escapeRegex( raw ) );&lt;br /&gt;
    raw.split( /\s+/ ).forEach( function(w) {&lt;br /&gt;
      if ( w.length &amp;gt;= 2 ) patterns.push( escapeRegex( w ) );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    var matched = false;&lt;br /&gt;
    for ( var pi = 0; pi &amp;lt; patterns.length; pi++ ) {&lt;br /&gt;
      var re;&lt;br /&gt;
      try { re = new RegExp( &#039;(&#039; + patterns[pi] + &#039;)&#039;, &#039;gi&#039; ); }&lt;br /&gt;
      catch(e) { continue; }&lt;br /&gt;
      var count = wrapMatches( content, re );&lt;br /&gt;
      if ( count &amp;gt; 0 ) { matched = true; break; }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ( !matched ) return;&lt;br /&gt;
&lt;br /&gt;
    var first = document.querySelector( &#039;.gr-search-hl&#039; );&lt;br /&gt;
    if ( first ) {&lt;br /&gt;
      first.scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; });&lt;br /&gt;
      first.classList.add( &#039;gr-search-hl-pulse&#039; );&lt;br /&gt;
      setTimeout( function() { first.classList.remove( &#039;gr-search-hl-pulse&#039; ); }, 2000 );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    showDismissBar( query );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function escapeRegex( s ) {&lt;br /&gt;
    return s.replace( /[.*+?^${}()|[\]\\]/g, &#039;\\$&amp;amp;&#039; );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function wrapMatches( root, re ) {&lt;br /&gt;
    var count = 0;&lt;br /&gt;
    var walker = document.createTreeWalker(&lt;br /&gt;
      root, NodeFilter.SHOW_TEXT, {&lt;br /&gt;
        acceptNode: function( node ) {&lt;br /&gt;
          var p = node.parentElement;&lt;br /&gt;
          if ( !p ) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
          var tag = p.tagName.toUpperCase();&lt;br /&gt;
          if ( tag === &#039;SCRIPT&#039; || tag === &#039;STYLE&#039; || tag === &#039;NOSCRIPT&#039; ) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
          if ( p.classList.contains( &#039;gr-search-hl&#039; ) ) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
          return NodeFilter.FILTER_ACCEPT;&lt;br /&gt;
        }&lt;br /&gt;
      }, false&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    var nodes = [];&lt;br /&gt;
    var node;&lt;br /&gt;
    while ( ( node = walker.nextNode() ) ) nodes.push( node );&lt;br /&gt;
&lt;br /&gt;
    nodes.forEach( function( textNode ) {&lt;br /&gt;
      var val = textNode.nodeValue;&lt;br /&gt;
      if ( !re.test( val ) ) return;&lt;br /&gt;
      re.lastIndex = 0;&lt;br /&gt;
&lt;br /&gt;
      var frag = document.createDocumentFragment();&lt;br /&gt;
      var last = 0;&lt;br /&gt;
      var m;&lt;br /&gt;
      while ( ( m = re.exec( val ) ) !== null ) {&lt;br /&gt;
        if ( m.index &amp;gt; last ) {&lt;br /&gt;
          frag.appendChild( document.createTextNode( val.slice( last, m.index ) ) );&lt;br /&gt;
        }&lt;br /&gt;
        var span = document.createElement( &#039;span&#039; );&lt;br /&gt;
        span.className = &#039;gr-search-hl&#039;;&lt;br /&gt;
        span.textContent = m[0];&lt;br /&gt;
        frag.appendChild( span );&lt;br /&gt;
        last = m.index + m[0].length;&lt;br /&gt;
        count++;&lt;br /&gt;
      }&lt;br /&gt;
      if ( last &amp;lt; val.length ) {&lt;br /&gt;
        frag.appendChild( document.createTextNode( val.slice( last ) ) );&lt;br /&gt;
      }&lt;br /&gt;
      textNode.parentNode.replaceChild( frag, textNode );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    return count;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function showDismissBar( query ) {&lt;br /&gt;
    var existing = document.getElementById( &#039;gr-hl-bar&#039; );&lt;br /&gt;
    if ( existing ) existing.remove();&lt;br /&gt;
&lt;br /&gt;
    var count = document.querySelectorAll( &#039;.gr-search-hl&#039; ).length;&lt;br /&gt;
    if ( !count ) return;&lt;br /&gt;
&lt;br /&gt;
    var isMob = window.innerWidth &amp;lt; 768 || !!document.getElementById( &#039;mw-mf-viewport&#039; );&lt;br /&gt;
    var bar = document.createElement( &#039;div&#039; );&lt;br /&gt;
    bar.id = &#039;gr-hl-bar&#039;;&lt;br /&gt;
&lt;br /&gt;
    if ( isMob ) {&lt;br /&gt;
      bar.style.cssText = [&lt;br /&gt;
        &#039;position:fixed&#039;, &#039;bottom:0&#039;, &#039;left:0&#039;, &#039;right:0&#039;,&lt;br /&gt;
        &#039;z-index:10200&#039;, &#039;background:#b5451b&#039;, &#039;color:#fff&#039;,&lt;br /&gt;
        &#039;padding:0&#039;, &#039;display:flex&#039;, &#039;align-items:stretch&#039;,&lt;br /&gt;
        &#039;font-family:system-ui,sans-serif&#039;,&lt;br /&gt;
        &#039;box-shadow:0 -2px 12px rgba(0,0,0,0.25)&#039;, &#039;height:56px&#039;&lt;br /&gt;
      ].join(&#039;;&#039;);&lt;br /&gt;
&lt;br /&gt;
      var mbs = &#039;flex:1;display:flex;flex-direction:column;align-items:center;&#039; +&lt;br /&gt;
        &#039;justify-content:center;background:none;border:none;color:#fff;cursor:pointer;&#039; +&lt;br /&gt;
        &#039;padding:6px 4px;font-family:system-ui,sans-serif;font-size:11px;font-weight:500;&#039; +&lt;br /&gt;
        &#039;gap:3px;-webkit-tap-highlight-color:rgba(0,0,0,0.12);&#039;;&lt;br /&gt;
&lt;br /&gt;
      bar.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-prev&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;polyline points=&amp;quot;15 18 9 12 15 6&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;Prev&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-next&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;polyline points=&amp;quot;9 18 15 12 9 6&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;Next&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-results&amp;quot; style=&amp;quot;&#039; + mbs + &#039;flex:1.6;border-left:1px solid rgba(255,255,255,0.2);border-right:1px solid rgba(255,255,255,0.2);&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;circle cx=&amp;quot;11&amp;quot; cy=&amp;quot;11&amp;quot; r=&amp;quot;7&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;16.5&amp;quot; y1=&amp;quot;16.5&amp;quot; x2=&amp;quot;22&amp;quot; y2=&amp;quot;22&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;&#039; + count + &#039; match&#039; + (count===1?&#039;&#039;:&#039;es&#039;) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-dismiss&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;line x1=&amp;quot;18&amp;quot; y1=&amp;quot;6&amp;quot; x2=&amp;quot;6&amp;quot; y2=&amp;quot;18&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;6&amp;quot; y1=&amp;quot;6&amp;quot; x2=&amp;quot;18&amp;quot; y2=&amp;quot;18&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;Close&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
    } else {&lt;br /&gt;
      bar.style.cssText = [&lt;br /&gt;
        &#039;position:fixed&#039;, &#039;bottom:0&#039;, &#039;left:0&#039;, &#039;right:0&#039;, &#039;z-index:10200&#039;,&lt;br /&gt;
        &#039;background:#b5451b&#039;, &#039;color:#fff&#039;, &#039;padding:10px 16px&#039;,&lt;br /&gt;
        &#039;display:flex&#039;, &#039;align-items:center&#039;, &#039;justify-content:space-between&#039;,&lt;br /&gt;
        &#039;font-family:system-ui,sans-serif&#039;, &#039;font-size:14px&#039;,&lt;br /&gt;
        &#039;box-shadow:0 -2px 8px rgba(0,0,0,0.2)&#039;&lt;br /&gt;
      ].join(&#039;;&#039;);&lt;br /&gt;
&lt;br /&gt;
      var nav = document.createElement( &#039;div&#039; );&lt;br /&gt;
      nav.style.cssText = &#039;display:flex;align-items:center;gap:12px;&#039;;&lt;br /&gt;
      nav.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;🔍 &amp;lt;strong&amp;gt;&#039; + escHtml(query) + &#039;&amp;lt;/strong&amp;gt; — &#039; + count + &#039; match&#039; + (count===1?&#039;&#039;:&#039;es&#039;) + &#039;&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-prev&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;↑ Prev&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-next&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;↓ Next&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-results&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;← Results&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
      bar.appendChild( nav );&lt;br /&gt;
&lt;br /&gt;
      var db = document.createElement( &#039;button&#039; );&lt;br /&gt;
      db.id = &#039;gr-hl-dismiss&#039;; db.textContent = &#039;✕ Close&#039;;&lt;br /&gt;
      db.style.cssText = &#039;background:rgba(255,255,255,0.15);border:none;color:#fff;padding:4px 12px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&#039;;&lt;br /&gt;
      bar.appendChild( db );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    document.body.appendChild( bar );&lt;br /&gt;
&lt;br /&gt;
    var hlEls = Array.from( document.querySelectorAll( &#039;.gr-search-hl&#039; ) );&lt;br /&gt;
    var current = 0;&lt;br /&gt;
&lt;br /&gt;
    function goTo( idx ) {&lt;br /&gt;
      hlEls.forEach( function(el) { el.classList.remove( &#039;gr-search-hl-current&#039; ); } );&lt;br /&gt;
      current = ( ( idx % hlEls.length ) + hlEls.length ) % hlEls.length;&lt;br /&gt;
      hlEls[ current ].classList.add( &#039;gr-search-hl-current&#039; );&lt;br /&gt;
      hlEls[ current ].scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function dismiss() { clearHighlights(); bar.remove(); }&lt;br /&gt;
&lt;br /&gt;
    var nb = document.getElementById( &#039;gr-hl-next&#039; );&lt;br /&gt;
    var pb = document.getElementById( &#039;gr-hl-prev&#039; );&lt;br /&gt;
    var rb = document.getElementById( &#039;gr-hl-results&#039; );&lt;br /&gt;
    var db2 = document.getElementById( &#039;gr-hl-dismiss&#039; );&lt;br /&gt;
    if ( nb ) nb.onclick = function() { goTo( current + 1 ); };&lt;br /&gt;
    if ( pb ) pb.onclick = function() { goTo( current - 1 ); };&lt;br /&gt;
    if ( db2 ) db2.onclick = dismiss;&lt;br /&gt;
    if ( rb ) rb.onclick = function() {&lt;br /&gt;
      bar.remove(); clearHighlights();&lt;br /&gt;
      if ( window.showSearchDialog ) window.showSearchDialog( query );&lt;br /&gt;
    };&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function clearHighlights() {&lt;br /&gt;
    document.querySelectorAll( &#039;.gr-search-hl&#039; ).forEach( function( span ) {&lt;br /&gt;
      var p = span.parentNode; if ( !p ) return;&lt;br /&gt;
      while ( span.firstChild ) p.insertBefore( span.firstChild, span );&lt;br /&gt;
      p.removeChild( span );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function escHtml( s ) {&lt;br /&gt;
    return String(s).replace(/&amp;amp;/g,&#039;&amp;amp;amp;&#039;).replace(/&amp;lt;/g,&#039;&amp;amp;lt;&#039;).replace(/&amp;gt;/g,&#039;&amp;amp;gt;&#039;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function injectHighlightCSS() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-hl-css&#039; ) ) return;&lt;br /&gt;
    var s = document.createElement( &#039;style&#039; );&lt;br /&gt;
    s.id = &#039;gr-hl-css&#039;;&lt;br /&gt;
    s.textContent = [&lt;br /&gt;
      &#039;.gr-search-hl{background:#fff176;color:#1a1a1a;border-radius:2px;padding:0 1px;box-shadow:0 0 0 1px rgba(181,69,27,0.25);}&#039;,&lt;br /&gt;
      &#039;.gr-search-hl-current{background:#ffb300!important;box-shadow:0 0 0 2px #b5451b!important;}&#039;,&lt;br /&gt;
      &#039;@keyframes gr-hl-pulse{0%{background:#ffb300;}50%{background:#fff176;}100%{background:#fff176;}}&#039;,&lt;br /&gt;
      &#039;.gr-search-hl-pulse{animation:gr-hl-pulse 1.2s ease 2;}&#039;,&lt;br /&gt;
    ].join(&#039;&#039;);&lt;br /&gt;
    document.head.appendChild( s );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  injectHighlightCSS();&lt;br /&gt;
&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) {&lt;br /&gt;
    document.addEventListener( &#039;DOMContentLoaded&#039;, applyHighlight );&lt;br /&gt;
  } else {&lt;br /&gt;
    applyHighlight();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ( window.mw ) {&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function() {&lt;br /&gt;
      setTimeout( applyHighlight, 100 );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  window.grStoreSearchHL = storeQueryForLink;&lt;br /&gt;
&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
/* ═══════════════════════════════════════════════════════════════&lt;br /&gt;
   Mobile addon — only runs on Minerva (mobile) skin&lt;br /&gt;
   ═══════════════════════════════════════════════════════════════ */&lt;br /&gt;
( function () {&lt;br /&gt;
  if ( !document.body.classList.contains( &#039;skin-minerva&#039; ) ) return;&lt;br /&gt;
  function injectCSS() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-mob-css&#039; ) ) return;&lt;br /&gt;
    var s = document.createElement( &#039;style&#039; );&lt;br /&gt;
    s.id = &#039;gr-mob-css&#039;;&lt;br /&gt;
    s.textContent =&lt;br /&gt;
      &#039;body,#mw-mf-viewport,#mw-mf-page-center{padding-top:0!important;margin-top:0!important;}&#039; +&lt;br /&gt;
      &#039;html,body,#mw-mf-viewport,#mw-mf-page-center{overflow-x:hidden!important;max-width:100vw!important;}&#039; +&lt;br /&gt;
      &#039;header.header-container{background:#b5451b!important;position:sticky!important;top:0!important;z-index:300!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header{background:#b5451b!important;min-height:54px!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header .search-toggle,.minerva-header .minerva-user-notifications{display:none!important;}&#039; +&lt;br /&gt;
      &#039;.branding-box a{display:flex!important;align-items:center!important;text-decoration:none!important;max-width:calc(100vw - 80px)!important;}&#039; +&lt;br /&gt;
      &#039;.branding-box a::before{content:&amp;quot;&amp;quot;;display:block;width:30px;height:30px;flex-shrink:0;background:url(&amp;quot;/favicon.png&amp;quot;) center/contain no-repeat;margin-right:8px;}&#039; +&lt;br /&gt;
      &#039;.branding-box a span{color:#fff!important;font-size:16px!important;font-weight:700!important;font-family:system-ui,sans-serif!important;line-height:1.2!important;flex:1 1 auto!important;min-width:0!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header svg path,.minerva-header svg rect,.minerva-header svg circle{fill:#fff!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header label{color:#fff!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-tabs,.mw-portlet-associated-pages,.page-actions-menu,#page-secondary-actions,.last-modified-bar,.minerva-anon-talk-link{display:none!important;}&#039; +&lt;br /&gt;
      &#039;#gr-mob-menu-items{display:block!important;}&#039; +&lt;br /&gt;
      &#039;.mw-footer.minerva-footer,.footer-places,.footer-info,.minerva-footer-logo,#footer-places-about,#footer-places-disclaimers,#footer-places-privacy{display:none!important;}&#039; +&lt;br /&gt;
      &#039;#gr-static-bar{position:sticky!important;top:54px!important;z-index:200!important;}&#039; +&lt;br /&gt;
      &#039;.mf-section-0,.mf-section-1,.mf-section-2,.mf-section-3,.mf-section-4,.mf-section-5,.mf-section-6,.mf-section-7,.mf-section-8,.mf-section-9,.mf-section-10{display:block!important;visibility:visible!important;}&#039; +&lt;br /&gt;
      &#039;.collapsible-block{display:block!important;}&#039; +&lt;br /&gt;
      &#039;.section-heading .indicator,.collapsible-heading .indicator{display:none!important;}&#039; +&lt;br /&gt;
      &#039;.section-heading,.collapsible-heading{pointer-events:none!important;}&#039; +&lt;br /&gt;
      &#039;.gr-home-grid{flex-direction:column!important;flex-wrap:nowrap!important;gap:12px!important;width:100%!important;}&#039; +&lt;br /&gt;
      &#039;.gr-home-card{width:100%!important;max-width:100%!important;min-width:unset!important;box-sizing:border-box!important;flex:none!important;}&#039; +&lt;br /&gt;
      &#039;.gr-home-toggle{flex-wrap:wrap!important;}&#039; +&lt;br /&gt;
      &#039;.mw-parser-output{font-size:18px!important;line-height:1.8!important;}&#039; +&lt;br /&gt;
      &#039;.mw-parser-output h2,.mw-parser-output h3{width:100%!important;}&#039; +&lt;br /&gt;
      &#039;.bhashyam-block{margin-left:8px!important;}&#039; +&lt;br /&gt;
      &#039;#footer,.mw-footer,.catlinks,#catlinks{display:none!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-panel{position:fixed!important;top:0!important;left:0!important;bottom:0!important;width:82vw!important;max-width:340px!important;background:#fff!important;z-index:10400!important;box-shadow:4px 0 28px rgba(0,0,0,0.22)!important;overflow-y:auto!important;padding:0 0 40px!important;transform:translateX(-110%)!important;transition:transform 0.26s cubic-bezier(0.4,0,0.2,1)!important;display:block!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-panel.open{transform:translateX(0)!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-backdrop{display:none!important;position:fixed!important;inset:0!important;background:rgba(0,0,0,0.4)!important;z-index:10399!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-backdrop.open{display:block!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-header{position:sticky!important;top:0!important;background:#fff!important;display:flex!important;align-items:center!important;justify-content:space-between!important;padding:16px 16px 12px!important;border-bottom:1px solid #f0ebe6!important;z-index:1!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-title{font-size:13px!important;font-weight:700!important;text-transform:uppercase!important;letter-spacing:0.08em!important;color:#b5451b!important;font-family:system-ui,sans-serif!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-close{background:none!important;border:none!important;font-size:22px!important;color:#999!important;cursor:pointer!important;padding:4px 8px!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-body{padding:12px 16px!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-body a{display:block!important;font-size:16px!important;line-height:1.6!important;color:#2c1810!important;text-decoration:none!important;padding:8px 0!important;border-bottom:1px solid #f5f0ed!important;}&#039;;&lt;br /&gt;
    document.head.appendChild( s );&lt;br /&gt;
  }&lt;br /&gt;
  function expandSections() {&lt;br /&gt;
    document.querySelectorAll( &#039;[class*=&amp;quot;mf-section-&amp;quot;], .collapsible-block&#039; ).forEach( function ( el ) { el.removeAttribute( &#039;hidden&#039; ); el.style.setProperty( &#039;display&#039;, &#039;block&#039;, &#039;important&#039; ); el.style.setProperty( &#039;visibility&#039;, &#039;visible&#039;, &#039;important&#039; ); el.removeAttribute( &#039;aria-hidden&#039; ); } );&lt;br /&gt;
    document.querySelectorAll( &#039;.section-heading, .collapsible-heading&#039; ).forEach( function ( el ) { el.setAttribute( &#039;aria-expanded&#039;, &#039;true&#039; ); el.style.setProperty( &#039;pointer-events&#039;, &#039;none&#039;, &#039;important&#039; ); } );&lt;br /&gt;
  }&lt;br /&gt;
  function watchSections() {&lt;br /&gt;
    var t = null;&lt;br /&gt;
    var obs = new MutationObserver( function ( ms ) { if ( ms.some( function(m){ return m.attributeName === &#039;hidden&#039;; } ) ) { clearTimeout(t); t = setTimeout( expandSections, 30 ); } } );&lt;br /&gt;
    obs.observe( document.querySelector( &#039;#mw-content-text&#039; ) || document.body, { subtree:true, attributes:true, attributeFilter:[&#039;hidden&#039;,&#039;aria-hidden&#039;] } );&lt;br /&gt;
  }&lt;br /&gt;
  function watchBodyPadding() {&lt;br /&gt;
    new MutationObserver( function () { if ( document.body.style.paddingTop &amp;amp;&amp;amp; document.body.style.paddingTop !== &#039;0px&#039; ) document.body.style.paddingTop = &#039;&#039;; } ).observe( document.body, { attributes:true, attributeFilter:[&#039;style&#039;] } );&lt;br /&gt;
  }&lt;br /&gt;
  function injectMenuLinks() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-mob-menu-items&#039; ) ) return;&lt;br /&gt;
    var navDrawer = document.querySelector( &#039;.navigation-drawer&#039; );&lt;br /&gt;
    if ( !navDrawer ) return;&lt;br /&gt;
    var wrap = document.createElement( &#039;div&#039; ); wrap.id = &#039;gr-mob-menu-items&#039;; wrap.style.cssText = &#039;width:100%;background:#fff;margin-top:8px;&#039;;&lt;br /&gt;
    var itemStyle = &#039;display:flex;align-items:center;gap:14px;padding:15px 20px;font-size:16px;color:#2c1810;text-decoration:none;font-family:system-ui,sans-serif;border-bottom:1px solid #f0ebe6;background:#fff;&#039;;&lt;br /&gt;
    function makeItem( href, label ) { var a = document.createElement( &#039;a&#039; ); a.href = href; a.style.cssText = itemStyle; a.innerHTML = &#039;&amp;lt;span&amp;gt;&#039; + label + &#039;&amp;lt;/span&amp;gt;&#039;; return a; }&lt;br /&gt;
    wrap.appendChild( makeItem( &#039;/Main_Page&#039;, &#039;Home&#039; ) );&lt;br /&gt;
    wrap.appendChild( makeItem( &#039;/My_wiki:Help&#039;, &#039;Help&#039; ) );&lt;br /&gt;
    wrap.appendChild( makeItem( &#039;/My_wiki:About&#039;, &#039;About&#039; ) );&lt;br /&gt;
    var userName = window.mw ? mw.config.get( &#039;wgUserName&#039; ) : null;&lt;br /&gt;
    if ( userName ) {&lt;br /&gt;
      wrap.appendChild( makeItem( ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) ? mw.util.getUrl( &#039;Special:Profile&#039; ) : &#039;/Special:Profile&#039;, &#039;Profile&#039; ) );&lt;br /&gt;
      var la = document.querySelector( &#039;a[href*=&amp;quot;action=logout&amp;quot;]&#039; );&lt;br /&gt;
      wrap.appendChild( makeItem( la ? la.href : &#039;/index.php?title=Special:UserLogout&#039;, &#039;Log out&#039; ) );&lt;br /&gt;
    }&lt;br /&gt;
    else wrap.appendChild( makeItem( &#039;/index.php?title=Special:UserLogin&#039;, &#039;Log in&#039; ) );&lt;br /&gt;
    var pageLeft = document.getElementById( &#039;mw-mf-page-left&#039; );&lt;br /&gt;
    if ( pageLeft ) { while ( pageLeft.firstChild ) pageLeft.removeChild( pageLeft.firstChild ); pageLeft.style.removeProperty( &#039;display&#039; ); pageLeft.appendChild( wrap ); }&lt;br /&gt;
    else navDrawer.appendChild( wrap );&lt;br /&gt;
  }&lt;br /&gt;
  var _tocDone = false;&lt;br /&gt;
  function initToc() {&lt;br /&gt;
    if ( _tocDone ) return;&lt;br /&gt;
    var tocList = document.querySelector( &#039;.vector-toc-contents, .vector-toc .vector-toc-list&#039; );&lt;br /&gt;
    if ( !tocList || !tocList.querySelector( &#039;li&#039; ) ) return;&lt;br /&gt;
    _tocDone = true;&lt;br /&gt;
    var bd = document.createElement( &#039;div&#039; ); bd.className = &#039;gr-mob-toc-backdrop&#039;; document.body.appendChild( bd );&lt;br /&gt;
    var panel = document.createElement( &#039;div&#039; ); panel.className = &#039;gr-mob-toc-panel&#039;;&lt;br /&gt;
    var hdr = document.createElement( &#039;div&#039; ); hdr.className = &#039;gr-mob-toc-header&#039;;&lt;br /&gt;
    var ttl = document.createElement( &#039;div&#039; ); ttl.className = &#039;gr-mob-toc-title&#039;; ttl.textContent = &#039;विषयसूची&#039;;&lt;br /&gt;
    var cls = document.createElement( &#039;button&#039; ); cls.className = &#039;gr-mob-toc-close&#039;; cls.textContent = &#039;✕&#039;;&lt;br /&gt;
    hdr.appendChild( ttl ); hdr.appendChild( cls ); panel.appendChild( hdr );&lt;br /&gt;
    var body = document.createElement( &#039;div&#039; ); body.className = &#039;gr-mob-toc-body&#039;; body.appendChild( tocList.cloneNode( true ) ); panel.appendChild( body ); document.body.appendChild( panel );&lt;br /&gt;
    var btn = document.createElement( &#039;button&#039; ); btn.id = &#039;gr-mob-toc-btn&#039;; btn.innerHTML = &#039;☰ &amp;amp;nbsp;Contents&#039;;&lt;br /&gt;
    btn.style.cssText = &#039;position:fixed;bottom:148px;left:16px;z-index:9100;background:#fff;border:1.5px solid #b5451b;border-radius:24px;padding:10px 16px;font-size:15px;font-family:system-ui,sans-serif;color:#b5451b;font-weight:600;box-shadow:0 3px 14px rgba(0,0,0,0.15);cursor:pointer;&#039;;&lt;br /&gt;
    document.body.appendChild( btn );&lt;br /&gt;
    function open()  { panel.classList.add(&#039;open&#039;); bd.classList.add(&#039;open&#039;); document.body.style.overflow=&#039;hidden&#039;; }&lt;br /&gt;
    function close() { panel.classList.remove(&#039;open&#039;); bd.classList.remove(&#039;open&#039;); document.body.style.overflow=&#039;&#039;; }&lt;br /&gt;
    btn.onclick = open; cls.onclick = close; bd.onclick = close;&lt;br /&gt;
    body.querySelectorAll(&#039;a&#039;).forEach(function(a){ a.onclick = close; });&lt;br /&gt;
  }&lt;br /&gt;
  function injectMoolaUllekhaLinks() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-mob-doc-nav&#039; ) ) return;&lt;br /&gt;
    var pageName = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039; ) ) || &#039;&#039;;&lt;br /&gt;
    if ( pageName === &#039;Main_Page&#039; || !pageName ) return;&lt;br /&gt;
    function wikiUrl( slug ) { if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( slug ); return ( ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039; ).replace( &#039;$1&#039;, encodeURIComponent( slug ).replace( /%2F/g, &#039;/&#039; ) ); }&lt;br /&gt;
    var teekaPage = document.querySelector( &#039;.gr-teeka-page&#039; );&lt;br /&gt;
    var primarySlug = teekaPage ? ( teekaPage.getAttribute( &#039;data-primary&#039; ) || pageName.split(&#039;/&#039;)[0] ) : pageName.split(&#039;/&#039;)[0];&lt;br /&gt;
    var docTitleEl = document.querySelector( &#039;.gr-doc-title&#039; );&lt;br /&gt;
    var hasMoolaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-moola&#039; ) === &#039;1&#039;;&lt;br /&gt;
    var hasUllekhaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-ullekha&#039; ) === &#039;1&#039;;&lt;br /&gt;
    var showMoolam = !!teekaPage || hasMoolaPage, showUllekha = hasUllekhaPage || !!teekaPage;&lt;br /&gt;
    if ( !showMoolam &amp;amp;&amp;amp; !showUllekha ) return;&lt;br /&gt;
    var nav = document.createElement( &#039;div&#039; ); nav.id = &#039;gr-mob-doc-nav&#039;;&lt;br /&gt;
    nav.style.cssText = &#039;display:flex;gap:10px;padding:10px 16px 8px;background:#fdf8f5;border-bottom:1px solid #f0e0d6;font-family:system-ui,sans-serif;&#039;;&lt;br /&gt;
    function makeLink( href, label ) { var a = document.createElement( &#039;a&#039; ); a.href = href; a.textContent = label; a.style.cssText = &#039;display:inline-flex;align-items:center;padding:5px 16px;border-radius:20px;background:#fff;border:1.5px solid #e8cfc4;color:#b5451b;font-size:14px;font-weight:600;text-decoration:none;&#039;; return a; }&lt;br /&gt;
    if ( teekaPage ) nav.appendChild( makeLink( wikiUrl( primarySlug ), &#039;मूल&#039; ) );&lt;br /&gt;
    else if ( hasMoolaPage ) nav.appendChild( makeLink( wikiUrl( primarySlug + &#039;/Moola&#039; ), &#039;मूलम्&#039; ) );&lt;br /&gt;
    if ( showUllekha ) nav.appendChild( makeLink( wikiUrl( primarySlug + &#039;/Ullekha&#039; ), &#039;उल्लेख&#039; ) );&lt;br /&gt;
    var h1 = document.getElementById( &#039;firstHeading&#039; ) || document.querySelector( &#039;.page-heading, h1.firstHeading, .mw-first-heading&#039; );&lt;br /&gt;
    if ( h1 &amp;amp;&amp;amp; h1.parentNode ) h1.parentNode.insertBefore( nav, h1.nextSibling );&lt;br /&gt;
    else { var ct = document.getElementById( &#039;mw-content-text&#039; ); if ( ct ) ct.insertBefore( nav, ct.firstChild ); }&lt;br /&gt;
  }&lt;br /&gt;
  injectCSS(); watchBodyPadding();&lt;br /&gt;
  function boot() { expandSections(); watchSections(); injectMenuLinks(); injectMoolaUllekhaLinks(); [100,400,900,1800].forEach(function(ms){ setTimeout(expandSections,ms); }); setTimeout(initToc,700); }&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) document.addEventListener( &#039;DOMContentLoaded&#039;, boot );&lt;br /&gt;
  else boot();&lt;br /&gt;
  if ( window.mw ) mw.hook( &#039;wikipage.content&#039; ).add(function(){ setTimeout(function(){ expandSections(); injectMenuLinks(); injectMoolaUllekhaLinks(); initToc(); },300); });&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
  mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
    setTimeout( function () {&lt;br /&gt;
      var blocks = document.querySelectorAll( &#039;.collapsible-block, .toggle-list&#039; );&lt;br /&gt;
      Array.prototype.forEach.call( blocks, function ( el ) { if ( !el.parentNode ) { try { el.remove(); } catch(e) {} } } );&lt;br /&gt;
    }, 0 );&lt;br /&gt;
  } );&lt;br /&gt;
  if ( mw.config.get( &#039;wgPageName&#039; ) !== &#039;Main_Page&#039; ) return;&lt;br /&gt;
  mw.loader.using( &#039;mediawiki.util&#039; ).done( function () {&lt;br /&gt;
    $( function () { applyHomeToggleOffset(); window.addEventListener( &#039;resize&#039;, applyHomeToggleOffset, { passive: true } ); setTimeout( applyHomeToggleOffset, 300 ); setTimeout( applyHomeToggleOffset, 800 ); } );&lt;br /&gt;
  } );&lt;br /&gt;
  function applyHomeToggleOffset() {&lt;br /&gt;
    var bar = document.getElementById( &#039;gr-static-bar&#039; ); if ( !bar ) return;&lt;br /&gt;
    var barBottom = Math.round( bar.getBoundingClientRect().bottom );&lt;br /&gt;
    [ document.getElementById(&#039;gr-home&#039;), document.getElementById(&#039;gr-home-toggle&#039;), document.querySelector(&#039;#mw-content-text .mw-parser-output &amp;gt; .gr-home, #mw-content-text .mw-parser-output &amp;gt; *:first-child&#039;) ].forEach( function(el){ if(el) el.style.scrollMarginTop=(barBottom+4)+&#039;px&#039;; } );&lt;br /&gt;
    var isMob = window.innerWidth &amp;lt; 768 || !!document.getElementById( &#039;mw-mf-viewport&#039; );&lt;br /&gt;
    if ( isMob ) { var toggleEl = document.getElementById(&#039;gr-home-toggle&#039;); if ( toggleEl ) { var tr = toggleEl.getBoundingClientRect(); if ( tr.top &amp;lt; barBottom ) { var cp = parseInt(window.getComputedStyle(document.body).paddingTop,10)||0; document.body.style.paddingTop=(cp+(barBottom-tr.top)+4)+&#039;px&#039;; } } }&lt;br /&gt;
  }&lt;br /&gt;
  $( function () {&lt;br /&gt;
    var $toggle=$(&#039;#gr-home-toggle&#039;),$viewG=$(&#039;#gr-view-grantha&#039;),$viewA=$(&#039;#gr-view-author&#039;),$btnG=$(&#039;#gr-toggle-grantha&#039;),$btnA=$(&#039;#gr-toggle-author&#039;);&lt;br /&gt;
    if(!$toggle.length||!$viewG.length||!$viewA.length)return; if($toggle.data(&#039;gr-wired&#039;))return; $toggle.data(&#039;gr-wired&#039;,true);&lt;br /&gt;
    function showView(which){ if(which===&#039;grantha&#039;){$viewG.show();$viewA.hide();$btnG.addClass(&#039;gr-toggle-active&#039;);$btnA.removeClass(&#039;gr-toggle-active&#039;);}else{$viewA.show();$viewG.hide();$btnA.addClass(&#039;gr-toggle-active&#039;);$btnG.removeClass(&#039;gr-toggle-active&#039;);} try{localStorage.setItem(&#039;grantha_home_tab&#039;,which);}catch(e){} }&lt;br /&gt;
    $btnG.on(&#039;click keydown&#039;,function(e){if(e.type===&#039;keydown&#039;&amp;amp;&amp;amp;e.key!==&#039;Enter&#039;&amp;amp;&amp;amp;e.key!==&#039; &#039;)return;showView(&#039;grantha&#039;);});&lt;br /&gt;
    $btnA.on(&#039;click keydown&#039;,function(e){if(e.type===&#039;keydown&#039;&amp;amp;&amp;amp;e.key!==&#039;Enter&#039;&amp;amp;&amp;amp;e.key!==&#039; &#039;)return;showView(&#039;author&#039;);});&lt;br /&gt;
    try{var saved=localStorage.getItem(&#039;grantha_home_tab&#039;);if(saved===&#039;author&#039;)showView(&#039;author&#039;);else showView(&#039;grantha&#039;);}catch(e){showView(&#039;grantha&#039;);}&lt;br /&gt;
  } );&lt;br /&gt;
}() );&lt;br /&gt;
// ── Replace MediaWiki user links with a single username dropdown (Profile + Logout) ──&lt;br /&gt;
( function () {&lt;br /&gt;
  function wikiHref( title ) {&lt;br /&gt;
    if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( title );&lt;br /&gt;
    var ap = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
    return ap.replace( &#039;$1&#039;, title );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function buildLogoutForm( token ) {&lt;br /&gt;
    token = token || &#039;&#039;;&lt;br /&gt;
    var esc = String( token ).replace( /&amp;quot;/g, &#039;&amp;amp;quot;&#039; );&lt;br /&gt;
    var script = ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.wikiScript ) ? mw.util.wikiScript() : &#039;/index.php&#039;;&lt;br /&gt;
    var form = document.createElement( &#039;form&#039; );&lt;br /&gt;
    form.method = &#039;post&#039;;&lt;br /&gt;
    form.action = script + &#039;?title=Special:UserLogout&#039;;&lt;br /&gt;
    form.style.display = &#039;none&#039;;&lt;br /&gt;
    form.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;wpEditToken&amp;quot; value=&amp;quot;&#039; + esc + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;title&amp;quot; value=&amp;quot;Special:UserLogout&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;returnto&amp;quot; value=&amp;quot;Main Page&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
    document.body.appendChild( form );&lt;br /&gt;
    return form;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function injectUserDropdown() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-user-dropdown&#039; ) ) return;&lt;br /&gt;
&lt;br /&gt;
    var userName = window.mw ? mw.config.get( &#039;wgUserName&#039; ) : null;&lt;br /&gt;
    var isAnon = !userName || ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgUserId&#039; ) === null );&lt;br /&gt;
&lt;br /&gt;
    var container = document.querySelector( &#039;.vector-user-links-main&#039; )&lt;br /&gt;
                 || document.querySelector( &#039;.vector-user-links&#039; );&lt;br /&gt;
    if ( !container ) return;&lt;br /&gt;
&lt;br /&gt;
    // Logged-out: show a single Login/Signup link, nothing else&lt;br /&gt;
    if ( isAnon ) {&lt;br /&gt;
        // Remove MediaWiki&#039;s native account links so only our button shows&lt;br /&gt;
        [ &#039;#pt-createaccount&#039;, &#039;#pt-login&#039;, &#039;#pt-anoncontribs&#039;,&lt;br /&gt;
          &#039;#pt-anontalk&#039;, &#039;#pt-anonuserpage&#039; ].forEach( function ( sel ) {&lt;br /&gt;
            document.querySelectorAll( sel ).forEach( function ( el ) {&lt;br /&gt;
                if ( el &amp;amp;&amp;amp; el.parentNode ) el.parentNode.removeChild( el );&lt;br /&gt;
            } );&lt;br /&gt;
        } );&lt;br /&gt;
        if ( document.getElementById( &#039;gr-login-link&#039; ) ) return;&lt;br /&gt;
        var loginA = document.createElement( &#039;a&#039; );&lt;br /&gt;
        loginA.id = &#039;gr-login-link&#039;;&lt;br /&gt;
        loginA.href = wikiHref( &#039;Special:UserLogin&#039; );&lt;br /&gt;
        loginA.textContent = &#039;Login/Signup&#039;;&lt;br /&gt;
        loginA.style.cssText = &#039;color:#fff;font-size:0.9em;font-weight:500;&#039; +&lt;br /&gt;
            &#039;text-decoration:none;padding:6px 12px;border-radius:6px;&#039; +&lt;br /&gt;
            &#039;background:rgba(255,255,255,0.12);white-space:nowrap;&#039;;&lt;br /&gt;
        loginA.addEventListener( &#039;mouseover&#039;, function(){ this.style.background=&#039;rgba(255,255,255,0.2)&#039;; } );&lt;br /&gt;
        loginA.addEventListener( &#039;mouseout&#039;,  function(){ this.style.background=&#039;rgba(255,255,255,0.12)&#039;; } );&lt;br /&gt;
        container.appendChild( loginA );&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Logout token (csrf token works for logout in modern MW)&lt;br /&gt;
    var token = ( window.mw &amp;amp;&amp;amp; mw.user &amp;amp;&amp;amp; mw.user.tokens )&lt;br /&gt;
      ? mw.user.tokens.get( &#039;csrfToken&#039; ) : &#039;+\\&#039;;&lt;br /&gt;
&lt;br /&gt;
    var wrap = document.createElement( &#039;div&#039; );&lt;br /&gt;
    wrap.id = &#039;gr-user-dropdown&#039;;&lt;br /&gt;
    wrap.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;button id=&amp;quot;gr-user-trigger&amp;quot; type=&amp;quot;button&amp;quot; aria-haspopup=&amp;quot;true&amp;quot; aria-expanded=&amp;quot;false&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;&#039; + (userName.replace(/&amp;lt;/g,&#039;&amp;amp;lt;&#039;)) + &#039;&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span class=&amp;quot;gr-caret&amp;quot;&amp;gt;▾&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;div id=&amp;quot;gr-user-menu&amp;quot; role=&amp;quot;menu&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;&#039; + wikiHref( &#039;Special:Profile&#039; ) + &#039;&amp;quot; role=&amp;quot;menuitem&amp;quot;&amp;gt;Profile&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;#&amp;quot; id=&amp;quot;gr-logout-link&amp;quot; role=&amp;quot;menuitem&amp;quot;&amp;gt;Log out&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
    container.appendChild( wrap );&lt;br /&gt;
&lt;br /&gt;
    var trigger = document.getElementById( &#039;gr-user-trigger&#039; );&lt;br /&gt;
    var menu    = document.getElementById( &#039;gr-user-menu&#039; );&lt;br /&gt;
&lt;br /&gt;
    trigger.addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      e.stopPropagation();&lt;br /&gt;
      var open = menu.classList.toggle( &#039;gr-open&#039; );&lt;br /&gt;
      trigger.setAttribute( &#039;aria-expanded&#039;, open ? &#039;true&#039; : &#039;false&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    document.addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      if ( !wrap.contains( e.target ) ) {&lt;br /&gt;
        menu.classList.remove( &#039;gr-open&#039; );&lt;br /&gt;
        trigger.setAttribute( &#039;aria-expanded&#039;, &#039;false&#039; );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    document.getElementById( &#039;gr-logout-link&#039; ).addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      e.preventDefault();&lt;br /&gt;
      // Fetch a fresh CSRF token at click time (more reliable than at load time)&lt;br /&gt;
      if ( window.mw &amp;amp;&amp;amp; mw.user &amp;amp;&amp;amp; mw.user.tokens ) {&lt;br /&gt;
        var t = mw.user.tokens.get( &#039;csrfToken&#039; );&lt;br /&gt;
        if ( t ) { buildLogoutForm( t ).submit(); return; }&lt;br /&gt;
      }&lt;br /&gt;
      // Fallback: use the API to get a logout token, then submit&lt;br /&gt;
      if ( window.mw &amp;amp;&amp;amp; mw.Api ) {&lt;br /&gt;
        new mw.Api().postWithToken( &#039;csrf&#039;, { action: &#039;logout&#039; } )&lt;br /&gt;
          .done( function () { location.href = &#039;/Main_Page&#039;; } )&lt;br /&gt;
          .fail( function () { location.href = &#039;/index.php?title=Special:UserLogout&#039;; } );&lt;br /&gt;
      } else {&lt;br /&gt;
        location.href = &#039;/index.php?title=Special:UserLogout&#039;;&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) {&lt;br /&gt;
    document.addEventListener( &#039;DOMContentLoaded&#039;, injectUserDropdown );&lt;br /&gt;
  } else {&lt;br /&gt;
    injectUserDropdown();&lt;br /&gt;
  }&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.js&amp;diff=6214</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.js&amp;diff=6214"/>
		<updated>2026-06-12T17:35:04Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* MediaWiki:Common.js — grantha.io  (v7) */&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
  var LS_SCRIPT_KEY = &#039;grantha_reader_script&#039;;&lt;br /&gt;
  var currentScript = &#039;deva&#039;;&lt;br /&gt;
&lt;br /&gt;
  function devanagariToIAST( text ) {&lt;br /&gt;
    var CONSONANTS = {&lt;br /&gt;
      &#039;क&#039;:&#039;k&#039;,&#039;ख&#039;:&#039;kh&#039;,&#039;ग&#039;:&#039;g&#039;,&#039;घ&#039;:&#039;gh&#039;,&#039;ङ&#039;:&#039;ṅ&#039;,&lt;br /&gt;
      &#039;च&#039;:&#039;c&#039;,&#039;छ&#039;:&#039;ch&#039;,&#039;ज&#039;:&#039;j&#039;,&#039;झ&#039;:&#039;jh&#039;,&#039;ञ&#039;:&#039;ñ&#039;,&lt;br /&gt;
      &#039;ट&#039;:&#039;ṭ&#039;,&#039;ठ&#039;:&#039;ṭh&#039;,&#039;ड&#039;:&#039;ḍ&#039;,&#039;ढ&#039;:&#039;ḍh&#039;,&#039;ण&#039;:&#039;ṇ&#039;,&lt;br /&gt;
      &#039;त&#039;:&#039;t&#039;,&#039;थ&#039;:&#039;th&#039;,&#039;द&#039;:&#039;d&#039;,&#039;ध&#039;:&#039;dh&#039;,&#039;न&#039;:&#039;n&#039;,&lt;br /&gt;
      &#039;प&#039;:&#039;p&#039;,&#039;फ&#039;:&#039;ph&#039;,&#039;ब&#039;:&#039;b&#039;,&#039;भ&#039;:&#039;bh&#039;,&#039;म&#039;:&#039;m&#039;,&lt;br /&gt;
      &#039;य&#039;:&#039;y&#039;,&#039;र&#039;:&#039;r&#039;,&#039;ल&#039;:&#039;l&#039;,&#039;ळ&#039;:&#039;ḷ&#039;,&#039;व&#039;:&#039;v&#039;,&lt;br /&gt;
      &#039;श&#039;:&#039;ś&#039;,&#039;ष&#039;:&#039;ṣ&#039;,&#039;स&#039;:&#039;s&#039;,&#039;ह&#039;:&#039;h&#039;&lt;br /&gt;
    };&lt;br /&gt;
    var DIACRITICS = {&lt;br /&gt;
      &#039;ा&#039;:&#039;ā&#039;,&#039;ि&#039;:&#039;i&#039;,&#039;ी&#039;:&#039;ī&#039;,&#039;ु&#039;:&#039;u&#039;,&#039;ू&#039;:&#039;ū&#039;,&lt;br /&gt;
      &#039;ृ&#039;:&#039;ṛ&#039;,&#039;ॄ&#039;:&#039;ṝ&#039;,&#039;े&#039;:&#039;e&#039;,&#039;ै&#039;:&#039;ai&#039;,&#039;ो&#039;:&#039;o&#039;,&#039;ौ&#039;:&#039;au&#039;&lt;br /&gt;
    };&lt;br /&gt;
    var VOWELS = {&lt;br /&gt;
      &#039;अ&#039;:&#039;a&#039;,&#039;आ&#039;:&#039;ā&#039;,&#039;इ&#039;:&#039;i&#039;,&#039;ई&#039;:&#039;ī&#039;,&#039;उ&#039;:&#039;u&#039;,&#039;ऊ&#039;:&#039;ū&#039;,&lt;br /&gt;
      &#039;ऋ&#039;:&#039;ṛ&#039;,&#039;ॠ&#039;:&#039;ṝ&#039;,&#039;ए&#039;:&#039;e&#039;,&#039;ऐ&#039;:&#039;ai&#039;,&#039;ओ&#039;:&#039;o&#039;,&#039;औ&#039;:&#039;au&#039;,&#039;ऽ&#039;:&amp;quot;&#039;&amp;quot;&lt;br /&gt;
    };&lt;br /&gt;
    var MISC = {&lt;br /&gt;
      &#039;ं&#039;:&#039;ṃ&#039;,&#039;ः&#039;:&#039;ḥ&#039;,&#039;ँ&#039;:&#039;m̐&#039;,&#039;ॐ&#039;:&#039;oṃ&#039;,&lt;br /&gt;
      &#039;०&#039;:&#039;0&#039;,&#039;१&#039;:&#039;1&#039;,&#039;२&#039;:&#039;2&#039;,&#039;३&#039;:&#039;3&#039;,&#039;४&#039;:&#039;4&#039;,&lt;br /&gt;
      &#039;५&#039;:&#039;5&#039;,&#039;६&#039;:&#039;6&#039;,&#039;७&#039;:&#039;7&#039;,&#039;८&#039;:&#039;8&#039;,&#039;९&#039;:&#039;9&#039;&lt;br /&gt;
    };&lt;br /&gt;
    var HALANTA = &#039;्&#039;;&lt;br /&gt;
    var chars = Array.from( text );&lt;br /&gt;
    var result = &#039;&#039;;&lt;br /&gt;
    var i = 0;&lt;br /&gt;
    while ( i &amp;lt; chars.length ) {&lt;br /&gt;
      var ch   = chars[ i ];&lt;br /&gt;
      var next = chars[ i + 1 ];&lt;br /&gt;
      if ( CONSONANTS[ ch ] ) {&lt;br /&gt;
        var base = CONSONANTS[ ch ];&lt;br /&gt;
        if ( next === HALANTA )          { result += base;               i += 2; }&lt;br /&gt;
        else if ( DIACRITICS[ next ] )   { result += base + DIACRITICS[ next ]; i += 2; }&lt;br /&gt;
        else if ( next === &#039;ं&#039; || next === &#039;ः&#039; ) { result += base + &#039;a&#039; + MISC[ next ]; i += 2; }&lt;br /&gt;
        else                             { result += base + &#039;a&#039;;         i++;    }&lt;br /&gt;
      } else if ( VOWELS[ ch ] )         { result += VOWELS[ ch ];       i++; }&lt;br /&gt;
      else if ( DIACRITICS[ ch ] )       { result += DIACRITICS[ ch ];   i++; }&lt;br /&gt;
      else if ( MISC[ ch ] )             { result += MISC[ ch ];         i++; }&lt;br /&gt;
      else                               { result += ch;                 i++; }&lt;br /&gt;
    }&lt;br /&gt;
    return result;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var SCRIPT_MAP = {&lt;br /&gt;
    kn: {&lt;br /&gt;
      &#039;अ&#039;:&#039;ಅ&#039;,&#039;आ&#039;:&#039;ಆ&#039;,&#039;इ&#039;:&#039;ಇ&#039;,&#039;ई&#039;:&#039;ಈ&#039;,&#039;उ&#039;:&#039;ಉ&#039;,&#039;ऊ&#039;:&#039;ಊ&#039;,&#039;ऋ&#039;:&#039;ಋ&#039;,&lt;br /&gt;
      &#039;ए&#039;:&#039;ಏ&#039;,&#039;ऐ&#039;:&#039;ಐ&#039;,&#039;ओ&#039;:&#039;ಓ&#039;,&#039;औ&#039;:&#039;ಔ&#039;,&#039;ऽ&#039;:&#039;ಽ&#039;,&lt;br /&gt;
      &#039;क&#039;:&#039;ಕ&#039;,&#039;ख&#039;:&#039;ಖ&#039;,&#039;ग&#039;:&#039;ಗ&#039;,&#039;घ&#039;:&#039;ಘ&#039;,&#039;ङ&#039;:&#039;ಙ&#039;,&lt;br /&gt;
      &#039;च&#039;:&#039;ಚ&#039;,&#039;छ&#039;:&#039;ಛ&#039;,&#039;ज&#039;:&#039;ಜ&#039;,&#039;झ&#039;:&#039;ಝ&#039;,&#039;ञ&#039;:&#039;ಞ&#039;,&lt;br /&gt;
      &#039;ट&#039;:&#039;ಟ&#039;,&#039;ठ&#039;:&#039;ಠ&#039;,&#039;ड&#039;:&#039;ಡ&#039;,&#039;ढ&#039;:&#039;ಢ&#039;,&#039;ण&#039;:&#039;ಣ&#039;,&lt;br /&gt;
      &#039;त&#039;:&#039;ತ&#039;,&#039;थ&#039;:&#039;ಥ&#039;,&#039;द&#039;:&#039;ದ&#039;,&#039;ध&#039;:&#039;ಧ&#039;,&#039;न&#039;:&#039;ನ&#039;,&lt;br /&gt;
      &#039;प&#039;:&#039;ಪ&#039;,&#039;फ&#039;:&#039;ಫ&#039;,&#039;ब&#039;:&#039;ಬ&#039;,&#039;भ&#039;:&#039;ಭ&#039;,&#039;म&#039;:&#039;ಮ&#039;,&lt;br /&gt;
      &#039;य&#039;:&#039;ಯ&#039;,&#039;र&#039;:&#039;ರ&#039;,&#039;ल&#039;:&#039;ಲ&#039;,&#039;व&#039;:&#039;ವ&#039;,&lt;br /&gt;
      &#039;श&#039;:&#039;ಶ&#039;,&#039;ष&#039;:&#039;ಷ&#039;,&#039;स&#039;:&#039;ಸ&#039;,&#039;ह&#039;:&#039;ಹ&#039;,&lt;br /&gt;
      &#039;ा&#039;:&#039;ಾ&#039;,&#039;ि&#039;:&#039;ಿ&#039;,&#039;ी&#039;:&#039;ೀ&#039;,&#039;ु&#039;:&#039;ು&#039;,&#039;ू&#039;:&#039;ೂ&#039;,&lt;br /&gt;
      &#039;ृ&#039;:&#039;ೃ&#039;,&#039;े&#039;:&#039;ೇ&#039;,&#039;ै&#039;:&#039;ೈ&#039;,&#039;ो&#039;:&#039;ೋ&#039;,&#039;ौ&#039;:&#039;ೌ&#039;,&lt;br /&gt;
      &#039;ं&#039;:&#039;ಂ&#039;,&#039;ः&#039;:&#039;ಃ&#039;,&#039;्&#039;:&#039;್&#039;,&lt;br /&gt;
      &#039;०&#039;:&#039;೦&#039;,&#039;१&#039;:&#039;೧&#039;,&#039;२&#039;:&#039;೨&#039;,&#039;३&#039;:&#039;೩&#039;,&#039;४&#039;:&#039;೪&#039;,&lt;br /&gt;
      &#039;५&#039;:&#039;೫&#039;,&#039;६&#039;:&#039;೬&#039;,&#039;७&#039;:&#039;೭&#039;,&#039;८&#039;:&#039;೮&#039;,&#039;९&#039;:&#039;೯&#039;&lt;br /&gt;
    },&lt;br /&gt;
    ta: {&lt;br /&gt;
      &#039;अ&#039;:&#039;அ&#039;,&#039;आ&#039;:&#039;ஆ&#039;,&#039;इ&#039;:&#039;இ&#039;,&#039;ई&#039;:&#039;ஈ&#039;,&#039;उ&#039;:&#039;உ&#039;,&#039;ऊ&#039;:&#039;ஊ&#039;,&lt;br /&gt;
      &#039;ऋ&#039;:&#039;ரு&#039;,&#039;ॠ&#039;:&#039;ரூ&#039;,&lt;br /&gt;
      &#039;ए&#039;:&#039;ஏ&#039;,&#039;ऐ&#039;:&#039;ஐ&#039;,&#039;ओ&#039;:&#039;ஓ&#039;,&#039;औ&#039;:&#039;ஔ&#039;,&lt;br /&gt;
      &#039;क&#039;:&#039;க&#039;,&#039;ख&#039;:&#039;க&#039;,&#039;ग&#039;:&#039;க&#039;,&#039;घ&#039;:&#039;க&#039;,&#039;ङ&#039;:&#039;ங&#039;,&lt;br /&gt;
      &#039;च&#039;:&#039;ச&#039;,&#039;छ&#039;:&#039;ச&#039;,&#039;ज&#039;:&#039;ஜ&#039;,&#039;झ&#039;:&#039;ஜ&#039;,&#039;ञ&#039;:&#039;ஞ&#039;,&lt;br /&gt;
      &#039;ட&#039;:&#039;ட&#039;,&#039;ठ&#039;:&#039;ட&#039;,&#039;ड&#039;:&#039;ட&#039;,&#039;ढ&#039;:&#039;ட&#039;,&#039;ண&#039;:&#039;ண&#039;,&lt;br /&gt;
      &#039;त&#039;:&#039;த&#039;,&#039;थ&#039;:&#039;த&#039;,&#039;द&#039;:&#039;த&#039;,&#039;ध&#039;:&#039;த&#039;,&#039;न&#039;:&#039;ந&#039;,&lt;br /&gt;
      &#039;प&#039;:&#039;ப&#039;,&#039;फ&#039;:&#039;ப&#039;,&#039;ब&#039;:&#039;ப&#039;,&#039;भ&#039;:&#039;ப&#039;,&#039;म&#039;:&#039;ம&#039;,&lt;br /&gt;
      &#039;य&#039;:&#039;ய&#039;,&#039;र&#039;:&#039;ர&#039;,&#039;ल&#039;:&#039;ல&#039;,&#039;ळ&#039;:&#039;ழ&#039;,&#039;व&#039;:&#039;வ&#039;,&lt;br /&gt;
      &#039;श&#039;:&#039;ஶ&#039;,&#039;ष&#039;:&#039;ஷ&#039;,&#039;स&#039;:&#039;ஸ&#039;,&#039;ह&#039;:&#039;ஹ&#039;,&lt;br /&gt;
      &#039;ा&#039;:&#039;ா&#039;,&#039;ि&#039;:&#039;ி&#039;,&#039;ी&#039;:&#039;ீ&#039;,&#039;ु&#039;:&#039;ு&#039;,&#039;ू&#039;:&#039;ூ&#039;,&lt;br /&gt;
      &#039;ृ&#039;:&#039;ு&#039;,&#039;ॄ&#039;:&#039;ூ&#039;,&lt;br /&gt;
      &#039;े&#039;:&#039;ே&#039;,&#039;ை&#039;:&#039;ை&#039;,&#039;ो&#039;:&#039;ோ&#039;,&#039;ौ&#039;:&#039;ௌ&#039;,&lt;br /&gt;
      &#039;ं&#039;:&#039;ம்&#039;,&#039;ः&#039;:&#039;:&#039;,&#039;ँ&#039;:&#039;ம்&#039;,&#039;्&#039;:&#039;்&#039;,&#039;ॐ&#039;:&#039;ௐ&#039;,&#039;ऽ&#039;:&#039;ௗ&#039;,&lt;br /&gt;
      &#039;०&#039;:&#039;0&#039;,&#039;१&#039;:&#039;1&#039;,&#039;२&#039;:&#039;2&#039;,&#039;३&#039;:&#039;3&#039;,&#039;४&#039;:&#039;4&#039;,&lt;br /&gt;
      &#039;५&#039;:&#039;5&#039;,&#039;६&#039;:&#039;6&#039;,&#039;७&#039;:&#039;7&#039;,&#039;८&#039;:&#039;8&#039;,&#039;९&#039;:&#039;9&#039;&lt;br /&gt;
    }&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  var PRE = [&lt;br /&gt;
    [ /ङ्क/g, &#039;ंक&#039; ], [ /ङ्ख/g, &#039;ंख&#039; ], [ /ङ्ग/g, &#039;ंग&#039; ], [ /ङ्घ/g, &#039;ंघ&#039; ],&lt;br /&gt;
    [ /ञ्च/g, &#039;ंच&#039; ], [ /ञ्ज/g, &#039;ंज&#039; ], [ /ण्ट/g, &#039;ंट&#039; ], [ /ण्ड/g, &#039;ंड&#039; ],&lt;br /&gt;
    [ /न्त/g, &#039;ंत&#039; ], [ /न्द/g, &#039;ंद&#039; ], [ /म्ब/g, &#039;ंब&#039; ], [ /म्भ/g, &#039;ंभ&#039; ]&lt;br /&gt;
  ];&lt;br /&gt;
&lt;br /&gt;
  function transliterateText( text, script ) {&lt;br /&gt;
    if ( script === &#039;en&#039; ) return devanagariToIAST( text );&lt;br /&gt;
    var map = SCRIPT_MAP[ script ];&lt;br /&gt;
    if ( !map ) return text;&lt;br /&gt;
    var t = text;&lt;br /&gt;
    PRE.forEach( function ( p ) { t = t.replace( p[ 0 ], p[ 1 ] ); } );&lt;br /&gt;
    return Array.from( t ).map( function ( ch ) {&lt;br /&gt;
      return map[ ch ] !== undefined ? map[ ch ] : ch;&lt;br /&gt;
    } ).join( &#039;&#039; );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var translatableSpans = [];&lt;br /&gt;
&lt;br /&gt;
  function tagTextNodes() {&lt;br /&gt;
    var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
    if ( content ) {&lt;br /&gt;
      var walker = document.createTreeWalker( content, NodeFilter.SHOW_TEXT );&lt;br /&gt;
      var nodes  = [];&lt;br /&gt;
      while ( walker.nextNode() ) nodes.push( walker.currentNode );&lt;br /&gt;
      nodes.forEach( function ( node ) {&lt;br /&gt;
        var p = node.parentNode;&lt;br /&gt;
        if ( !p ) return;&lt;br /&gt;
        if ( p.hasAttribute &amp;amp;&amp;amp; p.hasAttribute( &#039;data-deva&#039; ) ) return;&lt;br /&gt;
        if ( p.closest ) {&lt;br /&gt;
          if ( p.closest( &#039;.gr-controls&#039; )    ) return;&lt;br /&gt;
          if ( p.closest( &#039;.mw-editsection&#039; ) ) return;&lt;br /&gt;
        }&lt;br /&gt;
        var orig = node.textContent;&lt;br /&gt;
        if ( !orig.trim() ) return;&lt;br /&gt;
        var span = document.createElement( &#039;span&#039; );&lt;br /&gt;
        span.setAttribute( &#039;data-deva&#039;, orig );&lt;br /&gt;
        span.textContent = orig;&lt;br /&gt;
        p.replaceChild( span, node );&lt;br /&gt;
        translatableSpans.push( span );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
    document.querySelectorAll( &#039;.vector-toc .vector-toc-text&#039; ).forEach( function ( span ) {&lt;br /&gt;
      if ( span.hasAttribute( &#039;data-deva&#039; ) ) return;&lt;br /&gt;
      var orig = span.textContent;&lt;br /&gt;
      if ( !orig.trim() ) return;&lt;br /&gt;
      span.setAttribute( &#039;data-deva&#039;, orig );&lt;br /&gt;
      translatableSpans.push( span );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function applyScript( script ) {&lt;br /&gt;
    currentScript = script;&lt;br /&gt;
    translatableSpans.forEach( function ( span ) {&lt;br /&gt;
      if ( !span.parentNode ) return;&lt;br /&gt;
      var orig = span.getAttribute( &#039;data-deva&#039; );&lt;br /&gt;
      if ( !orig ) return;&lt;br /&gt;
      span.textContent = ( script === &#039;deva&#039; )&lt;br /&gt;
        ? orig&lt;br /&gt;
        : transliterateText( orig, script );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function _isNoTocPage() {&lt;br /&gt;
    var pn = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039; ) ) || &#039;&#039;;&lt;br /&gt;
    return pn === &#039;Main_Page&#039; || /^[A-Za-z0-9_]+:About$/.test( pn );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function renameTocTitle() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    var titleEl = toc.querySelector(&#039;.vector-toc-title&#039;) || toc.querySelector(&#039;.vector-pinnable-header-label&#039;);&lt;br /&gt;
    if ( !titleEl ) return;&lt;br /&gt;
    var LABEL = &#039;विषयसूची&#039;;&lt;br /&gt;
    var span = titleEl.querySelector(&#039;.gr-toc-title&#039;);&lt;br /&gt;
    if ( !span ) {&lt;br /&gt;
      titleEl.innerHTML = &#039;&#039;;&lt;br /&gt;
      span = document.createElement(&#039;span&#039;);&lt;br /&gt;
      span.className = &#039;gr-toc-title&#039;;&lt;br /&gt;
      span.setAttribute(&#039;data-deva&#039;, LABEL);&lt;br /&gt;
      titleEl.appendChild(span);&lt;br /&gt;
      translatableSpans.push(span);&lt;br /&gt;
    }&lt;br /&gt;
    span.textContent = currentScript === &#039;deva&#039; ? LABEL : transliterateText(LABEL, currentScript);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function removeTocBeginning() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    var el = toc.querySelector( &#039;#vector-toc-beginning&#039; );&lt;br /&gt;
    if ( !el ) {&lt;br /&gt;
      var items = toc.querySelectorAll( &#039;.vector-toc-list-item&#039; );&lt;br /&gt;
      for ( var i = 0; i &amp;lt; items.length; i++ ) {&lt;br /&gt;
        var a = items[ i ].querySelector( &#039;a&#039; );&lt;br /&gt;
        if ( a ) {&lt;br /&gt;
          var href = a.getAttribute( &#039;href&#039; ) || &#039;&#039;;&lt;br /&gt;
          if ( href.indexOf( &#039;#&#039; ) === -1 ) { el = items[ i ]; break; }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if ( el &amp;amp;&amp;amp; el.parentNode ) el.parentNode.removeChild( el );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function expandTocSections() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    toc.querySelectorAll( &#039;.vector-toc-list-item-collapsed&#039; ).forEach( function ( li ) {&lt;br /&gt;
      li.classList.remove( &#039;vector-toc-list-item-collapsed&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function injectTocDocNav() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    if ( document.getElementById( &#039;gr-toc-doc-nav&#039; ) ) return;&lt;br /&gt;
    var artPath   = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
    var pageTitle = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039;   ) ) || &#039;&#039;;&lt;br /&gt;
    var teekaPage   = document.querySelector( &#039;.gr-teeka-page&#039; );&lt;br /&gt;
    var primarySlug = teekaPage ? ( teekaPage.getAttribute( &#039;data-primary&#039; ) || &#039;&#039; ) : &#039;&#039;;&lt;br /&gt;
    if ( !primarySlug ) { primarySlug = pageTitle.split( &#039;/&#039; )[ 0 ]; }&lt;br /&gt;
    if ( !primarySlug ) return;&lt;br /&gt;
    function wikiUrl( slug ) {&lt;br /&gt;
      if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( slug );&lt;br /&gt;
      return artPath.replace( &#039;$1&#039;, encodeURIComponent( slug ).replace( /%2F/g, &#039;/&#039; ) );&lt;br /&gt;
    }&lt;br /&gt;
    var docTitleEl     = document.querySelector( &#039;.gr-doc-title&#039; );&lt;br /&gt;
    var hasMoolaPage   = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-moola&#039; )   === &#039;1&#039;;&lt;br /&gt;
    var hasUllekhaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-ullekha&#039; ) === &#039;1&#039;;&lt;br /&gt;
    var showMoolaPage  = !teekaPage &amp;amp;&amp;amp; hasMoolaPage;&lt;br /&gt;
    var showMoolaBack  = !!teekaPage;&lt;br /&gt;
    var showUllekha    = hasUllekhaPage || !!teekaPage;&lt;br /&gt;
    if ( !showMoolaPage &amp;amp;&amp;amp; !showMoolaBack &amp;amp;&amp;amp; !showUllekha ) return;&lt;br /&gt;
    var nav = document.createElement( &#039;div&#039; );&lt;br /&gt;
    nav.id = &#039;gr-toc-doc-nav&#039;;&lt;br /&gt;
    nav.setAttribute( &#039;class&#039;, &#039;toc-main-links&#039; );&lt;br /&gt;
    function makeBtn( href, label ) {&lt;br /&gt;
      var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
      a.href = href;&lt;br /&gt;
      a.setAttribute( &#039;class&#039;, &#039;toc-main-link-item&#039; );&lt;br /&gt;
      var lspan = document.createElement( &#039;span&#039; );&lt;br /&gt;
      lspan.setAttribute( &#039;data-deva&#039;, label );&lt;br /&gt;
      lspan.textContent = ( currentScript &amp;amp;&amp;amp; currentScript !== &#039;deva&#039; ) ? transliterateText( label, currentScript ) : label;&lt;br /&gt;
      translatableSpans.push( lspan );&lt;br /&gt;
      a.appendChild( lspan );&lt;br /&gt;
      a.addEventListener( &#039;mouseover&#039;, function () { this.style.opacity = &#039;0.72&#039;; } );&lt;br /&gt;
      a.addEventListener( &#039;mouseout&#039;,  function () { this.style.opacity = &#039;1&#039;;    } );&lt;br /&gt;
      return a;&lt;br /&gt;
    }&lt;br /&gt;
    if ( showMoolaPage ) nav.appendChild( makeBtn( wikiUrl( primarySlug + &#039;/Moola&#039; ), &#039;मूलम्&#039; ) );&lt;br /&gt;
    if ( showMoolaBack ) nav.appendChild( makeBtn( wikiUrl( primarySlug ),            &#039;मूल&#039;   ) );&lt;br /&gt;
    if ( showUllekha   ) nav.appendChild( makeBtn( wikiUrl( primarySlug + &#039;/Ullekha&#039;), &#039;उल्लेख&#039;) );&lt;br /&gt;
    var tocContents = toc.querySelector( &#039;.vector-toc-contents&#039; );&lt;br /&gt;
    if ( tocContents ) toc.insertBefore( nav, tocContents );&lt;br /&gt;
    else               toc.appendChild( nav );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var _headingObserver = null;&lt;br /&gt;
&lt;br /&gt;
  function attachHeadingObserver() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    if ( _headingObserver ) return;&lt;br /&gt;
    if ( !window.IntersectionObserver ) return;&lt;br /&gt;
    var ACTIVE_COLOR = &#039;#f57c00&#039;;&lt;br /&gt;
    var _activeId    = null;&lt;br /&gt;
    var content  = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
    if ( !content ) return;&lt;br /&gt;
    var headings = Array.from( content.querySelectorAll( &#039;h1[id],h2[id],h3[id],h4[id],h5[id],h6[id]&#039; ) );&lt;br /&gt;
    if ( !headings.length ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    function getTocLink( id ) { return toc.querySelector( &#039;a[href=&amp;quot;#&#039; + CSS.escape( id ) + &#039;&amp;quot;]&#039; ); }&lt;br /&gt;
    function getTocLi( id ) { var a = getTocLink( id ); return a ? a.closest( &#039;.vector-toc-list-item&#039; ) : null; }&lt;br /&gt;
    function clearActive() {&lt;br /&gt;
      toc.querySelectorAll( &#039;.vector-toc-list-item&#039; ).forEach( function ( li ) {&lt;br /&gt;
        li.classList.remove( &#039;vector-toc-list-item-active&#039; );&lt;br /&gt;
        var lnk = li.querySelector( &#039;.vector-toc-link&#039; );&lt;br /&gt;
        if ( !lnk ) return;&lt;br /&gt;
        lnk.style.removeProperty( &#039;color&#039; );&lt;br /&gt;
        lnk.style.setProperty( &#039;font-weight&#039;, &#039;400&#039;, &#039;important&#039; );&lt;br /&gt;
        lnk.querySelectorAll( &#039;*&#039; ).forEach( function ( el ) { el.style.removeProperty( &#039;color&#039; ); el.style.setProperty( &#039;font-weight&#039;, &#039;400&#039;, &#039;important&#039; ); } );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
    function setActive( id ) {&lt;br /&gt;
      if ( _activeId === id ) return;&lt;br /&gt;
      _activeId = id;&lt;br /&gt;
      clearActive();&lt;br /&gt;
      if ( !id ) return;&lt;br /&gt;
      var li = getTocLi( id );&lt;br /&gt;
      if ( !li ) return;&lt;br /&gt;
      li.classList.add( &#039;vector-toc-list-item-active&#039; );&lt;br /&gt;
      var hasActiveChild = !!li.querySelector( &#039;.vector-toc-list-item .vector-toc-list-item-active&#039; );&lt;br /&gt;
      if ( !hasActiveChild ) {&lt;br /&gt;
        var lnk = li.querySelector( &#039;.vector-toc-link&#039; );&lt;br /&gt;
        if ( lnk ) {&lt;br /&gt;
          lnk.style.setProperty( &#039;color&#039;, ACTIVE_COLOR, &#039;important&#039; );&lt;br /&gt;
          lnk.style.setProperty( &#039;font-weight&#039;, &#039;700&#039;, &#039;important&#039; );&lt;br /&gt;
          lnk.querySelectorAll( &#039;*&#039; ).forEach( function ( el ) { el.style.setProperty( &#039;color&#039;, ACTIVE_COLOR, &#039;important&#039; ); el.style.setProperty( &#039;font-weight&#039;, &#039;700&#039;, &#039;important&#039; ); } );&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      var anc = li.parentNode;&lt;br /&gt;
      while ( anc &amp;amp;&amp;amp; anc !== toc ) {&lt;br /&gt;
        if ( anc.classList ) anc.classList.remove( &#039;vector-toc-list-item-collapsed&#039; );&lt;br /&gt;
        if ( anc.tagName === &#039;UL&#039; || anc.tagName === &#039;LI&#039; ) anc.style.removeProperty( &#039;display&#039; );&lt;br /&gt;
        anc = anc.parentNode;&lt;br /&gt;
      }&lt;br /&gt;
      var sticky = document.querySelector( &#039;.vector-sticky-pinned-container&#039; );&lt;br /&gt;
      var scrollEl = sticky || toc;&lt;br /&gt;
      if ( scrollEl.scrollHeight &amp;gt; scrollEl.clientHeight ) {&lt;br /&gt;
        var lr = li.getBoundingClientRect();&lt;br /&gt;
        var cr = scrollEl.getBoundingClientRect();&lt;br /&gt;
        if ( lr.top &amp;lt; cr.top + 8 || lr.bottom &amp;gt; cr.bottom - 8 ) {&lt;br /&gt;
          scrollEl.scrollTop += lr.top - cr.top - scrollEl.clientHeight / 2 + li.offsetHeight / 2;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    var _visible = new Set();&lt;br /&gt;
    _headingObserver = new IntersectionObserver( function ( entries ) {&lt;br /&gt;
      entries.forEach( function ( entry ) {&lt;br /&gt;
        if ( entry.isIntersecting ) _visible.add( entry.target.id );&lt;br /&gt;
        else _visible.delete( entry.target.id );&lt;br /&gt;
      } );&lt;br /&gt;
      var topId = null, topY = Infinity;&lt;br /&gt;
      _visible.forEach( function ( id ) {&lt;br /&gt;
        var el = document.getElementById( id );&lt;br /&gt;
        if ( el ) { var y = el.getBoundingClientRect().top; if ( y &amp;gt;= 0 &amp;amp;&amp;amp; y &amp;lt; topY ) { topY = y; topId = id; } }&lt;br /&gt;
      } );&lt;br /&gt;
      if ( !topId ) {&lt;br /&gt;
        var bestY = -Infinity;&lt;br /&gt;
        headings.forEach( function ( h ) { var y = h.getBoundingClientRect().top; if ( y &amp;lt; 0 &amp;amp;&amp;amp; y &amp;gt; bestY ) { bestY = y; topId = h.id; } } );&lt;br /&gt;
      }&lt;br /&gt;
      setActive( topId || null );&lt;br /&gt;
    }, { rootMargin: &#039;-60px 0px -65% 0px&#039;, threshold: 0 } );&lt;br /&gt;
    headings.forEach( function ( h ) { _headingObserver.observe( h ); } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function setupToc() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    removeTocBeginning();&lt;br /&gt;
    renameTocTitle();&lt;br /&gt;
    expandTocSections();&lt;br /&gt;
    injectTocDocNav();&lt;br /&gt;
    attachHeadingObserver();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function init() {&lt;br /&gt;
    var HIDE_IDS = [ &#039;vector-appearance&#039;, &#039;vector-appearance-pinned-container&#039;, &#039;vector-appearance-unpinned-container&#039; ];&lt;br /&gt;
    function removeHiddenEls() {&lt;br /&gt;
      HIDE_IDS.forEach( function ( id ) { var el = document.getElementById( id ); if ( el &amp;amp;&amp;amp; el.parentNode ) el.parentNode.removeChild( el ); } );&lt;br /&gt;
      var pt = document.getElementById( &#039;vector-page-tools&#039; ) || document.querySelector( &#039;.vector-page-tools-pinned-container&#039; );&lt;br /&gt;
      if ( pt ) pt.querySelectorAll( &#039;[aria-controls=&amp;quot;vector-appearance&amp;quot;]&#039; ).forEach( function ( el ) { if ( el.parentNode ) el.parentNode.removeChild( el ); } );&lt;br /&gt;
    }&lt;br /&gt;
    removeHiddenEls();&lt;br /&gt;
    ( function detectTeekaMode() {&lt;br /&gt;
      var tp = document.querySelector( &#039;.gr-teeka-page&#039; );&lt;br /&gt;
      if ( !tp ) return;&lt;br /&gt;
      var primary = tp.getAttribute( &#039;data-primary&#039; ) || &#039;&#039;;&lt;br /&gt;
      var artPath = ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
      var mainUrl = artPath.replace( &#039;$1&#039;, primary );&lt;br /&gt;
      var refParam = window.location.search.match( /[?&amp;amp;]ref=([01])/ );&lt;br /&gt;
      if ( refParam ) { document.body.classList.add( refParam[1] === &#039;1&#039; ? &#039;gr-ref-mode&#039; : &#039;gr-standalone&#039; ); return; }&lt;br /&gt;
      var ref = document.referrer || &#039;&#039;;&lt;br /&gt;
      document.body.classList.add( ( ref &amp;amp;&amp;amp; primary &amp;amp;&amp;amp; ref.indexOf( mainUrl ) !== -1 ) ? &#039;gr-ref-mode&#039; : &#039;gr-standalone&#039; );&lt;br /&gt;
    }() );&lt;br /&gt;
    if ( window.MutationObserver ) {&lt;br /&gt;
      var hideObs = new MutationObserver( function ( mutations ) {&lt;br /&gt;
        var dirty = false;&lt;br /&gt;
        mutations.forEach( function ( m ) { if ( m.addedNodes.length ) dirty = true; } );&lt;br /&gt;
        if ( dirty ) removeHiddenEls();&lt;br /&gt;
      } );&lt;br /&gt;
      hideObs.observe( document.body, { childList: true, subtree: false } );&lt;br /&gt;
      setTimeout( function () { hideObs.disconnect(); }, 6000 );&lt;br /&gt;
    }&lt;br /&gt;
    var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
    var alreadyTagged = content &amp;amp;&amp;amp; content.querySelector( &#039;[data-deva]&#039; );&lt;br /&gt;
    if ( !alreadyTagged ) { translatableSpans = []; tagTextNodes(); }&lt;br /&gt;
    else {&lt;br /&gt;
      document.querySelectorAll( &#039;.vector-toc .vector-toc-text:not([data-deva])&#039; ).forEach( function ( span ) {&lt;br /&gt;
        var orig = span.textContent; if ( !orig.trim() ) return;&lt;br /&gt;
        span.setAttribute( &#039;data-deva&#039;, orig ); translatableSpans.push( span );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
    var saved = ( function () { try { return localStorage.getItem( LS_SCRIPT_KEY ); } catch ( e ) { return null; } }() );&lt;br /&gt;
    if ( saved &amp;amp;&amp;amp; saved !== &#039;deva&#039; ) { applyScript( saved ); } else { currentScript = &#039;deva&#039;; }&lt;br /&gt;
    setTimeout( setupToc, 200 );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  window.addEventListener( &#039;gr-script-change&#039;, function ( e ) {&lt;br /&gt;
    var script = e &amp;amp;&amp;amp; e.detail &amp;amp;&amp;amp; e.detail.script;&lt;br /&gt;
    if ( script ) applyScript( script );&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
  window.addEventListener( &#039;gr-new-content&#039;, function ( e ) {&lt;br /&gt;
    var container = e &amp;amp;&amp;amp; e.detail &amp;amp;&amp;amp; e.detail.container;&lt;br /&gt;
    if ( !container ) return;&lt;br /&gt;
    var walker = document.createTreeWalker( container, NodeFilter.SHOW_TEXT );&lt;br /&gt;
    var nodes = [];&lt;br /&gt;
    while ( walker.nextNode() ) nodes.push( walker.currentNode );&lt;br /&gt;
    nodes.forEach( function ( node ) {&lt;br /&gt;
      var p = node.parentNode;&lt;br /&gt;
      if ( !p || ( p.hasAttribute &amp;amp;&amp;amp; p.hasAttribute( &#039;data-deva&#039; ) ) ) return;&lt;br /&gt;
      var orig = node.textContent;&lt;br /&gt;
      if ( !orig.trim() ) return;&lt;br /&gt;
      var span = document.createElement( &#039;span&#039; );&lt;br /&gt;
      span.setAttribute( &#039;data-deva&#039;, orig );&lt;br /&gt;
      span.textContent = currentScript !== &#039;deva&#039; ? transliterateText( orig, currentScript ) : orig;&lt;br /&gt;
      p.replaceChild( span, node );&lt;br /&gt;
      translatableSpans.push( span );&lt;br /&gt;
    } );&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
  try {&lt;br /&gt;
    var _grBC = new BroadcastChannel( &#039;gr-script&#039; );&lt;br /&gt;
    _grBC.onmessage = function ( e ) {&lt;br /&gt;
      var script = e &amp;amp;&amp;amp; e.data &amp;amp;&amp;amp; e.data.script;&lt;br /&gt;
      if ( script ) { currentScript = script; var sel = document.querySelector( &#039;.gr-script-sel&#039; ); if ( sel ) sel.value = script; applyScript( script ); }&lt;br /&gt;
    };&lt;br /&gt;
  } catch ( e ) {}&lt;br /&gt;
&lt;br /&gt;
  if ( window.mw ) {&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
      setTimeout( function () {&lt;br /&gt;
        var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
        var alreadyTagged = content &amp;amp;&amp;amp; content.querySelector( &#039;[data-deva]&#039; );&lt;br /&gt;
        if ( !alreadyTagged ) { translatableSpans = []; tagTextNodes(); }&lt;br /&gt;
        else {&lt;br /&gt;
          document.querySelectorAll( &#039;.vector-toc .vector-toc-text:not([data-deva])&#039; ).forEach( function ( span ) {&lt;br /&gt;
            var orig = span.textContent; if ( !orig.trim() ) return;&lt;br /&gt;
            span.setAttribute( &#039;data-deva&#039;, orig ); translatableSpans.push( span );&lt;br /&gt;
          } );&lt;br /&gt;
        }&lt;br /&gt;
        if ( currentScript !== &#039;deva&#039; ) applyScript( currentScript );&lt;br /&gt;
        setupToc();&lt;br /&gt;
      }, 150 );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) { document.addEventListener( &#039;DOMContentLoaded&#039;, init ); }&lt;br /&gt;
  else { init(); }&lt;br /&gt;
&lt;br /&gt;
}() );   /* ← end of main IIFE */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Inject &amp;quot;Help&amp;quot; and &amp;quot;About&amp;quot; links into the header ─────────────────&lt;br /&gt;
( function () {&lt;br /&gt;
  function wikiHref( title ) {&lt;br /&gt;
    if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( title );&lt;br /&gt;
    var ap = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
    return ap.replace( &#039;$1&#039;, title );&lt;br /&gt;
  }&lt;br /&gt;
  var linkStyle = [ &#039;color:rgba(255,255,255,0.88)&#039;,&#039;font-size:0.88em&#039;,&#039;font-family:system-ui,sans-serif&#039;,&#039;font-weight:500&#039;,&#039;text-decoration:none&#039;,&#039;padding:4px 10px&#039;,&#039;border-radius:4px&#039;,&#039;margin-right:4px&#039;,&#039;transition:color 0.15s,background 0.15s&#039;,&#039;white-space:nowrap&#039; ].join( &#039;;&#039; );&lt;br /&gt;
  function makeHeaderLink( id, href, label ) {&lt;br /&gt;
    var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
    a.id = id; a.href = href; a.textContent = label; a.style.cssText = linkStyle;&lt;br /&gt;
    a.addEventListener( &#039;mouseover&#039;, function () { this.style.color = &#039;#fff&#039;; this.style.background = &#039;rgba(255,255,255,0.12)&#039;; } );&lt;br /&gt;
    a.addEventListener( &#039;mouseout&#039;,  function () { this.style.color = &#039;rgba(255,255,255,0.88)&#039;; this.style.background = &#039;transparent&#039;; } );&lt;br /&gt;
    return a;&lt;br /&gt;
  }&lt;br /&gt;
function injectHeaderLinks() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-about-link&#039; ) ) return;&lt;br /&gt;
    var headerEnd = document.querySelector( &#039;.vector-header-end&#039; ) || document.querySelector( &#039;#vector-user-links&#039; ) || document.querySelector( &#039;.mw-header&#039; );&lt;br /&gt;
    if ( !headerEnd ) return;&lt;br /&gt;
    var helpLink  = makeHeaderLink( &#039;gr-help-link&#039;,  wikiHref( &#039;My_wiki:Help&#039;  ), &#039;Help&#039;  );&lt;br /&gt;
    var aboutLink = makeHeaderLink( &#039;gr-about-link&#039;, wikiHref( &#039;My_wiki:About&#039; ), &#039;About&#039; );&lt;br /&gt;
&lt;br /&gt;
    var userName = window.mw ? mw.config.get( &#039;wgUserName&#039; ) : null;&lt;br /&gt;
    var isAnon   = !userName || ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgUserId&#039; ) === null );&lt;br /&gt;
&lt;br /&gt;
    // Build the trailing auth element (Login link for anon, dropdown for logged-in)&lt;br /&gt;
    var authEl = null;&lt;br /&gt;
    if ( isAnon ) {&lt;br /&gt;
      if ( !document.getElementById( &#039;gr-header-login&#039; ) ) {&lt;br /&gt;
        authEl = makeHeaderLink( &#039;gr-header-login&#039;, wikiHref( &#039;Special:UserLogin&#039; ), &#039;Login/Signup&#039; );&lt;br /&gt;
      }&lt;br /&gt;
    } else if ( !document.getElementById( &#039;gr-header-user&#039; ) ) {&lt;br /&gt;
      authEl = buildHeaderUserDropdown( userName );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var ul = document.querySelector( &#039;.vector-user-links&#039; ) || document.querySelector( &#039;#pt-userpage&#039; );&lt;br /&gt;
    if ( ul &amp;amp;&amp;amp; ul.parentNode === headerEnd ) {&lt;br /&gt;
      if ( authEl ) headerEnd.insertBefore( authEl, ul );&lt;br /&gt;
      headerEnd.insertBefore( aboutLink, authEl || ul );&lt;br /&gt;
      headerEnd.insertBefore( helpLink, aboutLink );&lt;br /&gt;
    } else {&lt;br /&gt;
      headerEnd.appendChild( helpLink );&lt;br /&gt;
      headerEnd.appendChild( aboutLink );&lt;br /&gt;
      if ( authEl ) headerEnd.appendChild( authEl );&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function buildHeaderUserDropdown( userName ) {&lt;br /&gt;
    var wrap = document.createElement( &#039;div&#039; );&lt;br /&gt;
    wrap.id = &#039;gr-header-user&#039;;&lt;br /&gt;
    wrap.style.cssText = &#039;position:relative;display:inline-block;margin-right:4px;&#039;;&lt;br /&gt;
&lt;br /&gt;
    var trigger = document.createElement( &#039;button&#039; );&lt;br /&gt;
    trigger.id = &#039;gr-header-user-trigger&#039;;&lt;br /&gt;
    trigger.type = &#039;button&#039;;&lt;br /&gt;
    trigger.setAttribute( &#039;aria-haspopup&#039;, &#039;true&#039; );&lt;br /&gt;
    trigger.setAttribute( &#039;aria-expanded&#039;, &#039;false&#039; );&lt;br /&gt;
    trigger.style.cssText = [&lt;br /&gt;
      &#039;display:inline-flex&#039;,&#039;align-items:center&#039;,&#039;gap:5px&#039;,&lt;br /&gt;
      &#039;color:rgba(255,255,255,0.88)&#039;,&#039;font-size:0.88em&#039;,&lt;br /&gt;
      &#039;font-family:system-ui,sans-serif&#039;,&#039;font-weight:500&#039;,&lt;br /&gt;
      &#039;background:transparent&#039;,&#039;border:none&#039;,&#039;cursor:pointer&#039;,&lt;br /&gt;
      &#039;padding:4px 10px&#039;,&#039;border-radius:4px&#039;,&#039;white-space:nowrap&#039;,&lt;br /&gt;
      &#039;transition:color 0.15s,background 0.15s&#039;&lt;br /&gt;
    ].join( &#039;;&#039; );&lt;br /&gt;
    trigger.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;span&amp;gt;&#039; + userName.replace( /&amp;lt;/g, &#039;&amp;amp;lt;&#039; ) + &#039;&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;span id=&amp;quot;gr-header-caret&amp;quot; style=&amp;quot;font-size:0.8em;transition:transform 0.2s;&amp;quot;&amp;gt;\u25be&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
    trigger.addEventListener( &#039;mouseover&#039;, function () { this.style.color = &#039;#fff&#039;; this.style.background = &#039;rgba(255,255,255,0.12)&#039;; } );&lt;br /&gt;
    trigger.addEventListener( &#039;mouseout&#039;,  function () { if ( menu.style.display === &#039;none&#039; ) { this.style.color = &#039;rgba(255,255,255,0.88)&#039;; this.style.background = &#039;transparent&#039;; } } );&lt;br /&gt;
&lt;br /&gt;
    var menu = document.createElement( &#039;div&#039; );&lt;br /&gt;
    menu.id = &#039;gr-header-user-menu&#039;;&lt;br /&gt;
    menu.setAttribute( &#039;role&#039;, &#039;menu&#039; );&lt;br /&gt;
    menu.style.cssText = [&lt;br /&gt;
      &#039;display:none&#039;,&#039;position:absolute&#039;,&#039;top:100%&#039;,&#039;right:0&#039;,&#039;margin-top:4px&#039;,&lt;br /&gt;
      &#039;min-width:150px&#039;,&#039;background:#fff&#039;,&#039;border-radius:6px&#039;,&lt;br /&gt;
      &#039;box-shadow:0 4px 16px rgba(0,0,0,0.18)&#039;,&#039;overflow:hidden&#039;,&#039;z-index:1000&#039;&lt;br /&gt;
    ].join( &#039;;&#039; );&lt;br /&gt;
&lt;br /&gt;
    var itemStyle = &#039;display:block;padding:10px 16px;font-size:0.9em;color:#2c1810;text-decoration:none;font-family:system-ui,sans-serif;background:#fff;&#039;;&lt;br /&gt;
    function makeMenuItem( href, label, id ) {&lt;br /&gt;
      var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
      a.href = href; a.setAttribute( &#039;role&#039;, &#039;menuitem&#039; );&lt;br /&gt;
      a.textContent = label; a.style.cssText = itemStyle;&lt;br /&gt;
      if ( id ) a.id = id;&lt;br /&gt;
      a.addEventListener( &#039;mouseover&#039;, function () { this.style.background = &#039;#f5efe9&#039;; } );&lt;br /&gt;
      a.addEventListener( &#039;mouseout&#039;,  function () { this.style.background = &#039;#fff&#039;; } );&lt;br /&gt;
      return a;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    menu.appendChild( makeMenuItem( wikiHref( &#039;Special:Profile&#039; ), &#039;Profile&#039; ) );&lt;br /&gt;
    menu.appendChild( makeMenuItem( &#039;#&#039;, &#039;Log out&#039;, &#039;gr-header-logout&#039; ) );&lt;br /&gt;
&lt;br /&gt;
    function setOpen( open ) {&lt;br /&gt;
      menu.style.display = open ? &#039;block&#039; : &#039;none&#039;;&lt;br /&gt;
      trigger.setAttribute( &#039;aria-expanded&#039;, open ? &#039;true&#039; : &#039;false&#039; );&lt;br /&gt;
      var caret = document.getElementById( &#039;gr-header-caret&#039; );&lt;br /&gt;
      if ( caret ) caret.style.transform = open ? &#039;rotate(180deg)&#039; : &#039;&#039;;&lt;br /&gt;
      if ( open ) { trigger.style.color = &#039;#fff&#039;; trigger.style.background = &#039;rgba(255,255,255,0.12)&#039;; }&lt;br /&gt;
      else { trigger.style.color = &#039;rgba(255,255,255,0.88)&#039;; trigger.style.background = &#039;transparent&#039;; }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    trigger.addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      e.stopPropagation();&lt;br /&gt;
      setOpen( menu.style.display === &#039;none&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
    document.addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      if ( !wrap.contains( e.target ) ) setOpen( false );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    // Logout: POST with CSRF token (same approach as the desktop dropdown)&lt;br /&gt;
    menu.querySelector( &#039;#gr-header-logout&#039; ).addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      e.preventDefault();&lt;br /&gt;
      if ( window.mw &amp;amp;&amp;amp; mw.user &amp;amp;&amp;amp; mw.user.tokens ) {&lt;br /&gt;
        var t = mw.user.tokens.get( &#039;csrfToken&#039; );&lt;br /&gt;
        if ( t ) {&lt;br /&gt;
          var script = ( mw.util &amp;amp;&amp;amp; mw.util.wikiScript ) ? mw.util.wikiScript() : &#039;/index.php&#039;;&lt;br /&gt;
          var form = document.createElement( &#039;form&#039; );&lt;br /&gt;
          form.method = &#039;post&#039;;&lt;br /&gt;
          form.action = script + &#039;?title=Special:UserLogout&#039;;&lt;br /&gt;
          form.style.display = &#039;none&#039;;&lt;br /&gt;
          form.innerHTML =&lt;br /&gt;
            &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;wpEditToken&amp;quot; value=&amp;quot;&#039; + String( t ).replace( /&amp;quot;/g, &#039;&amp;amp;quot;&#039; ) + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
            &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;title&amp;quot; value=&amp;quot;Special:UserLogout&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
            &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;returnto&amp;quot; value=&amp;quot;Main Page&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
          document.body.appendChild( form );&lt;br /&gt;
          form.submit();&lt;br /&gt;
          return;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if ( window.mw &amp;amp;&amp;amp; mw.Api ) {&lt;br /&gt;
        new mw.Api().postWithToken( &#039;csrf&#039;, { action: &#039;logout&#039; } )&lt;br /&gt;
          .done( function () { location.href = &#039;/Main_Page&#039;; } )&lt;br /&gt;
          .fail( function () { location.href = &#039;/index.php?title=Special:UserLogout&#039;; } );&lt;br /&gt;
      } else {&lt;br /&gt;
        location.href = &#039;/index.php?title=Special:UserLogout&#039;;&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    wrap.appendChild( trigger );&lt;br /&gt;
    wrap.appendChild( menu );&lt;br /&gt;
    return wrap;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Main page: by-Grantha / by-Author toggle ──────────────────────&lt;br /&gt;
( function () {&lt;br /&gt;
  function grHomeView( v ) {&lt;br /&gt;
    var gView = document.getElementById( &#039;gr-view-grantha&#039; );&lt;br /&gt;
    var aView = document.getElementById( &#039;gr-view-author&#039; );&lt;br /&gt;
    var gBtn  = document.getElementById( &#039;gr-toggle-grantha&#039; );&lt;br /&gt;
    var aBtn  = document.getElementById( &#039;gr-toggle-author&#039; );&lt;br /&gt;
    if ( !gView || !aView || !gBtn || !aBtn ) return;&lt;br /&gt;
    gView.style.display = ( v === &#039;grantha&#039; ) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
    aView.style.display = ( v === &#039;author&#039;  ) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
    gBtn.className = &#039;gr-toggle-btn&#039; + ( v === &#039;grantha&#039; ? &#039; gr-toggle-active&#039; : &#039;&#039; );&lt;br /&gt;
    aBtn.className = &#039;gr-toggle-btn&#039; + ( v === &#039;author&#039;  ? &#039; gr-toggle-active&#039; : &#039;&#039; );&lt;br /&gt;
    try { localStorage.setItem( &#039;gr_home_view&#039;, v ); } catch ( e ) {}&lt;br /&gt;
  }&lt;br /&gt;
  function initHomeToggle() {&lt;br /&gt;
    var gBtn = document.getElementById( &#039;gr-toggle-grantha&#039; );&lt;br /&gt;
    var aBtn = document.getElementById( &#039;gr-toggle-author&#039; );&lt;br /&gt;
    if ( !gBtn || !aBtn ) return;&lt;br /&gt;
    gBtn.addEventListener( &#039;click&#039;, function () { grHomeView( &#039;grantha&#039; ); } );&lt;br /&gt;
    aBtn.addEventListener( &#039;click&#039;, function () { grHomeView( &#039;author&#039; );  } );&lt;br /&gt;
    [ gBtn, aBtn ].forEach( function ( btn ) { btn.addEventListener( &#039;keydown&#039;, function ( e ) { if ( e.key === &#039;Enter&#039; || e.key === &#039; &#039; ) btn.click(); } ); } );&lt;br /&gt;
    var saved; try { saved = localStorage.getItem( &#039;gr_home_view&#039; ); } catch ( e ) {}&lt;br /&gt;
    if ( saved === &#039;author&#039; ) grHomeView( &#039;author&#039; );&lt;br /&gt;
  }&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) document.addEventListener( &#039;DOMContentLoaded&#039;, initHomeToggle );&lt;br /&gt;
  else initHomeToggle();&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Ullekha reference link handler ─────────────────────────────────&lt;br /&gt;
( function () {&lt;br /&gt;
  function highlightOnArrival() {&lt;br /&gt;
    var search = window.location.search;&lt;br /&gt;
    if ( !search ) return;&lt;br /&gt;
    var m = search.match( /[?&amp;amp;]hlUllekha=([^&amp;amp;]+)/ );&lt;br /&gt;
    if ( !m ) return;&lt;br /&gt;
    var needle;&lt;br /&gt;
    try { needle = decodeURIComponent( m[ 1 ] ); } catch ( e ) { return; }&lt;br /&gt;
    if ( !needle || needle.length &amp;lt; 4 ) return;&lt;br /&gt;
    function doHighlight() {&lt;br /&gt;
      var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
      if ( !content ) return;&lt;br /&gt;
      var snippet = needle.slice( 0, 40 );&lt;br /&gt;
      var found   = false;&lt;br /&gt;
      var spans = content.querySelectorAll( &#039;[data-deva]&#039; );&lt;br /&gt;
      for ( var i = 0; i &amp;lt; spans.length &amp;amp;&amp;amp; !found; i++ ) {&lt;br /&gt;
        var spanEl = spans[ i ];&lt;br /&gt;
        var orig   = spanEl.getAttribute( &#039;data-deva&#039; ) || &#039;&#039;;&lt;br /&gt;
        if ( orig.indexOf( snippet ) === -1 ) continue;&lt;br /&gt;
        var idx    = orig.indexOf( snippet );&lt;br /&gt;
        var hlText = orig.slice( idx, Math.min( idx + needle.length, orig.length ) );&lt;br /&gt;
        var mark   = document.createElement( &#039;mark&#039; );&lt;br /&gt;
        mark.className = &#039;gr-ullekha-highlight&#039;;&lt;br /&gt;
        mark.style.cssText = &#039;background:#fff176;border-radius:2px;padding:0 2px;&#039;;&lt;br /&gt;
        mark.textContent = hlText;&lt;br /&gt;
        var parent = spanEl.parentNode;&lt;br /&gt;
        if ( !parent ) continue;&lt;br /&gt;
        var before = document.createTextNode( orig.slice( 0, idx ) );&lt;br /&gt;
        var after  = document.createTextNode( orig.slice( idx + hlText.length ) );&lt;br /&gt;
        parent.insertBefore( before, spanEl ); parent.insertBefore( mark, spanEl ); parent.insertBefore( after, spanEl ); parent.removeChild( spanEl );&lt;br /&gt;
        setTimeout( function () { mark.scrollIntoView( { behavior: &#039;smooth&#039;, block: &#039;center&#039; } ); }, 100 );&lt;br /&gt;
        found = true;&lt;br /&gt;
      }&lt;br /&gt;
      if ( !found ) {&lt;br /&gt;
        var walker = document.createTreeWalker( content, NodeFilter.SHOW_TEXT );&lt;br /&gt;
        while ( walker.nextNode() &amp;amp;&amp;amp; !found ) {&lt;br /&gt;
          var node = walker.currentNode;&lt;br /&gt;
          var txt  = node.textContent || &#039;&#039;;&lt;br /&gt;
          if ( txt.indexOf( snippet ) === -1 ) continue;&lt;br /&gt;
          var idx2  = txt.indexOf( snippet );&lt;br /&gt;
          var mark2 = document.createElement( &#039;mark&#039; );&lt;br /&gt;
          mark2.className = &#039;gr-ullekha-highlight&#039;;&lt;br /&gt;
          mark2.style.cssText = &#039;background:#fff176;border-radius:2px;padding:0 2px;&#039;;&lt;br /&gt;
          mark2.textContent = txt.slice( idx2, Math.min( idx2 + needle.length, txt.length ) );&lt;br /&gt;
          var p = node.parentNode;&lt;br /&gt;
          p.insertBefore( document.createTextNode( txt.slice( 0, idx2 ) ), node );&lt;br /&gt;
          p.insertBefore( mark2, node );&lt;br /&gt;
          p.insertBefore( document.createTextNode( txt.slice( idx2 + mark2.textContent.length ) ), node );&lt;br /&gt;
          p.removeChild( node );&lt;br /&gt;
          setTimeout( function () { mark2.scrollIntoView( { behavior: &#039;smooth&#039;, block: &#039;center&#039; } ); }, 100 );&lt;br /&gt;
          found = true;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    doHighlight();&lt;br /&gt;
  }&lt;br /&gt;
  function wireUllekhaLinks() {&lt;br /&gt;
    document.querySelectorAll( &#039;.gr-ullekha-ref-link&#039; ).forEach( function ( wrap ) {&lt;br /&gt;
      var anchor = wrap.getAttribute( &#039;data-anchor&#039; ) || &#039;&#039;;&lt;br /&gt;
      var hl     = wrap.getAttribute( &#039;data-hl&#039; )     || &#039;&#039;;&lt;br /&gt;
      var a = wrap.querySelector( &#039;a&#039; );&lt;br /&gt;
      if ( !a ) return;&lt;br /&gt;
      var base = a.href.split( &#039;#&#039; )[ 0 ];&lt;br /&gt;
      var encoded = encodeURIComponent( hl );&lt;br /&gt;
      a.href = base + ( hl ? &#039;?hlUllekha=&#039; + encoded : &#039;&#039; ) + ( anchor ? &#039;#&#039; + anchor : &#039;&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) { document.addEventListener( &#039;DOMContentLoaded&#039;, function () { highlightOnArrival(); wireUllekhaLinks(); } ); }&lt;br /&gt;
  else { highlightOnArrival(); wireUllekhaLinks(); }&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
/* ── Search result highlight ──────────────────────────────────── */&lt;br /&gt;
/* EXACT REPLACEMENT for the search highlight IIFE in MediaWiki:Common.js.&lt;br /&gt;
 * Only changes from the original working version:&lt;br /&gt;
 *  - Mobile bar: full-width terracotta bottom bar instead of floating pill&lt;br /&gt;
 *  - showDismissBar: guard added (if !count return) to prevent empty bar&lt;br /&gt;
 * Everything else (storeQueryForLink, applyHighlight, wrapMatches) is&lt;br /&gt;
 * identical to the version that was working.&lt;br /&gt;
 */&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
  function storeQueryForLink( url, query ) {&lt;br /&gt;
    try {&lt;br /&gt;
      var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
      a.href = url;&lt;br /&gt;
      sessionStorage.setItem( &#039;gr_search_hl&#039;, JSON.stringify({&lt;br /&gt;
        query:    query,&lt;br /&gt;
        pathname: a.pathname&lt;br /&gt;
      }) );&lt;br /&gt;
    } catch(e) {}&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function applyHighlight() {&lt;br /&gt;
    var stored;&lt;br /&gt;
    try {&lt;br /&gt;
      stored = JSON.parse( sessionStorage.getItem( &#039;gr_search_hl&#039; ) || &#039;null&#039; );&lt;br /&gt;
    } catch(e) { return; }&lt;br /&gt;
    if ( !stored || !stored.query ) return;&lt;br /&gt;
&lt;br /&gt;
    var currentPath = window.location.pathname;&lt;br /&gt;
    var storedPath  = stored.pathname || &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
    function normPath(p) { return decodeURIComponent(p).replace(/\/+$/, &#039;&#039;); }&lt;br /&gt;
    if ( storedPath &amp;amp;&amp;amp; normPath(storedPath) !== normPath(currentPath) ) {&lt;br /&gt;
      try { sessionStorage.removeItem( &#039;gr_search_hl&#039; ); } catch(e) {}&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var query = stored.query.trim();&lt;br /&gt;
    if ( !query ) return;&lt;br /&gt;
&lt;br /&gt;
    try { sessionStorage.removeItem( &#039;gr_search_hl&#039; ); } catch(e) {}&lt;br /&gt;
&lt;br /&gt;
    var delays = [ 0, 200, 600 ];&lt;br /&gt;
    delays.forEach( function(ms) {&lt;br /&gt;
      setTimeout( function() {&lt;br /&gt;
        if ( document.querySelector( &#039;.gr-search-hl&#039; ) ) return;&lt;br /&gt;
        highlightText( query );&lt;br /&gt;
      }, ms );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function highlightText( query ) {&lt;br /&gt;
    var content = document.querySelector( &#039;#mw-content-text .mw-parser-output&#039; );&lt;br /&gt;
    if ( !content ) return;&lt;br /&gt;
&lt;br /&gt;
    var raw = query.replace( /^&amp;quot;|&amp;quot;$/g, &#039;&#039; ).trim();&lt;br /&gt;
    if ( !raw ) return;&lt;br /&gt;
&lt;br /&gt;
    var patterns = [];&lt;br /&gt;
    patterns.push( escapeRegex( raw ) );&lt;br /&gt;
    raw.split( /\s+/ ).forEach( function(w) {&lt;br /&gt;
      if ( w.length &amp;gt;= 2 ) patterns.push( escapeRegex( w ) );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    var matched = false;&lt;br /&gt;
    for ( var pi = 0; pi &amp;lt; patterns.length; pi++ ) {&lt;br /&gt;
      var re;&lt;br /&gt;
      try { re = new RegExp( &#039;(&#039; + patterns[pi] + &#039;)&#039;, &#039;gi&#039; ); }&lt;br /&gt;
      catch(e) { continue; }&lt;br /&gt;
      var count = wrapMatches( content, re );&lt;br /&gt;
      if ( count &amp;gt; 0 ) { matched = true; break; }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ( !matched ) return;&lt;br /&gt;
&lt;br /&gt;
    var first = document.querySelector( &#039;.gr-search-hl&#039; );&lt;br /&gt;
    if ( first ) {&lt;br /&gt;
      first.scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; });&lt;br /&gt;
      first.classList.add( &#039;gr-search-hl-pulse&#039; );&lt;br /&gt;
      setTimeout( function() { first.classList.remove( &#039;gr-search-hl-pulse&#039; ); }, 2000 );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    showDismissBar( query );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function escapeRegex( s ) {&lt;br /&gt;
    return s.replace( /[.*+?^${}()|[\]\\]/g, &#039;\\$&amp;amp;&#039; );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function wrapMatches( root, re ) {&lt;br /&gt;
    var count = 0;&lt;br /&gt;
    var walker = document.createTreeWalker(&lt;br /&gt;
      root, NodeFilter.SHOW_TEXT, {&lt;br /&gt;
        acceptNode: function( node ) {&lt;br /&gt;
          var p = node.parentElement;&lt;br /&gt;
          if ( !p ) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
          var tag = p.tagName.toUpperCase();&lt;br /&gt;
          if ( tag === &#039;SCRIPT&#039; || tag === &#039;STYLE&#039; || tag === &#039;NOSCRIPT&#039; ) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
          if ( p.classList.contains( &#039;gr-search-hl&#039; ) ) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
          return NodeFilter.FILTER_ACCEPT;&lt;br /&gt;
        }&lt;br /&gt;
      }, false&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    var nodes = [];&lt;br /&gt;
    var node;&lt;br /&gt;
    while ( ( node = walker.nextNode() ) ) nodes.push( node );&lt;br /&gt;
&lt;br /&gt;
    nodes.forEach( function( textNode ) {&lt;br /&gt;
      var val = textNode.nodeValue;&lt;br /&gt;
      if ( !re.test( val ) ) return;&lt;br /&gt;
      re.lastIndex = 0;&lt;br /&gt;
&lt;br /&gt;
      var frag = document.createDocumentFragment();&lt;br /&gt;
      var last = 0;&lt;br /&gt;
      var m;&lt;br /&gt;
      while ( ( m = re.exec( val ) ) !== null ) {&lt;br /&gt;
        if ( m.index &amp;gt; last ) {&lt;br /&gt;
          frag.appendChild( document.createTextNode( val.slice( last, m.index ) ) );&lt;br /&gt;
        }&lt;br /&gt;
        var span = document.createElement( &#039;span&#039; );&lt;br /&gt;
        span.className = &#039;gr-search-hl&#039;;&lt;br /&gt;
        span.textContent = m[0];&lt;br /&gt;
        frag.appendChild( span );&lt;br /&gt;
        last = m.index + m[0].length;&lt;br /&gt;
        count++;&lt;br /&gt;
      }&lt;br /&gt;
      if ( last &amp;lt; val.length ) {&lt;br /&gt;
        frag.appendChild( document.createTextNode( val.slice( last ) ) );&lt;br /&gt;
      }&lt;br /&gt;
      textNode.parentNode.replaceChild( frag, textNode );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    return count;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function showDismissBar( query ) {&lt;br /&gt;
    var existing = document.getElementById( &#039;gr-hl-bar&#039; );&lt;br /&gt;
    if ( existing ) existing.remove();&lt;br /&gt;
&lt;br /&gt;
    var count = document.querySelectorAll( &#039;.gr-search-hl&#039; ).length;&lt;br /&gt;
    if ( !count ) return;&lt;br /&gt;
&lt;br /&gt;
    var isMob = window.innerWidth &amp;lt; 768 || !!document.getElementById( &#039;mw-mf-viewport&#039; );&lt;br /&gt;
    var bar = document.createElement( &#039;div&#039; );&lt;br /&gt;
    bar.id = &#039;gr-hl-bar&#039;;&lt;br /&gt;
&lt;br /&gt;
    if ( isMob ) {&lt;br /&gt;
      bar.style.cssText = [&lt;br /&gt;
        &#039;position:fixed&#039;, &#039;bottom:0&#039;, &#039;left:0&#039;, &#039;right:0&#039;,&lt;br /&gt;
        &#039;z-index:10200&#039;, &#039;background:#b5451b&#039;, &#039;color:#fff&#039;,&lt;br /&gt;
        &#039;padding:0&#039;, &#039;display:flex&#039;, &#039;align-items:stretch&#039;,&lt;br /&gt;
        &#039;font-family:system-ui,sans-serif&#039;,&lt;br /&gt;
        &#039;box-shadow:0 -2px 12px rgba(0,0,0,0.25)&#039;, &#039;height:56px&#039;&lt;br /&gt;
      ].join(&#039;;&#039;);&lt;br /&gt;
&lt;br /&gt;
      var mbs = &#039;flex:1;display:flex;flex-direction:column;align-items:center;&#039; +&lt;br /&gt;
        &#039;justify-content:center;background:none;border:none;color:#fff;cursor:pointer;&#039; +&lt;br /&gt;
        &#039;padding:6px 4px;font-family:system-ui,sans-serif;font-size:11px;font-weight:500;&#039; +&lt;br /&gt;
        &#039;gap:3px;-webkit-tap-highlight-color:rgba(0,0,0,0.12);&#039;;&lt;br /&gt;
&lt;br /&gt;
      bar.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-prev&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;polyline points=&amp;quot;15 18 9 12 15 6&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;Prev&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-next&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;polyline points=&amp;quot;9 18 15 12 9 6&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;Next&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-results&amp;quot; style=&amp;quot;&#039; + mbs + &#039;flex:1.6;border-left:1px solid rgba(255,255,255,0.2);border-right:1px solid rgba(255,255,255,0.2);&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;circle cx=&amp;quot;11&amp;quot; cy=&amp;quot;11&amp;quot; r=&amp;quot;7&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;16.5&amp;quot; y1=&amp;quot;16.5&amp;quot; x2=&amp;quot;22&amp;quot; y2=&amp;quot;22&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;&#039; + count + &#039; match&#039; + (count===1?&#039;&#039;:&#039;es&#039;) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-dismiss&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;line x1=&amp;quot;18&amp;quot; y1=&amp;quot;6&amp;quot; x2=&amp;quot;6&amp;quot; y2=&amp;quot;18&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;6&amp;quot; y1=&amp;quot;6&amp;quot; x2=&amp;quot;18&amp;quot; y2=&amp;quot;18&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;Close&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
    } else {&lt;br /&gt;
      bar.style.cssText = [&lt;br /&gt;
        &#039;position:fixed&#039;, &#039;bottom:0&#039;, &#039;left:0&#039;, &#039;right:0&#039;, &#039;z-index:10200&#039;,&lt;br /&gt;
        &#039;background:#b5451b&#039;, &#039;color:#fff&#039;, &#039;padding:10px 16px&#039;,&lt;br /&gt;
        &#039;display:flex&#039;, &#039;align-items:center&#039;, &#039;justify-content:space-between&#039;,&lt;br /&gt;
        &#039;font-family:system-ui,sans-serif&#039;, &#039;font-size:14px&#039;,&lt;br /&gt;
        &#039;box-shadow:0 -2px 8px rgba(0,0,0,0.2)&#039;&lt;br /&gt;
      ].join(&#039;;&#039;);&lt;br /&gt;
&lt;br /&gt;
      var nav = document.createElement( &#039;div&#039; );&lt;br /&gt;
      nav.style.cssText = &#039;display:flex;align-items:center;gap:12px;&#039;;&lt;br /&gt;
      nav.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;🔍 &amp;lt;strong&amp;gt;&#039; + escHtml(query) + &#039;&amp;lt;/strong&amp;gt; — &#039; + count + &#039; match&#039; + (count===1?&#039;&#039;:&#039;es&#039;) + &#039;&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-prev&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;↑ Prev&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-next&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;↓ Next&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-results&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;← Results&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
      bar.appendChild( nav );&lt;br /&gt;
&lt;br /&gt;
      var db = document.createElement( &#039;button&#039; );&lt;br /&gt;
      db.id = &#039;gr-hl-dismiss&#039;; db.textContent = &#039;✕ Close&#039;;&lt;br /&gt;
      db.style.cssText = &#039;background:rgba(255,255,255,0.15);border:none;color:#fff;padding:4px 12px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&#039;;&lt;br /&gt;
      bar.appendChild( db );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    document.body.appendChild( bar );&lt;br /&gt;
&lt;br /&gt;
    var hlEls = Array.from( document.querySelectorAll( &#039;.gr-search-hl&#039; ) );&lt;br /&gt;
    var current = 0;&lt;br /&gt;
&lt;br /&gt;
    function goTo( idx ) {&lt;br /&gt;
      hlEls.forEach( function(el) { el.classList.remove( &#039;gr-search-hl-current&#039; ); } );&lt;br /&gt;
      current = ( ( idx % hlEls.length ) + hlEls.length ) % hlEls.length;&lt;br /&gt;
      hlEls[ current ].classList.add( &#039;gr-search-hl-current&#039; );&lt;br /&gt;
      hlEls[ current ].scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function dismiss() { clearHighlights(); bar.remove(); }&lt;br /&gt;
&lt;br /&gt;
    var nb = document.getElementById( &#039;gr-hl-next&#039; );&lt;br /&gt;
    var pb = document.getElementById( &#039;gr-hl-prev&#039; );&lt;br /&gt;
    var rb = document.getElementById( &#039;gr-hl-results&#039; );&lt;br /&gt;
    var db2 = document.getElementById( &#039;gr-hl-dismiss&#039; );&lt;br /&gt;
    if ( nb ) nb.onclick = function() { goTo( current + 1 ); };&lt;br /&gt;
    if ( pb ) pb.onclick = function() { goTo( current - 1 ); };&lt;br /&gt;
    if ( db2 ) db2.onclick = dismiss;&lt;br /&gt;
    if ( rb ) rb.onclick = function() {&lt;br /&gt;
      bar.remove(); clearHighlights();&lt;br /&gt;
      if ( window.showSearchDialog ) window.showSearchDialog( query );&lt;br /&gt;
    };&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function clearHighlights() {&lt;br /&gt;
    document.querySelectorAll( &#039;.gr-search-hl&#039; ).forEach( function( span ) {&lt;br /&gt;
      var p = span.parentNode; if ( !p ) return;&lt;br /&gt;
      while ( span.firstChild ) p.insertBefore( span.firstChild, span );&lt;br /&gt;
      p.removeChild( span );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function escHtml( s ) {&lt;br /&gt;
    return String(s).replace(/&amp;amp;/g,&#039;&amp;amp;amp;&#039;).replace(/&amp;lt;/g,&#039;&amp;amp;lt;&#039;).replace(/&amp;gt;/g,&#039;&amp;amp;gt;&#039;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function injectHighlightCSS() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-hl-css&#039; ) ) return;&lt;br /&gt;
    var s = document.createElement( &#039;style&#039; );&lt;br /&gt;
    s.id = &#039;gr-hl-css&#039;;&lt;br /&gt;
    s.textContent = [&lt;br /&gt;
      &#039;.gr-search-hl{background:#fff176;color:#1a1a1a;border-radius:2px;padding:0 1px;box-shadow:0 0 0 1px rgba(181,69,27,0.25);}&#039;,&lt;br /&gt;
      &#039;.gr-search-hl-current{background:#ffb300!important;box-shadow:0 0 0 2px #b5451b!important;}&#039;,&lt;br /&gt;
      &#039;@keyframes gr-hl-pulse{0%{background:#ffb300;}50%{background:#fff176;}100%{background:#fff176;}}&#039;,&lt;br /&gt;
      &#039;.gr-search-hl-pulse{animation:gr-hl-pulse 1.2s ease 2;}&#039;,&lt;br /&gt;
    ].join(&#039;&#039;);&lt;br /&gt;
    document.head.appendChild( s );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  injectHighlightCSS();&lt;br /&gt;
&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) {&lt;br /&gt;
    document.addEventListener( &#039;DOMContentLoaded&#039;, applyHighlight );&lt;br /&gt;
  } else {&lt;br /&gt;
    applyHighlight();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ( window.mw ) {&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function() {&lt;br /&gt;
      setTimeout( applyHighlight, 100 );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  window.grStoreSearchHL = storeQueryForLink;&lt;br /&gt;
&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
/* ═══════════════════════════════════════════════════════════════&lt;br /&gt;
   Mobile addon — only runs on Minerva (mobile) skin&lt;br /&gt;
   ═══════════════════════════════════════════════════════════════ */&lt;br /&gt;
( function () {&lt;br /&gt;
  if ( !document.body.classList.contains( &#039;skin-minerva&#039; ) ) return;&lt;br /&gt;
  function injectCSS() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-mob-css&#039; ) ) return;&lt;br /&gt;
    var s = document.createElement( &#039;style&#039; );&lt;br /&gt;
    s.id = &#039;gr-mob-css&#039;;&lt;br /&gt;
    s.textContent =&lt;br /&gt;
      &#039;body,#mw-mf-viewport,#mw-mf-page-center{padding-top:0!important;margin-top:0!important;}&#039; +&lt;br /&gt;
      &#039;html,body,#mw-mf-viewport,#mw-mf-page-center{overflow-x:hidden!important;max-width:100vw!important;}&#039; +&lt;br /&gt;
      &#039;header.header-container{background:#b5451b!important;position:sticky!important;top:0!important;z-index:300!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header{background:#b5451b!important;min-height:54px!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header .search-toggle,.minerva-header .minerva-user-notifications{display:none!important;}&#039; +&lt;br /&gt;
      &#039;.branding-box a{display:flex!important;align-items:center!important;text-decoration:none!important;max-width:calc(100vw - 80px)!important;}&#039; +&lt;br /&gt;
      &#039;.branding-box a::before{content:&amp;quot;&amp;quot;;display:block;width:30px;height:30px;flex-shrink:0;background:url(&amp;quot;/favicon.png&amp;quot;) center/contain no-repeat;margin-right:8px;}&#039; +&lt;br /&gt;
      &#039;.branding-box a span{color:#fff!important;font-size:16px!important;font-weight:700!important;font-family:system-ui,sans-serif!important;line-height:1.2!important;flex:1 1 auto!important;min-width:0!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header svg path,.minerva-header svg rect,.minerva-header svg circle{fill:#fff!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header label{color:#fff!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-tabs,.mw-portlet-associated-pages,.page-actions-menu,#page-secondary-actions,.last-modified-bar,.minerva-anon-talk-link{display:none!important;}&#039; +&lt;br /&gt;
      &#039;#gr-mob-menu-items{display:block!important;}&#039; +&lt;br /&gt;
      &#039;.mw-footer.minerva-footer,.footer-places,.footer-info,.minerva-footer-logo,#footer-places-about,#footer-places-disclaimers,#footer-places-privacy{display:none!important;}&#039; +&lt;br /&gt;
      &#039;#gr-static-bar{position:sticky!important;top:54px!important;z-index:200!important;}&#039; +&lt;br /&gt;
      &#039;.mf-section-0,.mf-section-1,.mf-section-2,.mf-section-3,.mf-section-4,.mf-section-5,.mf-section-6,.mf-section-7,.mf-section-8,.mf-section-9,.mf-section-10{display:block!important;visibility:visible!important;}&#039; +&lt;br /&gt;
      &#039;.collapsible-block{display:block!important;}&#039; +&lt;br /&gt;
      &#039;.section-heading .indicator,.collapsible-heading .indicator{display:none!important;}&#039; +&lt;br /&gt;
      &#039;.section-heading,.collapsible-heading{pointer-events:none!important;}&#039; +&lt;br /&gt;
      &#039;.gr-home-grid{flex-direction:column!important;flex-wrap:nowrap!important;gap:12px!important;width:100%!important;}&#039; +&lt;br /&gt;
      &#039;.gr-home-card{width:100%!important;max-width:100%!important;min-width:unset!important;box-sizing:border-box!important;flex:none!important;}&#039; +&lt;br /&gt;
      &#039;.gr-home-toggle{flex-wrap:wrap!important;}&#039; +&lt;br /&gt;
      &#039;.mw-parser-output{font-size:18px!important;line-height:1.8!important;}&#039; +&lt;br /&gt;
      &#039;.mw-parser-output h2,.mw-parser-output h3{width:100%!important;}&#039; +&lt;br /&gt;
      &#039;.bhashyam-block{margin-left:8px!important;}&#039; +&lt;br /&gt;
      &#039;#footer,.mw-footer,.catlinks,#catlinks{display:none!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-panel{position:fixed!important;top:0!important;left:0!important;bottom:0!important;width:82vw!important;max-width:340px!important;background:#fff!important;z-index:10400!important;box-shadow:4px 0 28px rgba(0,0,0,0.22)!important;overflow-y:auto!important;padding:0 0 40px!important;transform:translateX(-110%)!important;transition:transform 0.26s cubic-bezier(0.4,0,0.2,1)!important;display:block!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-panel.open{transform:translateX(0)!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-backdrop{display:none!important;position:fixed!important;inset:0!important;background:rgba(0,0,0,0.4)!important;z-index:10399!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-backdrop.open{display:block!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-header{position:sticky!important;top:0!important;background:#fff!important;display:flex!important;align-items:center!important;justify-content:space-between!important;padding:16px 16px 12px!important;border-bottom:1px solid #f0ebe6!important;z-index:1!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-title{font-size:13px!important;font-weight:700!important;text-transform:uppercase!important;letter-spacing:0.08em!important;color:#b5451b!important;font-family:system-ui,sans-serif!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-close{background:none!important;border:none!important;font-size:22px!important;color:#999!important;cursor:pointer!important;padding:4px 8px!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-body{padding:12px 16px!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-body a{display:block!important;font-size:16px!important;line-height:1.6!important;color:#2c1810!important;text-decoration:none!important;padding:8px 0!important;border-bottom:1px solid #f5f0ed!important;}&#039;;&lt;br /&gt;
    document.head.appendChild( s );&lt;br /&gt;
  }&lt;br /&gt;
  function expandSections() {&lt;br /&gt;
    document.querySelectorAll( &#039;[class*=&amp;quot;mf-section-&amp;quot;], .collapsible-block&#039; ).forEach( function ( el ) { el.removeAttribute( &#039;hidden&#039; ); el.style.setProperty( &#039;display&#039;, &#039;block&#039;, &#039;important&#039; ); el.style.setProperty( &#039;visibility&#039;, &#039;visible&#039;, &#039;important&#039; ); el.removeAttribute( &#039;aria-hidden&#039; ); } );&lt;br /&gt;
    document.querySelectorAll( &#039;.section-heading, .collapsible-heading&#039; ).forEach( function ( el ) { el.setAttribute( &#039;aria-expanded&#039;, &#039;true&#039; ); el.style.setProperty( &#039;pointer-events&#039;, &#039;none&#039;, &#039;important&#039; ); } );&lt;br /&gt;
  }&lt;br /&gt;
  function watchSections() {&lt;br /&gt;
    var t = null;&lt;br /&gt;
    var obs = new MutationObserver( function ( ms ) { if ( ms.some( function(m){ return m.attributeName === &#039;hidden&#039;; } ) ) { clearTimeout(t); t = setTimeout( expandSections, 30 ); } } );&lt;br /&gt;
    obs.observe( document.querySelector( &#039;#mw-content-text&#039; ) || document.body, { subtree:true, attributes:true, attributeFilter:[&#039;hidden&#039;,&#039;aria-hidden&#039;] } );&lt;br /&gt;
  }&lt;br /&gt;
  function watchBodyPadding() {&lt;br /&gt;
    new MutationObserver( function () { if ( document.body.style.paddingTop &amp;amp;&amp;amp; document.body.style.paddingTop !== &#039;0px&#039; ) document.body.style.paddingTop = &#039;&#039;; } ).observe( document.body, { attributes:true, attributeFilter:[&#039;style&#039;] } );&lt;br /&gt;
  }&lt;br /&gt;
  function injectMenuLinks() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-mob-menu-items&#039; ) ) return;&lt;br /&gt;
    var navDrawer = document.querySelector( &#039;.navigation-drawer&#039; );&lt;br /&gt;
    if ( !navDrawer ) return;&lt;br /&gt;
    var wrap = document.createElement( &#039;div&#039; ); wrap.id = &#039;gr-mob-menu-items&#039;; wrap.style.cssText = &#039;width:100%;background:#fff;margin-top:8px;&#039;;&lt;br /&gt;
    var itemStyle = &#039;display:flex;align-items:center;gap:14px;padding:15px 20px;font-size:16px;color:#2c1810;text-decoration:none;font-family:system-ui,sans-serif;border-bottom:1px solid #f0ebe6;background:#fff;&#039;;&lt;br /&gt;
    function makeItem( href, label ) { var a = document.createElement( &#039;a&#039; ); a.href = href; a.style.cssText = itemStyle; a.innerHTML = &#039;&amp;lt;span&amp;gt;&#039; + label + &#039;&amp;lt;/span&amp;gt;&#039;; return a; }&lt;br /&gt;
    wrap.appendChild( makeItem( &#039;/Main_Page&#039;, &#039;Home&#039; ) );&lt;br /&gt;
    wrap.appendChild( makeItem( &#039;/My_wiki:Help&#039;, &#039;Help&#039; ) );&lt;br /&gt;
    wrap.appendChild( makeItem( &#039;/My_wiki:About&#039;, &#039;About&#039; ) );&lt;br /&gt;
    var userName = window.mw ? mw.config.get( &#039;wgUserName&#039; ) : null;&lt;br /&gt;
    if ( userName ) {&lt;br /&gt;
      wrap.appendChild( makeItem( ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) ? mw.util.getUrl( &#039;Special:Profile&#039; ) : &#039;/Special:Profile&#039;, &#039;Profile&#039; ) );&lt;br /&gt;
      var la = document.querySelector( &#039;a[href*=&amp;quot;action=logout&amp;quot;]&#039; );&lt;br /&gt;
      wrap.appendChild( makeItem( la ? la.href : &#039;/index.php?title=Special:UserLogout&#039;, &#039;Log out&#039; ) );&lt;br /&gt;
    }&lt;br /&gt;
    else wrap.appendChild( makeItem( &#039;/index.php?title=Special:UserLogin&#039;, &#039;Log in&#039; ) );&lt;br /&gt;
    var pageLeft = document.getElementById( &#039;mw-mf-page-left&#039; );&lt;br /&gt;
    if ( pageLeft ) { while ( pageLeft.firstChild ) pageLeft.removeChild( pageLeft.firstChild ); pageLeft.style.removeProperty( &#039;display&#039; ); pageLeft.appendChild( wrap ); }&lt;br /&gt;
    else navDrawer.appendChild( wrap );&lt;br /&gt;
  }&lt;br /&gt;
  var _tocDone = false;&lt;br /&gt;
  function initToc() {&lt;br /&gt;
    if ( _tocDone ) return;&lt;br /&gt;
    var tocList = document.querySelector( &#039;.vector-toc-contents, .vector-toc .vector-toc-list&#039; );&lt;br /&gt;
    if ( !tocList || !tocList.querySelector( &#039;li&#039; ) ) return;&lt;br /&gt;
    _tocDone = true;&lt;br /&gt;
    var bd = document.createElement( &#039;div&#039; ); bd.className = &#039;gr-mob-toc-backdrop&#039;; document.body.appendChild( bd );&lt;br /&gt;
    var panel = document.createElement( &#039;div&#039; ); panel.className = &#039;gr-mob-toc-panel&#039;;&lt;br /&gt;
    var hdr = document.createElement( &#039;div&#039; ); hdr.className = &#039;gr-mob-toc-header&#039;;&lt;br /&gt;
    var ttl = document.createElement( &#039;div&#039; ); ttl.className = &#039;gr-mob-toc-title&#039;; ttl.textContent = &#039;विषयसूची&#039;;&lt;br /&gt;
    var cls = document.createElement( &#039;button&#039; ); cls.className = &#039;gr-mob-toc-close&#039;; cls.textContent = &#039;✕&#039;;&lt;br /&gt;
    hdr.appendChild( ttl ); hdr.appendChild( cls ); panel.appendChild( hdr );&lt;br /&gt;
    var body = document.createElement( &#039;div&#039; ); body.className = &#039;gr-mob-toc-body&#039;; body.appendChild( tocList.cloneNode( true ) ); panel.appendChild( body ); document.body.appendChild( panel );&lt;br /&gt;
    var btn = document.createElement( &#039;button&#039; ); btn.id = &#039;gr-mob-toc-btn&#039;; btn.innerHTML = &#039;☰ &amp;amp;nbsp;Contents&#039;;&lt;br /&gt;
    btn.style.cssText = &#039;position:fixed;bottom:148px;left:16px;z-index:9100;background:#fff;border:1.5px solid #b5451b;border-radius:24px;padding:10px 16px;font-size:15px;font-family:system-ui,sans-serif;color:#b5451b;font-weight:600;box-shadow:0 3px 14px rgba(0,0,0,0.15);cursor:pointer;&#039;;&lt;br /&gt;
    document.body.appendChild( btn );&lt;br /&gt;
    function open()  { panel.classList.add(&#039;open&#039;); bd.classList.add(&#039;open&#039;); document.body.style.overflow=&#039;hidden&#039;; }&lt;br /&gt;
    function close() { panel.classList.remove(&#039;open&#039;); bd.classList.remove(&#039;open&#039;); document.body.style.overflow=&#039;&#039;; }&lt;br /&gt;
    btn.onclick = open; cls.onclick = close; bd.onclick = close;&lt;br /&gt;
    body.querySelectorAll(&#039;a&#039;).forEach(function(a){ a.onclick = close; });&lt;br /&gt;
  }&lt;br /&gt;
  function injectMoolaUllekhaLinks() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-mob-doc-nav&#039; ) ) return;&lt;br /&gt;
    var pageName = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039; ) ) || &#039;&#039;;&lt;br /&gt;
    if ( pageName === &#039;Main_Page&#039; || !pageName ) return;&lt;br /&gt;
    function wikiUrl( slug ) { if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( slug ); return ( ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039; ).replace( &#039;$1&#039;, encodeURIComponent( slug ).replace( /%2F/g, &#039;/&#039; ) ); }&lt;br /&gt;
    var teekaPage = document.querySelector( &#039;.gr-teeka-page&#039; );&lt;br /&gt;
    var primarySlug = teekaPage ? ( teekaPage.getAttribute( &#039;data-primary&#039; ) || pageName.split(&#039;/&#039;)[0] ) : pageName.split(&#039;/&#039;)[0];&lt;br /&gt;
    var docTitleEl = document.querySelector( &#039;.gr-doc-title&#039; );&lt;br /&gt;
    var hasMoolaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-moola&#039; ) === &#039;1&#039;;&lt;br /&gt;
    var hasUllekhaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-ullekha&#039; ) === &#039;1&#039;;&lt;br /&gt;
    var showMoolam = !!teekaPage || hasMoolaPage, showUllekha = hasUllekhaPage || !!teekaPage;&lt;br /&gt;
    if ( !showMoolam &amp;amp;&amp;amp; !showUllekha ) return;&lt;br /&gt;
    var nav = document.createElement( &#039;div&#039; ); nav.id = &#039;gr-mob-doc-nav&#039;;&lt;br /&gt;
    nav.style.cssText = &#039;display:flex;gap:10px;padding:10px 16px 8px;background:#fdf8f5;border-bottom:1px solid #f0e0d6;font-family:system-ui,sans-serif;&#039;;&lt;br /&gt;
    function makeLink( href, label ) { var a = document.createElement( &#039;a&#039; ); a.href = href; a.textContent = label; a.style.cssText = &#039;display:inline-flex;align-items:center;padding:5px 16px;border-radius:20px;background:#fff;border:1.5px solid #e8cfc4;color:#b5451b;font-size:14px;font-weight:600;text-decoration:none;&#039;; return a; }&lt;br /&gt;
    if ( teekaPage ) nav.appendChild( makeLink( wikiUrl( primarySlug ), &#039;मूल&#039; ) );&lt;br /&gt;
    else if ( hasMoolaPage ) nav.appendChild( makeLink( wikiUrl( primarySlug + &#039;/Moola&#039; ), &#039;मूलम्&#039; ) );&lt;br /&gt;
    if ( showUllekha ) nav.appendChild( makeLink( wikiUrl( primarySlug + &#039;/Ullekha&#039; ), &#039;उल्लेख&#039; ) );&lt;br /&gt;
    var h1 = document.getElementById( &#039;firstHeading&#039; ) || document.querySelector( &#039;.page-heading, h1.firstHeading, .mw-first-heading&#039; );&lt;br /&gt;
    if ( h1 &amp;amp;&amp;amp; h1.parentNode ) h1.parentNode.insertBefore( nav, h1.nextSibling );&lt;br /&gt;
    else { var ct = document.getElementById( &#039;mw-content-text&#039; ); if ( ct ) ct.insertBefore( nav, ct.firstChild ); }&lt;br /&gt;
  }&lt;br /&gt;
  injectCSS(); watchBodyPadding();&lt;br /&gt;
  function boot() { expandSections(); watchSections(); injectMenuLinks(); injectMoolaUllekhaLinks(); [100,400,900,1800].forEach(function(ms){ setTimeout(expandSections,ms); }); setTimeout(initToc,700); }&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) document.addEventListener( &#039;DOMContentLoaded&#039;, boot );&lt;br /&gt;
  else boot();&lt;br /&gt;
  if ( window.mw ) mw.hook( &#039;wikipage.content&#039; ).add(function(){ setTimeout(function(){ expandSections(); injectMenuLinks(); injectMoolaUllekhaLinks(); initToc(); },300); });&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
  mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
    setTimeout( function () {&lt;br /&gt;
      var blocks = document.querySelectorAll( &#039;.collapsible-block, .toggle-list&#039; );&lt;br /&gt;
      Array.prototype.forEach.call( blocks, function ( el ) { if ( !el.parentNode ) { try { el.remove(); } catch(e) {} } } );&lt;br /&gt;
    }, 0 );&lt;br /&gt;
  } );&lt;br /&gt;
  if ( mw.config.get( &#039;wgPageName&#039; ) !== &#039;Main_Page&#039; ) return;&lt;br /&gt;
  mw.loader.using( &#039;mediawiki.util&#039; ).done( function () {&lt;br /&gt;
    $( function () { applyHomeToggleOffset(); window.addEventListener( &#039;resize&#039;, applyHomeToggleOffset, { passive: true } ); setTimeout( applyHomeToggleOffset, 300 ); setTimeout( applyHomeToggleOffset, 800 ); } );&lt;br /&gt;
  } );&lt;br /&gt;
  function applyHomeToggleOffset() {&lt;br /&gt;
    var bar = document.getElementById( &#039;gr-static-bar&#039; ); if ( !bar ) return;&lt;br /&gt;
    var barBottom = Math.round( bar.getBoundingClientRect().bottom );&lt;br /&gt;
    [ document.getElementById(&#039;gr-home&#039;), document.getElementById(&#039;gr-home-toggle&#039;), document.querySelector(&#039;#mw-content-text .mw-parser-output &amp;gt; .gr-home, #mw-content-text .mw-parser-output &amp;gt; *:first-child&#039;) ].forEach( function(el){ if(el) el.style.scrollMarginTop=(barBottom+4)+&#039;px&#039;; } );&lt;br /&gt;
    var isMob = window.innerWidth &amp;lt; 768 || !!document.getElementById( &#039;mw-mf-viewport&#039; );&lt;br /&gt;
    if ( isMob ) { var toggleEl = document.getElementById(&#039;gr-home-toggle&#039;); if ( toggleEl ) { var tr = toggleEl.getBoundingClientRect(); if ( tr.top &amp;lt; barBottom ) { var cp = parseInt(window.getComputedStyle(document.body).paddingTop,10)||0; document.body.style.paddingTop=(cp+(barBottom-tr.top)+4)+&#039;px&#039;; } } }&lt;br /&gt;
  }&lt;br /&gt;
  $( function () {&lt;br /&gt;
    var $toggle=$(&#039;#gr-home-toggle&#039;),$viewG=$(&#039;#gr-view-grantha&#039;),$viewA=$(&#039;#gr-view-author&#039;),$btnG=$(&#039;#gr-toggle-grantha&#039;),$btnA=$(&#039;#gr-toggle-author&#039;);&lt;br /&gt;
    if(!$toggle.length||!$viewG.length||!$viewA.length)return; if($toggle.data(&#039;gr-wired&#039;))return; $toggle.data(&#039;gr-wired&#039;,true);&lt;br /&gt;
    function showView(which){ if(which===&#039;grantha&#039;){$viewG.show();$viewA.hide();$btnG.addClass(&#039;gr-toggle-active&#039;);$btnA.removeClass(&#039;gr-toggle-active&#039;);}else{$viewA.show();$viewG.hide();$btnA.addClass(&#039;gr-toggle-active&#039;);$btnG.removeClass(&#039;gr-toggle-active&#039;);} try{localStorage.setItem(&#039;grantha_home_tab&#039;,which);}catch(e){} }&lt;br /&gt;
    $btnG.on(&#039;click keydown&#039;,function(e){if(e.type===&#039;keydown&#039;&amp;amp;&amp;amp;e.key!==&#039;Enter&#039;&amp;amp;&amp;amp;e.key!==&#039; &#039;)return;showView(&#039;grantha&#039;);});&lt;br /&gt;
    $btnA.on(&#039;click keydown&#039;,function(e){if(e.type===&#039;keydown&#039;&amp;amp;&amp;amp;e.key!==&#039;Enter&#039;&amp;amp;&amp;amp;e.key!==&#039; &#039;)return;showView(&#039;author&#039;);});&lt;br /&gt;
    try{var saved=localStorage.getItem(&#039;grantha_home_tab&#039;);if(saved===&#039;author&#039;)showView(&#039;author&#039;);else showView(&#039;grantha&#039;);}catch(e){showView(&#039;grantha&#039;);}&lt;br /&gt;
  } );&lt;br /&gt;
}() );&lt;br /&gt;
// ── Replace MediaWiki user links with a single username dropdown (Profile + Logout) ──&lt;br /&gt;
( function () {&lt;br /&gt;
  function wikiHref( title ) {&lt;br /&gt;
    if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( title );&lt;br /&gt;
    var ap = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
    return ap.replace( &#039;$1&#039;, title );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function buildLogoutForm( token ) {&lt;br /&gt;
    token = token || &#039;&#039;;&lt;br /&gt;
    var esc = String( token ).replace( /&amp;quot;/g, &#039;&amp;amp;quot;&#039; );&lt;br /&gt;
    var script = ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.wikiScript ) ? mw.util.wikiScript() : &#039;/index.php&#039;;&lt;br /&gt;
    var form = document.createElement( &#039;form&#039; );&lt;br /&gt;
    form.method = &#039;post&#039;;&lt;br /&gt;
    form.action = script + &#039;?title=Special:UserLogout&#039;;&lt;br /&gt;
    form.style.display = &#039;none&#039;;&lt;br /&gt;
    form.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;wpEditToken&amp;quot; value=&amp;quot;&#039; + esc + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;title&amp;quot; value=&amp;quot;Special:UserLogout&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;returnto&amp;quot; value=&amp;quot;Main Page&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
    document.body.appendChild( form );&lt;br /&gt;
    return form;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function injectUserDropdown() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-user-dropdown&#039; ) ) return;&lt;br /&gt;
&lt;br /&gt;
    var userName = window.mw ? mw.config.get( &#039;wgUserName&#039; ) : null;&lt;br /&gt;
    var isAnon = !userName || ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgUserId&#039; ) === null );&lt;br /&gt;
&lt;br /&gt;
    var container = document.querySelector( &#039;.vector-user-links-main&#039; )&lt;br /&gt;
                 || document.querySelector( &#039;.vector-user-links&#039; );&lt;br /&gt;
    if ( !container ) return;&lt;br /&gt;
&lt;br /&gt;
    // Logged-out: show a single Login/Signup link, nothing else&lt;br /&gt;
    if ( isAnon ) {&lt;br /&gt;
        // Remove MediaWiki&#039;s native account links so only our button shows&lt;br /&gt;
        [ &#039;#pt-createaccount&#039;, &#039;#pt-login&#039;, &#039;#pt-anoncontribs&#039;,&lt;br /&gt;
          &#039;#pt-anontalk&#039;, &#039;#pt-anonuserpage&#039; ].forEach( function ( sel ) {&lt;br /&gt;
            document.querySelectorAll( sel ).forEach( function ( el ) {&lt;br /&gt;
                if ( el &amp;amp;&amp;amp; el.parentNode ) el.parentNode.removeChild( el );&lt;br /&gt;
            } );&lt;br /&gt;
        } );&lt;br /&gt;
        if ( document.getElementById( &#039;gr-login-link&#039; ) ) return;&lt;br /&gt;
        var loginA = document.createElement( &#039;a&#039; );&lt;br /&gt;
        loginA.id = &#039;gr-login-link&#039;;&lt;br /&gt;
        loginA.href = wikiHref( &#039;Special:UserLogin&#039; );&lt;br /&gt;
        loginA.textContent = &#039;Login/Signup&#039;;&lt;br /&gt;
        loginA.style.cssText = &#039;color:#fff;font-size:0.9em;font-weight:500;&#039; +&lt;br /&gt;
            &#039;text-decoration:none;padding:6px 12px;border-radius:6px;&#039; +&lt;br /&gt;
            &#039;background:rgba(255,255,255,0.12);white-space:nowrap;&#039;;&lt;br /&gt;
        loginA.addEventListener( &#039;mouseover&#039;, function(){ this.style.background=&#039;rgba(255,255,255,0.2)&#039;; } );&lt;br /&gt;
        loginA.addEventListener( &#039;mouseout&#039;,  function(){ this.style.background=&#039;rgba(255,255,255,0.12)&#039;; } );&lt;br /&gt;
        container.appendChild( loginA );&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Logout token (csrf token works for logout in modern MW)&lt;br /&gt;
    var token = ( window.mw &amp;amp;&amp;amp; mw.user &amp;amp;&amp;amp; mw.user.tokens )&lt;br /&gt;
      ? mw.user.tokens.get( &#039;csrfToken&#039; ) : &#039;+\\&#039;;&lt;br /&gt;
&lt;br /&gt;
    var wrap = document.createElement( &#039;div&#039; );&lt;br /&gt;
    wrap.id = &#039;gr-user-dropdown&#039;;&lt;br /&gt;
    wrap.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;button id=&amp;quot;gr-user-trigger&amp;quot; type=&amp;quot;button&amp;quot; aria-haspopup=&amp;quot;true&amp;quot; aria-expanded=&amp;quot;false&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;&#039; + (userName.replace(/&amp;lt;/g,&#039;&amp;amp;lt;&#039;)) + &#039;&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span class=&amp;quot;gr-caret&amp;quot;&amp;gt;▾&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;div id=&amp;quot;gr-user-menu&amp;quot; role=&amp;quot;menu&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;&#039; + wikiHref( &#039;Special:Profile&#039; ) + &#039;&amp;quot; role=&amp;quot;menuitem&amp;quot;&amp;gt;Profile&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;#&amp;quot; id=&amp;quot;gr-logout-link&amp;quot; role=&amp;quot;menuitem&amp;quot;&amp;gt;Log out&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
    container.appendChild( wrap );&lt;br /&gt;
&lt;br /&gt;
    var trigger = document.getElementById( &#039;gr-user-trigger&#039; );&lt;br /&gt;
    var menu    = document.getElementById( &#039;gr-user-menu&#039; );&lt;br /&gt;
&lt;br /&gt;
    trigger.addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      e.stopPropagation();&lt;br /&gt;
      var open = menu.classList.toggle( &#039;gr-open&#039; );&lt;br /&gt;
      trigger.setAttribute( &#039;aria-expanded&#039;, open ? &#039;true&#039; : &#039;false&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    document.addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      if ( !wrap.contains( e.target ) ) {&lt;br /&gt;
        menu.classList.remove( &#039;gr-open&#039; );&lt;br /&gt;
        trigger.setAttribute( &#039;aria-expanded&#039;, &#039;false&#039; );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    document.getElementById( &#039;gr-logout-link&#039; ).addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      e.preventDefault();&lt;br /&gt;
      // Fetch a fresh CSRF token at click time (more reliable than at load time)&lt;br /&gt;
      if ( window.mw &amp;amp;&amp;amp; mw.user &amp;amp;&amp;amp; mw.user.tokens ) {&lt;br /&gt;
        var t = mw.user.tokens.get( &#039;csrfToken&#039; );&lt;br /&gt;
        if ( t ) { buildLogoutForm( t ).submit(); return; }&lt;br /&gt;
      }&lt;br /&gt;
      // Fallback: use the API to get a logout token, then submit&lt;br /&gt;
      if ( window.mw &amp;amp;&amp;amp; mw.Api ) {&lt;br /&gt;
        new mw.Api().postWithToken( &#039;csrf&#039;, { action: &#039;logout&#039; } )&lt;br /&gt;
          .done( function () { location.href = &#039;/Main_Page&#039;; } )&lt;br /&gt;
          .fail( function () { location.href = &#039;/index.php?title=Special:UserLogout&#039;; } );&lt;br /&gt;
      } else {&lt;br /&gt;
        location.href = &#039;/index.php?title=Special:UserLogout&#039;;&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) {&lt;br /&gt;
    document.addEventListener( &#039;DOMContentLoaded&#039;, injectUserDropdown );&lt;br /&gt;
  } else {&lt;br /&gt;
    injectUserDropdown();&lt;br /&gt;
  }&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.js&amp;diff=6213</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.js&amp;diff=6213"/>
		<updated>2026-06-12T17:34:35Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: Undo revision 6210 by Vaishnavi (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* MediaWiki:Common.js — grantha.io  (v7) */&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
  var LS_SCRIPT_KEY = &#039;grantha_reader_script&#039;;&lt;br /&gt;
  var currentScript = &#039;deva&#039;;&lt;br /&gt;
&lt;br /&gt;
  function devanagariToIAST( text ) {&lt;br /&gt;
    var CONSONANTS = {&lt;br /&gt;
      &#039;क&#039;:&#039;k&#039;,&#039;ख&#039;:&#039;kh&#039;,&#039;ग&#039;:&#039;g&#039;,&#039;घ&#039;:&#039;gh&#039;,&#039;ङ&#039;:&#039;ṅ&#039;,&lt;br /&gt;
      &#039;च&#039;:&#039;c&#039;,&#039;छ&#039;:&#039;ch&#039;,&#039;ज&#039;:&#039;j&#039;,&#039;झ&#039;:&#039;jh&#039;,&#039;ञ&#039;:&#039;ñ&#039;,&lt;br /&gt;
      &#039;ट&#039;:&#039;ṭ&#039;,&#039;ठ&#039;:&#039;ṭh&#039;,&#039;ड&#039;:&#039;ḍ&#039;,&#039;ढ&#039;:&#039;ḍh&#039;,&#039;ण&#039;:&#039;ṇ&#039;,&lt;br /&gt;
      &#039;त&#039;:&#039;t&#039;,&#039;थ&#039;:&#039;th&#039;,&#039;द&#039;:&#039;d&#039;,&#039;ध&#039;:&#039;dh&#039;,&#039;न&#039;:&#039;n&#039;,&lt;br /&gt;
      &#039;प&#039;:&#039;p&#039;,&#039;फ&#039;:&#039;ph&#039;,&#039;ब&#039;:&#039;b&#039;,&#039;भ&#039;:&#039;bh&#039;,&#039;म&#039;:&#039;m&#039;,&lt;br /&gt;
      &#039;य&#039;:&#039;y&#039;,&#039;र&#039;:&#039;r&#039;,&#039;ल&#039;:&#039;l&#039;,&#039;ळ&#039;:&#039;ḷ&#039;,&#039;व&#039;:&#039;v&#039;,&lt;br /&gt;
      &#039;श&#039;:&#039;ś&#039;,&#039;ष&#039;:&#039;ṣ&#039;,&#039;स&#039;:&#039;s&#039;,&#039;ह&#039;:&#039;h&#039;&lt;br /&gt;
    };&lt;br /&gt;
    var DIACRITICS = {&lt;br /&gt;
      &#039;ा&#039;:&#039;ā&#039;,&#039;ि&#039;:&#039;i&#039;,&#039;ी&#039;:&#039;ī&#039;,&#039;ु&#039;:&#039;u&#039;,&#039;ू&#039;:&#039;ū&#039;,&lt;br /&gt;
      &#039;ृ&#039;:&#039;ṛ&#039;,&#039;ॄ&#039;:&#039;ṝ&#039;,&#039;े&#039;:&#039;e&#039;,&#039;ै&#039;:&#039;ai&#039;,&#039;ो&#039;:&#039;o&#039;,&#039;ौ&#039;:&#039;au&#039;&lt;br /&gt;
    };&lt;br /&gt;
    var VOWELS = {&lt;br /&gt;
      &#039;अ&#039;:&#039;a&#039;,&#039;आ&#039;:&#039;ā&#039;,&#039;इ&#039;:&#039;i&#039;,&#039;ई&#039;:&#039;ī&#039;,&#039;उ&#039;:&#039;u&#039;,&#039;ऊ&#039;:&#039;ū&#039;,&lt;br /&gt;
      &#039;ऋ&#039;:&#039;ṛ&#039;,&#039;ॠ&#039;:&#039;ṝ&#039;,&#039;ए&#039;:&#039;e&#039;,&#039;ऐ&#039;:&#039;ai&#039;,&#039;ओ&#039;:&#039;o&#039;,&#039;औ&#039;:&#039;au&#039;,&#039;ऽ&#039;:&amp;quot;&#039;&amp;quot;&lt;br /&gt;
    };&lt;br /&gt;
    var MISC = {&lt;br /&gt;
      &#039;ं&#039;:&#039;ṃ&#039;,&#039;ः&#039;:&#039;ḥ&#039;,&#039;ँ&#039;:&#039;m̐&#039;,&#039;ॐ&#039;:&#039;oṃ&#039;,&lt;br /&gt;
      &#039;०&#039;:&#039;0&#039;,&#039;१&#039;:&#039;1&#039;,&#039;२&#039;:&#039;2&#039;,&#039;३&#039;:&#039;3&#039;,&#039;४&#039;:&#039;4&#039;,&lt;br /&gt;
      &#039;५&#039;:&#039;5&#039;,&#039;६&#039;:&#039;6&#039;,&#039;७&#039;:&#039;7&#039;,&#039;८&#039;:&#039;8&#039;,&#039;९&#039;:&#039;9&#039;&lt;br /&gt;
    };&lt;br /&gt;
    var HALANTA = &#039;्&#039;;&lt;br /&gt;
    var chars = Array.from( text );&lt;br /&gt;
    var result = &#039;&#039;;&lt;br /&gt;
    var i = 0;&lt;br /&gt;
    while ( i &amp;lt; chars.length ) {&lt;br /&gt;
      var ch   = chars[ i ];&lt;br /&gt;
      var next = chars[ i + 1 ];&lt;br /&gt;
      if ( CONSONANTS[ ch ] ) {&lt;br /&gt;
        var base = CONSONANTS[ ch ];&lt;br /&gt;
        if ( next === HALANTA )          { result += base;               i += 2; }&lt;br /&gt;
        else if ( DIACRITICS[ next ] )   { result += base + DIACRITICS[ next ]; i += 2; }&lt;br /&gt;
        else if ( next === &#039;ं&#039; || next === &#039;ः&#039; ) { result += base + &#039;a&#039; + MISC[ next ]; i += 2; }&lt;br /&gt;
        else                             { result += base + &#039;a&#039;;         i++;    }&lt;br /&gt;
      } else if ( VOWELS[ ch ] )         { result += VOWELS[ ch ];       i++; }&lt;br /&gt;
      else if ( DIACRITICS[ ch ] )       { result += DIACRITICS[ ch ];   i++; }&lt;br /&gt;
      else if ( MISC[ ch ] )             { result += MISC[ ch ];         i++; }&lt;br /&gt;
      else                               { result += ch;                 i++; }&lt;br /&gt;
    }&lt;br /&gt;
    return result;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var SCRIPT_MAP = {&lt;br /&gt;
    kn: {&lt;br /&gt;
      &#039;अ&#039;:&#039;ಅ&#039;,&#039;आ&#039;:&#039;ಆ&#039;,&#039;इ&#039;:&#039;ಇ&#039;,&#039;ई&#039;:&#039;ಈ&#039;,&#039;उ&#039;:&#039;ಉ&#039;,&#039;ऊ&#039;:&#039;ಊ&#039;,&#039;ऋ&#039;:&#039;ಋ&#039;,&lt;br /&gt;
      &#039;ए&#039;:&#039;ಏ&#039;,&#039;ऐ&#039;:&#039;ಐ&#039;,&#039;ओ&#039;:&#039;ಓ&#039;,&#039;औ&#039;:&#039;ಔ&#039;,&#039;ऽ&#039;:&#039;ಽ&#039;,&lt;br /&gt;
      &#039;क&#039;:&#039;ಕ&#039;,&#039;ख&#039;:&#039;ಖ&#039;,&#039;ग&#039;:&#039;ಗ&#039;,&#039;घ&#039;:&#039;ಘ&#039;,&#039;ङ&#039;:&#039;ಙ&#039;,&lt;br /&gt;
      &#039;च&#039;:&#039;ಚ&#039;,&#039;छ&#039;:&#039;ಛ&#039;,&#039;ज&#039;:&#039;ಜ&#039;,&#039;झ&#039;:&#039;ಝ&#039;,&#039;ञ&#039;:&#039;ಞ&#039;,&lt;br /&gt;
      &#039;ट&#039;:&#039;ಟ&#039;,&#039;ठ&#039;:&#039;ಠ&#039;,&#039;ड&#039;:&#039;ಡ&#039;,&#039;ढ&#039;:&#039;ಢ&#039;,&#039;ण&#039;:&#039;ಣ&#039;,&lt;br /&gt;
      &#039;त&#039;:&#039;ತ&#039;,&#039;थ&#039;:&#039;ಥ&#039;,&#039;द&#039;:&#039;ದ&#039;,&#039;ध&#039;:&#039;ಧ&#039;,&#039;न&#039;:&#039;ನ&#039;,&lt;br /&gt;
      &#039;प&#039;:&#039;ಪ&#039;,&#039;फ&#039;:&#039;ಫ&#039;,&#039;ब&#039;:&#039;ಬ&#039;,&#039;भ&#039;:&#039;ಭ&#039;,&#039;म&#039;:&#039;ಮ&#039;,&lt;br /&gt;
      &#039;य&#039;:&#039;ಯ&#039;,&#039;र&#039;:&#039;ರ&#039;,&#039;ल&#039;:&#039;ಲ&#039;,&#039;व&#039;:&#039;ವ&#039;,&lt;br /&gt;
      &#039;श&#039;:&#039;ಶ&#039;,&#039;ष&#039;:&#039;ಷ&#039;,&#039;स&#039;:&#039;ಸ&#039;,&#039;ह&#039;:&#039;ಹ&#039;,&lt;br /&gt;
      &#039;ा&#039;:&#039;ಾ&#039;,&#039;ि&#039;:&#039;ಿ&#039;,&#039;ी&#039;:&#039;ೀ&#039;,&#039;ु&#039;:&#039;ು&#039;,&#039;ू&#039;:&#039;ೂ&#039;,&lt;br /&gt;
      &#039;ृ&#039;:&#039;ೃ&#039;,&#039;े&#039;:&#039;ೇ&#039;,&#039;ै&#039;:&#039;ೈ&#039;,&#039;ो&#039;:&#039;ೋ&#039;,&#039;ौ&#039;:&#039;ೌ&#039;,&lt;br /&gt;
      &#039;ं&#039;:&#039;ಂ&#039;,&#039;ः&#039;:&#039;ಃ&#039;,&#039;्&#039;:&#039;್&#039;,&lt;br /&gt;
      &#039;०&#039;:&#039;೦&#039;,&#039;१&#039;:&#039;೧&#039;,&#039;२&#039;:&#039;೨&#039;,&#039;३&#039;:&#039;೩&#039;,&#039;४&#039;:&#039;೪&#039;,&lt;br /&gt;
      &#039;५&#039;:&#039;೫&#039;,&#039;६&#039;:&#039;೬&#039;,&#039;७&#039;:&#039;೭&#039;,&#039;८&#039;:&#039;೮&#039;,&#039;९&#039;:&#039;೯&#039;&lt;br /&gt;
    },&lt;br /&gt;
    ta: {&lt;br /&gt;
      &#039;अ&#039;:&#039;அ&#039;,&#039;आ&#039;:&#039;ஆ&#039;,&#039;इ&#039;:&#039;இ&#039;,&#039;ई&#039;:&#039;ஈ&#039;,&#039;उ&#039;:&#039;உ&#039;,&#039;ऊ&#039;:&#039;ஊ&#039;,&lt;br /&gt;
      &#039;ऋ&#039;:&#039;ரு&#039;,&#039;ॠ&#039;:&#039;ரூ&#039;,&lt;br /&gt;
      &#039;ए&#039;:&#039;ஏ&#039;,&#039;ऐ&#039;:&#039;ஐ&#039;,&#039;ओ&#039;:&#039;ஓ&#039;,&#039;औ&#039;:&#039;ஔ&#039;,&lt;br /&gt;
      &#039;क&#039;:&#039;க&#039;,&#039;ख&#039;:&#039;க&#039;,&#039;ग&#039;:&#039;க&#039;,&#039;घ&#039;:&#039;க&#039;,&#039;ङ&#039;:&#039;ங&#039;,&lt;br /&gt;
      &#039;च&#039;:&#039;ச&#039;,&#039;छ&#039;:&#039;ச&#039;,&#039;ज&#039;:&#039;ஜ&#039;,&#039;झ&#039;:&#039;ஜ&#039;,&#039;ञ&#039;:&#039;ஞ&#039;,&lt;br /&gt;
      &#039;ட&#039;:&#039;ட&#039;,&#039;ठ&#039;:&#039;ட&#039;,&#039;ड&#039;:&#039;ட&#039;,&#039;ढ&#039;:&#039;ட&#039;,&#039;ண&#039;:&#039;ண&#039;,&lt;br /&gt;
      &#039;त&#039;:&#039;த&#039;,&#039;थ&#039;:&#039;த&#039;,&#039;द&#039;:&#039;த&#039;,&#039;ध&#039;:&#039;த&#039;,&#039;न&#039;:&#039;ந&#039;,&lt;br /&gt;
      &#039;प&#039;:&#039;ப&#039;,&#039;फ&#039;:&#039;ப&#039;,&#039;ब&#039;:&#039;ப&#039;,&#039;भ&#039;:&#039;ப&#039;,&#039;म&#039;:&#039;ம&#039;,&lt;br /&gt;
      &#039;य&#039;:&#039;ய&#039;,&#039;र&#039;:&#039;ர&#039;,&#039;ल&#039;:&#039;ல&#039;,&#039;ळ&#039;:&#039;ழ&#039;,&#039;व&#039;:&#039;வ&#039;,&lt;br /&gt;
      &#039;श&#039;:&#039;ஶ&#039;,&#039;ष&#039;:&#039;ஷ&#039;,&#039;स&#039;:&#039;ஸ&#039;,&#039;ह&#039;:&#039;ஹ&#039;,&lt;br /&gt;
      &#039;ा&#039;:&#039;ா&#039;,&#039;ि&#039;:&#039;ி&#039;,&#039;ी&#039;:&#039;ீ&#039;,&#039;ु&#039;:&#039;ு&#039;,&#039;ू&#039;:&#039;ூ&#039;,&lt;br /&gt;
      &#039;ृ&#039;:&#039;ு&#039;,&#039;ॄ&#039;:&#039;ூ&#039;,&lt;br /&gt;
      &#039;े&#039;:&#039;ே&#039;,&#039;ை&#039;:&#039;ை&#039;,&#039;ो&#039;:&#039;ோ&#039;,&#039;ौ&#039;:&#039;ௌ&#039;,&lt;br /&gt;
      &#039;ं&#039;:&#039;ம்&#039;,&#039;ः&#039;:&#039;:&#039;,&#039;ँ&#039;:&#039;ம்&#039;,&#039;्&#039;:&#039;்&#039;,&#039;ॐ&#039;:&#039;ௐ&#039;,&#039;ऽ&#039;:&#039;ௗ&#039;,&lt;br /&gt;
      &#039;०&#039;:&#039;0&#039;,&#039;१&#039;:&#039;1&#039;,&#039;२&#039;:&#039;2&#039;,&#039;३&#039;:&#039;3&#039;,&#039;४&#039;:&#039;4&#039;,&lt;br /&gt;
      &#039;५&#039;:&#039;5&#039;,&#039;६&#039;:&#039;6&#039;,&#039;७&#039;:&#039;7&#039;,&#039;८&#039;:&#039;8&#039;,&#039;९&#039;:&#039;9&#039;&lt;br /&gt;
    }&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  var PRE = [&lt;br /&gt;
    [ /ङ्क/g, &#039;ंक&#039; ], [ /ङ्ख/g, &#039;ंख&#039; ], [ /ङ्ग/g, &#039;ंग&#039; ], [ /ङ्घ/g, &#039;ंघ&#039; ],&lt;br /&gt;
    [ /ञ्च/g, &#039;ंच&#039; ], [ /ञ्ज/g, &#039;ंज&#039; ], [ /ण्ट/g, &#039;ंट&#039; ], [ /ण्ड/g, &#039;ंड&#039; ],&lt;br /&gt;
    [ /न्त/g, &#039;ंत&#039; ], [ /न्द/g, &#039;ंद&#039; ], [ /म्ब/g, &#039;ंब&#039; ], [ /म्भ/g, &#039;ंभ&#039; ]&lt;br /&gt;
  ];&lt;br /&gt;
&lt;br /&gt;
  function transliterateText( text, script ) {&lt;br /&gt;
    if ( script === &#039;en&#039; ) return devanagariToIAST( text );&lt;br /&gt;
    var map = SCRIPT_MAP[ script ];&lt;br /&gt;
    if ( !map ) return text;&lt;br /&gt;
    var t = text;&lt;br /&gt;
    PRE.forEach( function ( p ) { t = t.replace( p[ 0 ], p[ 1 ] ); } );&lt;br /&gt;
    return Array.from( t ).map( function ( ch ) {&lt;br /&gt;
      return map[ ch ] !== undefined ? map[ ch ] : ch;&lt;br /&gt;
    } ).join( &#039;&#039; );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var translatableSpans = [];&lt;br /&gt;
&lt;br /&gt;
  function tagTextNodes() {&lt;br /&gt;
    var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
    if ( content ) {&lt;br /&gt;
      var walker = document.createTreeWalker( content, NodeFilter.SHOW_TEXT );&lt;br /&gt;
      var nodes  = [];&lt;br /&gt;
      while ( walker.nextNode() ) nodes.push( walker.currentNode );&lt;br /&gt;
      nodes.forEach( function ( node ) {&lt;br /&gt;
        var p = node.parentNode;&lt;br /&gt;
        if ( !p ) return;&lt;br /&gt;
        if ( p.hasAttribute &amp;amp;&amp;amp; p.hasAttribute( &#039;data-deva&#039; ) ) return;&lt;br /&gt;
        if ( p.closest ) {&lt;br /&gt;
          if ( p.closest( &#039;.gr-controls&#039; )    ) return;&lt;br /&gt;
          if ( p.closest( &#039;.mw-editsection&#039; ) ) return;&lt;br /&gt;
        }&lt;br /&gt;
        var orig = node.textContent;&lt;br /&gt;
        if ( !orig.trim() ) return;&lt;br /&gt;
        var span = document.createElement( &#039;span&#039; );&lt;br /&gt;
        span.setAttribute( &#039;data-deva&#039;, orig );&lt;br /&gt;
        span.textContent = orig;&lt;br /&gt;
        p.replaceChild( span, node );&lt;br /&gt;
        translatableSpans.push( span );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
    document.querySelectorAll( &#039;.vector-toc .vector-toc-text&#039; ).forEach( function ( span ) {&lt;br /&gt;
      if ( span.hasAttribute( &#039;data-deva&#039; ) ) return;&lt;br /&gt;
      var orig = span.textContent;&lt;br /&gt;
      if ( !orig.trim() ) return;&lt;br /&gt;
      span.setAttribute( &#039;data-deva&#039;, orig );&lt;br /&gt;
      translatableSpans.push( span );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function applyScript( script ) {&lt;br /&gt;
    currentScript = script;&lt;br /&gt;
    translatableSpans.forEach( function ( span ) {&lt;br /&gt;
      if ( !span.parentNode ) return;&lt;br /&gt;
      var orig = span.getAttribute( &#039;data-deva&#039; );&lt;br /&gt;
      if ( !orig ) return;&lt;br /&gt;
      span.textContent = ( script === &#039;deva&#039; )&lt;br /&gt;
        ? orig&lt;br /&gt;
        : transliterateText( orig, script );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function _isNoTocPage() {&lt;br /&gt;
    var pn = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039; ) ) || &#039;&#039;;&lt;br /&gt;
    return pn === &#039;Main_Page&#039; || /^[A-Za-z0-9_]+:About$/.test( pn );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function renameTocTitle() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    var titleEl = toc.querySelector(&#039;.vector-toc-title&#039;) || toc.querySelector(&#039;.vector-pinnable-header-label&#039;);&lt;br /&gt;
    if ( !titleEl ) return;&lt;br /&gt;
    var LABEL = &#039;विषयसूची&#039;;&lt;br /&gt;
    var span = titleEl.querySelector(&#039;.gr-toc-title&#039;);&lt;br /&gt;
    if ( !span ) {&lt;br /&gt;
      titleEl.innerHTML = &#039;&#039;;&lt;br /&gt;
      span = document.createElement(&#039;span&#039;);&lt;br /&gt;
      span.className = &#039;gr-toc-title&#039;;&lt;br /&gt;
      span.setAttribute(&#039;data-deva&#039;, LABEL);&lt;br /&gt;
      titleEl.appendChild(span);&lt;br /&gt;
      translatableSpans.push(span);&lt;br /&gt;
    }&lt;br /&gt;
    span.textContent = currentScript === &#039;deva&#039; ? LABEL : transliterateText(LABEL, currentScript);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function removeTocBeginning() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    var el = toc.querySelector( &#039;#vector-toc-beginning&#039; );&lt;br /&gt;
    if ( !el ) {&lt;br /&gt;
      var items = toc.querySelectorAll( &#039;.vector-toc-list-item&#039; );&lt;br /&gt;
      for ( var i = 0; i &amp;lt; items.length; i++ ) {&lt;br /&gt;
        var a = items[ i ].querySelector( &#039;a&#039; );&lt;br /&gt;
        if ( a ) {&lt;br /&gt;
          var href = a.getAttribute( &#039;href&#039; ) || &#039;&#039;;&lt;br /&gt;
          if ( href.indexOf( &#039;#&#039; ) === -1 ) { el = items[ i ]; break; }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if ( el &amp;amp;&amp;amp; el.parentNode ) el.parentNode.removeChild( el );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function expandTocSections() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    toc.querySelectorAll( &#039;.vector-toc-list-item-collapsed&#039; ).forEach( function ( li ) {&lt;br /&gt;
      li.classList.remove( &#039;vector-toc-list-item-collapsed&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function injectTocDocNav() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    if ( document.getElementById( &#039;gr-toc-doc-nav&#039; ) ) return;&lt;br /&gt;
    var artPath   = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
    var pageTitle = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039;   ) ) || &#039;&#039;;&lt;br /&gt;
    var teekaPage   = document.querySelector( &#039;.gr-teeka-page&#039; );&lt;br /&gt;
    var primarySlug = teekaPage ? ( teekaPage.getAttribute( &#039;data-primary&#039; ) || &#039;&#039; ) : &#039;&#039;;&lt;br /&gt;
    if ( !primarySlug ) { primarySlug = pageTitle.split( &#039;/&#039; )[ 0 ]; }&lt;br /&gt;
    if ( !primarySlug ) return;&lt;br /&gt;
    function wikiUrl( slug ) {&lt;br /&gt;
      if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( slug );&lt;br /&gt;
      return artPath.replace( &#039;$1&#039;, encodeURIComponent( slug ).replace( /%2F/g, &#039;/&#039; ) );&lt;br /&gt;
    }&lt;br /&gt;
    var docTitleEl     = document.querySelector( &#039;.gr-doc-title&#039; );&lt;br /&gt;
    var hasMoolaPage   = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-moola&#039; )   === &#039;1&#039;;&lt;br /&gt;
    var hasUllekhaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-ullekha&#039; ) === &#039;1&#039;;&lt;br /&gt;
    var showMoolaPage  = !teekaPage &amp;amp;&amp;amp; hasMoolaPage;&lt;br /&gt;
    var showMoolaBack  = !!teekaPage;&lt;br /&gt;
    var showUllekha    = hasUllekhaPage || !!teekaPage;&lt;br /&gt;
    if ( !showMoolaPage &amp;amp;&amp;amp; !showMoolaBack &amp;amp;&amp;amp; !showUllekha ) return;&lt;br /&gt;
    var nav = document.createElement( &#039;div&#039; );&lt;br /&gt;
    nav.id = &#039;gr-toc-doc-nav&#039;;&lt;br /&gt;
    nav.setAttribute( &#039;class&#039;, &#039;toc-main-links&#039; );&lt;br /&gt;
    function makeBtn( href, label ) {&lt;br /&gt;
      var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
      a.href = href;&lt;br /&gt;
      a.setAttribute( &#039;class&#039;, &#039;toc-main-link-item&#039; );&lt;br /&gt;
      var lspan = document.createElement( &#039;span&#039; );&lt;br /&gt;
      lspan.setAttribute( &#039;data-deva&#039;, label );&lt;br /&gt;
      lspan.textContent = ( currentScript &amp;amp;&amp;amp; currentScript !== &#039;deva&#039; ) ? transliterateText( label, currentScript ) : label;&lt;br /&gt;
      translatableSpans.push( lspan );&lt;br /&gt;
      a.appendChild( lspan );&lt;br /&gt;
      a.addEventListener( &#039;mouseover&#039;, function () { this.style.opacity = &#039;0.72&#039;; } );&lt;br /&gt;
      a.addEventListener( &#039;mouseout&#039;,  function () { this.style.opacity = &#039;1&#039;;    } );&lt;br /&gt;
      return a;&lt;br /&gt;
    }&lt;br /&gt;
    if ( showMoolaPage ) nav.appendChild( makeBtn( wikiUrl( primarySlug + &#039;/Moola&#039; ), &#039;मूलम्&#039; ) );&lt;br /&gt;
    if ( showMoolaBack ) nav.appendChild( makeBtn( wikiUrl( primarySlug ),            &#039;मूल&#039;   ) );&lt;br /&gt;
    if ( showUllekha   ) nav.appendChild( makeBtn( wikiUrl( primarySlug + &#039;/Ullekha&#039;), &#039;उल्लेख&#039;) );&lt;br /&gt;
    var tocContents = toc.querySelector( &#039;.vector-toc-contents&#039; );&lt;br /&gt;
    if ( tocContents ) toc.insertBefore( nav, tocContents );&lt;br /&gt;
    else               toc.appendChild( nav );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var _headingObserver = null;&lt;br /&gt;
&lt;br /&gt;
  function attachHeadingObserver() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    if ( _headingObserver ) return;&lt;br /&gt;
    if ( !window.IntersectionObserver ) return;&lt;br /&gt;
    var ACTIVE_COLOR = &#039;#f57c00&#039;;&lt;br /&gt;
    var _activeId    = null;&lt;br /&gt;
    var content  = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
    if ( !content ) return;&lt;br /&gt;
    var headings = Array.from( content.querySelectorAll( &#039;h1[id],h2[id],h3[id],h4[id],h5[id],h6[id]&#039; ) );&lt;br /&gt;
    if ( !headings.length ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    function getTocLink( id ) { return toc.querySelector( &#039;a[href=&amp;quot;#&#039; + CSS.escape( id ) + &#039;&amp;quot;]&#039; ); }&lt;br /&gt;
    function getTocLi( id ) { var a = getTocLink( id ); return a ? a.closest( &#039;.vector-toc-list-item&#039; ) : null; }&lt;br /&gt;
    function clearActive() {&lt;br /&gt;
      toc.querySelectorAll( &#039;.vector-toc-list-item&#039; ).forEach( function ( li ) {&lt;br /&gt;
        li.classList.remove( &#039;vector-toc-list-item-active&#039; );&lt;br /&gt;
        var lnk = li.querySelector( &#039;.vector-toc-link&#039; );&lt;br /&gt;
        if ( !lnk ) return;&lt;br /&gt;
        lnk.style.removeProperty( &#039;color&#039; );&lt;br /&gt;
        lnk.style.setProperty( &#039;font-weight&#039;, &#039;400&#039;, &#039;important&#039; );&lt;br /&gt;
        lnk.querySelectorAll( &#039;*&#039; ).forEach( function ( el ) { el.style.removeProperty( &#039;color&#039; ); el.style.setProperty( &#039;font-weight&#039;, &#039;400&#039;, &#039;important&#039; ); } );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
    function setActive( id ) {&lt;br /&gt;
      if ( _activeId === id ) return;&lt;br /&gt;
      _activeId = id;&lt;br /&gt;
      clearActive();&lt;br /&gt;
      if ( !id ) return;&lt;br /&gt;
      var li = getTocLi( id );&lt;br /&gt;
      if ( !li ) return;&lt;br /&gt;
      li.classList.add( &#039;vector-toc-list-item-active&#039; );&lt;br /&gt;
      var hasActiveChild = !!li.querySelector( &#039;.vector-toc-list-item .vector-toc-list-item-active&#039; );&lt;br /&gt;
      if ( !hasActiveChild ) {&lt;br /&gt;
        var lnk = li.querySelector( &#039;.vector-toc-link&#039; );&lt;br /&gt;
        if ( lnk ) {&lt;br /&gt;
          lnk.style.setProperty( &#039;color&#039;, ACTIVE_COLOR, &#039;important&#039; );&lt;br /&gt;
          lnk.style.setProperty( &#039;font-weight&#039;, &#039;700&#039;, &#039;important&#039; );&lt;br /&gt;
          lnk.querySelectorAll( &#039;*&#039; ).forEach( function ( el ) { el.style.setProperty( &#039;color&#039;, ACTIVE_COLOR, &#039;important&#039; ); el.style.setProperty( &#039;font-weight&#039;, &#039;700&#039;, &#039;important&#039; ); } );&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      var anc = li.parentNode;&lt;br /&gt;
      while ( anc &amp;amp;&amp;amp; anc !== toc ) {&lt;br /&gt;
        if ( anc.classList ) anc.classList.remove( &#039;vector-toc-list-item-collapsed&#039; );&lt;br /&gt;
        if ( anc.tagName === &#039;UL&#039; || anc.tagName === &#039;LI&#039; ) anc.style.removeProperty( &#039;display&#039; );&lt;br /&gt;
        anc = anc.parentNode;&lt;br /&gt;
      }&lt;br /&gt;
      var sticky = document.querySelector( &#039;.vector-sticky-pinned-container&#039; );&lt;br /&gt;
      var scrollEl = sticky || toc;&lt;br /&gt;
      if ( scrollEl.scrollHeight &amp;gt; scrollEl.clientHeight ) {&lt;br /&gt;
        var lr = li.getBoundingClientRect();&lt;br /&gt;
        var cr = scrollEl.getBoundingClientRect();&lt;br /&gt;
        if ( lr.top &amp;lt; cr.top + 8 || lr.bottom &amp;gt; cr.bottom - 8 ) {&lt;br /&gt;
          scrollEl.scrollTop += lr.top - cr.top - scrollEl.clientHeight / 2 + li.offsetHeight / 2;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    var _visible = new Set();&lt;br /&gt;
    _headingObserver = new IntersectionObserver( function ( entries ) {&lt;br /&gt;
      entries.forEach( function ( entry ) {&lt;br /&gt;
        if ( entry.isIntersecting ) _visible.add( entry.target.id );&lt;br /&gt;
        else _visible.delete( entry.target.id );&lt;br /&gt;
      } );&lt;br /&gt;
      var topId = null, topY = Infinity;&lt;br /&gt;
      _visible.forEach( function ( id ) {&lt;br /&gt;
        var el = document.getElementById( id );&lt;br /&gt;
        if ( el ) { var y = el.getBoundingClientRect().top; if ( y &amp;gt;= 0 &amp;amp;&amp;amp; y &amp;lt; topY ) { topY = y; topId = id; } }&lt;br /&gt;
      } );&lt;br /&gt;
      if ( !topId ) {&lt;br /&gt;
        var bestY = -Infinity;&lt;br /&gt;
        headings.forEach( function ( h ) { var y = h.getBoundingClientRect().top; if ( y &amp;lt; 0 &amp;amp;&amp;amp; y &amp;gt; bestY ) { bestY = y; topId = h.id; } } );&lt;br /&gt;
      }&lt;br /&gt;
      setActive( topId || null );&lt;br /&gt;
    }, { rootMargin: &#039;-60px 0px -65% 0px&#039;, threshold: 0 } );&lt;br /&gt;
    headings.forEach( function ( h ) { _headingObserver.observe( h ); } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function setupToc() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    removeTocBeginning();&lt;br /&gt;
    renameTocTitle();&lt;br /&gt;
    expandTocSections();&lt;br /&gt;
    injectTocDocNav();&lt;br /&gt;
    attachHeadingObserver();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function init() {&lt;br /&gt;
    var HIDE_IDS = [ &#039;vector-appearance&#039;, &#039;vector-appearance-pinned-container&#039;, &#039;vector-appearance-unpinned-container&#039; ];&lt;br /&gt;
    function removeHiddenEls() {&lt;br /&gt;
      HIDE_IDS.forEach( function ( id ) { var el = document.getElementById( id ); if ( el &amp;amp;&amp;amp; el.parentNode ) el.parentNode.removeChild( el ); } );&lt;br /&gt;
      var pt = document.getElementById( &#039;vector-page-tools&#039; ) || document.querySelector( &#039;.vector-page-tools-pinned-container&#039; );&lt;br /&gt;
      if ( pt ) pt.querySelectorAll( &#039;[aria-controls=&amp;quot;vector-appearance&amp;quot;]&#039; ).forEach( function ( el ) { if ( el.parentNode ) el.parentNode.removeChild( el ); } );&lt;br /&gt;
    }&lt;br /&gt;
    removeHiddenEls();&lt;br /&gt;
    ( function detectTeekaMode() {&lt;br /&gt;
      var tp = document.querySelector( &#039;.gr-teeka-page&#039; );&lt;br /&gt;
      if ( !tp ) return;&lt;br /&gt;
      var primary = tp.getAttribute( &#039;data-primary&#039; ) || &#039;&#039;;&lt;br /&gt;
      var artPath = ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
      var mainUrl = artPath.replace( &#039;$1&#039;, primary );&lt;br /&gt;
      var refParam = window.location.search.match( /[?&amp;amp;]ref=([01])/ );&lt;br /&gt;
      if ( refParam ) { document.body.classList.add( refParam[1] === &#039;1&#039; ? &#039;gr-ref-mode&#039; : &#039;gr-standalone&#039; ); return; }&lt;br /&gt;
      var ref = document.referrer || &#039;&#039;;&lt;br /&gt;
      document.body.classList.add( ( ref &amp;amp;&amp;amp; primary &amp;amp;&amp;amp; ref.indexOf( mainUrl ) !== -1 ) ? &#039;gr-ref-mode&#039; : &#039;gr-standalone&#039; );&lt;br /&gt;
    }() );&lt;br /&gt;
    if ( window.MutationObserver ) {&lt;br /&gt;
      var hideObs = new MutationObserver( function ( mutations ) {&lt;br /&gt;
        var dirty = false;&lt;br /&gt;
        mutations.forEach( function ( m ) { if ( m.addedNodes.length ) dirty = true; } );&lt;br /&gt;
        if ( dirty ) removeHiddenEls();&lt;br /&gt;
      } );&lt;br /&gt;
      hideObs.observe( document.body, { childList: true, subtree: false } );&lt;br /&gt;
      setTimeout( function () { hideObs.disconnect(); }, 6000 );&lt;br /&gt;
    }&lt;br /&gt;
    var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
    var alreadyTagged = content &amp;amp;&amp;amp; content.querySelector( &#039;[data-deva]&#039; );&lt;br /&gt;
    if ( !alreadyTagged ) { translatableSpans = []; tagTextNodes(); }&lt;br /&gt;
    else {&lt;br /&gt;
      document.querySelectorAll( &#039;.vector-toc .vector-toc-text:not([data-deva])&#039; ).forEach( function ( span ) {&lt;br /&gt;
        var orig = span.textContent; if ( !orig.trim() ) return;&lt;br /&gt;
        span.setAttribute( &#039;data-deva&#039;, orig ); translatableSpans.push( span );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
    var saved = ( function () { try { return localStorage.getItem( LS_SCRIPT_KEY ); } catch ( e ) { return null; } }() );&lt;br /&gt;
    if ( saved &amp;amp;&amp;amp; saved !== &#039;deva&#039; ) { applyScript( saved ); } else { currentScript = &#039;deva&#039;; }&lt;br /&gt;
    setTimeout( setupToc, 200 );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  window.addEventListener( &#039;gr-script-change&#039;, function ( e ) {&lt;br /&gt;
    var script = e &amp;amp;&amp;amp; e.detail &amp;amp;&amp;amp; e.detail.script;&lt;br /&gt;
    if ( script ) applyScript( script );&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
  window.addEventListener( &#039;gr-new-content&#039;, function ( e ) {&lt;br /&gt;
    var container = e &amp;amp;&amp;amp; e.detail &amp;amp;&amp;amp; e.detail.container;&lt;br /&gt;
    if ( !container ) return;&lt;br /&gt;
    var walker = document.createTreeWalker( container, NodeFilter.SHOW_TEXT );&lt;br /&gt;
    var nodes = [];&lt;br /&gt;
    while ( walker.nextNode() ) nodes.push( walker.currentNode );&lt;br /&gt;
    nodes.forEach( function ( node ) {&lt;br /&gt;
      var p = node.parentNode;&lt;br /&gt;
      if ( !p || ( p.hasAttribute &amp;amp;&amp;amp; p.hasAttribute( &#039;data-deva&#039; ) ) ) return;&lt;br /&gt;
      var orig = node.textContent;&lt;br /&gt;
      if ( !orig.trim() ) return;&lt;br /&gt;
      var span = document.createElement( &#039;span&#039; );&lt;br /&gt;
      span.setAttribute( &#039;data-deva&#039;, orig );&lt;br /&gt;
      span.textContent = currentScript !== &#039;deva&#039; ? transliterateText( orig, currentScript ) : orig;&lt;br /&gt;
      p.replaceChild( span, node );&lt;br /&gt;
      translatableSpans.push( span );&lt;br /&gt;
    } );&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
  try {&lt;br /&gt;
    var _grBC = new BroadcastChannel( &#039;gr-script&#039; );&lt;br /&gt;
    _grBC.onmessage = function ( e ) {&lt;br /&gt;
      var script = e &amp;amp;&amp;amp; e.data &amp;amp;&amp;amp; e.data.script;&lt;br /&gt;
      if ( script ) { currentScript = script; var sel = document.querySelector( &#039;.gr-script-sel&#039; ); if ( sel ) sel.value = script; applyScript( script ); }&lt;br /&gt;
    };&lt;br /&gt;
  } catch ( e ) {}&lt;br /&gt;
&lt;br /&gt;
  if ( window.mw ) {&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
      setTimeout( function () {&lt;br /&gt;
        var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
        var alreadyTagged = content &amp;amp;&amp;amp; content.querySelector( &#039;[data-deva]&#039; );&lt;br /&gt;
        if ( !alreadyTagged ) { translatableSpans = []; tagTextNodes(); }&lt;br /&gt;
        else {&lt;br /&gt;
          document.querySelectorAll( &#039;.vector-toc .vector-toc-text:not([data-deva])&#039; ).forEach( function ( span ) {&lt;br /&gt;
            var orig = span.textContent; if ( !orig.trim() ) return;&lt;br /&gt;
            span.setAttribute( &#039;data-deva&#039;, orig ); translatableSpans.push( span );&lt;br /&gt;
          } );&lt;br /&gt;
        }&lt;br /&gt;
        if ( currentScript !== &#039;deva&#039; ) applyScript( currentScript );&lt;br /&gt;
        setupToc();&lt;br /&gt;
      }, 150 );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) { document.addEventListener( &#039;DOMContentLoaded&#039;, init ); }&lt;br /&gt;
  else { init(); }&lt;br /&gt;
&lt;br /&gt;
}() );   /* ← end of main IIFE */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Inject &amp;quot;Help&amp;quot; and &amp;quot;About&amp;quot; links into the header ─────────────────&lt;br /&gt;
( function () {&lt;br /&gt;
  function wikiHref( title ) {&lt;br /&gt;
    if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( title );&lt;br /&gt;
    var ap = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
    return ap.replace( &#039;$1&#039;, title );&lt;br /&gt;
  }&lt;br /&gt;
  var linkStyle = [ &#039;color:rgba(255,255,255,0.88)&#039;,&#039;font-size:0.88em&#039;,&#039;font-family:system-ui,sans-serif&#039;,&#039;font-weight:500&#039;,&#039;text-decoration:none&#039;,&#039;padding:4px 10px&#039;,&#039;border-radius:4px&#039;,&#039;margin-right:4px&#039;,&#039;transition:color 0.15s,background 0.15s&#039;,&#039;white-space:nowrap&#039; ].join( &#039;;&#039; );&lt;br /&gt;
  function makeHeaderLink( id, href, label ) {&lt;br /&gt;
    var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
    a.id = id; a.href = href; a.textContent = label; a.style.cssText = linkStyle;&lt;br /&gt;
    a.addEventListener( &#039;mouseover&#039;, function () { this.style.color = &#039;#fff&#039;; this.style.background = &#039;rgba(255,255,255,0.12)&#039;; } );&lt;br /&gt;
    a.addEventListener( &#039;mouseout&#039;,  function () { this.style.color = &#039;rgba(255,255,255,0.88)&#039;; this.style.background = &#039;transparent&#039;; } );&lt;br /&gt;
    return a;&lt;br /&gt;
  }&lt;br /&gt;
  function injectHeaderLinks() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-about-link&#039; ) ) return;&lt;br /&gt;
    var headerEnd = document.querySelector( &#039;.vector-header-end&#039; ) || document.querySelector( &#039;#vector-user-links&#039; ) || document.querySelector( &#039;.mw-header&#039; );&lt;br /&gt;
    if ( !headerEnd ) return;&lt;br /&gt;
    var helpLink  = makeHeaderLink( &#039;gr-help-link&#039;,  wikiHref( &#039;My_wiki:Help&#039;  ), &#039;Help&#039;  );&lt;br /&gt;
    var aboutLink = makeHeaderLink( &#039;gr-about-link&#039;, wikiHref( &#039;My_wiki:About&#039; ), &#039;About&#039; );&lt;br /&gt;
    var ul = document.querySelector( &#039;.vector-user-links&#039; ) || document.querySelector( &#039;#pt-userpage&#039; );&lt;br /&gt;
    if ( ul &amp;amp;&amp;amp; ul.parentNode === headerEnd ) { headerEnd.insertBefore( aboutLink, ul ); headerEnd.insertBefore( helpLink, aboutLink ); }&lt;br /&gt;
    else { headerEnd.appendChild( helpLink ); headerEnd.appendChild( aboutLink ); }&lt;br /&gt;
  }&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) document.addEventListener( &#039;DOMContentLoaded&#039;, injectHeaderLinks );&lt;br /&gt;
  else injectHeaderLinks();&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Main page: by-Grantha / by-Author toggle ──────────────────────&lt;br /&gt;
( function () {&lt;br /&gt;
  function grHomeView( v ) {&lt;br /&gt;
    var gView = document.getElementById( &#039;gr-view-grantha&#039; );&lt;br /&gt;
    var aView = document.getElementById( &#039;gr-view-author&#039; );&lt;br /&gt;
    var gBtn  = document.getElementById( &#039;gr-toggle-grantha&#039; );&lt;br /&gt;
    var aBtn  = document.getElementById( &#039;gr-toggle-author&#039; );&lt;br /&gt;
    if ( !gView || !aView || !gBtn || !aBtn ) return;&lt;br /&gt;
    gView.style.display = ( v === &#039;grantha&#039; ) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
    aView.style.display = ( v === &#039;author&#039;  ) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
    gBtn.className = &#039;gr-toggle-btn&#039; + ( v === &#039;grantha&#039; ? &#039; gr-toggle-active&#039; : &#039;&#039; );&lt;br /&gt;
    aBtn.className = &#039;gr-toggle-btn&#039; + ( v === &#039;author&#039;  ? &#039; gr-toggle-active&#039; : &#039;&#039; );&lt;br /&gt;
    try { localStorage.setItem( &#039;gr_home_view&#039;, v ); } catch ( e ) {}&lt;br /&gt;
  }&lt;br /&gt;
  function initHomeToggle() {&lt;br /&gt;
    var gBtn = document.getElementById( &#039;gr-toggle-grantha&#039; );&lt;br /&gt;
    var aBtn = document.getElementById( &#039;gr-toggle-author&#039; );&lt;br /&gt;
    if ( !gBtn || !aBtn ) return;&lt;br /&gt;
    gBtn.addEventListener( &#039;click&#039;, function () { grHomeView( &#039;grantha&#039; ); } );&lt;br /&gt;
    aBtn.addEventListener( &#039;click&#039;, function () { grHomeView( &#039;author&#039; );  } );&lt;br /&gt;
    [ gBtn, aBtn ].forEach( function ( btn ) { btn.addEventListener( &#039;keydown&#039;, function ( e ) { if ( e.key === &#039;Enter&#039; || e.key === &#039; &#039; ) btn.click(); } ); } );&lt;br /&gt;
    var saved; try { saved = localStorage.getItem( &#039;gr_home_view&#039; ); } catch ( e ) {}&lt;br /&gt;
    if ( saved === &#039;author&#039; ) grHomeView( &#039;author&#039; );&lt;br /&gt;
  }&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) document.addEventListener( &#039;DOMContentLoaded&#039;, initHomeToggle );&lt;br /&gt;
  else initHomeToggle();&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Ullekha reference link handler ─────────────────────────────────&lt;br /&gt;
( function () {&lt;br /&gt;
  function highlightOnArrival() {&lt;br /&gt;
    var search = window.location.search;&lt;br /&gt;
    if ( !search ) return;&lt;br /&gt;
    var m = search.match( /[?&amp;amp;]hlUllekha=([^&amp;amp;]+)/ );&lt;br /&gt;
    if ( !m ) return;&lt;br /&gt;
    var needle;&lt;br /&gt;
    try { needle = decodeURIComponent( m[ 1 ] ); } catch ( e ) { return; }&lt;br /&gt;
    if ( !needle || needle.length &amp;lt; 4 ) return;&lt;br /&gt;
    function doHighlight() {&lt;br /&gt;
      var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
      if ( !content ) return;&lt;br /&gt;
      var snippet = needle.slice( 0, 40 );&lt;br /&gt;
      var found   = false;&lt;br /&gt;
      var spans = content.querySelectorAll( &#039;[data-deva]&#039; );&lt;br /&gt;
      for ( var i = 0; i &amp;lt; spans.length &amp;amp;&amp;amp; !found; i++ ) {&lt;br /&gt;
        var spanEl = spans[ i ];&lt;br /&gt;
        var orig   = spanEl.getAttribute( &#039;data-deva&#039; ) || &#039;&#039;;&lt;br /&gt;
        if ( orig.indexOf( snippet ) === -1 ) continue;&lt;br /&gt;
        var idx    = orig.indexOf( snippet );&lt;br /&gt;
        var hlText = orig.slice( idx, Math.min( idx + needle.length, orig.length ) );&lt;br /&gt;
        var mark   = document.createElement( &#039;mark&#039; );&lt;br /&gt;
        mark.className = &#039;gr-ullekha-highlight&#039;;&lt;br /&gt;
        mark.style.cssText = &#039;background:#fff176;border-radius:2px;padding:0 2px;&#039;;&lt;br /&gt;
        mark.textContent = hlText;&lt;br /&gt;
        var parent = spanEl.parentNode;&lt;br /&gt;
        if ( !parent ) continue;&lt;br /&gt;
        var before = document.createTextNode( orig.slice( 0, idx ) );&lt;br /&gt;
        var after  = document.createTextNode( orig.slice( idx + hlText.length ) );&lt;br /&gt;
        parent.insertBefore( before, spanEl ); parent.insertBefore( mark, spanEl ); parent.insertBefore( after, spanEl ); parent.removeChild( spanEl );&lt;br /&gt;
        setTimeout( function () { mark.scrollIntoView( { behavior: &#039;smooth&#039;, block: &#039;center&#039; } ); }, 100 );&lt;br /&gt;
        found = true;&lt;br /&gt;
      }&lt;br /&gt;
      if ( !found ) {&lt;br /&gt;
        var walker = document.createTreeWalker( content, NodeFilter.SHOW_TEXT );&lt;br /&gt;
        while ( walker.nextNode() &amp;amp;&amp;amp; !found ) {&lt;br /&gt;
          var node = walker.currentNode;&lt;br /&gt;
          var txt  = node.textContent || &#039;&#039;;&lt;br /&gt;
          if ( txt.indexOf( snippet ) === -1 ) continue;&lt;br /&gt;
          var idx2  = txt.indexOf( snippet );&lt;br /&gt;
          var mark2 = document.createElement( &#039;mark&#039; );&lt;br /&gt;
          mark2.className = &#039;gr-ullekha-highlight&#039;;&lt;br /&gt;
          mark2.style.cssText = &#039;background:#fff176;border-radius:2px;padding:0 2px;&#039;;&lt;br /&gt;
          mark2.textContent = txt.slice( idx2, Math.min( idx2 + needle.length, txt.length ) );&lt;br /&gt;
          var p = node.parentNode;&lt;br /&gt;
          p.insertBefore( document.createTextNode( txt.slice( 0, idx2 ) ), node );&lt;br /&gt;
          p.insertBefore( mark2, node );&lt;br /&gt;
          p.insertBefore( document.createTextNode( txt.slice( idx2 + mark2.textContent.length ) ), node );&lt;br /&gt;
          p.removeChild( node );&lt;br /&gt;
          setTimeout( function () { mark2.scrollIntoView( { behavior: &#039;smooth&#039;, block: &#039;center&#039; } ); }, 100 );&lt;br /&gt;
          found = true;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    doHighlight();&lt;br /&gt;
  }&lt;br /&gt;
  function wireUllekhaLinks() {&lt;br /&gt;
    document.querySelectorAll( &#039;.gr-ullekha-ref-link&#039; ).forEach( function ( wrap ) {&lt;br /&gt;
      var anchor = wrap.getAttribute( &#039;data-anchor&#039; ) || &#039;&#039;;&lt;br /&gt;
      var hl     = wrap.getAttribute( &#039;data-hl&#039; )     || &#039;&#039;;&lt;br /&gt;
      var a = wrap.querySelector( &#039;a&#039; );&lt;br /&gt;
      if ( !a ) return;&lt;br /&gt;
      var base = a.href.split( &#039;#&#039; )[ 0 ];&lt;br /&gt;
      var encoded = encodeURIComponent( hl );&lt;br /&gt;
      a.href = base + ( hl ? &#039;?hlUllekha=&#039; + encoded : &#039;&#039; ) + ( anchor ? &#039;#&#039; + anchor : &#039;&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) { document.addEventListener( &#039;DOMContentLoaded&#039;, function () { highlightOnArrival(); wireUllekhaLinks(); } ); }&lt;br /&gt;
  else { highlightOnArrival(); wireUllekhaLinks(); }&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
/* ── Search result highlight ──────────────────────────────────── */&lt;br /&gt;
/* EXACT REPLACEMENT for the search highlight IIFE in MediaWiki:Common.js.&lt;br /&gt;
 * Only changes from the original working version:&lt;br /&gt;
 *  - Mobile bar: full-width terracotta bottom bar instead of floating pill&lt;br /&gt;
 *  - showDismissBar: guard added (if !count return) to prevent empty bar&lt;br /&gt;
 * Everything else (storeQueryForLink, applyHighlight, wrapMatches) is&lt;br /&gt;
 * identical to the version that was working.&lt;br /&gt;
 */&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
  function storeQueryForLink( url, query ) {&lt;br /&gt;
    try {&lt;br /&gt;
      var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
      a.href = url;&lt;br /&gt;
      sessionStorage.setItem( &#039;gr_search_hl&#039;, JSON.stringify({&lt;br /&gt;
        query:    query,&lt;br /&gt;
        pathname: a.pathname&lt;br /&gt;
      }) );&lt;br /&gt;
    } catch(e) {}&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function applyHighlight() {&lt;br /&gt;
    var stored;&lt;br /&gt;
    try {&lt;br /&gt;
      stored = JSON.parse( sessionStorage.getItem( &#039;gr_search_hl&#039; ) || &#039;null&#039; );&lt;br /&gt;
    } catch(e) { return; }&lt;br /&gt;
    if ( !stored || !stored.query ) return;&lt;br /&gt;
&lt;br /&gt;
    var currentPath = window.location.pathname;&lt;br /&gt;
    var storedPath  = stored.pathname || &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
    function normPath(p) { return decodeURIComponent(p).replace(/\/+$/, &#039;&#039;); }&lt;br /&gt;
    if ( storedPath &amp;amp;&amp;amp; normPath(storedPath) !== normPath(currentPath) ) {&lt;br /&gt;
      try { sessionStorage.removeItem( &#039;gr_search_hl&#039; ); } catch(e) {}&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var query = stored.query.trim();&lt;br /&gt;
    if ( !query ) return;&lt;br /&gt;
&lt;br /&gt;
    try { sessionStorage.removeItem( &#039;gr_search_hl&#039; ); } catch(e) {}&lt;br /&gt;
&lt;br /&gt;
    var delays = [ 0, 200, 600 ];&lt;br /&gt;
    delays.forEach( function(ms) {&lt;br /&gt;
      setTimeout( function() {&lt;br /&gt;
        if ( document.querySelector( &#039;.gr-search-hl&#039; ) ) return;&lt;br /&gt;
        highlightText( query );&lt;br /&gt;
      }, ms );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function highlightText( query ) {&lt;br /&gt;
    var content = document.querySelector( &#039;#mw-content-text .mw-parser-output&#039; );&lt;br /&gt;
    if ( !content ) return;&lt;br /&gt;
&lt;br /&gt;
    var raw = query.replace( /^&amp;quot;|&amp;quot;$/g, &#039;&#039; ).trim();&lt;br /&gt;
    if ( !raw ) return;&lt;br /&gt;
&lt;br /&gt;
    var patterns = [];&lt;br /&gt;
    patterns.push( escapeRegex( raw ) );&lt;br /&gt;
    raw.split( /\s+/ ).forEach( function(w) {&lt;br /&gt;
      if ( w.length &amp;gt;= 2 ) patterns.push( escapeRegex( w ) );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    var matched = false;&lt;br /&gt;
    for ( var pi = 0; pi &amp;lt; patterns.length; pi++ ) {&lt;br /&gt;
      var re;&lt;br /&gt;
      try { re = new RegExp( &#039;(&#039; + patterns[pi] + &#039;)&#039;, &#039;gi&#039; ); }&lt;br /&gt;
      catch(e) { continue; }&lt;br /&gt;
      var count = wrapMatches( content, re );&lt;br /&gt;
      if ( count &amp;gt; 0 ) { matched = true; break; }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ( !matched ) return;&lt;br /&gt;
&lt;br /&gt;
    var first = document.querySelector( &#039;.gr-search-hl&#039; );&lt;br /&gt;
    if ( first ) {&lt;br /&gt;
      first.scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; });&lt;br /&gt;
      first.classList.add( &#039;gr-search-hl-pulse&#039; );&lt;br /&gt;
      setTimeout( function() { first.classList.remove( &#039;gr-search-hl-pulse&#039; ); }, 2000 );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    showDismissBar( query );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function escapeRegex( s ) {&lt;br /&gt;
    return s.replace( /[.*+?^${}()|[\]\\]/g, &#039;\\$&amp;amp;&#039; );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function wrapMatches( root, re ) {&lt;br /&gt;
    var count = 0;&lt;br /&gt;
    var walker = document.createTreeWalker(&lt;br /&gt;
      root, NodeFilter.SHOW_TEXT, {&lt;br /&gt;
        acceptNode: function( node ) {&lt;br /&gt;
          var p = node.parentElement;&lt;br /&gt;
          if ( !p ) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
          var tag = p.tagName.toUpperCase();&lt;br /&gt;
          if ( tag === &#039;SCRIPT&#039; || tag === &#039;STYLE&#039; || tag === &#039;NOSCRIPT&#039; ) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
          if ( p.classList.contains( &#039;gr-search-hl&#039; ) ) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
          return NodeFilter.FILTER_ACCEPT;&lt;br /&gt;
        }&lt;br /&gt;
      }, false&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    var nodes = [];&lt;br /&gt;
    var node;&lt;br /&gt;
    while ( ( node = walker.nextNode() ) ) nodes.push( node );&lt;br /&gt;
&lt;br /&gt;
    nodes.forEach( function( textNode ) {&lt;br /&gt;
      var val = textNode.nodeValue;&lt;br /&gt;
      if ( !re.test( val ) ) return;&lt;br /&gt;
      re.lastIndex = 0;&lt;br /&gt;
&lt;br /&gt;
      var frag = document.createDocumentFragment();&lt;br /&gt;
      var last = 0;&lt;br /&gt;
      var m;&lt;br /&gt;
      while ( ( m = re.exec( val ) ) !== null ) {&lt;br /&gt;
        if ( m.index &amp;gt; last ) {&lt;br /&gt;
          frag.appendChild( document.createTextNode( val.slice( last, m.index ) ) );&lt;br /&gt;
        }&lt;br /&gt;
        var span = document.createElement( &#039;span&#039; );&lt;br /&gt;
        span.className = &#039;gr-search-hl&#039;;&lt;br /&gt;
        span.textContent = m[0];&lt;br /&gt;
        frag.appendChild( span );&lt;br /&gt;
        last = m.index + m[0].length;&lt;br /&gt;
        count++;&lt;br /&gt;
      }&lt;br /&gt;
      if ( last &amp;lt; val.length ) {&lt;br /&gt;
        frag.appendChild( document.createTextNode( val.slice( last ) ) );&lt;br /&gt;
      }&lt;br /&gt;
      textNode.parentNode.replaceChild( frag, textNode );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    return count;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function showDismissBar( query ) {&lt;br /&gt;
    var existing = document.getElementById( &#039;gr-hl-bar&#039; );&lt;br /&gt;
    if ( existing ) existing.remove();&lt;br /&gt;
&lt;br /&gt;
    var count = document.querySelectorAll( &#039;.gr-search-hl&#039; ).length;&lt;br /&gt;
    if ( !count ) return;&lt;br /&gt;
&lt;br /&gt;
    var isMob = window.innerWidth &amp;lt; 768 || !!document.getElementById( &#039;mw-mf-viewport&#039; );&lt;br /&gt;
    var bar = document.createElement( &#039;div&#039; );&lt;br /&gt;
    bar.id = &#039;gr-hl-bar&#039;;&lt;br /&gt;
&lt;br /&gt;
    if ( isMob ) {&lt;br /&gt;
      bar.style.cssText = [&lt;br /&gt;
        &#039;position:fixed&#039;, &#039;bottom:0&#039;, &#039;left:0&#039;, &#039;right:0&#039;,&lt;br /&gt;
        &#039;z-index:10200&#039;, &#039;background:#b5451b&#039;, &#039;color:#fff&#039;,&lt;br /&gt;
        &#039;padding:0&#039;, &#039;display:flex&#039;, &#039;align-items:stretch&#039;,&lt;br /&gt;
        &#039;font-family:system-ui,sans-serif&#039;,&lt;br /&gt;
        &#039;box-shadow:0 -2px 12px rgba(0,0,0,0.25)&#039;, &#039;height:56px&#039;&lt;br /&gt;
      ].join(&#039;;&#039;);&lt;br /&gt;
&lt;br /&gt;
      var mbs = &#039;flex:1;display:flex;flex-direction:column;align-items:center;&#039; +&lt;br /&gt;
        &#039;justify-content:center;background:none;border:none;color:#fff;cursor:pointer;&#039; +&lt;br /&gt;
        &#039;padding:6px 4px;font-family:system-ui,sans-serif;font-size:11px;font-weight:500;&#039; +&lt;br /&gt;
        &#039;gap:3px;-webkit-tap-highlight-color:rgba(0,0,0,0.12);&#039;;&lt;br /&gt;
&lt;br /&gt;
      bar.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-prev&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;polyline points=&amp;quot;15 18 9 12 15 6&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;Prev&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-next&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;polyline points=&amp;quot;9 18 15 12 9 6&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;Next&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-results&amp;quot; style=&amp;quot;&#039; + mbs + &#039;flex:1.6;border-left:1px solid rgba(255,255,255,0.2);border-right:1px solid rgba(255,255,255,0.2);&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;circle cx=&amp;quot;11&amp;quot; cy=&amp;quot;11&amp;quot; r=&amp;quot;7&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;16.5&amp;quot; y1=&amp;quot;16.5&amp;quot; x2=&amp;quot;22&amp;quot; y2=&amp;quot;22&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;&#039; + count + &#039; match&#039; + (count===1?&#039;&#039;:&#039;es&#039;) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-dismiss&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;line x1=&amp;quot;18&amp;quot; y1=&amp;quot;6&amp;quot; x2=&amp;quot;6&amp;quot; y2=&amp;quot;18&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;6&amp;quot; y1=&amp;quot;6&amp;quot; x2=&amp;quot;18&amp;quot; y2=&amp;quot;18&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;Close&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
    } else {&lt;br /&gt;
      bar.style.cssText = [&lt;br /&gt;
        &#039;position:fixed&#039;, &#039;bottom:0&#039;, &#039;left:0&#039;, &#039;right:0&#039;, &#039;z-index:10200&#039;,&lt;br /&gt;
        &#039;background:#b5451b&#039;, &#039;color:#fff&#039;, &#039;padding:10px 16px&#039;,&lt;br /&gt;
        &#039;display:flex&#039;, &#039;align-items:center&#039;, &#039;justify-content:space-between&#039;,&lt;br /&gt;
        &#039;font-family:system-ui,sans-serif&#039;, &#039;font-size:14px&#039;,&lt;br /&gt;
        &#039;box-shadow:0 -2px 8px rgba(0,0,0,0.2)&#039;&lt;br /&gt;
      ].join(&#039;;&#039;);&lt;br /&gt;
&lt;br /&gt;
      var nav = document.createElement( &#039;div&#039; );&lt;br /&gt;
      nav.style.cssText = &#039;display:flex;align-items:center;gap:12px;&#039;;&lt;br /&gt;
      nav.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;🔍 &amp;lt;strong&amp;gt;&#039; + escHtml(query) + &#039;&amp;lt;/strong&amp;gt; — &#039; + count + &#039; match&#039; + (count===1?&#039;&#039;:&#039;es&#039;) + &#039;&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-prev&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;↑ Prev&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-next&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;↓ Next&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-results&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;← Results&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
      bar.appendChild( nav );&lt;br /&gt;
&lt;br /&gt;
      var db = document.createElement( &#039;button&#039; );&lt;br /&gt;
      db.id = &#039;gr-hl-dismiss&#039;; db.textContent = &#039;✕ Close&#039;;&lt;br /&gt;
      db.style.cssText = &#039;background:rgba(255,255,255,0.15);border:none;color:#fff;padding:4px 12px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&#039;;&lt;br /&gt;
      bar.appendChild( db );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    document.body.appendChild( bar );&lt;br /&gt;
&lt;br /&gt;
    var hlEls = Array.from( document.querySelectorAll( &#039;.gr-search-hl&#039; ) );&lt;br /&gt;
    var current = 0;&lt;br /&gt;
&lt;br /&gt;
    function goTo( idx ) {&lt;br /&gt;
      hlEls.forEach( function(el) { el.classList.remove( &#039;gr-search-hl-current&#039; ); } );&lt;br /&gt;
      current = ( ( idx % hlEls.length ) + hlEls.length ) % hlEls.length;&lt;br /&gt;
      hlEls[ current ].classList.add( &#039;gr-search-hl-current&#039; );&lt;br /&gt;
      hlEls[ current ].scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function dismiss() { clearHighlights(); bar.remove(); }&lt;br /&gt;
&lt;br /&gt;
    var nb = document.getElementById( &#039;gr-hl-next&#039; );&lt;br /&gt;
    var pb = document.getElementById( &#039;gr-hl-prev&#039; );&lt;br /&gt;
    var rb = document.getElementById( &#039;gr-hl-results&#039; );&lt;br /&gt;
    var db2 = document.getElementById( &#039;gr-hl-dismiss&#039; );&lt;br /&gt;
    if ( nb ) nb.onclick = function() { goTo( current + 1 ); };&lt;br /&gt;
    if ( pb ) pb.onclick = function() { goTo( current - 1 ); };&lt;br /&gt;
    if ( db2 ) db2.onclick = dismiss;&lt;br /&gt;
    if ( rb ) rb.onclick = function() {&lt;br /&gt;
      bar.remove(); clearHighlights();&lt;br /&gt;
      if ( window.showSearchDialog ) window.showSearchDialog( query );&lt;br /&gt;
    };&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function clearHighlights() {&lt;br /&gt;
    document.querySelectorAll( &#039;.gr-search-hl&#039; ).forEach( function( span ) {&lt;br /&gt;
      var p = span.parentNode; if ( !p ) return;&lt;br /&gt;
      while ( span.firstChild ) p.insertBefore( span.firstChild, span );&lt;br /&gt;
      p.removeChild( span );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function escHtml( s ) {&lt;br /&gt;
    return String(s).replace(/&amp;amp;/g,&#039;&amp;amp;amp;&#039;).replace(/&amp;lt;/g,&#039;&amp;amp;lt;&#039;).replace(/&amp;gt;/g,&#039;&amp;amp;gt;&#039;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function injectHighlightCSS() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-hl-css&#039; ) ) return;&lt;br /&gt;
    var s = document.createElement( &#039;style&#039; );&lt;br /&gt;
    s.id = &#039;gr-hl-css&#039;;&lt;br /&gt;
    s.textContent = [&lt;br /&gt;
      &#039;.gr-search-hl{background:#fff176;color:#1a1a1a;border-radius:2px;padding:0 1px;box-shadow:0 0 0 1px rgba(181,69,27,0.25);}&#039;,&lt;br /&gt;
      &#039;.gr-search-hl-current{background:#ffb300!important;box-shadow:0 0 0 2px #b5451b!important;}&#039;,&lt;br /&gt;
      &#039;@keyframes gr-hl-pulse{0%{background:#ffb300;}50%{background:#fff176;}100%{background:#fff176;}}&#039;,&lt;br /&gt;
      &#039;.gr-search-hl-pulse{animation:gr-hl-pulse 1.2s ease 2;}&#039;,&lt;br /&gt;
    ].join(&#039;&#039;);&lt;br /&gt;
    document.head.appendChild( s );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  injectHighlightCSS();&lt;br /&gt;
&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) {&lt;br /&gt;
    document.addEventListener( &#039;DOMContentLoaded&#039;, applyHighlight );&lt;br /&gt;
  } else {&lt;br /&gt;
    applyHighlight();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ( window.mw ) {&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function() {&lt;br /&gt;
      setTimeout( applyHighlight, 100 );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  window.grStoreSearchHL = storeQueryForLink;&lt;br /&gt;
&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
/* ═══════════════════════════════════════════════════════════════&lt;br /&gt;
   Mobile addon — only runs on Minerva (mobile) skin&lt;br /&gt;
   ═══════════════════════════════════════════════════════════════ */&lt;br /&gt;
( function () {&lt;br /&gt;
  if ( !document.body.classList.contains( &#039;skin-minerva&#039; ) ) return;&lt;br /&gt;
  function injectCSS() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-mob-css&#039; ) ) return;&lt;br /&gt;
    var s = document.createElement( &#039;style&#039; );&lt;br /&gt;
    s.id = &#039;gr-mob-css&#039;;&lt;br /&gt;
    s.textContent =&lt;br /&gt;
      &#039;body,#mw-mf-viewport,#mw-mf-page-center{padding-top:0!important;margin-top:0!important;}&#039; +&lt;br /&gt;
      &#039;html,body,#mw-mf-viewport,#mw-mf-page-center{overflow-x:hidden!important;max-width:100vw!important;}&#039; +&lt;br /&gt;
      &#039;header.header-container{background:#b5451b!important;position:sticky!important;top:0!important;z-index:300!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header{background:#b5451b!important;min-height:54px!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header .search-toggle,.minerva-header .minerva-user-notifications{display:none!important;}&#039; +&lt;br /&gt;
      &#039;.branding-box a{display:flex!important;align-items:center!important;text-decoration:none!important;max-width:calc(100vw - 80px)!important;}&#039; +&lt;br /&gt;
      &#039;.branding-box a::before{content:&amp;quot;&amp;quot;;display:block;width:30px;height:30px;flex-shrink:0;background:url(&amp;quot;/favicon.png&amp;quot;) center/contain no-repeat;margin-right:8px;}&#039; +&lt;br /&gt;
      &#039;.branding-box a span{color:#fff!important;font-size:16px!important;font-weight:700!important;font-family:system-ui,sans-serif!important;line-height:1.2!important;flex:1 1 auto!important;min-width:0!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header svg path,.minerva-header svg rect,.minerva-header svg circle{fill:#fff!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header label{color:#fff!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-tabs,.mw-portlet-associated-pages,.page-actions-menu,#page-secondary-actions,.last-modified-bar,.minerva-anon-talk-link{display:none!important;}&#039; +&lt;br /&gt;
      &#039;#gr-mob-menu-items{display:block!important;}&#039; +&lt;br /&gt;
      &#039;.mw-footer.minerva-footer,.footer-places,.footer-info,.minerva-footer-logo,#footer-places-about,#footer-places-disclaimers,#footer-places-privacy{display:none!important;}&#039; +&lt;br /&gt;
      &#039;#gr-static-bar{position:sticky!important;top:54px!important;z-index:200!important;}&#039; +&lt;br /&gt;
      &#039;.mf-section-0,.mf-section-1,.mf-section-2,.mf-section-3,.mf-section-4,.mf-section-5,.mf-section-6,.mf-section-7,.mf-section-8,.mf-section-9,.mf-section-10{display:block!important;visibility:visible!important;}&#039; +&lt;br /&gt;
      &#039;.collapsible-block{display:block!important;}&#039; +&lt;br /&gt;
      &#039;.section-heading .indicator,.collapsible-heading .indicator{display:none!important;}&#039; +&lt;br /&gt;
      &#039;.section-heading,.collapsible-heading{pointer-events:none!important;}&#039; +&lt;br /&gt;
      &#039;.gr-home-grid{flex-direction:column!important;flex-wrap:nowrap!important;gap:12px!important;width:100%!important;}&#039; +&lt;br /&gt;
      &#039;.gr-home-card{width:100%!important;max-width:100%!important;min-width:unset!important;box-sizing:border-box!important;flex:none!important;}&#039; +&lt;br /&gt;
      &#039;.gr-home-toggle{flex-wrap:wrap!important;}&#039; +&lt;br /&gt;
      &#039;.mw-parser-output{font-size:18px!important;line-height:1.8!important;}&#039; +&lt;br /&gt;
      &#039;.mw-parser-output h2,.mw-parser-output h3{width:100%!important;}&#039; +&lt;br /&gt;
      &#039;.bhashyam-block{margin-left:8px!important;}&#039; +&lt;br /&gt;
      &#039;#footer,.mw-footer,.catlinks,#catlinks{display:none!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-panel{position:fixed!important;top:0!important;left:0!important;bottom:0!important;width:82vw!important;max-width:340px!important;background:#fff!important;z-index:10400!important;box-shadow:4px 0 28px rgba(0,0,0,0.22)!important;overflow-y:auto!important;padding:0 0 40px!important;transform:translateX(-110%)!important;transition:transform 0.26s cubic-bezier(0.4,0,0.2,1)!important;display:block!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-panel.open{transform:translateX(0)!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-backdrop{display:none!important;position:fixed!important;inset:0!important;background:rgba(0,0,0,0.4)!important;z-index:10399!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-backdrop.open{display:block!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-header{position:sticky!important;top:0!important;background:#fff!important;display:flex!important;align-items:center!important;justify-content:space-between!important;padding:16px 16px 12px!important;border-bottom:1px solid #f0ebe6!important;z-index:1!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-title{font-size:13px!important;font-weight:700!important;text-transform:uppercase!important;letter-spacing:0.08em!important;color:#b5451b!important;font-family:system-ui,sans-serif!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-close{background:none!important;border:none!important;font-size:22px!important;color:#999!important;cursor:pointer!important;padding:4px 8px!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-body{padding:12px 16px!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-body a{display:block!important;font-size:16px!important;line-height:1.6!important;color:#2c1810!important;text-decoration:none!important;padding:8px 0!important;border-bottom:1px solid #f5f0ed!important;}&#039;;&lt;br /&gt;
    document.head.appendChild( s );&lt;br /&gt;
  }&lt;br /&gt;
  function expandSections() {&lt;br /&gt;
    document.querySelectorAll( &#039;[class*=&amp;quot;mf-section-&amp;quot;], .collapsible-block&#039; ).forEach( function ( el ) { el.removeAttribute( &#039;hidden&#039; ); el.style.setProperty( &#039;display&#039;, &#039;block&#039;, &#039;important&#039; ); el.style.setProperty( &#039;visibility&#039;, &#039;visible&#039;, &#039;important&#039; ); el.removeAttribute( &#039;aria-hidden&#039; ); } );&lt;br /&gt;
    document.querySelectorAll( &#039;.section-heading, .collapsible-heading&#039; ).forEach( function ( el ) { el.setAttribute( &#039;aria-expanded&#039;, &#039;true&#039; ); el.style.setProperty( &#039;pointer-events&#039;, &#039;none&#039;, &#039;important&#039; ); } );&lt;br /&gt;
  }&lt;br /&gt;
  function watchSections() {&lt;br /&gt;
    var t = null;&lt;br /&gt;
    var obs = new MutationObserver( function ( ms ) { if ( ms.some( function(m){ return m.attributeName === &#039;hidden&#039;; } ) ) { clearTimeout(t); t = setTimeout( expandSections, 30 ); } } );&lt;br /&gt;
    obs.observe( document.querySelector( &#039;#mw-content-text&#039; ) || document.body, { subtree:true, attributes:true, attributeFilter:[&#039;hidden&#039;,&#039;aria-hidden&#039;] } );&lt;br /&gt;
  }&lt;br /&gt;
  function watchBodyPadding() {&lt;br /&gt;
    new MutationObserver( function () { if ( document.body.style.paddingTop &amp;amp;&amp;amp; document.body.style.paddingTop !== &#039;0px&#039; ) document.body.style.paddingTop = &#039;&#039;; } ).observe( document.body, { attributes:true, attributeFilter:[&#039;style&#039;] } );&lt;br /&gt;
  }&lt;br /&gt;
  function injectMenuLinks() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-mob-menu-items&#039; ) ) return;&lt;br /&gt;
    var navDrawer = document.querySelector( &#039;.navigation-drawer&#039; );&lt;br /&gt;
    if ( !navDrawer ) return;&lt;br /&gt;
    var wrap = document.createElement( &#039;div&#039; ); wrap.id = &#039;gr-mob-menu-items&#039;; wrap.style.cssText = &#039;width:100%;background:#fff;margin-top:8px;&#039;;&lt;br /&gt;
    var itemStyle = &#039;display:flex;align-items:center;gap:14px;padding:15px 20px;font-size:16px;color:#2c1810;text-decoration:none;font-family:system-ui,sans-serif;border-bottom:1px solid #f0ebe6;background:#fff;&#039;;&lt;br /&gt;
    function makeItem( href, label ) { var a = document.createElement( &#039;a&#039; ); a.href = href; a.style.cssText = itemStyle; a.innerHTML = &#039;&amp;lt;span&amp;gt;&#039; + label + &#039;&amp;lt;/span&amp;gt;&#039;; return a; }&lt;br /&gt;
    wrap.appendChild( makeItem( &#039;/Main_Page&#039;, &#039;Home&#039; ) );&lt;br /&gt;
    wrap.appendChild( makeItem( &#039;/My_wiki:Help&#039;, &#039;Help&#039; ) );&lt;br /&gt;
    wrap.appendChild( makeItem( &#039;/My_wiki:About&#039;, &#039;About&#039; ) );&lt;br /&gt;
    var userName = window.mw ? mw.config.get( &#039;wgUserName&#039; ) : null;&lt;br /&gt;
    if ( userName ) {&lt;br /&gt;
      wrap.appendChild( makeItem( ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) ? mw.util.getUrl( &#039;Special:Profile&#039; ) : &#039;/Special:Profile&#039;, &#039;Profile&#039; ) );&lt;br /&gt;
      var la = document.querySelector( &#039;a[href*=&amp;quot;action=logout&amp;quot;]&#039; );&lt;br /&gt;
      wrap.appendChild( makeItem( la ? la.href : &#039;/index.php?title=Special:UserLogout&#039;, &#039;Log out&#039; ) );&lt;br /&gt;
    }&lt;br /&gt;
    else wrap.appendChild( makeItem( &#039;/index.php?title=Special:UserLogin&#039;, &#039;Log in&#039; ) );&lt;br /&gt;
    var pageLeft = document.getElementById( &#039;mw-mf-page-left&#039; );&lt;br /&gt;
    if ( pageLeft ) { while ( pageLeft.firstChild ) pageLeft.removeChild( pageLeft.firstChild ); pageLeft.style.removeProperty( &#039;display&#039; ); pageLeft.appendChild( wrap ); }&lt;br /&gt;
    else navDrawer.appendChild( wrap );&lt;br /&gt;
  }&lt;br /&gt;
  var _tocDone = false;&lt;br /&gt;
  function initToc() {&lt;br /&gt;
    if ( _tocDone ) return;&lt;br /&gt;
    var tocList = document.querySelector( &#039;.vector-toc-contents, .vector-toc .vector-toc-list&#039; );&lt;br /&gt;
    if ( !tocList || !tocList.querySelector( &#039;li&#039; ) ) return;&lt;br /&gt;
    _tocDone = true;&lt;br /&gt;
    var bd = document.createElement( &#039;div&#039; ); bd.className = &#039;gr-mob-toc-backdrop&#039;; document.body.appendChild( bd );&lt;br /&gt;
    var panel = document.createElement( &#039;div&#039; ); panel.className = &#039;gr-mob-toc-panel&#039;;&lt;br /&gt;
    var hdr = document.createElement( &#039;div&#039; ); hdr.className = &#039;gr-mob-toc-header&#039;;&lt;br /&gt;
    var ttl = document.createElement( &#039;div&#039; ); ttl.className = &#039;gr-mob-toc-title&#039;; ttl.textContent = &#039;विषयसूची&#039;;&lt;br /&gt;
    var cls = document.createElement( &#039;button&#039; ); cls.className = &#039;gr-mob-toc-close&#039;; cls.textContent = &#039;✕&#039;;&lt;br /&gt;
    hdr.appendChild( ttl ); hdr.appendChild( cls ); panel.appendChild( hdr );&lt;br /&gt;
    var body = document.createElement( &#039;div&#039; ); body.className = &#039;gr-mob-toc-body&#039;; body.appendChild( tocList.cloneNode( true ) ); panel.appendChild( body ); document.body.appendChild( panel );&lt;br /&gt;
    var btn = document.createElement( &#039;button&#039; ); btn.id = &#039;gr-mob-toc-btn&#039;; btn.innerHTML = &#039;☰ &amp;amp;nbsp;Contents&#039;;&lt;br /&gt;
    btn.style.cssText = &#039;position:fixed;bottom:148px;left:16px;z-index:9100;background:#fff;border:1.5px solid #b5451b;border-radius:24px;padding:10px 16px;font-size:15px;font-family:system-ui,sans-serif;color:#b5451b;font-weight:600;box-shadow:0 3px 14px rgba(0,0,0,0.15);cursor:pointer;&#039;;&lt;br /&gt;
    document.body.appendChild( btn );&lt;br /&gt;
    function open()  { panel.classList.add(&#039;open&#039;); bd.classList.add(&#039;open&#039;); document.body.style.overflow=&#039;hidden&#039;; }&lt;br /&gt;
    function close() { panel.classList.remove(&#039;open&#039;); bd.classList.remove(&#039;open&#039;); document.body.style.overflow=&#039;&#039;; }&lt;br /&gt;
    btn.onclick = open; cls.onclick = close; bd.onclick = close;&lt;br /&gt;
    body.querySelectorAll(&#039;a&#039;).forEach(function(a){ a.onclick = close; });&lt;br /&gt;
  }&lt;br /&gt;
  function injectMoolaUllekhaLinks() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-mob-doc-nav&#039; ) ) return;&lt;br /&gt;
    var pageName = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039; ) ) || &#039;&#039;;&lt;br /&gt;
    if ( pageName === &#039;Main_Page&#039; || !pageName ) return;&lt;br /&gt;
    function wikiUrl( slug ) { if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( slug ); return ( ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039; ).replace( &#039;$1&#039;, encodeURIComponent( slug ).replace( /%2F/g, &#039;/&#039; ) ); }&lt;br /&gt;
    var teekaPage = document.querySelector( &#039;.gr-teeka-page&#039; );&lt;br /&gt;
    var primarySlug = teekaPage ? ( teekaPage.getAttribute( &#039;data-primary&#039; ) || pageName.split(&#039;/&#039;)[0] ) : pageName.split(&#039;/&#039;)[0];&lt;br /&gt;
    var docTitleEl = document.querySelector( &#039;.gr-doc-title&#039; );&lt;br /&gt;
    var hasMoolaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-moola&#039; ) === &#039;1&#039;;&lt;br /&gt;
    var hasUllekhaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-ullekha&#039; ) === &#039;1&#039;;&lt;br /&gt;
    var showMoolam = !!teekaPage || hasMoolaPage, showUllekha = hasUllekhaPage || !!teekaPage;&lt;br /&gt;
    if ( !showMoolam &amp;amp;&amp;amp; !showUllekha ) return;&lt;br /&gt;
    var nav = document.createElement( &#039;div&#039; ); nav.id = &#039;gr-mob-doc-nav&#039;;&lt;br /&gt;
    nav.style.cssText = &#039;display:flex;gap:10px;padding:10px 16px 8px;background:#fdf8f5;border-bottom:1px solid #f0e0d6;font-family:system-ui,sans-serif;&#039;;&lt;br /&gt;
    function makeLink( href, label ) { var a = document.createElement( &#039;a&#039; ); a.href = href; a.textContent = label; a.style.cssText = &#039;display:inline-flex;align-items:center;padding:5px 16px;border-radius:20px;background:#fff;border:1.5px solid #e8cfc4;color:#b5451b;font-size:14px;font-weight:600;text-decoration:none;&#039;; return a; }&lt;br /&gt;
    if ( teekaPage ) nav.appendChild( makeLink( wikiUrl( primarySlug ), &#039;मूल&#039; ) );&lt;br /&gt;
    else if ( hasMoolaPage ) nav.appendChild( makeLink( wikiUrl( primarySlug + &#039;/Moola&#039; ), &#039;मूलम्&#039; ) );&lt;br /&gt;
    if ( showUllekha ) nav.appendChild( makeLink( wikiUrl( primarySlug + &#039;/Ullekha&#039; ), &#039;उल्लेख&#039; ) );&lt;br /&gt;
    var h1 = document.getElementById( &#039;firstHeading&#039; ) || document.querySelector( &#039;.page-heading, h1.firstHeading, .mw-first-heading&#039; );&lt;br /&gt;
    if ( h1 &amp;amp;&amp;amp; h1.parentNode ) h1.parentNode.insertBefore( nav, h1.nextSibling );&lt;br /&gt;
    else { var ct = document.getElementById( &#039;mw-content-text&#039; ); if ( ct ) ct.insertBefore( nav, ct.firstChild ); }&lt;br /&gt;
  }&lt;br /&gt;
  injectCSS(); watchBodyPadding();&lt;br /&gt;
  function boot() { expandSections(); watchSections(); injectMenuLinks(); injectMoolaUllekhaLinks(); [100,400,900,1800].forEach(function(ms){ setTimeout(expandSections,ms); }); setTimeout(initToc,700); }&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) document.addEventListener( &#039;DOMContentLoaded&#039;, boot );&lt;br /&gt;
  else boot();&lt;br /&gt;
  if ( window.mw ) mw.hook( &#039;wikipage.content&#039; ).add(function(){ setTimeout(function(){ expandSections(); injectMenuLinks(); injectMoolaUllekhaLinks(); initToc(); },300); });&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
  mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
    setTimeout( function () {&lt;br /&gt;
      var blocks = document.querySelectorAll( &#039;.collapsible-block, .toggle-list&#039; );&lt;br /&gt;
      Array.prototype.forEach.call( blocks, function ( el ) { if ( !el.parentNode ) { try { el.remove(); } catch(e) {} } } );&lt;br /&gt;
    }, 0 );&lt;br /&gt;
  } );&lt;br /&gt;
  if ( mw.config.get( &#039;wgPageName&#039; ) !== &#039;Main_Page&#039; ) return;&lt;br /&gt;
  mw.loader.using( &#039;mediawiki.util&#039; ).done( function () {&lt;br /&gt;
    $( function () { applyHomeToggleOffset(); window.addEventListener( &#039;resize&#039;, applyHomeToggleOffset, { passive: true } ); setTimeout( applyHomeToggleOffset, 300 ); setTimeout( applyHomeToggleOffset, 800 ); } );&lt;br /&gt;
  } );&lt;br /&gt;
  function applyHomeToggleOffset() {&lt;br /&gt;
    var bar = document.getElementById( &#039;gr-static-bar&#039; ); if ( !bar ) return;&lt;br /&gt;
    var barBottom = Math.round( bar.getBoundingClientRect().bottom );&lt;br /&gt;
    [ document.getElementById(&#039;gr-home&#039;), document.getElementById(&#039;gr-home-toggle&#039;), document.querySelector(&#039;#mw-content-text .mw-parser-output &amp;gt; .gr-home, #mw-content-text .mw-parser-output &amp;gt; *:first-child&#039;) ].forEach( function(el){ if(el) el.style.scrollMarginTop=(barBottom+4)+&#039;px&#039;; } );&lt;br /&gt;
    var isMob = window.innerWidth &amp;lt; 768 || !!document.getElementById( &#039;mw-mf-viewport&#039; );&lt;br /&gt;
    if ( isMob ) { var toggleEl = document.getElementById(&#039;gr-home-toggle&#039;); if ( toggleEl ) { var tr = toggleEl.getBoundingClientRect(); if ( tr.top &amp;lt; barBottom ) { var cp = parseInt(window.getComputedStyle(document.body).paddingTop,10)||0; document.body.style.paddingTop=(cp+(barBottom-tr.top)+4)+&#039;px&#039;; } } }&lt;br /&gt;
  }&lt;br /&gt;
  $( function () {&lt;br /&gt;
    var $toggle=$(&#039;#gr-home-toggle&#039;),$viewG=$(&#039;#gr-view-grantha&#039;),$viewA=$(&#039;#gr-view-author&#039;),$btnG=$(&#039;#gr-toggle-grantha&#039;),$btnA=$(&#039;#gr-toggle-author&#039;);&lt;br /&gt;
    if(!$toggle.length||!$viewG.length||!$viewA.length)return; if($toggle.data(&#039;gr-wired&#039;))return; $toggle.data(&#039;gr-wired&#039;,true);&lt;br /&gt;
    function showView(which){ if(which===&#039;grantha&#039;){$viewG.show();$viewA.hide();$btnG.addClass(&#039;gr-toggle-active&#039;);$btnA.removeClass(&#039;gr-toggle-active&#039;);}else{$viewA.show();$viewG.hide();$btnA.addClass(&#039;gr-toggle-active&#039;);$btnG.removeClass(&#039;gr-toggle-active&#039;);} try{localStorage.setItem(&#039;grantha_home_tab&#039;,which);}catch(e){} }&lt;br /&gt;
    $btnG.on(&#039;click keydown&#039;,function(e){if(e.type===&#039;keydown&#039;&amp;amp;&amp;amp;e.key!==&#039;Enter&#039;&amp;amp;&amp;amp;e.key!==&#039; &#039;)return;showView(&#039;grantha&#039;);});&lt;br /&gt;
    $btnA.on(&#039;click keydown&#039;,function(e){if(e.type===&#039;keydown&#039;&amp;amp;&amp;amp;e.key!==&#039;Enter&#039;&amp;amp;&amp;amp;e.key!==&#039; &#039;)return;showView(&#039;author&#039;);});&lt;br /&gt;
    try{var saved=localStorage.getItem(&#039;grantha_home_tab&#039;);if(saved===&#039;author&#039;)showView(&#039;author&#039;);else showView(&#039;grantha&#039;);}catch(e){showView(&#039;grantha&#039;);}&lt;br /&gt;
  } );&lt;br /&gt;
}() );&lt;br /&gt;
// ── Replace MediaWiki user links with a single username dropdown (Profile + Logout) ──&lt;br /&gt;
( function () {&lt;br /&gt;
  function wikiHref( title ) {&lt;br /&gt;
    if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( title );&lt;br /&gt;
    var ap = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
    return ap.replace( &#039;$1&#039;, title );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function buildLogoutForm( token ) {&lt;br /&gt;
    token = token || &#039;&#039;;&lt;br /&gt;
    var esc = String( token ).replace( /&amp;quot;/g, &#039;&amp;amp;quot;&#039; );&lt;br /&gt;
    var script = ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.wikiScript ) ? mw.util.wikiScript() : &#039;/index.php&#039;;&lt;br /&gt;
    var form = document.createElement( &#039;form&#039; );&lt;br /&gt;
    form.method = &#039;post&#039;;&lt;br /&gt;
    form.action = script + &#039;?title=Special:UserLogout&#039;;&lt;br /&gt;
    form.style.display = &#039;none&#039;;&lt;br /&gt;
    form.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;wpEditToken&amp;quot; value=&amp;quot;&#039; + esc + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;title&amp;quot; value=&amp;quot;Special:UserLogout&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;returnto&amp;quot; value=&amp;quot;Main Page&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
    document.body.appendChild( form );&lt;br /&gt;
    return form;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function injectUserDropdown() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-user-dropdown&#039; ) ) return;&lt;br /&gt;
&lt;br /&gt;
    var userName = window.mw ? mw.config.get( &#039;wgUserName&#039; ) : null;&lt;br /&gt;
    var isAnon = !userName || ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgUserId&#039; ) === null );&lt;br /&gt;
&lt;br /&gt;
    var container = document.querySelector( &#039;.vector-user-links-main&#039; )&lt;br /&gt;
                 || document.querySelector( &#039;.vector-user-links&#039; );&lt;br /&gt;
    if ( !container ) return;&lt;br /&gt;
&lt;br /&gt;
    // Logged-out: show a single Login/Signup link, nothing else&lt;br /&gt;
    if ( isAnon ) {&lt;br /&gt;
        // Remove MediaWiki&#039;s native account links so only our button shows&lt;br /&gt;
        [ &#039;#pt-createaccount&#039;, &#039;#pt-login&#039;, &#039;#pt-anoncontribs&#039;,&lt;br /&gt;
          &#039;#pt-anontalk&#039;, &#039;#pt-anonuserpage&#039; ].forEach( function ( sel ) {&lt;br /&gt;
            document.querySelectorAll( sel ).forEach( function ( el ) {&lt;br /&gt;
                if ( el &amp;amp;&amp;amp; el.parentNode ) el.parentNode.removeChild( el );&lt;br /&gt;
            } );&lt;br /&gt;
        } );&lt;br /&gt;
        if ( document.getElementById( &#039;gr-login-link&#039; ) ) return;&lt;br /&gt;
        var loginA = document.createElement( &#039;a&#039; );&lt;br /&gt;
        loginA.id = &#039;gr-login-link&#039;;&lt;br /&gt;
        loginA.href = wikiHref( &#039;Special:UserLogin&#039; );&lt;br /&gt;
        loginA.textContent = &#039;Login/Signup&#039;;&lt;br /&gt;
        loginA.style.cssText = &#039;color:#fff;font-size:0.9em;font-weight:500;&#039; +&lt;br /&gt;
            &#039;text-decoration:none;padding:6px 12px;border-radius:6px;&#039; +&lt;br /&gt;
            &#039;background:rgba(255,255,255,0.12);white-space:nowrap;&#039;;&lt;br /&gt;
        loginA.addEventListener( &#039;mouseover&#039;, function(){ this.style.background=&#039;rgba(255,255,255,0.2)&#039;; } );&lt;br /&gt;
        loginA.addEventListener( &#039;mouseout&#039;,  function(){ this.style.background=&#039;rgba(255,255,255,0.12)&#039;; } );&lt;br /&gt;
        container.appendChild( loginA );&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Logout token (csrf token works for logout in modern MW)&lt;br /&gt;
    var token = ( window.mw &amp;amp;&amp;amp; mw.user &amp;amp;&amp;amp; mw.user.tokens )&lt;br /&gt;
      ? mw.user.tokens.get( &#039;csrfToken&#039; ) : &#039;+\\&#039;;&lt;br /&gt;
&lt;br /&gt;
    var wrap = document.createElement( &#039;div&#039; );&lt;br /&gt;
    wrap.id = &#039;gr-user-dropdown&#039;;&lt;br /&gt;
    wrap.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;button id=&amp;quot;gr-user-trigger&amp;quot; type=&amp;quot;button&amp;quot; aria-haspopup=&amp;quot;true&amp;quot; aria-expanded=&amp;quot;false&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;&#039; + (userName.replace(/&amp;lt;/g,&#039;&amp;amp;lt;&#039;)) + &#039;&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span class=&amp;quot;gr-caret&amp;quot;&amp;gt;▾&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;div id=&amp;quot;gr-user-menu&amp;quot; role=&amp;quot;menu&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;&#039; + wikiHref( &#039;Special:Profile&#039; ) + &#039;&amp;quot; role=&amp;quot;menuitem&amp;quot;&amp;gt;Profile&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;#&amp;quot; id=&amp;quot;gr-logout-link&amp;quot; role=&amp;quot;menuitem&amp;quot;&amp;gt;Log out&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
    container.appendChild( wrap );&lt;br /&gt;
&lt;br /&gt;
    var trigger = document.getElementById( &#039;gr-user-trigger&#039; );&lt;br /&gt;
    var menu    = document.getElementById( &#039;gr-user-menu&#039; );&lt;br /&gt;
&lt;br /&gt;
    trigger.addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      e.stopPropagation();&lt;br /&gt;
      var open = menu.classList.toggle( &#039;gr-open&#039; );&lt;br /&gt;
      trigger.setAttribute( &#039;aria-expanded&#039;, open ? &#039;true&#039; : &#039;false&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    document.addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      if ( !wrap.contains( e.target ) ) {&lt;br /&gt;
        menu.classList.remove( &#039;gr-open&#039; );&lt;br /&gt;
        trigger.setAttribute( &#039;aria-expanded&#039;, &#039;false&#039; );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    document.getElementById( &#039;gr-logout-link&#039; ).addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      e.preventDefault();&lt;br /&gt;
      // Fetch a fresh CSRF token at click time (more reliable than at load time)&lt;br /&gt;
      if ( window.mw &amp;amp;&amp;amp; mw.user &amp;amp;&amp;amp; mw.user.tokens ) {&lt;br /&gt;
        var t = mw.user.tokens.get( &#039;csrfToken&#039; );&lt;br /&gt;
        if ( t ) { buildLogoutForm( t ).submit(); return; }&lt;br /&gt;
      }&lt;br /&gt;
      // Fallback: use the API to get a logout token, then submit&lt;br /&gt;
      if ( window.mw &amp;amp;&amp;amp; mw.Api ) {&lt;br /&gt;
        new mw.Api().postWithToken( &#039;csrf&#039;, { action: &#039;logout&#039; } )&lt;br /&gt;
          .done( function () { location.href = &#039;/Main_Page&#039;; } )&lt;br /&gt;
          .fail( function () { location.href = &#039;/index.php?title=Special:UserLogout&#039;; } );&lt;br /&gt;
      } else {&lt;br /&gt;
        location.href = &#039;/index.php?title=Special:UserLogout&#039;;&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) {&lt;br /&gt;
    document.addEventListener( &#039;DOMContentLoaded&#039;, injectUserDropdown );&lt;br /&gt;
  } else {&lt;br /&gt;
    injectUserDropdown();&lt;br /&gt;
  }&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.js&amp;diff=6212</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.js&amp;diff=6212"/>
		<updated>2026-06-12T17:34:23Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: Undo revision 6211 by Vaishnavi (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* MediaWiki:Common.js — grantha.io  (v7) */&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
  var LS_SCRIPT_KEY = &#039;grantha_reader_script&#039;;&lt;br /&gt;
  var currentScript = &#039;deva&#039;;&lt;br /&gt;
&lt;br /&gt;
  function devanagariToIAST( text ) {&lt;br /&gt;
    var CONSONANTS = {&lt;br /&gt;
      &#039;क&#039;:&#039;k&#039;,&#039;ख&#039;:&#039;kh&#039;,&#039;ग&#039;:&#039;g&#039;,&#039;घ&#039;:&#039;gh&#039;,&#039;ङ&#039;:&#039;ṅ&#039;,&lt;br /&gt;
      &#039;च&#039;:&#039;c&#039;,&#039;छ&#039;:&#039;ch&#039;,&#039;ज&#039;:&#039;j&#039;,&#039;झ&#039;:&#039;jh&#039;,&#039;ञ&#039;:&#039;ñ&#039;,&lt;br /&gt;
      &#039;ट&#039;:&#039;ṭ&#039;,&#039;ठ&#039;:&#039;ṭh&#039;,&#039;ड&#039;:&#039;ḍ&#039;,&#039;ढ&#039;:&#039;ḍh&#039;,&#039;ण&#039;:&#039;ṇ&#039;,&lt;br /&gt;
      &#039;त&#039;:&#039;t&#039;,&#039;थ&#039;:&#039;th&#039;,&#039;द&#039;:&#039;d&#039;,&#039;ध&#039;:&#039;dh&#039;,&#039;न&#039;:&#039;n&#039;,&lt;br /&gt;
      &#039;प&#039;:&#039;p&#039;,&#039;फ&#039;:&#039;ph&#039;,&#039;ब&#039;:&#039;b&#039;,&#039;भ&#039;:&#039;bh&#039;,&#039;म&#039;:&#039;m&#039;,&lt;br /&gt;
      &#039;य&#039;:&#039;y&#039;,&#039;र&#039;:&#039;r&#039;,&#039;ल&#039;:&#039;l&#039;,&#039;ळ&#039;:&#039;ḷ&#039;,&#039;व&#039;:&#039;v&#039;,&lt;br /&gt;
      &#039;श&#039;:&#039;ś&#039;,&#039;ष&#039;:&#039;ṣ&#039;,&#039;स&#039;:&#039;s&#039;,&#039;ह&#039;:&#039;h&#039;&lt;br /&gt;
    };&lt;br /&gt;
    var DIACRITICS = {&lt;br /&gt;
      &#039;ा&#039;:&#039;ā&#039;,&#039;ि&#039;:&#039;i&#039;,&#039;ी&#039;:&#039;ī&#039;,&#039;ु&#039;:&#039;u&#039;,&#039;ू&#039;:&#039;ū&#039;,&lt;br /&gt;
      &#039;ृ&#039;:&#039;ṛ&#039;,&#039;ॄ&#039;:&#039;ṝ&#039;,&#039;े&#039;:&#039;e&#039;,&#039;ै&#039;:&#039;ai&#039;,&#039;ो&#039;:&#039;o&#039;,&#039;ौ&#039;:&#039;au&#039;&lt;br /&gt;
    };&lt;br /&gt;
    var VOWELS = {&lt;br /&gt;
      &#039;अ&#039;:&#039;a&#039;,&#039;आ&#039;:&#039;ā&#039;,&#039;इ&#039;:&#039;i&#039;,&#039;ई&#039;:&#039;ī&#039;,&#039;उ&#039;:&#039;u&#039;,&#039;ऊ&#039;:&#039;ū&#039;,&lt;br /&gt;
      &#039;ऋ&#039;:&#039;ṛ&#039;,&#039;ॠ&#039;:&#039;ṝ&#039;,&#039;ए&#039;:&#039;e&#039;,&#039;ऐ&#039;:&#039;ai&#039;,&#039;ओ&#039;:&#039;o&#039;,&#039;औ&#039;:&#039;au&#039;,&#039;ऽ&#039;:&amp;quot;&#039;&amp;quot;&lt;br /&gt;
    };&lt;br /&gt;
    var MISC = {&lt;br /&gt;
      &#039;ं&#039;:&#039;ṃ&#039;,&#039;ः&#039;:&#039;ḥ&#039;,&#039;ँ&#039;:&#039;m̐&#039;,&#039;ॐ&#039;:&#039;oṃ&#039;,&lt;br /&gt;
      &#039;०&#039;:&#039;0&#039;,&#039;१&#039;:&#039;1&#039;,&#039;२&#039;:&#039;2&#039;,&#039;३&#039;:&#039;3&#039;,&#039;४&#039;:&#039;4&#039;,&lt;br /&gt;
      &#039;५&#039;:&#039;5&#039;,&#039;६&#039;:&#039;6&#039;,&#039;७&#039;:&#039;7&#039;,&#039;८&#039;:&#039;8&#039;,&#039;९&#039;:&#039;9&#039;&lt;br /&gt;
    };&lt;br /&gt;
    var HALANTA = &#039;्&#039;;&lt;br /&gt;
    var chars = Array.from( text );&lt;br /&gt;
    var result = &#039;&#039;;&lt;br /&gt;
    var i = 0;&lt;br /&gt;
    while ( i &amp;lt; chars.length ) {&lt;br /&gt;
      var ch   = chars[ i ];&lt;br /&gt;
      var next = chars[ i + 1 ];&lt;br /&gt;
      if ( CONSONANTS[ ch ] ) {&lt;br /&gt;
        var base = CONSONANTS[ ch ];&lt;br /&gt;
        if ( next === HALANTA )          { result += base;               i += 2; }&lt;br /&gt;
        else if ( DIACRITICS[ next ] )   { result += base + DIACRITICS[ next ]; i += 2; }&lt;br /&gt;
        else if ( next === &#039;ं&#039; || next === &#039;ः&#039; ) { result += base + &#039;a&#039; + MISC[ next ]; i += 2; }&lt;br /&gt;
        else                             { result += base + &#039;a&#039;;         i++;    }&lt;br /&gt;
      } else if ( VOWELS[ ch ] )         { result += VOWELS[ ch ];       i++; }&lt;br /&gt;
      else if ( DIACRITICS[ ch ] )       { result += DIACRITICS[ ch ];   i++; }&lt;br /&gt;
      else if ( MISC[ ch ] )             { result += MISC[ ch ];         i++; }&lt;br /&gt;
      else                               { result += ch;                 i++; }&lt;br /&gt;
    }&lt;br /&gt;
    return result;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var SCRIPT_MAP = {&lt;br /&gt;
    kn: {&lt;br /&gt;
      &#039;अ&#039;:&#039;ಅ&#039;,&#039;आ&#039;:&#039;ಆ&#039;,&#039;इ&#039;:&#039;ಇ&#039;,&#039;ई&#039;:&#039;ಈ&#039;,&#039;उ&#039;:&#039;ಉ&#039;,&#039;ऊ&#039;:&#039;ಊ&#039;,&#039;ऋ&#039;:&#039;ಋ&#039;,&lt;br /&gt;
      &#039;ए&#039;:&#039;ಏ&#039;,&#039;ऐ&#039;:&#039;ಐ&#039;,&#039;ओ&#039;:&#039;ಓ&#039;,&#039;औ&#039;:&#039;ಔ&#039;,&#039;ऽ&#039;:&#039;ಽ&#039;,&lt;br /&gt;
      &#039;क&#039;:&#039;ಕ&#039;,&#039;ख&#039;:&#039;ಖ&#039;,&#039;ग&#039;:&#039;ಗ&#039;,&#039;घ&#039;:&#039;ಘ&#039;,&#039;ङ&#039;:&#039;ಙ&#039;,&lt;br /&gt;
      &#039;च&#039;:&#039;ಚ&#039;,&#039;छ&#039;:&#039;ಛ&#039;,&#039;ज&#039;:&#039;ಜ&#039;,&#039;झ&#039;:&#039;ಝ&#039;,&#039;ञ&#039;:&#039;ಞ&#039;,&lt;br /&gt;
      &#039;ट&#039;:&#039;ಟ&#039;,&#039;ठ&#039;:&#039;ಠ&#039;,&#039;ड&#039;:&#039;ಡ&#039;,&#039;ढ&#039;:&#039;ಢ&#039;,&#039;ण&#039;:&#039;ಣ&#039;,&lt;br /&gt;
      &#039;त&#039;:&#039;ತ&#039;,&#039;थ&#039;:&#039;ಥ&#039;,&#039;द&#039;:&#039;ದ&#039;,&#039;ध&#039;:&#039;ಧ&#039;,&#039;न&#039;:&#039;ನ&#039;,&lt;br /&gt;
      &#039;प&#039;:&#039;ಪ&#039;,&#039;फ&#039;:&#039;ಫ&#039;,&#039;ब&#039;:&#039;ಬ&#039;,&#039;भ&#039;:&#039;ಭ&#039;,&#039;म&#039;:&#039;ಮ&#039;,&lt;br /&gt;
      &#039;य&#039;:&#039;ಯ&#039;,&#039;र&#039;:&#039;ರ&#039;,&#039;ल&#039;:&#039;ಲ&#039;,&#039;व&#039;:&#039;ವ&#039;,&lt;br /&gt;
      &#039;श&#039;:&#039;ಶ&#039;,&#039;ष&#039;:&#039;ಷ&#039;,&#039;स&#039;:&#039;ಸ&#039;,&#039;ह&#039;:&#039;ಹ&#039;,&lt;br /&gt;
      &#039;ा&#039;:&#039;ಾ&#039;,&#039;ि&#039;:&#039;ಿ&#039;,&#039;ी&#039;:&#039;ೀ&#039;,&#039;ु&#039;:&#039;ು&#039;,&#039;ू&#039;:&#039;ೂ&#039;,&lt;br /&gt;
      &#039;ृ&#039;:&#039;ೃ&#039;,&#039;े&#039;:&#039;ೇ&#039;,&#039;ै&#039;:&#039;ೈ&#039;,&#039;ो&#039;:&#039;ೋ&#039;,&#039;ौ&#039;:&#039;ೌ&#039;,&lt;br /&gt;
      &#039;ं&#039;:&#039;ಂ&#039;,&#039;ः&#039;:&#039;ಃ&#039;,&#039;्&#039;:&#039;್&#039;,&lt;br /&gt;
      &#039;०&#039;:&#039;೦&#039;,&#039;१&#039;:&#039;೧&#039;,&#039;२&#039;:&#039;೨&#039;,&#039;३&#039;:&#039;೩&#039;,&#039;४&#039;:&#039;೪&#039;,&lt;br /&gt;
      &#039;५&#039;:&#039;೫&#039;,&#039;६&#039;:&#039;೬&#039;,&#039;७&#039;:&#039;೭&#039;,&#039;८&#039;:&#039;೮&#039;,&#039;९&#039;:&#039;೯&#039;&lt;br /&gt;
    },&lt;br /&gt;
    ta: {&lt;br /&gt;
      &#039;अ&#039;:&#039;அ&#039;,&#039;आ&#039;:&#039;ஆ&#039;,&#039;इ&#039;:&#039;இ&#039;,&#039;ई&#039;:&#039;ஈ&#039;,&#039;उ&#039;:&#039;உ&#039;,&#039;ऊ&#039;:&#039;ஊ&#039;,&lt;br /&gt;
      &#039;ऋ&#039;:&#039;ரு&#039;,&#039;ॠ&#039;:&#039;ரூ&#039;,&lt;br /&gt;
      &#039;ए&#039;:&#039;ஏ&#039;,&#039;ऐ&#039;:&#039;ஐ&#039;,&#039;ओ&#039;:&#039;ஓ&#039;,&#039;औ&#039;:&#039;ஔ&#039;,&lt;br /&gt;
      &#039;क&#039;:&#039;க&#039;,&#039;ख&#039;:&#039;க&#039;,&#039;ग&#039;:&#039;க&#039;,&#039;घ&#039;:&#039;க&#039;,&#039;ङ&#039;:&#039;ங&#039;,&lt;br /&gt;
      &#039;च&#039;:&#039;ச&#039;,&#039;छ&#039;:&#039;ச&#039;,&#039;ज&#039;:&#039;ஜ&#039;,&#039;झ&#039;:&#039;ஜ&#039;,&#039;ञ&#039;:&#039;ஞ&#039;,&lt;br /&gt;
      &#039;ட&#039;:&#039;ட&#039;,&#039;ठ&#039;:&#039;ட&#039;,&#039;ड&#039;:&#039;ட&#039;,&#039;ढ&#039;:&#039;ட&#039;,&#039;ண&#039;:&#039;ண&#039;,&lt;br /&gt;
      &#039;त&#039;:&#039;த&#039;,&#039;थ&#039;:&#039;த&#039;,&#039;द&#039;:&#039;த&#039;,&#039;ध&#039;:&#039;த&#039;,&#039;न&#039;:&#039;ந&#039;,&lt;br /&gt;
      &#039;प&#039;:&#039;ப&#039;,&#039;फ&#039;:&#039;ப&#039;,&#039;ब&#039;:&#039;ப&#039;,&#039;भ&#039;:&#039;ப&#039;,&#039;म&#039;:&#039;ம&#039;,&lt;br /&gt;
      &#039;य&#039;:&#039;ய&#039;,&#039;र&#039;:&#039;ர&#039;,&#039;ल&#039;:&#039;ல&#039;,&#039;ळ&#039;:&#039;ழ&#039;,&#039;व&#039;:&#039;வ&#039;,&lt;br /&gt;
      &#039;श&#039;:&#039;ஶ&#039;,&#039;ष&#039;:&#039;ஷ&#039;,&#039;स&#039;:&#039;ஸ&#039;,&#039;ह&#039;:&#039;ஹ&#039;,&lt;br /&gt;
      &#039;ा&#039;:&#039;ா&#039;,&#039;ि&#039;:&#039;ி&#039;,&#039;ी&#039;:&#039;ீ&#039;,&#039;ु&#039;:&#039;ு&#039;,&#039;ू&#039;:&#039;ூ&#039;,&lt;br /&gt;
      &#039;ृ&#039;:&#039;ு&#039;,&#039;ॄ&#039;:&#039;ூ&#039;,&lt;br /&gt;
      &#039;े&#039;:&#039;ே&#039;,&#039;ை&#039;:&#039;ை&#039;,&#039;ो&#039;:&#039;ோ&#039;,&#039;ौ&#039;:&#039;ௌ&#039;,&lt;br /&gt;
      &#039;ं&#039;:&#039;ம்&#039;,&#039;ः&#039;:&#039;:&#039;,&#039;ँ&#039;:&#039;ம்&#039;,&#039;्&#039;:&#039;்&#039;,&#039;ॐ&#039;:&#039;ௐ&#039;,&#039;ऽ&#039;:&#039;ௗ&#039;,&lt;br /&gt;
      &#039;०&#039;:&#039;0&#039;,&#039;१&#039;:&#039;1&#039;,&#039;२&#039;:&#039;2&#039;,&#039;३&#039;:&#039;3&#039;,&#039;४&#039;:&#039;4&#039;,&lt;br /&gt;
      &#039;५&#039;:&#039;5&#039;,&#039;६&#039;:&#039;6&#039;,&#039;७&#039;:&#039;7&#039;,&#039;८&#039;:&#039;8&#039;,&#039;९&#039;:&#039;9&#039;&lt;br /&gt;
    }&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  var PRE = [&lt;br /&gt;
    [ /ङ्क/g, &#039;ंक&#039; ], [ /ङ्ख/g, &#039;ंख&#039; ], [ /ङ्ग/g, &#039;ंग&#039; ], [ /ङ्घ/g, &#039;ंघ&#039; ],&lt;br /&gt;
    [ /ञ्च/g, &#039;ंच&#039; ], [ /ञ्ज/g, &#039;ंज&#039; ], [ /ण्ट/g, &#039;ंट&#039; ], [ /ण्ड/g, &#039;ंड&#039; ],&lt;br /&gt;
    [ /न्त/g, &#039;ंत&#039; ], [ /न्द/g, &#039;ंद&#039; ], [ /म्ब/g, &#039;ंब&#039; ], [ /म्भ/g, &#039;ंभ&#039; ]&lt;br /&gt;
  ];&lt;br /&gt;
&lt;br /&gt;
  function transliterateText( text, script ) {&lt;br /&gt;
    if ( script === &#039;en&#039; ) return devanagariToIAST( text );&lt;br /&gt;
    var map = SCRIPT_MAP[ script ];&lt;br /&gt;
    if ( !map ) return text;&lt;br /&gt;
    var t = text;&lt;br /&gt;
    PRE.forEach( function ( p ) { t = t.replace( p[ 0 ], p[ 1 ] ); } );&lt;br /&gt;
    return Array.from( t ).map( function ( ch ) {&lt;br /&gt;
      return map[ ch ] !== undefined ? map[ ch ] : ch;&lt;br /&gt;
    } ).join( &#039;&#039; );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var translatableSpans = [];&lt;br /&gt;
&lt;br /&gt;
  function tagTextNodes() {&lt;br /&gt;
    var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
    if ( content ) {&lt;br /&gt;
      var walker = document.createTreeWalker( content, NodeFilter.SHOW_TEXT );&lt;br /&gt;
      var nodes  = [];&lt;br /&gt;
      while ( walker.nextNode() ) nodes.push( walker.currentNode );&lt;br /&gt;
      nodes.forEach( function ( node ) {&lt;br /&gt;
        var p = node.parentNode;&lt;br /&gt;
        if ( !p ) return;&lt;br /&gt;
        if ( p.hasAttribute &amp;amp;&amp;amp; p.hasAttribute( &#039;data-deva&#039; ) ) return;&lt;br /&gt;
        if ( p.closest ) {&lt;br /&gt;
          if ( p.closest( &#039;.gr-controls&#039; )    ) return;&lt;br /&gt;
          if ( p.closest( &#039;.mw-editsection&#039; ) ) return;&lt;br /&gt;
        }&lt;br /&gt;
        var orig = node.textContent;&lt;br /&gt;
        if ( !orig.trim() ) return;&lt;br /&gt;
        var span = document.createElement( &#039;span&#039; );&lt;br /&gt;
        span.setAttribute( &#039;data-deva&#039;, orig );&lt;br /&gt;
        span.textContent = orig;&lt;br /&gt;
        p.replaceChild( span, node );&lt;br /&gt;
        translatableSpans.push( span );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
    document.querySelectorAll( &#039;.vector-toc .vector-toc-text&#039; ).forEach( function ( span ) {&lt;br /&gt;
      if ( span.hasAttribute( &#039;data-deva&#039; ) ) return;&lt;br /&gt;
      var orig = span.textContent;&lt;br /&gt;
      if ( !orig.trim() ) return;&lt;br /&gt;
      span.setAttribute( &#039;data-deva&#039;, orig );&lt;br /&gt;
      translatableSpans.push( span );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function applyScript( script ) {&lt;br /&gt;
    currentScript = script;&lt;br /&gt;
    translatableSpans.forEach( function ( span ) {&lt;br /&gt;
      if ( !span.parentNode ) return;&lt;br /&gt;
      var orig = span.getAttribute( &#039;data-deva&#039; );&lt;br /&gt;
      if ( !orig ) return;&lt;br /&gt;
      span.textContent = ( script === &#039;deva&#039; )&lt;br /&gt;
        ? orig&lt;br /&gt;
        : transliterateText( orig, script );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function _isNoTocPage() {&lt;br /&gt;
    var pn = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039; ) ) || &#039;&#039;;&lt;br /&gt;
    return pn === &#039;Main_Page&#039; || /^[A-Za-z0-9_]+:About$/.test( pn );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function renameTocTitle() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    var titleEl = toc.querySelector(&#039;.vector-toc-title&#039;) || toc.querySelector(&#039;.vector-pinnable-header-label&#039;);&lt;br /&gt;
    if ( !titleEl ) return;&lt;br /&gt;
    var LABEL = &#039;विषयसूची&#039;;&lt;br /&gt;
    var span = titleEl.querySelector(&#039;.gr-toc-title&#039;);&lt;br /&gt;
    if ( !span ) {&lt;br /&gt;
      titleEl.innerHTML = &#039;&#039;;&lt;br /&gt;
      span = document.createElement(&#039;span&#039;);&lt;br /&gt;
      span.className = &#039;gr-toc-title&#039;;&lt;br /&gt;
      span.setAttribute(&#039;data-deva&#039;, LABEL);&lt;br /&gt;
      titleEl.appendChild(span);&lt;br /&gt;
      translatableSpans.push(span);&lt;br /&gt;
    }&lt;br /&gt;
    span.textContent = currentScript === &#039;deva&#039; ? LABEL : transliterateText(LABEL, currentScript);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function removeTocBeginning() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    var el = toc.querySelector( &#039;#vector-toc-beginning&#039; );&lt;br /&gt;
    if ( !el ) {&lt;br /&gt;
      var items = toc.querySelectorAll( &#039;.vector-toc-list-item&#039; );&lt;br /&gt;
      for ( var i = 0; i &amp;lt; items.length; i++ ) {&lt;br /&gt;
        var a = items[ i ].querySelector( &#039;a&#039; );&lt;br /&gt;
        if ( a ) {&lt;br /&gt;
          var href = a.getAttribute( &#039;href&#039; ) || &#039;&#039;;&lt;br /&gt;
          if ( href.indexOf( &#039;#&#039; ) === -1 ) { el = items[ i ]; break; }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if ( el &amp;amp;&amp;amp; el.parentNode ) el.parentNode.removeChild( el );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function expandTocSections() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    toc.querySelectorAll( &#039;.vector-toc-list-item-collapsed&#039; ).forEach( function ( li ) {&lt;br /&gt;
      li.classList.remove( &#039;vector-toc-list-item-collapsed&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function injectTocDocNav() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    if ( document.getElementById( &#039;gr-toc-doc-nav&#039; ) ) return;&lt;br /&gt;
    var artPath   = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
    var pageTitle = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039;   ) ) || &#039;&#039;;&lt;br /&gt;
    var teekaPage   = document.querySelector( &#039;.gr-teeka-page&#039; );&lt;br /&gt;
    var primarySlug = teekaPage ? ( teekaPage.getAttribute( &#039;data-primary&#039; ) || &#039;&#039; ) : &#039;&#039;;&lt;br /&gt;
    if ( !primarySlug ) { primarySlug = pageTitle.split( &#039;/&#039; )[ 0 ]; }&lt;br /&gt;
    if ( !primarySlug ) return;&lt;br /&gt;
    function wikiUrl( slug ) {&lt;br /&gt;
      if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( slug );&lt;br /&gt;
      return artPath.replace( &#039;$1&#039;, encodeURIComponent( slug ).replace( /%2F/g, &#039;/&#039; ) );&lt;br /&gt;
    }&lt;br /&gt;
    var docTitleEl     = document.querySelector( &#039;.gr-doc-title&#039; );&lt;br /&gt;
    var hasMoolaPage   = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-moola&#039; )   === &#039;1&#039;;&lt;br /&gt;
    var hasUllekhaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-ullekha&#039; ) === &#039;1&#039;;&lt;br /&gt;
    var showMoolaPage  = !teekaPage &amp;amp;&amp;amp; hasMoolaPage;&lt;br /&gt;
    var showMoolaBack  = !!teekaPage;&lt;br /&gt;
    var showUllekha    = hasUllekhaPage || !!teekaPage;&lt;br /&gt;
    if ( !showMoolaPage &amp;amp;&amp;amp; !showMoolaBack &amp;amp;&amp;amp; !showUllekha ) return;&lt;br /&gt;
    var nav = document.createElement( &#039;div&#039; );&lt;br /&gt;
    nav.id = &#039;gr-toc-doc-nav&#039;;&lt;br /&gt;
    nav.setAttribute( &#039;class&#039;, &#039;toc-main-links&#039; );&lt;br /&gt;
    function makeBtn( href, label ) {&lt;br /&gt;
      var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
      a.href = href;&lt;br /&gt;
      a.setAttribute( &#039;class&#039;, &#039;toc-main-link-item&#039; );&lt;br /&gt;
      var lspan = document.createElement( &#039;span&#039; );&lt;br /&gt;
      lspan.setAttribute( &#039;data-deva&#039;, label );&lt;br /&gt;
      lspan.textContent = ( currentScript &amp;amp;&amp;amp; currentScript !== &#039;deva&#039; ) ? transliterateText( label, currentScript ) : label;&lt;br /&gt;
      translatableSpans.push( lspan );&lt;br /&gt;
      a.appendChild( lspan );&lt;br /&gt;
      a.addEventListener( &#039;mouseover&#039;, function () { this.style.opacity = &#039;0.72&#039;; } );&lt;br /&gt;
      a.addEventListener( &#039;mouseout&#039;,  function () { this.style.opacity = &#039;1&#039;;    } );&lt;br /&gt;
      return a;&lt;br /&gt;
    }&lt;br /&gt;
    if ( showMoolaPage ) nav.appendChild( makeBtn( wikiUrl( primarySlug + &#039;/Moola&#039; ), &#039;मूलम्&#039; ) );&lt;br /&gt;
    if ( showMoolaBack ) nav.appendChild( makeBtn( wikiUrl( primarySlug ),            &#039;मूल&#039;   ) );&lt;br /&gt;
    if ( showUllekha   ) nav.appendChild( makeBtn( wikiUrl( primarySlug + &#039;/Ullekha&#039;), &#039;उल्लेख&#039;) );&lt;br /&gt;
    var tocContents = toc.querySelector( &#039;.vector-toc-contents&#039; );&lt;br /&gt;
    if ( tocContents ) toc.insertBefore( nav, tocContents );&lt;br /&gt;
    else               toc.appendChild( nav );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var _headingObserver = null;&lt;br /&gt;
&lt;br /&gt;
  function attachHeadingObserver() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    if ( _headingObserver ) return;&lt;br /&gt;
    if ( !window.IntersectionObserver ) return;&lt;br /&gt;
    var ACTIVE_COLOR = &#039;#f57c00&#039;;&lt;br /&gt;
    var _activeId    = null;&lt;br /&gt;
    var content  = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
    if ( !content ) return;&lt;br /&gt;
    var headings = Array.from( content.querySelectorAll( &#039;h1[id],h2[id],h3[id],h4[id],h5[id],h6[id]&#039; ) );&lt;br /&gt;
    if ( !headings.length ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    function getTocLink( id ) { return toc.querySelector( &#039;a[href=&amp;quot;#&#039; + CSS.escape( id ) + &#039;&amp;quot;]&#039; ); }&lt;br /&gt;
    function getTocLi( id ) { var a = getTocLink( id ); return a ? a.closest( &#039;.vector-toc-list-item&#039; ) : null; }&lt;br /&gt;
    function clearActive() {&lt;br /&gt;
      toc.querySelectorAll( &#039;.vector-toc-list-item&#039; ).forEach( function ( li ) {&lt;br /&gt;
        li.classList.remove( &#039;vector-toc-list-item-active&#039; );&lt;br /&gt;
        var lnk = li.querySelector( &#039;.vector-toc-link&#039; );&lt;br /&gt;
        if ( !lnk ) return;&lt;br /&gt;
        lnk.style.removeProperty( &#039;color&#039; );&lt;br /&gt;
        lnk.style.setProperty( &#039;font-weight&#039;, &#039;400&#039;, &#039;important&#039; );&lt;br /&gt;
        lnk.querySelectorAll( &#039;*&#039; ).forEach( function ( el ) { el.style.removeProperty( &#039;color&#039; ); el.style.setProperty( &#039;font-weight&#039;, &#039;400&#039;, &#039;important&#039; ); } );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
    function setActive( id ) {&lt;br /&gt;
      if ( _activeId === id ) return;&lt;br /&gt;
      _activeId = id;&lt;br /&gt;
      clearActive();&lt;br /&gt;
      if ( !id ) return;&lt;br /&gt;
      var li = getTocLi( id );&lt;br /&gt;
      if ( !li ) return;&lt;br /&gt;
      li.classList.add( &#039;vector-toc-list-item-active&#039; );&lt;br /&gt;
      var hasActiveChild = !!li.querySelector( &#039;.vector-toc-list-item .vector-toc-list-item-active&#039; );&lt;br /&gt;
      if ( !hasActiveChild ) {&lt;br /&gt;
        var lnk = li.querySelector( &#039;.vector-toc-link&#039; );&lt;br /&gt;
        if ( lnk ) {&lt;br /&gt;
          lnk.style.setProperty( &#039;color&#039;, ACTIVE_COLOR, &#039;important&#039; );&lt;br /&gt;
          lnk.style.setProperty( &#039;font-weight&#039;, &#039;700&#039;, &#039;important&#039; );&lt;br /&gt;
          lnk.querySelectorAll( &#039;*&#039; ).forEach( function ( el ) { el.style.setProperty( &#039;color&#039;, ACTIVE_COLOR, &#039;important&#039; ); el.style.setProperty( &#039;font-weight&#039;, &#039;700&#039;, &#039;important&#039; ); } );&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      var anc = li.parentNode;&lt;br /&gt;
      while ( anc &amp;amp;&amp;amp; anc !== toc ) {&lt;br /&gt;
        if ( anc.classList ) anc.classList.remove( &#039;vector-toc-list-item-collapsed&#039; );&lt;br /&gt;
        if ( anc.tagName === &#039;UL&#039; || anc.tagName === &#039;LI&#039; ) anc.style.removeProperty( &#039;display&#039; );&lt;br /&gt;
        anc = anc.parentNode;&lt;br /&gt;
      }&lt;br /&gt;
      var sticky = document.querySelector( &#039;.vector-sticky-pinned-container&#039; );&lt;br /&gt;
      var scrollEl = sticky || toc;&lt;br /&gt;
      if ( scrollEl.scrollHeight &amp;gt; scrollEl.clientHeight ) {&lt;br /&gt;
        var lr = li.getBoundingClientRect();&lt;br /&gt;
        var cr = scrollEl.getBoundingClientRect();&lt;br /&gt;
        if ( lr.top &amp;lt; cr.top + 8 || lr.bottom &amp;gt; cr.bottom - 8 ) {&lt;br /&gt;
          scrollEl.scrollTop += lr.top - cr.top - scrollEl.clientHeight / 2 + li.offsetHeight / 2;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    var _visible = new Set();&lt;br /&gt;
    _headingObserver = new IntersectionObserver( function ( entries ) {&lt;br /&gt;
      entries.forEach( function ( entry ) {&lt;br /&gt;
        if ( entry.isIntersecting ) _visible.add( entry.target.id );&lt;br /&gt;
        else _visible.delete( entry.target.id );&lt;br /&gt;
      } );&lt;br /&gt;
      var topId = null, topY = Infinity;&lt;br /&gt;
      _visible.forEach( function ( id ) {&lt;br /&gt;
        var el = document.getElementById( id );&lt;br /&gt;
        if ( el ) { var y = el.getBoundingClientRect().top; if ( y &amp;gt;= 0 &amp;amp;&amp;amp; y &amp;lt; topY ) { topY = y; topId = id; } }&lt;br /&gt;
      } );&lt;br /&gt;
      if ( !topId ) {&lt;br /&gt;
        var bestY = -Infinity;&lt;br /&gt;
        headings.forEach( function ( h ) { var y = h.getBoundingClientRect().top; if ( y &amp;lt; 0 &amp;amp;&amp;amp; y &amp;gt; bestY ) { bestY = y; topId = h.id; } } );&lt;br /&gt;
      }&lt;br /&gt;
      setActive( topId || null );&lt;br /&gt;
    }, { rootMargin: &#039;-60px 0px -65% 0px&#039;, threshold: 0 } );&lt;br /&gt;
    headings.forEach( function ( h ) { _headingObserver.observe( h ); } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function setupToc() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    removeTocBeginning();&lt;br /&gt;
    renameTocTitle();&lt;br /&gt;
    expandTocSections();&lt;br /&gt;
    injectTocDocNav();&lt;br /&gt;
    attachHeadingObserver();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function init() {&lt;br /&gt;
    var HIDE_IDS = [ &#039;vector-appearance&#039;, &#039;vector-appearance-pinned-container&#039;, &#039;vector-appearance-unpinned-container&#039; ];&lt;br /&gt;
    function removeHiddenEls() {&lt;br /&gt;
      HIDE_IDS.forEach( function ( id ) { var el = document.getElementById( id ); if ( el &amp;amp;&amp;amp; el.parentNode ) el.parentNode.removeChild( el ); } );&lt;br /&gt;
      var pt = document.getElementById( &#039;vector-page-tools&#039; ) || document.querySelector( &#039;.vector-page-tools-pinned-container&#039; );&lt;br /&gt;
      if ( pt ) pt.querySelectorAll( &#039;[aria-controls=&amp;quot;vector-appearance&amp;quot;]&#039; ).forEach( function ( el ) { if ( el.parentNode ) el.parentNode.removeChild( el ); } );&lt;br /&gt;
    }&lt;br /&gt;
    removeHiddenEls();&lt;br /&gt;
    ( function detectTeekaMode() {&lt;br /&gt;
      var tp = document.querySelector( &#039;.gr-teeka-page&#039; );&lt;br /&gt;
      if ( !tp ) return;&lt;br /&gt;
      var primary = tp.getAttribute( &#039;data-primary&#039; ) || &#039;&#039;;&lt;br /&gt;
      var artPath = ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
      var mainUrl = artPath.replace( &#039;$1&#039;, primary );&lt;br /&gt;
      var refParam = window.location.search.match( /[?&amp;amp;]ref=([01])/ );&lt;br /&gt;
      if ( refParam ) { document.body.classList.add( refParam[1] === &#039;1&#039; ? &#039;gr-ref-mode&#039; : &#039;gr-standalone&#039; ); return; }&lt;br /&gt;
      var ref = document.referrer || &#039;&#039;;&lt;br /&gt;
      document.body.classList.add( ( ref &amp;amp;&amp;amp; primary &amp;amp;&amp;amp; ref.indexOf( mainUrl ) !== -1 ) ? &#039;gr-ref-mode&#039; : &#039;gr-standalone&#039; );&lt;br /&gt;
    }() );&lt;br /&gt;
    if ( window.MutationObserver ) {&lt;br /&gt;
      var hideObs = new MutationObserver( function ( mutations ) {&lt;br /&gt;
        var dirty = false;&lt;br /&gt;
        mutations.forEach( function ( m ) { if ( m.addedNodes.length ) dirty = true; } );&lt;br /&gt;
        if ( dirty ) removeHiddenEls();&lt;br /&gt;
      } );&lt;br /&gt;
      hideObs.observe( document.body, { childList: true, subtree: false } );&lt;br /&gt;
      setTimeout( function () { hideObs.disconnect(); }, 6000 );&lt;br /&gt;
    }&lt;br /&gt;
    var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
    var alreadyTagged = content &amp;amp;&amp;amp; content.querySelector( &#039;[data-deva]&#039; );&lt;br /&gt;
    if ( !alreadyTagged ) { translatableSpans = []; tagTextNodes(); }&lt;br /&gt;
    else {&lt;br /&gt;
      document.querySelectorAll( &#039;.vector-toc .vector-toc-text:not([data-deva])&#039; ).forEach( function ( span ) {&lt;br /&gt;
        var orig = span.textContent; if ( !orig.trim() ) return;&lt;br /&gt;
        span.setAttribute( &#039;data-deva&#039;, orig ); translatableSpans.push( span );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
    var saved = ( function () { try { return localStorage.getItem( LS_SCRIPT_KEY ); } catch ( e ) { return null; } }() );&lt;br /&gt;
    if ( saved &amp;amp;&amp;amp; saved !== &#039;deva&#039; ) { applyScript( saved ); } else { currentScript = &#039;deva&#039;; }&lt;br /&gt;
    setTimeout( setupToc, 200 );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  window.addEventListener( &#039;gr-script-change&#039;, function ( e ) {&lt;br /&gt;
    var script = e &amp;amp;&amp;amp; e.detail &amp;amp;&amp;amp; e.detail.script;&lt;br /&gt;
    if ( script ) applyScript( script );&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
  window.addEventListener( &#039;gr-new-content&#039;, function ( e ) {&lt;br /&gt;
    var container = e &amp;amp;&amp;amp; e.detail &amp;amp;&amp;amp; e.detail.container;&lt;br /&gt;
    if ( !container ) return;&lt;br /&gt;
    var walker = document.createTreeWalker( container, NodeFilter.SHOW_TEXT );&lt;br /&gt;
    var nodes = [];&lt;br /&gt;
    while ( walker.nextNode() ) nodes.push( walker.currentNode );&lt;br /&gt;
    nodes.forEach( function ( node ) {&lt;br /&gt;
      var p = node.parentNode;&lt;br /&gt;
      if ( !p || ( p.hasAttribute &amp;amp;&amp;amp; p.hasAttribute( &#039;data-deva&#039; ) ) ) return;&lt;br /&gt;
      var orig = node.textContent;&lt;br /&gt;
      if ( !orig.trim() ) return;&lt;br /&gt;
      var span = document.createElement( &#039;span&#039; );&lt;br /&gt;
      span.setAttribute( &#039;data-deva&#039;, orig );&lt;br /&gt;
      span.textContent = currentScript !== &#039;deva&#039; ? transliterateText( orig, currentScript ) : orig;&lt;br /&gt;
      p.replaceChild( span, node );&lt;br /&gt;
      translatableSpans.push( span );&lt;br /&gt;
    } );&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
  try {&lt;br /&gt;
    var _grBC = new BroadcastChannel( &#039;gr-script&#039; );&lt;br /&gt;
    _grBC.onmessage = function ( e ) {&lt;br /&gt;
      var script = e &amp;amp;&amp;amp; e.data &amp;amp;&amp;amp; e.data.script;&lt;br /&gt;
      if ( script ) { currentScript = script; var sel = document.querySelector( &#039;.gr-script-sel&#039; ); if ( sel ) sel.value = script; applyScript( script ); }&lt;br /&gt;
    };&lt;br /&gt;
  } catch ( e ) {}&lt;br /&gt;
&lt;br /&gt;
  if ( window.mw ) {&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
      setTimeout( function () {&lt;br /&gt;
        var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
        var alreadyTagged = content &amp;amp;&amp;amp; content.querySelector( &#039;[data-deva]&#039; );&lt;br /&gt;
        if ( !alreadyTagged ) { translatableSpans = []; tagTextNodes(); }&lt;br /&gt;
        else {&lt;br /&gt;
          document.querySelectorAll( &#039;.vector-toc .vector-toc-text:not([data-deva])&#039; ).forEach( function ( span ) {&lt;br /&gt;
            var orig = span.textContent; if ( !orig.trim() ) return;&lt;br /&gt;
            span.setAttribute( &#039;data-deva&#039;, orig ); translatableSpans.push( span );&lt;br /&gt;
          } );&lt;br /&gt;
        }&lt;br /&gt;
        if ( currentScript !== &#039;deva&#039; ) applyScript( currentScript );&lt;br /&gt;
        setupToc();&lt;br /&gt;
      }, 150 );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) { document.addEventListener( &#039;DOMContentLoaded&#039;, init ); }&lt;br /&gt;
  else { init(); }&lt;br /&gt;
&lt;br /&gt;
}() );   /* ← end of main IIFE */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Inject &amp;quot;Help&amp;quot; and &amp;quot;About&amp;quot; links into the header ─────────────────&lt;br /&gt;
( function () {&lt;br /&gt;
  function wikiHref( title ) {&lt;br /&gt;
    if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( title );&lt;br /&gt;
    var ap = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
    return ap.replace( &#039;$1&#039;, title );&lt;br /&gt;
  }&lt;br /&gt;
  var linkStyle = [ &#039;color:rgba(255,255,255,0.88)&#039;,&#039;font-size:0.88em&#039;,&#039;font-family:system-ui,sans-serif&#039;,&#039;font-weight:500&#039;,&#039;text-decoration:none&#039;,&#039;padding:4px 10px&#039;,&#039;border-radius:4px&#039;,&#039;margin-right:4px&#039;,&#039;transition:color 0.15s,background 0.15s&#039;,&#039;white-space:nowrap&#039; ].join( &#039;;&#039; );&lt;br /&gt;
  function makeHeaderLink( id, href, label ) {&lt;br /&gt;
    var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
    a.id = id; a.href = href; a.textContent = label; a.style.cssText = linkStyle;&lt;br /&gt;
    a.addEventListener( &#039;mouseover&#039;, function () { this.style.color = &#039;#fff&#039;; this.style.background = &#039;rgba(255,255,255,0.12)&#039;; } );&lt;br /&gt;
    a.addEventListener( &#039;mouseout&#039;,  function () { this.style.color = &#039;rgba(255,255,255,0.88)&#039;; this.style.background = &#039;transparent&#039;; } );&lt;br /&gt;
    return a;&lt;br /&gt;
  }&lt;br /&gt;
function injectHeaderLinks() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-about-link&#039; ) ) return;&lt;br /&gt;
    var headerEnd = document.querySelector( &#039;.vector-header-end&#039; ) || document.querySelector( &#039;#vector-user-links&#039; ) || document.querySelector( &#039;.mw-header&#039; );&lt;br /&gt;
    if ( !headerEnd ) return;&lt;br /&gt;
    var helpLink  = makeHeaderLink( &#039;gr-help-link&#039;,  wikiHref( &#039;My_wiki:Help&#039;  ), &#039;Help&#039;  );&lt;br /&gt;
    var aboutLink = makeHeaderLink( &#039;gr-about-link&#039;, wikiHref( &#039;My_wiki:About&#039; ), &#039;About&#039; );&lt;br /&gt;
&lt;br /&gt;
    var userName = window.mw ? mw.config.get( &#039;wgUserName&#039; ) : null;&lt;br /&gt;
    var isAnon   = !userName || ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgUserId&#039; ) === null );&lt;br /&gt;
&lt;br /&gt;
    // Build the trailing auth element (Login link for anon, dropdown for logged-in)&lt;br /&gt;
    var authEl = null;&lt;br /&gt;
    if ( isAnon ) {&lt;br /&gt;
      if ( !document.getElementById( &#039;gr-header-login&#039; ) ) {&lt;br /&gt;
        authEl = makeHeaderLink( &#039;gr-header-login&#039;, wikiHref( &#039;Special:UserLogin&#039; ), &#039;Login/Signup&#039; );&lt;br /&gt;
      }&lt;br /&gt;
    } else if ( !document.getElementById( &#039;gr-header-user&#039; ) ) {&lt;br /&gt;
      authEl = buildHeaderUserDropdown( userName );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var ul = document.querySelector( &#039;.vector-user-links&#039; ) || document.querySelector( &#039;#pt-userpage&#039; );&lt;br /&gt;
    if ( ul &amp;amp;&amp;amp; ul.parentNode === headerEnd ) {&lt;br /&gt;
      if ( authEl ) headerEnd.insertBefore( authEl, ul );&lt;br /&gt;
      headerEnd.insertBefore( aboutLink, authEl || ul );&lt;br /&gt;
      headerEnd.insertBefore( helpLink, aboutLink );&lt;br /&gt;
    } else {&lt;br /&gt;
      headerEnd.appendChild( helpLink );&lt;br /&gt;
      headerEnd.appendChild( aboutLink );&lt;br /&gt;
      if ( authEl ) headerEnd.appendChild( authEl );&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function buildHeaderUserDropdown( userName ) {&lt;br /&gt;
    var wrap = document.createElement( &#039;div&#039; );&lt;br /&gt;
    wrap.id = &#039;gr-header-user&#039;;&lt;br /&gt;
    wrap.style.cssText = &#039;position:relative;display:inline-block;margin-right:4px;&#039;;&lt;br /&gt;
&lt;br /&gt;
    var trigger = document.createElement( &#039;button&#039; );&lt;br /&gt;
    trigger.id = &#039;gr-header-user-trigger&#039;;&lt;br /&gt;
    trigger.type = &#039;button&#039;;&lt;br /&gt;
    trigger.setAttribute( &#039;aria-haspopup&#039;, &#039;true&#039; );&lt;br /&gt;
    trigger.setAttribute( &#039;aria-expanded&#039;, &#039;false&#039; );&lt;br /&gt;
    trigger.style.cssText = [&lt;br /&gt;
      &#039;display:inline-flex&#039;,&#039;align-items:center&#039;,&#039;gap:5px&#039;,&lt;br /&gt;
      &#039;color:rgba(255,255,255,0.88)&#039;,&#039;font-size:0.88em&#039;,&lt;br /&gt;
      &#039;font-family:system-ui,sans-serif&#039;,&#039;font-weight:500&#039;,&lt;br /&gt;
      &#039;background:transparent&#039;,&#039;border:none&#039;,&#039;cursor:pointer&#039;,&lt;br /&gt;
      &#039;padding:4px 10px&#039;,&#039;border-radius:4px&#039;,&#039;white-space:nowrap&#039;,&lt;br /&gt;
      &#039;transition:color 0.15s,background 0.15s&#039;&lt;br /&gt;
    ].join( &#039;;&#039; );&lt;br /&gt;
    trigger.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;span&amp;gt;&#039; + userName.replace( /&amp;lt;/g, &#039;&amp;amp;lt;&#039; ) + &#039;&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;span id=&amp;quot;gr-header-caret&amp;quot; style=&amp;quot;font-size:0.8em;transition:transform 0.2s;&amp;quot;&amp;gt;\u25be&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
    trigger.addEventListener( &#039;mouseover&#039;, function () { this.style.color = &#039;#fff&#039;; this.style.background = &#039;rgba(255,255,255,0.12)&#039;; } );&lt;br /&gt;
    trigger.addEventListener( &#039;mouseout&#039;,  function () { if ( menu.style.display === &#039;none&#039; ) { this.style.color = &#039;rgba(255,255,255,0.88)&#039;; this.style.background = &#039;transparent&#039;; } } );&lt;br /&gt;
&lt;br /&gt;
    var menu = document.createElement( &#039;div&#039; );&lt;br /&gt;
    menu.id = &#039;gr-header-user-menu&#039;;&lt;br /&gt;
    menu.setAttribute( &#039;role&#039;, &#039;menu&#039; );&lt;br /&gt;
    menu.style.cssText = [&lt;br /&gt;
      &#039;display:none&#039;,&#039;position:absolute&#039;,&#039;top:100%&#039;,&#039;right:0&#039;,&#039;margin-top:4px&#039;,&lt;br /&gt;
      &#039;min-width:150px&#039;,&#039;background:#fff&#039;,&#039;border-radius:6px&#039;,&lt;br /&gt;
      &#039;box-shadow:0 4px 16px rgba(0,0,0,0.18)&#039;,&#039;overflow:hidden&#039;,&#039;z-index:1000&#039;&lt;br /&gt;
    ].join( &#039;;&#039; );&lt;br /&gt;
&lt;br /&gt;
    var itemStyle = &#039;display:block;padding:10px 16px;font-size:0.9em;color:#2c1810;text-decoration:none;font-family:system-ui,sans-serif;background:#fff;&#039;;&lt;br /&gt;
    function makeMenuItem( href, label, id ) {&lt;br /&gt;
      var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
      a.href = href; a.setAttribute( &#039;role&#039;, &#039;menuitem&#039; );&lt;br /&gt;
      a.textContent = label; a.style.cssText = itemStyle;&lt;br /&gt;
      if ( id ) a.id = id;&lt;br /&gt;
      a.addEventListener( &#039;mouseover&#039;, function () { this.style.background = &#039;#f5efe9&#039;; } );&lt;br /&gt;
      a.addEventListener( &#039;mouseout&#039;,  function () { this.style.background = &#039;#fff&#039;; } );&lt;br /&gt;
      return a;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    menu.appendChild( makeMenuItem( wikiHref( &#039;Special:Profile&#039; ), &#039;Profile&#039; ) );&lt;br /&gt;
    menu.appendChild( makeMenuItem( &#039;#&#039;, &#039;Log out&#039;, &#039;gr-header-logout&#039; ) );&lt;br /&gt;
&lt;br /&gt;
    function setOpen( open ) {&lt;br /&gt;
      menu.style.display = open ? &#039;block&#039; : &#039;none&#039;;&lt;br /&gt;
      trigger.setAttribute( &#039;aria-expanded&#039;, open ? &#039;true&#039; : &#039;false&#039; );&lt;br /&gt;
      var caret = document.getElementById( &#039;gr-header-caret&#039; );&lt;br /&gt;
      if ( caret ) caret.style.transform = open ? &#039;rotate(180deg)&#039; : &#039;&#039;;&lt;br /&gt;
      if ( open ) { trigger.style.color = &#039;#fff&#039;; trigger.style.background = &#039;rgba(255,255,255,0.12)&#039;; }&lt;br /&gt;
      else { trigger.style.color = &#039;rgba(255,255,255,0.88)&#039;; trigger.style.background = &#039;transparent&#039;; }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    trigger.addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      e.stopPropagation();&lt;br /&gt;
      setOpen( menu.style.display === &#039;none&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
    document.addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      if ( !wrap.contains( e.target ) ) setOpen( false );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    // Logout: POST with CSRF token (same approach as the desktop dropdown)&lt;br /&gt;
    menu.querySelector( &#039;#gr-header-logout&#039; ).addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      e.preventDefault();&lt;br /&gt;
      if ( window.mw &amp;amp;&amp;amp; mw.user &amp;amp;&amp;amp; mw.user.tokens ) {&lt;br /&gt;
        var t = mw.user.tokens.get( &#039;csrfToken&#039; );&lt;br /&gt;
        if ( t ) {&lt;br /&gt;
          var script = ( mw.util &amp;amp;&amp;amp; mw.util.wikiScript ) ? mw.util.wikiScript() : &#039;/index.php&#039;;&lt;br /&gt;
          var form = document.createElement( &#039;form&#039; );&lt;br /&gt;
          form.method = &#039;post&#039;;&lt;br /&gt;
          form.action = script + &#039;?title=Special:UserLogout&#039;;&lt;br /&gt;
          form.style.display = &#039;none&#039;;&lt;br /&gt;
          form.innerHTML =&lt;br /&gt;
            &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;wpEditToken&amp;quot; value=&amp;quot;&#039; + String( t ).replace( /&amp;quot;/g, &#039;&amp;amp;quot;&#039; ) + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
            &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;title&amp;quot; value=&amp;quot;Special:UserLogout&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
            &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;returnto&amp;quot; value=&amp;quot;Main Page&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
          document.body.appendChild( form );&lt;br /&gt;
          form.submit();&lt;br /&gt;
          return;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if ( window.mw &amp;amp;&amp;amp; mw.Api ) {&lt;br /&gt;
        new mw.Api().postWithToken( &#039;csrf&#039;, { action: &#039;logout&#039; } )&lt;br /&gt;
          .done( function () { location.href = &#039;/Main_Page&#039;; } )&lt;br /&gt;
          .fail( function () { location.href = &#039;/index.php?title=Special:UserLogout&#039;; } );&lt;br /&gt;
      } else {&lt;br /&gt;
        location.href = &#039;/index.php?title=Special:UserLogout&#039;;&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    wrap.appendChild( trigger );&lt;br /&gt;
    wrap.appendChild( menu );&lt;br /&gt;
    return wrap;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Main page: by-Grantha / by-Author toggle ──────────────────────&lt;br /&gt;
( function () {&lt;br /&gt;
  function grHomeView( v ) {&lt;br /&gt;
    var gView = document.getElementById( &#039;gr-view-grantha&#039; );&lt;br /&gt;
    var aView = document.getElementById( &#039;gr-view-author&#039; );&lt;br /&gt;
    var gBtn  = document.getElementById( &#039;gr-toggle-grantha&#039; );&lt;br /&gt;
    var aBtn  = document.getElementById( &#039;gr-toggle-author&#039; );&lt;br /&gt;
    if ( !gView || !aView || !gBtn || !aBtn ) return;&lt;br /&gt;
    gView.style.display = ( v === &#039;grantha&#039; ) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
    aView.style.display = ( v === &#039;author&#039;  ) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
    gBtn.className = &#039;gr-toggle-btn&#039; + ( v === &#039;grantha&#039; ? &#039; gr-toggle-active&#039; : &#039;&#039; );&lt;br /&gt;
    aBtn.className = &#039;gr-toggle-btn&#039; + ( v === &#039;author&#039;  ? &#039; gr-toggle-active&#039; : &#039;&#039; );&lt;br /&gt;
    try { localStorage.setItem( &#039;gr_home_view&#039;, v ); } catch ( e ) {}&lt;br /&gt;
  }&lt;br /&gt;
  function initHomeToggle() {&lt;br /&gt;
    var gBtn = document.getElementById( &#039;gr-toggle-grantha&#039; );&lt;br /&gt;
    var aBtn = document.getElementById( &#039;gr-toggle-author&#039; );&lt;br /&gt;
    if ( !gBtn || !aBtn ) return;&lt;br /&gt;
    gBtn.addEventListener( &#039;click&#039;, function () { grHomeView( &#039;grantha&#039; ); } );&lt;br /&gt;
    aBtn.addEventListener( &#039;click&#039;, function () { grHomeView( &#039;author&#039; );  } );&lt;br /&gt;
    [ gBtn, aBtn ].forEach( function ( btn ) { btn.addEventListener( &#039;keydown&#039;, function ( e ) { if ( e.key === &#039;Enter&#039; || e.key === &#039; &#039; ) btn.click(); } ); } );&lt;br /&gt;
    var saved; try { saved = localStorage.getItem( &#039;gr_home_view&#039; ); } catch ( e ) {}&lt;br /&gt;
    if ( saved === &#039;author&#039; ) grHomeView( &#039;author&#039; );&lt;br /&gt;
  }&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) document.addEventListener( &#039;DOMContentLoaded&#039;, initHomeToggle );&lt;br /&gt;
  else initHomeToggle();&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Ullekha reference link handler ─────────────────────────────────&lt;br /&gt;
( function () {&lt;br /&gt;
  function highlightOnArrival() {&lt;br /&gt;
    var search = window.location.search;&lt;br /&gt;
    if ( !search ) return;&lt;br /&gt;
    var m = search.match( /[?&amp;amp;]hlUllekha=([^&amp;amp;]+)/ );&lt;br /&gt;
    if ( !m ) return;&lt;br /&gt;
    var needle;&lt;br /&gt;
    try { needle = decodeURIComponent( m[ 1 ] ); } catch ( e ) { return; }&lt;br /&gt;
    if ( !needle || needle.length &amp;lt; 4 ) return;&lt;br /&gt;
    function doHighlight() {&lt;br /&gt;
      var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
      if ( !content ) return;&lt;br /&gt;
      var snippet = needle.slice( 0, 40 );&lt;br /&gt;
      var found   = false;&lt;br /&gt;
      var spans = content.querySelectorAll( &#039;[data-deva]&#039; );&lt;br /&gt;
      for ( var i = 0; i &amp;lt; spans.length &amp;amp;&amp;amp; !found; i++ ) {&lt;br /&gt;
        var spanEl = spans[ i ];&lt;br /&gt;
        var orig   = spanEl.getAttribute( &#039;data-deva&#039; ) || &#039;&#039;;&lt;br /&gt;
        if ( orig.indexOf( snippet ) === -1 ) continue;&lt;br /&gt;
        var idx    = orig.indexOf( snippet );&lt;br /&gt;
        var hlText = orig.slice( idx, Math.min( idx + needle.length, orig.length ) );&lt;br /&gt;
        var mark   = document.createElement( &#039;mark&#039; );&lt;br /&gt;
        mark.className = &#039;gr-ullekha-highlight&#039;;&lt;br /&gt;
        mark.style.cssText = &#039;background:#fff176;border-radius:2px;padding:0 2px;&#039;;&lt;br /&gt;
        mark.textContent = hlText;&lt;br /&gt;
        var parent = spanEl.parentNode;&lt;br /&gt;
        if ( !parent ) continue;&lt;br /&gt;
        var before = document.createTextNode( orig.slice( 0, idx ) );&lt;br /&gt;
        var after  = document.createTextNode( orig.slice( idx + hlText.length ) );&lt;br /&gt;
        parent.insertBefore( before, spanEl ); parent.insertBefore( mark, spanEl ); parent.insertBefore( after, spanEl ); parent.removeChild( spanEl );&lt;br /&gt;
        setTimeout( function () { mark.scrollIntoView( { behavior: &#039;smooth&#039;, block: &#039;center&#039; } ); }, 100 );&lt;br /&gt;
        found = true;&lt;br /&gt;
      }&lt;br /&gt;
      if ( !found ) {&lt;br /&gt;
        var walker = document.createTreeWalker( content, NodeFilter.SHOW_TEXT );&lt;br /&gt;
        while ( walker.nextNode() &amp;amp;&amp;amp; !found ) {&lt;br /&gt;
          var node = walker.currentNode;&lt;br /&gt;
          var txt  = node.textContent || &#039;&#039;;&lt;br /&gt;
          if ( txt.indexOf( snippet ) === -1 ) continue;&lt;br /&gt;
          var idx2  = txt.indexOf( snippet );&lt;br /&gt;
          var mark2 = document.createElement( &#039;mark&#039; );&lt;br /&gt;
          mark2.className = &#039;gr-ullekha-highlight&#039;;&lt;br /&gt;
          mark2.style.cssText = &#039;background:#fff176;border-radius:2px;padding:0 2px;&#039;;&lt;br /&gt;
          mark2.textContent = txt.slice( idx2, Math.min( idx2 + needle.length, txt.length ) );&lt;br /&gt;
          var p = node.parentNode;&lt;br /&gt;
          p.insertBefore( document.createTextNode( txt.slice( 0, idx2 ) ), node );&lt;br /&gt;
          p.insertBefore( mark2, node );&lt;br /&gt;
          p.insertBefore( document.createTextNode( txt.slice( idx2 + mark2.textContent.length ) ), node );&lt;br /&gt;
          p.removeChild( node );&lt;br /&gt;
          setTimeout( function () { mark2.scrollIntoView( { behavior: &#039;smooth&#039;, block: &#039;center&#039; } ); }, 100 );&lt;br /&gt;
          found = true;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    doHighlight();&lt;br /&gt;
  }&lt;br /&gt;
  function wireUllekhaLinks() {&lt;br /&gt;
    document.querySelectorAll( &#039;.gr-ullekha-ref-link&#039; ).forEach( function ( wrap ) {&lt;br /&gt;
      var anchor = wrap.getAttribute( &#039;data-anchor&#039; ) || &#039;&#039;;&lt;br /&gt;
      var hl     = wrap.getAttribute( &#039;data-hl&#039; )     || &#039;&#039;;&lt;br /&gt;
      var a = wrap.querySelector( &#039;a&#039; );&lt;br /&gt;
      if ( !a ) return;&lt;br /&gt;
      var base = a.href.split( &#039;#&#039; )[ 0 ];&lt;br /&gt;
      var encoded = encodeURIComponent( hl );&lt;br /&gt;
      a.href = base + ( hl ? &#039;?hlUllekha=&#039; + encoded : &#039;&#039; ) + ( anchor ? &#039;#&#039; + anchor : &#039;&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) { document.addEventListener( &#039;DOMContentLoaded&#039;, function () { highlightOnArrival(); wireUllekhaLinks(); } ); }&lt;br /&gt;
  else { highlightOnArrival(); wireUllekhaLinks(); }&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
/* ── Search result highlight ──────────────────────────────────── */&lt;br /&gt;
/* EXACT REPLACEMENT for the search highlight IIFE in MediaWiki:Common.js.&lt;br /&gt;
 * Only changes from the original working version:&lt;br /&gt;
 *  - Mobile bar: full-width terracotta bottom bar instead of floating pill&lt;br /&gt;
 *  - showDismissBar: guard added (if !count return) to prevent empty bar&lt;br /&gt;
 * Everything else (storeQueryForLink, applyHighlight, wrapMatches) is&lt;br /&gt;
 * identical to the version that was working.&lt;br /&gt;
 */&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
  function storeQueryForLink( url, query ) {&lt;br /&gt;
    try {&lt;br /&gt;
      var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
      a.href = url;&lt;br /&gt;
      sessionStorage.setItem( &#039;gr_search_hl&#039;, JSON.stringify({&lt;br /&gt;
        query:    query,&lt;br /&gt;
        pathname: a.pathname&lt;br /&gt;
      }) );&lt;br /&gt;
    } catch(e) {}&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function applyHighlight() {&lt;br /&gt;
    var stored;&lt;br /&gt;
    try {&lt;br /&gt;
      stored = JSON.parse( sessionStorage.getItem( &#039;gr_search_hl&#039; ) || &#039;null&#039; );&lt;br /&gt;
    } catch(e) { return; }&lt;br /&gt;
    if ( !stored || !stored.query ) return;&lt;br /&gt;
&lt;br /&gt;
    var currentPath = window.location.pathname;&lt;br /&gt;
    var storedPath  = stored.pathname || &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
    function normPath(p) { return decodeURIComponent(p).replace(/\/+$/, &#039;&#039;); }&lt;br /&gt;
    if ( storedPath &amp;amp;&amp;amp; normPath(storedPath) !== normPath(currentPath) ) {&lt;br /&gt;
      try { sessionStorage.removeItem( &#039;gr_search_hl&#039; ); } catch(e) {}&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var query = stored.query.trim();&lt;br /&gt;
    if ( !query ) return;&lt;br /&gt;
&lt;br /&gt;
    try { sessionStorage.removeItem( &#039;gr_search_hl&#039; ); } catch(e) {}&lt;br /&gt;
&lt;br /&gt;
    var delays = [ 0, 200, 600 ];&lt;br /&gt;
    delays.forEach( function(ms) {&lt;br /&gt;
      setTimeout( function() {&lt;br /&gt;
        if ( document.querySelector( &#039;.gr-search-hl&#039; ) ) return;&lt;br /&gt;
        highlightText( query );&lt;br /&gt;
      }, ms );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function highlightText( query ) {&lt;br /&gt;
    var content = document.querySelector( &#039;#mw-content-text .mw-parser-output&#039; );&lt;br /&gt;
    if ( !content ) return;&lt;br /&gt;
&lt;br /&gt;
    var raw = query.replace( /^&amp;quot;|&amp;quot;$/g, &#039;&#039; ).trim();&lt;br /&gt;
    if ( !raw ) return;&lt;br /&gt;
&lt;br /&gt;
    var patterns = [];&lt;br /&gt;
    patterns.push( escapeRegex( raw ) );&lt;br /&gt;
    raw.split( /\s+/ ).forEach( function(w) {&lt;br /&gt;
      if ( w.length &amp;gt;= 2 ) patterns.push( escapeRegex( w ) );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    var matched = false;&lt;br /&gt;
    for ( var pi = 0; pi &amp;lt; patterns.length; pi++ ) {&lt;br /&gt;
      var re;&lt;br /&gt;
      try { re = new RegExp( &#039;(&#039; + patterns[pi] + &#039;)&#039;, &#039;gi&#039; ); }&lt;br /&gt;
      catch(e) { continue; }&lt;br /&gt;
      var count = wrapMatches( content, re );&lt;br /&gt;
      if ( count &amp;gt; 0 ) { matched = true; break; }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ( !matched ) return;&lt;br /&gt;
&lt;br /&gt;
    var first = document.querySelector( &#039;.gr-search-hl&#039; );&lt;br /&gt;
    if ( first ) {&lt;br /&gt;
      first.scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; });&lt;br /&gt;
      first.classList.add( &#039;gr-search-hl-pulse&#039; );&lt;br /&gt;
      setTimeout( function() { first.classList.remove( &#039;gr-search-hl-pulse&#039; ); }, 2000 );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    showDismissBar( query );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function escapeRegex( s ) {&lt;br /&gt;
    return s.replace( /[.*+?^${}()|[\]\\]/g, &#039;\\$&amp;amp;&#039; );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function wrapMatches( root, re ) {&lt;br /&gt;
    var count = 0;&lt;br /&gt;
    var walker = document.createTreeWalker(&lt;br /&gt;
      root, NodeFilter.SHOW_TEXT, {&lt;br /&gt;
        acceptNode: function( node ) {&lt;br /&gt;
          var p = node.parentElement;&lt;br /&gt;
          if ( !p ) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
          var tag = p.tagName.toUpperCase();&lt;br /&gt;
          if ( tag === &#039;SCRIPT&#039; || tag === &#039;STYLE&#039; || tag === &#039;NOSCRIPT&#039; ) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
          if ( p.classList.contains( &#039;gr-search-hl&#039; ) ) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
          return NodeFilter.FILTER_ACCEPT;&lt;br /&gt;
        }&lt;br /&gt;
      }, false&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    var nodes = [];&lt;br /&gt;
    var node;&lt;br /&gt;
    while ( ( node = walker.nextNode() ) ) nodes.push( node );&lt;br /&gt;
&lt;br /&gt;
    nodes.forEach( function( textNode ) {&lt;br /&gt;
      var val = textNode.nodeValue;&lt;br /&gt;
      if ( !re.test( val ) ) return;&lt;br /&gt;
      re.lastIndex = 0;&lt;br /&gt;
&lt;br /&gt;
      var frag = document.createDocumentFragment();&lt;br /&gt;
      var last = 0;&lt;br /&gt;
      var m;&lt;br /&gt;
      while ( ( m = re.exec( val ) ) !== null ) {&lt;br /&gt;
        if ( m.index &amp;gt; last ) {&lt;br /&gt;
          frag.appendChild( document.createTextNode( val.slice( last, m.index ) ) );&lt;br /&gt;
        }&lt;br /&gt;
        var span = document.createElement( &#039;span&#039; );&lt;br /&gt;
        span.className = &#039;gr-search-hl&#039;;&lt;br /&gt;
        span.textContent = m[0];&lt;br /&gt;
        frag.appendChild( span );&lt;br /&gt;
        last = m.index + m[0].length;&lt;br /&gt;
        count++;&lt;br /&gt;
      }&lt;br /&gt;
      if ( last &amp;lt; val.length ) {&lt;br /&gt;
        frag.appendChild( document.createTextNode( val.slice( last ) ) );&lt;br /&gt;
      }&lt;br /&gt;
      textNode.parentNode.replaceChild( frag, textNode );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    return count;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function showDismissBar( query ) {&lt;br /&gt;
    var existing = document.getElementById( &#039;gr-hl-bar&#039; );&lt;br /&gt;
    if ( existing ) existing.remove();&lt;br /&gt;
&lt;br /&gt;
    var count = document.querySelectorAll( &#039;.gr-search-hl&#039; ).length;&lt;br /&gt;
    if ( !count ) return;&lt;br /&gt;
&lt;br /&gt;
    var isMob = window.innerWidth &amp;lt; 768 || !!document.getElementById( &#039;mw-mf-viewport&#039; );&lt;br /&gt;
    var bar = document.createElement( &#039;div&#039; );&lt;br /&gt;
    bar.id = &#039;gr-hl-bar&#039;;&lt;br /&gt;
&lt;br /&gt;
    if ( isMob ) {&lt;br /&gt;
      bar.style.cssText = [&lt;br /&gt;
        &#039;position:fixed&#039;, &#039;bottom:0&#039;, &#039;left:0&#039;, &#039;right:0&#039;,&lt;br /&gt;
        &#039;z-index:10200&#039;, &#039;background:#b5451b&#039;, &#039;color:#fff&#039;,&lt;br /&gt;
        &#039;padding:0&#039;, &#039;display:flex&#039;, &#039;align-items:stretch&#039;,&lt;br /&gt;
        &#039;font-family:system-ui,sans-serif&#039;,&lt;br /&gt;
        &#039;box-shadow:0 -2px 12px rgba(0,0,0,0.25)&#039;, &#039;height:56px&#039;&lt;br /&gt;
      ].join(&#039;;&#039;);&lt;br /&gt;
&lt;br /&gt;
      var mbs = &#039;flex:1;display:flex;flex-direction:column;align-items:center;&#039; +&lt;br /&gt;
        &#039;justify-content:center;background:none;border:none;color:#fff;cursor:pointer;&#039; +&lt;br /&gt;
        &#039;padding:6px 4px;font-family:system-ui,sans-serif;font-size:11px;font-weight:500;&#039; +&lt;br /&gt;
        &#039;gap:3px;-webkit-tap-highlight-color:rgba(0,0,0,0.12);&#039;;&lt;br /&gt;
&lt;br /&gt;
      bar.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-prev&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;polyline points=&amp;quot;15 18 9 12 15 6&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;Prev&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-next&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;polyline points=&amp;quot;9 18 15 12 9 6&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;Next&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-results&amp;quot; style=&amp;quot;&#039; + mbs + &#039;flex:1.6;border-left:1px solid rgba(255,255,255,0.2);border-right:1px solid rgba(255,255,255,0.2);&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;circle cx=&amp;quot;11&amp;quot; cy=&amp;quot;11&amp;quot; r=&amp;quot;7&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;16.5&amp;quot; y1=&amp;quot;16.5&amp;quot; x2=&amp;quot;22&amp;quot; y2=&amp;quot;22&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;&#039; + count + &#039; match&#039; + (count===1?&#039;&#039;:&#039;es&#039;) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-dismiss&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;line x1=&amp;quot;18&amp;quot; y1=&amp;quot;6&amp;quot; x2=&amp;quot;6&amp;quot; y2=&amp;quot;18&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;6&amp;quot; y1=&amp;quot;6&amp;quot; x2=&amp;quot;18&amp;quot; y2=&amp;quot;18&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;Close&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
    } else {&lt;br /&gt;
      bar.style.cssText = [&lt;br /&gt;
        &#039;position:fixed&#039;, &#039;bottom:0&#039;, &#039;left:0&#039;, &#039;right:0&#039;, &#039;z-index:10200&#039;,&lt;br /&gt;
        &#039;background:#b5451b&#039;, &#039;color:#fff&#039;, &#039;padding:10px 16px&#039;,&lt;br /&gt;
        &#039;display:flex&#039;, &#039;align-items:center&#039;, &#039;justify-content:space-between&#039;,&lt;br /&gt;
        &#039;font-family:system-ui,sans-serif&#039;, &#039;font-size:14px&#039;,&lt;br /&gt;
        &#039;box-shadow:0 -2px 8px rgba(0,0,0,0.2)&#039;&lt;br /&gt;
      ].join(&#039;;&#039;);&lt;br /&gt;
&lt;br /&gt;
      var nav = document.createElement( &#039;div&#039; );&lt;br /&gt;
      nav.style.cssText = &#039;display:flex;align-items:center;gap:12px;&#039;;&lt;br /&gt;
      nav.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;🔍 &amp;lt;strong&amp;gt;&#039; + escHtml(query) + &#039;&amp;lt;/strong&amp;gt; — &#039; + count + &#039; match&#039; + (count===1?&#039;&#039;:&#039;es&#039;) + &#039;&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-prev&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;↑ Prev&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-next&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;↓ Next&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-results&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;← Results&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
      bar.appendChild( nav );&lt;br /&gt;
&lt;br /&gt;
      var db = document.createElement( &#039;button&#039; );&lt;br /&gt;
      db.id = &#039;gr-hl-dismiss&#039;; db.textContent = &#039;✕ Close&#039;;&lt;br /&gt;
      db.style.cssText = &#039;background:rgba(255,255,255,0.15);border:none;color:#fff;padding:4px 12px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&#039;;&lt;br /&gt;
      bar.appendChild( db );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    document.body.appendChild( bar );&lt;br /&gt;
&lt;br /&gt;
    var hlEls = Array.from( document.querySelectorAll( &#039;.gr-search-hl&#039; ) );&lt;br /&gt;
    var current = 0;&lt;br /&gt;
&lt;br /&gt;
    function goTo( idx ) {&lt;br /&gt;
      hlEls.forEach( function(el) { el.classList.remove( &#039;gr-search-hl-current&#039; ); } );&lt;br /&gt;
      current = ( ( idx % hlEls.length ) + hlEls.length ) % hlEls.length;&lt;br /&gt;
      hlEls[ current ].classList.add( &#039;gr-search-hl-current&#039; );&lt;br /&gt;
      hlEls[ current ].scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function dismiss() { clearHighlights(); bar.remove(); }&lt;br /&gt;
&lt;br /&gt;
    var nb = document.getElementById( &#039;gr-hl-next&#039; );&lt;br /&gt;
    var pb = document.getElementById( &#039;gr-hl-prev&#039; );&lt;br /&gt;
    var rb = document.getElementById( &#039;gr-hl-results&#039; );&lt;br /&gt;
    var db2 = document.getElementById( &#039;gr-hl-dismiss&#039; );&lt;br /&gt;
    if ( nb ) nb.onclick = function() { goTo( current + 1 ); };&lt;br /&gt;
    if ( pb ) pb.onclick = function() { goTo( current - 1 ); };&lt;br /&gt;
    if ( db2 ) db2.onclick = dismiss;&lt;br /&gt;
    if ( rb ) rb.onclick = function() {&lt;br /&gt;
      bar.remove(); clearHighlights();&lt;br /&gt;
      if ( window.showSearchDialog ) window.showSearchDialog( query );&lt;br /&gt;
    };&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function clearHighlights() {&lt;br /&gt;
    document.querySelectorAll( &#039;.gr-search-hl&#039; ).forEach( function( span ) {&lt;br /&gt;
      var p = span.parentNode; if ( !p ) return;&lt;br /&gt;
      while ( span.firstChild ) p.insertBefore( span.firstChild, span );&lt;br /&gt;
      p.removeChild( span );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function escHtml( s ) {&lt;br /&gt;
    return String(s).replace(/&amp;amp;/g,&#039;&amp;amp;amp;&#039;).replace(/&amp;lt;/g,&#039;&amp;amp;lt;&#039;).replace(/&amp;gt;/g,&#039;&amp;amp;gt;&#039;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function injectHighlightCSS() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-hl-css&#039; ) ) return;&lt;br /&gt;
    var s = document.createElement( &#039;style&#039; );&lt;br /&gt;
    s.id = &#039;gr-hl-css&#039;;&lt;br /&gt;
    s.textContent = [&lt;br /&gt;
      &#039;.gr-search-hl{background:#fff176;color:#1a1a1a;border-radius:2px;padding:0 1px;box-shadow:0 0 0 1px rgba(181,69,27,0.25);}&#039;,&lt;br /&gt;
      &#039;.gr-search-hl-current{background:#ffb300!important;box-shadow:0 0 0 2px #b5451b!important;}&#039;,&lt;br /&gt;
      &#039;@keyframes gr-hl-pulse{0%{background:#ffb300;}50%{background:#fff176;}100%{background:#fff176;}}&#039;,&lt;br /&gt;
      &#039;.gr-search-hl-pulse{animation:gr-hl-pulse 1.2s ease 2;}&#039;,&lt;br /&gt;
    ].join(&#039;&#039;);&lt;br /&gt;
    document.head.appendChild( s );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  injectHighlightCSS();&lt;br /&gt;
&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) {&lt;br /&gt;
    document.addEventListener( &#039;DOMContentLoaded&#039;, applyHighlight );&lt;br /&gt;
  } else {&lt;br /&gt;
    applyHighlight();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ( window.mw ) {&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function() {&lt;br /&gt;
      setTimeout( applyHighlight, 100 );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  window.grStoreSearchHL = storeQueryForLink;&lt;br /&gt;
&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
/* ═══════════════════════════════════════════════════════════════&lt;br /&gt;
   Mobile addon — only runs on Minerva (mobile) skin&lt;br /&gt;
   ═══════════════════════════════════════════════════════════════ */&lt;br /&gt;
( function () {&lt;br /&gt;
  if ( !document.body.classList.contains( &#039;skin-minerva&#039; ) ) return;&lt;br /&gt;
  function injectCSS() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-mob-css&#039; ) ) return;&lt;br /&gt;
    var s = document.createElement( &#039;style&#039; );&lt;br /&gt;
    s.id = &#039;gr-mob-css&#039;;&lt;br /&gt;
    s.textContent =&lt;br /&gt;
      &#039;body,#mw-mf-viewport,#mw-mf-page-center{padding-top:0!important;margin-top:0!important;}&#039; +&lt;br /&gt;
      &#039;html,body,#mw-mf-viewport,#mw-mf-page-center{overflow-x:hidden!important;max-width:100vw!important;}&#039; +&lt;br /&gt;
      &#039;header.header-container{background:#b5451b!important;position:sticky!important;top:0!important;z-index:300!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header{background:#b5451b!important;min-height:54px!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header .search-toggle,.minerva-header .minerva-user-notifications{display:none!important;}&#039; +&lt;br /&gt;
      &#039;.branding-box a{display:flex!important;align-items:center!important;text-decoration:none!important;max-width:calc(100vw - 80px)!important;}&#039; +&lt;br /&gt;
      &#039;.branding-box a::before{content:&amp;quot;&amp;quot;;display:block;width:30px;height:30px;flex-shrink:0;background:url(&amp;quot;/favicon.png&amp;quot;) center/contain no-repeat;margin-right:8px;}&#039; +&lt;br /&gt;
      &#039;.branding-box a span{color:#fff!important;font-size:16px!important;font-weight:700!important;font-family:system-ui,sans-serif!important;line-height:1.2!important;flex:1 1 auto!important;min-width:0!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header svg path,.minerva-header svg rect,.minerva-header svg circle{fill:#fff!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header label{color:#fff!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-tabs,.mw-portlet-associated-pages,.page-actions-menu,#page-secondary-actions,.last-modified-bar,.minerva-anon-talk-link{display:none!important;}&#039; +&lt;br /&gt;
      &#039;#gr-mob-menu-items{display:block!important;}&#039; +&lt;br /&gt;
      &#039;.mw-footer.minerva-footer,.footer-places,.footer-info,.minerva-footer-logo,#footer-places-about,#footer-places-disclaimers,#footer-places-privacy{display:none!important;}&#039; +&lt;br /&gt;
      &#039;#gr-static-bar{position:sticky!important;top:54px!important;z-index:200!important;}&#039; +&lt;br /&gt;
      &#039;.mf-section-0,.mf-section-1,.mf-section-2,.mf-section-3,.mf-section-4,.mf-section-5,.mf-section-6,.mf-section-7,.mf-section-8,.mf-section-9,.mf-section-10{display:block!important;visibility:visible!important;}&#039; +&lt;br /&gt;
      &#039;.collapsible-block{display:block!important;}&#039; +&lt;br /&gt;
      &#039;.section-heading .indicator,.collapsible-heading .indicator{display:none!important;}&#039; +&lt;br /&gt;
      &#039;.section-heading,.collapsible-heading{pointer-events:none!important;}&#039; +&lt;br /&gt;
      &#039;.gr-home-grid{flex-direction:column!important;flex-wrap:nowrap!important;gap:12px!important;width:100%!important;}&#039; +&lt;br /&gt;
      &#039;.gr-home-card{width:100%!important;max-width:100%!important;min-width:unset!important;box-sizing:border-box!important;flex:none!important;}&#039; +&lt;br /&gt;
      &#039;.gr-home-toggle{flex-wrap:wrap!important;}&#039; +&lt;br /&gt;
      &#039;.mw-parser-output{font-size:18px!important;line-height:1.8!important;}&#039; +&lt;br /&gt;
      &#039;.mw-parser-output h2,.mw-parser-output h3{width:100%!important;}&#039; +&lt;br /&gt;
      &#039;.bhashyam-block{margin-left:8px!important;}&#039; +&lt;br /&gt;
      &#039;#footer,.mw-footer,.catlinks,#catlinks{display:none!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-panel{position:fixed!important;top:0!important;left:0!important;bottom:0!important;width:82vw!important;max-width:340px!important;background:#fff!important;z-index:10400!important;box-shadow:4px 0 28px rgba(0,0,0,0.22)!important;overflow-y:auto!important;padding:0 0 40px!important;transform:translateX(-110%)!important;transition:transform 0.26s cubic-bezier(0.4,0,0.2,1)!important;display:block!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-panel.open{transform:translateX(0)!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-backdrop{display:none!important;position:fixed!important;inset:0!important;background:rgba(0,0,0,0.4)!important;z-index:10399!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-backdrop.open{display:block!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-header{position:sticky!important;top:0!important;background:#fff!important;display:flex!important;align-items:center!important;justify-content:space-between!important;padding:16px 16px 12px!important;border-bottom:1px solid #f0ebe6!important;z-index:1!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-title{font-size:13px!important;font-weight:700!important;text-transform:uppercase!important;letter-spacing:0.08em!important;color:#b5451b!important;font-family:system-ui,sans-serif!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-close{background:none!important;border:none!important;font-size:22px!important;color:#999!important;cursor:pointer!important;padding:4px 8px!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-body{padding:12px 16px!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-body a{display:block!important;font-size:16px!important;line-height:1.6!important;color:#2c1810!important;text-decoration:none!important;padding:8px 0!important;border-bottom:1px solid #f5f0ed!important;}&#039;;&lt;br /&gt;
    document.head.appendChild( s );&lt;br /&gt;
  }&lt;br /&gt;
  function expandSections() {&lt;br /&gt;
    document.querySelectorAll( &#039;[class*=&amp;quot;mf-section-&amp;quot;], .collapsible-block&#039; ).forEach( function ( el ) { el.removeAttribute( &#039;hidden&#039; ); el.style.setProperty( &#039;display&#039;, &#039;block&#039;, &#039;important&#039; ); el.style.setProperty( &#039;visibility&#039;, &#039;visible&#039;, &#039;important&#039; ); el.removeAttribute( &#039;aria-hidden&#039; ); } );&lt;br /&gt;
    document.querySelectorAll( &#039;.section-heading, .collapsible-heading&#039; ).forEach( function ( el ) { el.setAttribute( &#039;aria-expanded&#039;, &#039;true&#039; ); el.style.setProperty( &#039;pointer-events&#039;, &#039;none&#039;, &#039;important&#039; ); } );&lt;br /&gt;
  }&lt;br /&gt;
  function watchSections() {&lt;br /&gt;
    var t = null;&lt;br /&gt;
    var obs = new MutationObserver( function ( ms ) { if ( ms.some( function(m){ return m.attributeName === &#039;hidden&#039;; } ) ) { clearTimeout(t); t = setTimeout( expandSections, 30 ); } } );&lt;br /&gt;
    obs.observe( document.querySelector( &#039;#mw-content-text&#039; ) || document.body, { subtree:true, attributes:true, attributeFilter:[&#039;hidden&#039;,&#039;aria-hidden&#039;] } );&lt;br /&gt;
  }&lt;br /&gt;
  function watchBodyPadding() {&lt;br /&gt;
    new MutationObserver( function () { if ( document.body.style.paddingTop &amp;amp;&amp;amp; document.body.style.paddingTop !== &#039;0px&#039; ) document.body.style.paddingTop = &#039;&#039;; } ).observe( document.body, { attributes:true, attributeFilter:[&#039;style&#039;] } );&lt;br /&gt;
  }&lt;br /&gt;
  function injectMenuLinks() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-mob-menu-items&#039; ) ) return;&lt;br /&gt;
    var navDrawer = document.querySelector( &#039;.navigation-drawer&#039; );&lt;br /&gt;
    if ( !navDrawer ) return;&lt;br /&gt;
    var wrap = document.createElement( &#039;div&#039; ); wrap.id = &#039;gr-mob-menu-items&#039;; wrap.style.cssText = &#039;width:100%;background:#fff;margin-top:8px;&#039;;&lt;br /&gt;
    var itemStyle = &#039;display:flex;align-items:center;gap:14px;padding:15px 20px;font-size:16px;color:#2c1810;text-decoration:none;font-family:system-ui,sans-serif;border-bottom:1px solid #f0ebe6;background:#fff;&#039;;&lt;br /&gt;
    function makeItem( href, label ) { var a = document.createElement( &#039;a&#039; ); a.href = href; a.style.cssText = itemStyle; a.innerHTML = &#039;&amp;lt;span&amp;gt;&#039; + label + &#039;&amp;lt;/span&amp;gt;&#039;; return a; }&lt;br /&gt;
    wrap.appendChild( makeItem( &#039;/Main_Page&#039;, &#039;Home&#039; ) );&lt;br /&gt;
    wrap.appendChild( makeItem( &#039;/My_wiki:Help&#039;, &#039;Help&#039; ) );&lt;br /&gt;
    wrap.appendChild( makeItem( &#039;/My_wiki:About&#039;, &#039;About&#039; ) );&lt;br /&gt;
    var userName = window.mw ? mw.config.get( &#039;wgUserName&#039; ) : null;&lt;br /&gt;
    if ( userName ) {&lt;br /&gt;
      wrap.appendChild( makeItem( ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) ? mw.util.getUrl( &#039;Special:Profile&#039; ) : &#039;/Special:Profile&#039;, &#039;Profile&#039; ) );&lt;br /&gt;
      var la = document.querySelector( &#039;a[href*=&amp;quot;action=logout&amp;quot;]&#039; );&lt;br /&gt;
      wrap.appendChild( makeItem( la ? la.href : &#039;/index.php?title=Special:UserLogout&#039;, &#039;Log out&#039; ) );&lt;br /&gt;
    }&lt;br /&gt;
    else wrap.appendChild( makeItem( &#039;/index.php?title=Special:UserLogin&#039;, &#039;Log in&#039; ) );&lt;br /&gt;
    var pageLeft = document.getElementById( &#039;mw-mf-page-left&#039; );&lt;br /&gt;
    if ( pageLeft ) { while ( pageLeft.firstChild ) pageLeft.removeChild( pageLeft.firstChild ); pageLeft.style.removeProperty( &#039;display&#039; ); pageLeft.appendChild( wrap ); }&lt;br /&gt;
    else navDrawer.appendChild( wrap );&lt;br /&gt;
  }&lt;br /&gt;
  var _tocDone = false;&lt;br /&gt;
  function initToc() {&lt;br /&gt;
    if ( _tocDone ) return;&lt;br /&gt;
    var tocList = document.querySelector( &#039;.vector-toc-contents, .vector-toc .vector-toc-list&#039; );&lt;br /&gt;
    if ( !tocList || !tocList.querySelector( &#039;li&#039; ) ) return;&lt;br /&gt;
    _tocDone = true;&lt;br /&gt;
    var bd = document.createElement( &#039;div&#039; ); bd.className = &#039;gr-mob-toc-backdrop&#039;; document.body.appendChild( bd );&lt;br /&gt;
    var panel = document.createElement( &#039;div&#039; ); panel.className = &#039;gr-mob-toc-panel&#039;;&lt;br /&gt;
    var hdr = document.createElement( &#039;div&#039; ); hdr.className = &#039;gr-mob-toc-header&#039;;&lt;br /&gt;
    var ttl = document.createElement( &#039;div&#039; ); ttl.className = &#039;gr-mob-toc-title&#039;; ttl.textContent = &#039;विषयसूची&#039;;&lt;br /&gt;
    var cls = document.createElement( &#039;button&#039; ); cls.className = &#039;gr-mob-toc-close&#039;; cls.textContent = &#039;✕&#039;;&lt;br /&gt;
    hdr.appendChild( ttl ); hdr.appendChild( cls ); panel.appendChild( hdr );&lt;br /&gt;
    var body = document.createElement( &#039;div&#039; ); body.className = &#039;gr-mob-toc-body&#039;; body.appendChild( tocList.cloneNode( true ) ); panel.appendChild( body ); document.body.appendChild( panel );&lt;br /&gt;
    var btn = document.createElement( &#039;button&#039; ); btn.id = &#039;gr-mob-toc-btn&#039;; btn.innerHTML = &#039;☰ &amp;amp;nbsp;Contents&#039;;&lt;br /&gt;
    btn.style.cssText = &#039;position:fixed;bottom:148px;left:16px;z-index:9100;background:#fff;border:1.5px solid #b5451b;border-radius:24px;padding:10px 16px;font-size:15px;font-family:system-ui,sans-serif;color:#b5451b;font-weight:600;box-shadow:0 3px 14px rgba(0,0,0,0.15);cursor:pointer;&#039;;&lt;br /&gt;
    document.body.appendChild( btn );&lt;br /&gt;
    function open()  { panel.classList.add(&#039;open&#039;); bd.classList.add(&#039;open&#039;); document.body.style.overflow=&#039;hidden&#039;; }&lt;br /&gt;
    function close() { panel.classList.remove(&#039;open&#039;); bd.classList.remove(&#039;open&#039;); document.body.style.overflow=&#039;&#039;; }&lt;br /&gt;
    btn.onclick = open; cls.onclick = close; bd.onclick = close;&lt;br /&gt;
    body.querySelectorAll(&#039;a&#039;).forEach(function(a){ a.onclick = close; });&lt;br /&gt;
  }&lt;br /&gt;
  function injectMoolaUllekhaLinks() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-mob-doc-nav&#039; ) ) return;&lt;br /&gt;
    var pageName = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039; ) ) || &#039;&#039;;&lt;br /&gt;
    if ( pageName === &#039;Main_Page&#039; || !pageName ) return;&lt;br /&gt;
    function wikiUrl( slug ) { if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( slug ); return ( ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039; ).replace( &#039;$1&#039;, encodeURIComponent( slug ).replace( /%2F/g, &#039;/&#039; ) ); }&lt;br /&gt;
    var teekaPage = document.querySelector( &#039;.gr-teeka-page&#039; );&lt;br /&gt;
    var primarySlug = teekaPage ? ( teekaPage.getAttribute( &#039;data-primary&#039; ) || pageName.split(&#039;/&#039;)[0] ) : pageName.split(&#039;/&#039;)[0];&lt;br /&gt;
    var docTitleEl = document.querySelector( &#039;.gr-doc-title&#039; );&lt;br /&gt;
    var hasMoolaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-moola&#039; ) === &#039;1&#039;;&lt;br /&gt;
    var hasUllekhaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-ullekha&#039; ) === &#039;1&#039;;&lt;br /&gt;
    var showMoolam = !!teekaPage || hasMoolaPage, showUllekha = hasUllekhaPage || !!teekaPage;&lt;br /&gt;
    if ( !showMoolam &amp;amp;&amp;amp; !showUllekha ) return;&lt;br /&gt;
    var nav = document.createElement( &#039;div&#039; ); nav.id = &#039;gr-mob-doc-nav&#039;;&lt;br /&gt;
    nav.style.cssText = &#039;display:flex;gap:10px;padding:10px 16px 8px;background:#fdf8f5;border-bottom:1px solid #f0e0d6;font-family:system-ui,sans-serif;&#039;;&lt;br /&gt;
    function makeLink( href, label ) { var a = document.createElement( &#039;a&#039; ); a.href = href; a.textContent = label; a.style.cssText = &#039;display:inline-flex;align-items:center;padding:5px 16px;border-radius:20px;background:#fff;border:1.5px solid #e8cfc4;color:#b5451b;font-size:14px;font-weight:600;text-decoration:none;&#039;; return a; }&lt;br /&gt;
    if ( teekaPage ) nav.appendChild( makeLink( wikiUrl( primarySlug ), &#039;मूल&#039; ) );&lt;br /&gt;
    else if ( hasMoolaPage ) nav.appendChild( makeLink( wikiUrl( primarySlug + &#039;/Moola&#039; ), &#039;मूलम्&#039; ) );&lt;br /&gt;
    if ( showUllekha ) nav.appendChild( makeLink( wikiUrl( primarySlug + &#039;/Ullekha&#039; ), &#039;उल्लेख&#039; ) );&lt;br /&gt;
    var h1 = document.getElementById( &#039;firstHeading&#039; ) || document.querySelector( &#039;.page-heading, h1.firstHeading, .mw-first-heading&#039; );&lt;br /&gt;
    if ( h1 &amp;amp;&amp;amp; h1.parentNode ) h1.parentNode.insertBefore( nav, h1.nextSibling );&lt;br /&gt;
    else { var ct = document.getElementById( &#039;mw-content-text&#039; ); if ( ct ) ct.insertBefore( nav, ct.firstChild ); }&lt;br /&gt;
  }&lt;br /&gt;
  injectCSS(); watchBodyPadding();&lt;br /&gt;
  function boot() { expandSections(); watchSections(); injectMenuLinks(); injectMoolaUllekhaLinks(); [100,400,900,1800].forEach(function(ms){ setTimeout(expandSections,ms); }); setTimeout(initToc,700); }&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) document.addEventListener( &#039;DOMContentLoaded&#039;, boot );&lt;br /&gt;
  else boot();&lt;br /&gt;
  if ( window.mw ) mw.hook( &#039;wikipage.content&#039; ).add(function(){ setTimeout(function(){ expandSections(); injectMenuLinks(); injectMoolaUllekhaLinks(); initToc(); },300); });&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
  mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
    setTimeout( function () {&lt;br /&gt;
      var blocks = document.querySelectorAll( &#039;.collapsible-block, .toggle-list&#039; );&lt;br /&gt;
      Array.prototype.forEach.call( blocks, function ( el ) { if ( !el.parentNode ) { try { el.remove(); } catch(e) {} } } );&lt;br /&gt;
    }, 0 );&lt;br /&gt;
  } );&lt;br /&gt;
  if ( mw.config.get( &#039;wgPageName&#039; ) !== &#039;Main_Page&#039; ) return;&lt;br /&gt;
  mw.loader.using( &#039;mediawiki.util&#039; ).done( function () {&lt;br /&gt;
    $( function () { applyHomeToggleOffset(); window.addEventListener( &#039;resize&#039;, applyHomeToggleOffset, { passive: true } ); setTimeout( applyHomeToggleOffset, 300 ); setTimeout( applyHomeToggleOffset, 800 ); } );&lt;br /&gt;
  } );&lt;br /&gt;
  function applyHomeToggleOffset() {&lt;br /&gt;
    var bar = document.getElementById( &#039;gr-static-bar&#039; ); if ( !bar ) return;&lt;br /&gt;
    var barBottom = Math.round( bar.getBoundingClientRect().bottom );&lt;br /&gt;
    [ document.getElementById(&#039;gr-home&#039;), document.getElementById(&#039;gr-home-toggle&#039;), document.querySelector(&#039;#mw-content-text .mw-parser-output &amp;gt; .gr-home, #mw-content-text .mw-parser-output &amp;gt; *:first-child&#039;) ].forEach( function(el){ if(el) el.style.scrollMarginTop=(barBottom+4)+&#039;px&#039;; } );&lt;br /&gt;
    var isMob = window.innerWidth &amp;lt; 768 || !!document.getElementById( &#039;mw-mf-viewport&#039; );&lt;br /&gt;
    if ( isMob ) { var toggleEl = document.getElementById(&#039;gr-home-toggle&#039;); if ( toggleEl ) { var tr = toggleEl.getBoundingClientRect(); if ( tr.top &amp;lt; barBottom ) { var cp = parseInt(window.getComputedStyle(document.body).paddingTop,10)||0; document.body.style.paddingTop=(cp+(barBottom-tr.top)+4)+&#039;px&#039;; } } }&lt;br /&gt;
  }&lt;br /&gt;
  $( function () {&lt;br /&gt;
    var $toggle=$(&#039;#gr-home-toggle&#039;),$viewG=$(&#039;#gr-view-grantha&#039;),$viewA=$(&#039;#gr-view-author&#039;),$btnG=$(&#039;#gr-toggle-grantha&#039;),$btnA=$(&#039;#gr-toggle-author&#039;);&lt;br /&gt;
    if(!$toggle.length||!$viewG.length||!$viewA.length)return; if($toggle.data(&#039;gr-wired&#039;))return; $toggle.data(&#039;gr-wired&#039;,true);&lt;br /&gt;
    function showView(which){ if(which===&#039;grantha&#039;){$viewG.show();$viewA.hide();$btnG.addClass(&#039;gr-toggle-active&#039;);$btnA.removeClass(&#039;gr-toggle-active&#039;);}else{$viewA.show();$viewG.hide();$btnA.addClass(&#039;gr-toggle-active&#039;);$btnG.removeClass(&#039;gr-toggle-active&#039;);} try{localStorage.setItem(&#039;grantha_home_tab&#039;,which);}catch(e){} }&lt;br /&gt;
    $btnG.on(&#039;click keydown&#039;,function(e){if(e.type===&#039;keydown&#039;&amp;amp;&amp;amp;e.key!==&#039;Enter&#039;&amp;amp;&amp;amp;e.key!==&#039; &#039;)return;showView(&#039;grantha&#039;);});&lt;br /&gt;
    $btnA.on(&#039;click keydown&#039;,function(e){if(e.type===&#039;keydown&#039;&amp;amp;&amp;amp;e.key!==&#039;Enter&#039;&amp;amp;&amp;amp;e.key!==&#039; &#039;)return;showView(&#039;author&#039;);});&lt;br /&gt;
    try{var saved=localStorage.getItem(&#039;grantha_home_tab&#039;);if(saved===&#039;author&#039;)showView(&#039;author&#039;);else showView(&#039;grantha&#039;);}catch(e){showView(&#039;grantha&#039;);}&lt;br /&gt;
  } );&lt;br /&gt;
}() );&lt;br /&gt;
// ── Replace MediaWiki user links with a single username dropdown (Profile + Logout) ──&lt;br /&gt;
( function () {&lt;br /&gt;
  function wikiHref( title ) {&lt;br /&gt;
    if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( title );&lt;br /&gt;
    var ap = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
    return ap.replace( &#039;$1&#039;, title );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function buildLogoutForm( token ) {&lt;br /&gt;
    token = token || &#039;&#039;;&lt;br /&gt;
    var esc = String( token ).replace( /&amp;quot;/g, &#039;&amp;amp;quot;&#039; );&lt;br /&gt;
    var script = ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.wikiScript ) ? mw.util.wikiScript() : &#039;/index.php&#039;;&lt;br /&gt;
    var form = document.createElement( &#039;form&#039; );&lt;br /&gt;
    form.method = &#039;post&#039;;&lt;br /&gt;
    form.action = script + &#039;?title=Special:UserLogout&#039;;&lt;br /&gt;
    form.style.display = &#039;none&#039;;&lt;br /&gt;
    form.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;wpEditToken&amp;quot; value=&amp;quot;&#039; + esc + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;title&amp;quot; value=&amp;quot;Special:UserLogout&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;returnto&amp;quot; value=&amp;quot;Main Page&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
    document.body.appendChild( form );&lt;br /&gt;
    return form;&lt;br /&gt;
  }&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.js&amp;diff=6211</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.js&amp;diff=6211"/>
		<updated>2026-06-12T17:33:59Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* MediaWiki:Common.js — grantha.io  (v7) */&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
  var LS_SCRIPT_KEY = &#039;grantha_reader_script&#039;;&lt;br /&gt;
  var currentScript = &#039;deva&#039;;&lt;br /&gt;
&lt;br /&gt;
  function devanagariToIAST( text ) {&lt;br /&gt;
    var CONSONANTS = {&lt;br /&gt;
      &#039;क&#039;:&#039;k&#039;,&#039;ख&#039;:&#039;kh&#039;,&#039;ग&#039;:&#039;g&#039;,&#039;घ&#039;:&#039;gh&#039;,&#039;ङ&#039;:&#039;ṅ&#039;,&lt;br /&gt;
      &#039;च&#039;:&#039;c&#039;,&#039;छ&#039;:&#039;ch&#039;,&#039;ज&#039;:&#039;j&#039;,&#039;झ&#039;:&#039;jh&#039;,&#039;ञ&#039;:&#039;ñ&#039;,&lt;br /&gt;
      &#039;ट&#039;:&#039;ṭ&#039;,&#039;ठ&#039;:&#039;ṭh&#039;,&#039;ड&#039;:&#039;ḍ&#039;,&#039;ढ&#039;:&#039;ḍh&#039;,&#039;ण&#039;:&#039;ṇ&#039;,&lt;br /&gt;
      &#039;त&#039;:&#039;t&#039;,&#039;थ&#039;:&#039;th&#039;,&#039;द&#039;:&#039;d&#039;,&#039;ध&#039;:&#039;dh&#039;,&#039;न&#039;:&#039;n&#039;,&lt;br /&gt;
      &#039;प&#039;:&#039;p&#039;,&#039;फ&#039;:&#039;ph&#039;,&#039;ब&#039;:&#039;b&#039;,&#039;भ&#039;:&#039;bh&#039;,&#039;म&#039;:&#039;m&#039;,&lt;br /&gt;
      &#039;य&#039;:&#039;y&#039;,&#039;र&#039;:&#039;r&#039;,&#039;ल&#039;:&#039;l&#039;,&#039;ळ&#039;:&#039;ḷ&#039;,&#039;व&#039;:&#039;v&#039;,&lt;br /&gt;
      &#039;श&#039;:&#039;ś&#039;,&#039;ष&#039;:&#039;ṣ&#039;,&#039;स&#039;:&#039;s&#039;,&#039;ह&#039;:&#039;h&#039;&lt;br /&gt;
    };&lt;br /&gt;
    var DIACRITICS = {&lt;br /&gt;
      &#039;ा&#039;:&#039;ā&#039;,&#039;ि&#039;:&#039;i&#039;,&#039;ी&#039;:&#039;ī&#039;,&#039;ु&#039;:&#039;u&#039;,&#039;ू&#039;:&#039;ū&#039;,&lt;br /&gt;
      &#039;ृ&#039;:&#039;ṛ&#039;,&#039;ॄ&#039;:&#039;ṝ&#039;,&#039;े&#039;:&#039;e&#039;,&#039;ै&#039;:&#039;ai&#039;,&#039;ो&#039;:&#039;o&#039;,&#039;ौ&#039;:&#039;au&#039;&lt;br /&gt;
    };&lt;br /&gt;
    var VOWELS = {&lt;br /&gt;
      &#039;अ&#039;:&#039;a&#039;,&#039;आ&#039;:&#039;ā&#039;,&#039;इ&#039;:&#039;i&#039;,&#039;ई&#039;:&#039;ī&#039;,&#039;उ&#039;:&#039;u&#039;,&#039;ऊ&#039;:&#039;ū&#039;,&lt;br /&gt;
      &#039;ऋ&#039;:&#039;ṛ&#039;,&#039;ॠ&#039;:&#039;ṝ&#039;,&#039;ए&#039;:&#039;e&#039;,&#039;ऐ&#039;:&#039;ai&#039;,&#039;ओ&#039;:&#039;o&#039;,&#039;औ&#039;:&#039;au&#039;,&#039;ऽ&#039;:&amp;quot;&#039;&amp;quot;&lt;br /&gt;
    };&lt;br /&gt;
    var MISC = {&lt;br /&gt;
      &#039;ं&#039;:&#039;ṃ&#039;,&#039;ः&#039;:&#039;ḥ&#039;,&#039;ँ&#039;:&#039;m̐&#039;,&#039;ॐ&#039;:&#039;oṃ&#039;,&lt;br /&gt;
      &#039;०&#039;:&#039;0&#039;,&#039;१&#039;:&#039;1&#039;,&#039;२&#039;:&#039;2&#039;,&#039;३&#039;:&#039;3&#039;,&#039;४&#039;:&#039;4&#039;,&lt;br /&gt;
      &#039;५&#039;:&#039;5&#039;,&#039;६&#039;:&#039;6&#039;,&#039;७&#039;:&#039;7&#039;,&#039;८&#039;:&#039;8&#039;,&#039;९&#039;:&#039;9&#039;&lt;br /&gt;
    };&lt;br /&gt;
    var HALANTA = &#039;्&#039;;&lt;br /&gt;
    var chars = Array.from( text );&lt;br /&gt;
    var result = &#039;&#039;;&lt;br /&gt;
    var i = 0;&lt;br /&gt;
    while ( i &amp;lt; chars.length ) {&lt;br /&gt;
      var ch   = chars[ i ];&lt;br /&gt;
      var next = chars[ i + 1 ];&lt;br /&gt;
      if ( CONSONANTS[ ch ] ) {&lt;br /&gt;
        var base = CONSONANTS[ ch ];&lt;br /&gt;
        if ( next === HALANTA )          { result += base;               i += 2; }&lt;br /&gt;
        else if ( DIACRITICS[ next ] )   { result += base + DIACRITICS[ next ]; i += 2; }&lt;br /&gt;
        else if ( next === &#039;ं&#039; || next === &#039;ः&#039; ) { result += base + &#039;a&#039; + MISC[ next ]; i += 2; }&lt;br /&gt;
        else                             { result += base + &#039;a&#039;;         i++;    }&lt;br /&gt;
      } else if ( VOWELS[ ch ] )         { result += VOWELS[ ch ];       i++; }&lt;br /&gt;
      else if ( DIACRITICS[ ch ] )       { result += DIACRITICS[ ch ];   i++; }&lt;br /&gt;
      else if ( MISC[ ch ] )             { result += MISC[ ch ];         i++; }&lt;br /&gt;
      else                               { result += ch;                 i++; }&lt;br /&gt;
    }&lt;br /&gt;
    return result;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var SCRIPT_MAP = {&lt;br /&gt;
    kn: {&lt;br /&gt;
      &#039;अ&#039;:&#039;ಅ&#039;,&#039;आ&#039;:&#039;ಆ&#039;,&#039;इ&#039;:&#039;ಇ&#039;,&#039;ई&#039;:&#039;ಈ&#039;,&#039;उ&#039;:&#039;ಉ&#039;,&#039;ऊ&#039;:&#039;ಊ&#039;,&#039;ऋ&#039;:&#039;ಋ&#039;,&lt;br /&gt;
      &#039;ए&#039;:&#039;ಏ&#039;,&#039;ऐ&#039;:&#039;ಐ&#039;,&#039;ओ&#039;:&#039;ಓ&#039;,&#039;औ&#039;:&#039;ಔ&#039;,&#039;ऽ&#039;:&#039;ಽ&#039;,&lt;br /&gt;
      &#039;क&#039;:&#039;ಕ&#039;,&#039;ख&#039;:&#039;ಖ&#039;,&#039;ग&#039;:&#039;ಗ&#039;,&#039;घ&#039;:&#039;ಘ&#039;,&#039;ङ&#039;:&#039;ಙ&#039;,&lt;br /&gt;
      &#039;च&#039;:&#039;ಚ&#039;,&#039;छ&#039;:&#039;ಛ&#039;,&#039;ज&#039;:&#039;ಜ&#039;,&#039;झ&#039;:&#039;ಝ&#039;,&#039;ञ&#039;:&#039;ಞ&#039;,&lt;br /&gt;
      &#039;ट&#039;:&#039;ಟ&#039;,&#039;ठ&#039;:&#039;ಠ&#039;,&#039;ड&#039;:&#039;ಡ&#039;,&#039;ढ&#039;:&#039;ಢ&#039;,&#039;ण&#039;:&#039;ಣ&#039;,&lt;br /&gt;
      &#039;त&#039;:&#039;ತ&#039;,&#039;थ&#039;:&#039;ಥ&#039;,&#039;द&#039;:&#039;ದ&#039;,&#039;ध&#039;:&#039;ಧ&#039;,&#039;न&#039;:&#039;ನ&#039;,&lt;br /&gt;
      &#039;प&#039;:&#039;ಪ&#039;,&#039;फ&#039;:&#039;ಫ&#039;,&#039;ब&#039;:&#039;ಬ&#039;,&#039;भ&#039;:&#039;ಭ&#039;,&#039;म&#039;:&#039;ಮ&#039;,&lt;br /&gt;
      &#039;य&#039;:&#039;ಯ&#039;,&#039;र&#039;:&#039;ರ&#039;,&#039;ल&#039;:&#039;ಲ&#039;,&#039;व&#039;:&#039;ವ&#039;,&lt;br /&gt;
      &#039;श&#039;:&#039;ಶ&#039;,&#039;ष&#039;:&#039;ಷ&#039;,&#039;स&#039;:&#039;ಸ&#039;,&#039;ह&#039;:&#039;ಹ&#039;,&lt;br /&gt;
      &#039;ा&#039;:&#039;ಾ&#039;,&#039;ि&#039;:&#039;ಿ&#039;,&#039;ी&#039;:&#039;ೀ&#039;,&#039;ु&#039;:&#039;ು&#039;,&#039;ू&#039;:&#039;ೂ&#039;,&lt;br /&gt;
      &#039;ृ&#039;:&#039;ೃ&#039;,&#039;े&#039;:&#039;ೇ&#039;,&#039;ै&#039;:&#039;ೈ&#039;,&#039;ो&#039;:&#039;ೋ&#039;,&#039;ौ&#039;:&#039;ೌ&#039;,&lt;br /&gt;
      &#039;ं&#039;:&#039;ಂ&#039;,&#039;ः&#039;:&#039;ಃ&#039;,&#039;्&#039;:&#039;್&#039;,&lt;br /&gt;
      &#039;०&#039;:&#039;೦&#039;,&#039;१&#039;:&#039;೧&#039;,&#039;२&#039;:&#039;೨&#039;,&#039;३&#039;:&#039;೩&#039;,&#039;४&#039;:&#039;೪&#039;,&lt;br /&gt;
      &#039;५&#039;:&#039;೫&#039;,&#039;६&#039;:&#039;೬&#039;,&#039;७&#039;:&#039;೭&#039;,&#039;८&#039;:&#039;೮&#039;,&#039;९&#039;:&#039;೯&#039;&lt;br /&gt;
    },&lt;br /&gt;
    ta: {&lt;br /&gt;
      &#039;अ&#039;:&#039;அ&#039;,&#039;आ&#039;:&#039;ஆ&#039;,&#039;इ&#039;:&#039;இ&#039;,&#039;ई&#039;:&#039;ஈ&#039;,&#039;उ&#039;:&#039;உ&#039;,&#039;ऊ&#039;:&#039;ஊ&#039;,&lt;br /&gt;
      &#039;ऋ&#039;:&#039;ரு&#039;,&#039;ॠ&#039;:&#039;ரூ&#039;,&lt;br /&gt;
      &#039;ए&#039;:&#039;ஏ&#039;,&#039;ऐ&#039;:&#039;ஐ&#039;,&#039;ओ&#039;:&#039;ஓ&#039;,&#039;औ&#039;:&#039;ஔ&#039;,&lt;br /&gt;
      &#039;क&#039;:&#039;க&#039;,&#039;ख&#039;:&#039;க&#039;,&#039;ग&#039;:&#039;க&#039;,&#039;घ&#039;:&#039;க&#039;,&#039;ङ&#039;:&#039;ங&#039;,&lt;br /&gt;
      &#039;च&#039;:&#039;ச&#039;,&#039;छ&#039;:&#039;ச&#039;,&#039;ज&#039;:&#039;ஜ&#039;,&#039;झ&#039;:&#039;ஜ&#039;,&#039;ञ&#039;:&#039;ஞ&#039;,&lt;br /&gt;
      &#039;ட&#039;:&#039;ட&#039;,&#039;ठ&#039;:&#039;ட&#039;,&#039;ड&#039;:&#039;ட&#039;,&#039;ढ&#039;:&#039;ட&#039;,&#039;ண&#039;:&#039;ண&#039;,&lt;br /&gt;
      &#039;त&#039;:&#039;த&#039;,&#039;थ&#039;:&#039;த&#039;,&#039;द&#039;:&#039;த&#039;,&#039;ध&#039;:&#039;த&#039;,&#039;न&#039;:&#039;ந&#039;,&lt;br /&gt;
      &#039;प&#039;:&#039;ப&#039;,&#039;फ&#039;:&#039;ப&#039;,&#039;ब&#039;:&#039;ப&#039;,&#039;भ&#039;:&#039;ப&#039;,&#039;म&#039;:&#039;ம&#039;,&lt;br /&gt;
      &#039;य&#039;:&#039;ய&#039;,&#039;र&#039;:&#039;ர&#039;,&#039;ल&#039;:&#039;ல&#039;,&#039;ळ&#039;:&#039;ழ&#039;,&#039;व&#039;:&#039;வ&#039;,&lt;br /&gt;
      &#039;श&#039;:&#039;ஶ&#039;,&#039;ष&#039;:&#039;ஷ&#039;,&#039;स&#039;:&#039;ஸ&#039;,&#039;ह&#039;:&#039;ஹ&#039;,&lt;br /&gt;
      &#039;ा&#039;:&#039;ா&#039;,&#039;ि&#039;:&#039;ி&#039;,&#039;ी&#039;:&#039;ீ&#039;,&#039;ु&#039;:&#039;ு&#039;,&#039;ू&#039;:&#039;ூ&#039;,&lt;br /&gt;
      &#039;ृ&#039;:&#039;ு&#039;,&#039;ॄ&#039;:&#039;ூ&#039;,&lt;br /&gt;
      &#039;े&#039;:&#039;ே&#039;,&#039;ை&#039;:&#039;ை&#039;,&#039;ो&#039;:&#039;ோ&#039;,&#039;ौ&#039;:&#039;ௌ&#039;,&lt;br /&gt;
      &#039;ं&#039;:&#039;ம்&#039;,&#039;ः&#039;:&#039;:&#039;,&#039;ँ&#039;:&#039;ம்&#039;,&#039;्&#039;:&#039;்&#039;,&#039;ॐ&#039;:&#039;ௐ&#039;,&#039;ऽ&#039;:&#039;ௗ&#039;,&lt;br /&gt;
      &#039;०&#039;:&#039;0&#039;,&#039;१&#039;:&#039;1&#039;,&#039;२&#039;:&#039;2&#039;,&#039;३&#039;:&#039;3&#039;,&#039;४&#039;:&#039;4&#039;,&lt;br /&gt;
      &#039;५&#039;:&#039;5&#039;,&#039;६&#039;:&#039;6&#039;,&#039;७&#039;:&#039;7&#039;,&#039;८&#039;:&#039;8&#039;,&#039;९&#039;:&#039;9&#039;&lt;br /&gt;
    }&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  var PRE = [&lt;br /&gt;
    [ /ङ्क/g, &#039;ंक&#039; ], [ /ङ्ख/g, &#039;ंख&#039; ], [ /ङ्ग/g, &#039;ंग&#039; ], [ /ङ्घ/g, &#039;ंघ&#039; ],&lt;br /&gt;
    [ /ञ्च/g, &#039;ंच&#039; ], [ /ञ्ज/g, &#039;ंज&#039; ], [ /ण्ट/g, &#039;ंट&#039; ], [ /ण्ड/g, &#039;ंड&#039; ],&lt;br /&gt;
    [ /न्त/g, &#039;ंत&#039; ], [ /न्द/g, &#039;ंद&#039; ], [ /म्ब/g, &#039;ंब&#039; ], [ /म्भ/g, &#039;ंभ&#039; ]&lt;br /&gt;
  ];&lt;br /&gt;
&lt;br /&gt;
  function transliterateText( text, script ) {&lt;br /&gt;
    if ( script === &#039;en&#039; ) return devanagariToIAST( text );&lt;br /&gt;
    var map = SCRIPT_MAP[ script ];&lt;br /&gt;
    if ( !map ) return text;&lt;br /&gt;
    var t = text;&lt;br /&gt;
    PRE.forEach( function ( p ) { t = t.replace( p[ 0 ], p[ 1 ] ); } );&lt;br /&gt;
    return Array.from( t ).map( function ( ch ) {&lt;br /&gt;
      return map[ ch ] !== undefined ? map[ ch ] : ch;&lt;br /&gt;
    } ).join( &#039;&#039; );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var translatableSpans = [];&lt;br /&gt;
&lt;br /&gt;
  function tagTextNodes() {&lt;br /&gt;
    var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
    if ( content ) {&lt;br /&gt;
      var walker = document.createTreeWalker( content, NodeFilter.SHOW_TEXT );&lt;br /&gt;
      var nodes  = [];&lt;br /&gt;
      while ( walker.nextNode() ) nodes.push( walker.currentNode );&lt;br /&gt;
      nodes.forEach( function ( node ) {&lt;br /&gt;
        var p = node.parentNode;&lt;br /&gt;
        if ( !p ) return;&lt;br /&gt;
        if ( p.hasAttribute &amp;amp;&amp;amp; p.hasAttribute( &#039;data-deva&#039; ) ) return;&lt;br /&gt;
        if ( p.closest ) {&lt;br /&gt;
          if ( p.closest( &#039;.gr-controls&#039; )    ) return;&lt;br /&gt;
          if ( p.closest( &#039;.mw-editsection&#039; ) ) return;&lt;br /&gt;
        }&lt;br /&gt;
        var orig = node.textContent;&lt;br /&gt;
        if ( !orig.trim() ) return;&lt;br /&gt;
        var span = document.createElement( &#039;span&#039; );&lt;br /&gt;
        span.setAttribute( &#039;data-deva&#039;, orig );&lt;br /&gt;
        span.textContent = orig;&lt;br /&gt;
        p.replaceChild( span, node );&lt;br /&gt;
        translatableSpans.push( span );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
    document.querySelectorAll( &#039;.vector-toc .vector-toc-text&#039; ).forEach( function ( span ) {&lt;br /&gt;
      if ( span.hasAttribute( &#039;data-deva&#039; ) ) return;&lt;br /&gt;
      var orig = span.textContent;&lt;br /&gt;
      if ( !orig.trim() ) return;&lt;br /&gt;
      span.setAttribute( &#039;data-deva&#039;, orig );&lt;br /&gt;
      translatableSpans.push( span );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function applyScript( script ) {&lt;br /&gt;
    currentScript = script;&lt;br /&gt;
    translatableSpans.forEach( function ( span ) {&lt;br /&gt;
      if ( !span.parentNode ) return;&lt;br /&gt;
      var orig = span.getAttribute( &#039;data-deva&#039; );&lt;br /&gt;
      if ( !orig ) return;&lt;br /&gt;
      span.textContent = ( script === &#039;deva&#039; )&lt;br /&gt;
        ? orig&lt;br /&gt;
        : transliterateText( orig, script );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function _isNoTocPage() {&lt;br /&gt;
    var pn = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039; ) ) || &#039;&#039;;&lt;br /&gt;
    return pn === &#039;Main_Page&#039; || /^[A-Za-z0-9_]+:About$/.test( pn );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function renameTocTitle() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    var titleEl = toc.querySelector(&#039;.vector-toc-title&#039;) || toc.querySelector(&#039;.vector-pinnable-header-label&#039;);&lt;br /&gt;
    if ( !titleEl ) return;&lt;br /&gt;
    var LABEL = &#039;विषयसूची&#039;;&lt;br /&gt;
    var span = titleEl.querySelector(&#039;.gr-toc-title&#039;);&lt;br /&gt;
    if ( !span ) {&lt;br /&gt;
      titleEl.innerHTML = &#039;&#039;;&lt;br /&gt;
      span = document.createElement(&#039;span&#039;);&lt;br /&gt;
      span.className = &#039;gr-toc-title&#039;;&lt;br /&gt;
      span.setAttribute(&#039;data-deva&#039;, LABEL);&lt;br /&gt;
      titleEl.appendChild(span);&lt;br /&gt;
      translatableSpans.push(span);&lt;br /&gt;
    }&lt;br /&gt;
    span.textContent = currentScript === &#039;deva&#039; ? LABEL : transliterateText(LABEL, currentScript);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function removeTocBeginning() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    var el = toc.querySelector( &#039;#vector-toc-beginning&#039; );&lt;br /&gt;
    if ( !el ) {&lt;br /&gt;
      var items = toc.querySelectorAll( &#039;.vector-toc-list-item&#039; );&lt;br /&gt;
      for ( var i = 0; i &amp;lt; items.length; i++ ) {&lt;br /&gt;
        var a = items[ i ].querySelector( &#039;a&#039; );&lt;br /&gt;
        if ( a ) {&lt;br /&gt;
          var href = a.getAttribute( &#039;href&#039; ) || &#039;&#039;;&lt;br /&gt;
          if ( href.indexOf( &#039;#&#039; ) === -1 ) { el = items[ i ]; break; }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if ( el &amp;amp;&amp;amp; el.parentNode ) el.parentNode.removeChild( el );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function expandTocSections() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    toc.querySelectorAll( &#039;.vector-toc-list-item-collapsed&#039; ).forEach( function ( li ) {&lt;br /&gt;
      li.classList.remove( &#039;vector-toc-list-item-collapsed&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function injectTocDocNav() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    if ( document.getElementById( &#039;gr-toc-doc-nav&#039; ) ) return;&lt;br /&gt;
    var artPath   = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
    var pageTitle = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039;   ) ) || &#039;&#039;;&lt;br /&gt;
    var teekaPage   = document.querySelector( &#039;.gr-teeka-page&#039; );&lt;br /&gt;
    var primarySlug = teekaPage ? ( teekaPage.getAttribute( &#039;data-primary&#039; ) || &#039;&#039; ) : &#039;&#039;;&lt;br /&gt;
    if ( !primarySlug ) { primarySlug = pageTitle.split( &#039;/&#039; )[ 0 ]; }&lt;br /&gt;
    if ( !primarySlug ) return;&lt;br /&gt;
    function wikiUrl( slug ) {&lt;br /&gt;
      if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( slug );&lt;br /&gt;
      return artPath.replace( &#039;$1&#039;, encodeURIComponent( slug ).replace( /%2F/g, &#039;/&#039; ) );&lt;br /&gt;
    }&lt;br /&gt;
    var docTitleEl     = document.querySelector( &#039;.gr-doc-title&#039; );&lt;br /&gt;
    var hasMoolaPage   = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-moola&#039; )   === &#039;1&#039;;&lt;br /&gt;
    var hasUllekhaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-ullekha&#039; ) === &#039;1&#039;;&lt;br /&gt;
    var showMoolaPage  = !teekaPage &amp;amp;&amp;amp; hasMoolaPage;&lt;br /&gt;
    var showMoolaBack  = !!teekaPage;&lt;br /&gt;
    var showUllekha    = hasUllekhaPage || !!teekaPage;&lt;br /&gt;
    if ( !showMoolaPage &amp;amp;&amp;amp; !showMoolaBack &amp;amp;&amp;amp; !showUllekha ) return;&lt;br /&gt;
    var nav = document.createElement( &#039;div&#039; );&lt;br /&gt;
    nav.id = &#039;gr-toc-doc-nav&#039;;&lt;br /&gt;
    nav.setAttribute( &#039;class&#039;, &#039;toc-main-links&#039; );&lt;br /&gt;
    function makeBtn( href, label ) {&lt;br /&gt;
      var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
      a.href = href;&lt;br /&gt;
      a.setAttribute( &#039;class&#039;, &#039;toc-main-link-item&#039; );&lt;br /&gt;
      var lspan = document.createElement( &#039;span&#039; );&lt;br /&gt;
      lspan.setAttribute( &#039;data-deva&#039;, label );&lt;br /&gt;
      lspan.textContent = ( currentScript &amp;amp;&amp;amp; currentScript !== &#039;deva&#039; ) ? transliterateText( label, currentScript ) : label;&lt;br /&gt;
      translatableSpans.push( lspan );&lt;br /&gt;
      a.appendChild( lspan );&lt;br /&gt;
      a.addEventListener( &#039;mouseover&#039;, function () { this.style.opacity = &#039;0.72&#039;; } );&lt;br /&gt;
      a.addEventListener( &#039;mouseout&#039;,  function () { this.style.opacity = &#039;1&#039;;    } );&lt;br /&gt;
      return a;&lt;br /&gt;
    }&lt;br /&gt;
    if ( showMoolaPage ) nav.appendChild( makeBtn( wikiUrl( primarySlug + &#039;/Moola&#039; ), &#039;मूलम्&#039; ) );&lt;br /&gt;
    if ( showMoolaBack ) nav.appendChild( makeBtn( wikiUrl( primarySlug ),            &#039;मूल&#039;   ) );&lt;br /&gt;
    if ( showUllekha   ) nav.appendChild( makeBtn( wikiUrl( primarySlug + &#039;/Ullekha&#039;), &#039;उल्लेख&#039;) );&lt;br /&gt;
    var tocContents = toc.querySelector( &#039;.vector-toc-contents&#039; );&lt;br /&gt;
    if ( tocContents ) toc.insertBefore( nav, tocContents );&lt;br /&gt;
    else               toc.appendChild( nav );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var _headingObserver = null;&lt;br /&gt;
&lt;br /&gt;
  function attachHeadingObserver() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    if ( _headingObserver ) return;&lt;br /&gt;
    if ( !window.IntersectionObserver ) return;&lt;br /&gt;
    var ACTIVE_COLOR = &#039;#f57c00&#039;;&lt;br /&gt;
    var _activeId    = null;&lt;br /&gt;
    var content  = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
    if ( !content ) return;&lt;br /&gt;
    var headings = Array.from( content.querySelectorAll( &#039;h1[id],h2[id],h3[id],h4[id],h5[id],h6[id]&#039; ) );&lt;br /&gt;
    if ( !headings.length ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    function getTocLink( id ) { return toc.querySelector( &#039;a[href=&amp;quot;#&#039; + CSS.escape( id ) + &#039;&amp;quot;]&#039; ); }&lt;br /&gt;
    function getTocLi( id ) { var a = getTocLink( id ); return a ? a.closest( &#039;.vector-toc-list-item&#039; ) : null; }&lt;br /&gt;
    function clearActive() {&lt;br /&gt;
      toc.querySelectorAll( &#039;.vector-toc-list-item&#039; ).forEach( function ( li ) {&lt;br /&gt;
        li.classList.remove( &#039;vector-toc-list-item-active&#039; );&lt;br /&gt;
        var lnk = li.querySelector( &#039;.vector-toc-link&#039; );&lt;br /&gt;
        if ( !lnk ) return;&lt;br /&gt;
        lnk.style.removeProperty( &#039;color&#039; );&lt;br /&gt;
        lnk.style.setProperty( &#039;font-weight&#039;, &#039;400&#039;, &#039;important&#039; );&lt;br /&gt;
        lnk.querySelectorAll( &#039;*&#039; ).forEach( function ( el ) { el.style.removeProperty( &#039;color&#039; ); el.style.setProperty( &#039;font-weight&#039;, &#039;400&#039;, &#039;important&#039; ); } );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
    function setActive( id ) {&lt;br /&gt;
      if ( _activeId === id ) return;&lt;br /&gt;
      _activeId = id;&lt;br /&gt;
      clearActive();&lt;br /&gt;
      if ( !id ) return;&lt;br /&gt;
      var li = getTocLi( id );&lt;br /&gt;
      if ( !li ) return;&lt;br /&gt;
      li.classList.add( &#039;vector-toc-list-item-active&#039; );&lt;br /&gt;
      var hasActiveChild = !!li.querySelector( &#039;.vector-toc-list-item .vector-toc-list-item-active&#039; );&lt;br /&gt;
      if ( !hasActiveChild ) {&lt;br /&gt;
        var lnk = li.querySelector( &#039;.vector-toc-link&#039; );&lt;br /&gt;
        if ( lnk ) {&lt;br /&gt;
          lnk.style.setProperty( &#039;color&#039;, ACTIVE_COLOR, &#039;important&#039; );&lt;br /&gt;
          lnk.style.setProperty( &#039;font-weight&#039;, &#039;700&#039;, &#039;important&#039; );&lt;br /&gt;
          lnk.querySelectorAll( &#039;*&#039; ).forEach( function ( el ) { el.style.setProperty( &#039;color&#039;, ACTIVE_COLOR, &#039;important&#039; ); el.style.setProperty( &#039;font-weight&#039;, &#039;700&#039;, &#039;important&#039; ); } );&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      var anc = li.parentNode;&lt;br /&gt;
      while ( anc &amp;amp;&amp;amp; anc !== toc ) {&lt;br /&gt;
        if ( anc.classList ) anc.classList.remove( &#039;vector-toc-list-item-collapsed&#039; );&lt;br /&gt;
        if ( anc.tagName === &#039;UL&#039; || anc.tagName === &#039;LI&#039; ) anc.style.removeProperty( &#039;display&#039; );&lt;br /&gt;
        anc = anc.parentNode;&lt;br /&gt;
      }&lt;br /&gt;
      var sticky = document.querySelector( &#039;.vector-sticky-pinned-container&#039; );&lt;br /&gt;
      var scrollEl = sticky || toc;&lt;br /&gt;
      if ( scrollEl.scrollHeight &amp;gt; scrollEl.clientHeight ) {&lt;br /&gt;
        var lr = li.getBoundingClientRect();&lt;br /&gt;
        var cr = scrollEl.getBoundingClientRect();&lt;br /&gt;
        if ( lr.top &amp;lt; cr.top + 8 || lr.bottom &amp;gt; cr.bottom - 8 ) {&lt;br /&gt;
          scrollEl.scrollTop += lr.top - cr.top - scrollEl.clientHeight / 2 + li.offsetHeight / 2;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    var _visible = new Set();&lt;br /&gt;
    _headingObserver = new IntersectionObserver( function ( entries ) {&lt;br /&gt;
      entries.forEach( function ( entry ) {&lt;br /&gt;
        if ( entry.isIntersecting ) _visible.add( entry.target.id );&lt;br /&gt;
        else _visible.delete( entry.target.id );&lt;br /&gt;
      } );&lt;br /&gt;
      var topId = null, topY = Infinity;&lt;br /&gt;
      _visible.forEach( function ( id ) {&lt;br /&gt;
        var el = document.getElementById( id );&lt;br /&gt;
        if ( el ) { var y = el.getBoundingClientRect().top; if ( y &amp;gt;= 0 &amp;amp;&amp;amp; y &amp;lt; topY ) { topY = y; topId = id; } }&lt;br /&gt;
      } );&lt;br /&gt;
      if ( !topId ) {&lt;br /&gt;
        var bestY = -Infinity;&lt;br /&gt;
        headings.forEach( function ( h ) { var y = h.getBoundingClientRect().top; if ( y &amp;lt; 0 &amp;amp;&amp;amp; y &amp;gt; bestY ) { bestY = y; topId = h.id; } } );&lt;br /&gt;
      }&lt;br /&gt;
      setActive( topId || null );&lt;br /&gt;
    }, { rootMargin: &#039;-60px 0px -65% 0px&#039;, threshold: 0 } );&lt;br /&gt;
    headings.forEach( function ( h ) { _headingObserver.observe( h ); } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function setupToc() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    removeTocBeginning();&lt;br /&gt;
    renameTocTitle();&lt;br /&gt;
    expandTocSections();&lt;br /&gt;
    injectTocDocNav();&lt;br /&gt;
    attachHeadingObserver();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function init() {&lt;br /&gt;
    var HIDE_IDS = [ &#039;vector-appearance&#039;, &#039;vector-appearance-pinned-container&#039;, &#039;vector-appearance-unpinned-container&#039; ];&lt;br /&gt;
    function removeHiddenEls() {&lt;br /&gt;
      HIDE_IDS.forEach( function ( id ) { var el = document.getElementById( id ); if ( el &amp;amp;&amp;amp; el.parentNode ) el.parentNode.removeChild( el ); } );&lt;br /&gt;
      var pt = document.getElementById( &#039;vector-page-tools&#039; ) || document.querySelector( &#039;.vector-page-tools-pinned-container&#039; );&lt;br /&gt;
      if ( pt ) pt.querySelectorAll( &#039;[aria-controls=&amp;quot;vector-appearance&amp;quot;]&#039; ).forEach( function ( el ) { if ( el.parentNode ) el.parentNode.removeChild( el ); } );&lt;br /&gt;
    }&lt;br /&gt;
    removeHiddenEls();&lt;br /&gt;
    ( function detectTeekaMode() {&lt;br /&gt;
      var tp = document.querySelector( &#039;.gr-teeka-page&#039; );&lt;br /&gt;
      if ( !tp ) return;&lt;br /&gt;
      var primary = tp.getAttribute( &#039;data-primary&#039; ) || &#039;&#039;;&lt;br /&gt;
      var artPath = ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
      var mainUrl = artPath.replace( &#039;$1&#039;, primary );&lt;br /&gt;
      var refParam = window.location.search.match( /[?&amp;amp;]ref=([01])/ );&lt;br /&gt;
      if ( refParam ) { document.body.classList.add( refParam[1] === &#039;1&#039; ? &#039;gr-ref-mode&#039; : &#039;gr-standalone&#039; ); return; }&lt;br /&gt;
      var ref = document.referrer || &#039;&#039;;&lt;br /&gt;
      document.body.classList.add( ( ref &amp;amp;&amp;amp; primary &amp;amp;&amp;amp; ref.indexOf( mainUrl ) !== -1 ) ? &#039;gr-ref-mode&#039; : &#039;gr-standalone&#039; );&lt;br /&gt;
    }() );&lt;br /&gt;
    if ( window.MutationObserver ) {&lt;br /&gt;
      var hideObs = new MutationObserver( function ( mutations ) {&lt;br /&gt;
        var dirty = false;&lt;br /&gt;
        mutations.forEach( function ( m ) { if ( m.addedNodes.length ) dirty = true; } );&lt;br /&gt;
        if ( dirty ) removeHiddenEls();&lt;br /&gt;
      } );&lt;br /&gt;
      hideObs.observe( document.body, { childList: true, subtree: false } );&lt;br /&gt;
      setTimeout( function () { hideObs.disconnect(); }, 6000 );&lt;br /&gt;
    }&lt;br /&gt;
    var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
    var alreadyTagged = content &amp;amp;&amp;amp; content.querySelector( &#039;[data-deva]&#039; );&lt;br /&gt;
    if ( !alreadyTagged ) { translatableSpans = []; tagTextNodes(); }&lt;br /&gt;
    else {&lt;br /&gt;
      document.querySelectorAll( &#039;.vector-toc .vector-toc-text:not([data-deva])&#039; ).forEach( function ( span ) {&lt;br /&gt;
        var orig = span.textContent; if ( !orig.trim() ) return;&lt;br /&gt;
        span.setAttribute( &#039;data-deva&#039;, orig ); translatableSpans.push( span );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
    var saved = ( function () { try { return localStorage.getItem( LS_SCRIPT_KEY ); } catch ( e ) { return null; } }() );&lt;br /&gt;
    if ( saved &amp;amp;&amp;amp; saved !== &#039;deva&#039; ) { applyScript( saved ); } else { currentScript = &#039;deva&#039;; }&lt;br /&gt;
    setTimeout( setupToc, 200 );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  window.addEventListener( &#039;gr-script-change&#039;, function ( e ) {&lt;br /&gt;
    var script = e &amp;amp;&amp;amp; e.detail &amp;amp;&amp;amp; e.detail.script;&lt;br /&gt;
    if ( script ) applyScript( script );&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
  window.addEventListener( &#039;gr-new-content&#039;, function ( e ) {&lt;br /&gt;
    var container = e &amp;amp;&amp;amp; e.detail &amp;amp;&amp;amp; e.detail.container;&lt;br /&gt;
    if ( !container ) return;&lt;br /&gt;
    var walker = document.createTreeWalker( container, NodeFilter.SHOW_TEXT );&lt;br /&gt;
    var nodes = [];&lt;br /&gt;
    while ( walker.nextNode() ) nodes.push( walker.currentNode );&lt;br /&gt;
    nodes.forEach( function ( node ) {&lt;br /&gt;
      var p = node.parentNode;&lt;br /&gt;
      if ( !p || ( p.hasAttribute &amp;amp;&amp;amp; p.hasAttribute( &#039;data-deva&#039; ) ) ) return;&lt;br /&gt;
      var orig = node.textContent;&lt;br /&gt;
      if ( !orig.trim() ) return;&lt;br /&gt;
      var span = document.createElement( &#039;span&#039; );&lt;br /&gt;
      span.setAttribute( &#039;data-deva&#039;, orig );&lt;br /&gt;
      span.textContent = currentScript !== &#039;deva&#039; ? transliterateText( orig, currentScript ) : orig;&lt;br /&gt;
      p.replaceChild( span, node );&lt;br /&gt;
      translatableSpans.push( span );&lt;br /&gt;
    } );&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
  try {&lt;br /&gt;
    var _grBC = new BroadcastChannel( &#039;gr-script&#039; );&lt;br /&gt;
    _grBC.onmessage = function ( e ) {&lt;br /&gt;
      var script = e &amp;amp;&amp;amp; e.data &amp;amp;&amp;amp; e.data.script;&lt;br /&gt;
      if ( script ) { currentScript = script; var sel = document.querySelector( &#039;.gr-script-sel&#039; ); if ( sel ) sel.value = script; applyScript( script ); }&lt;br /&gt;
    };&lt;br /&gt;
  } catch ( e ) {}&lt;br /&gt;
&lt;br /&gt;
  if ( window.mw ) {&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
      setTimeout( function () {&lt;br /&gt;
        var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
        var alreadyTagged = content &amp;amp;&amp;amp; content.querySelector( &#039;[data-deva]&#039; );&lt;br /&gt;
        if ( !alreadyTagged ) { translatableSpans = []; tagTextNodes(); }&lt;br /&gt;
        else {&lt;br /&gt;
          document.querySelectorAll( &#039;.vector-toc .vector-toc-text:not([data-deva])&#039; ).forEach( function ( span ) {&lt;br /&gt;
            var orig = span.textContent; if ( !orig.trim() ) return;&lt;br /&gt;
            span.setAttribute( &#039;data-deva&#039;, orig ); translatableSpans.push( span );&lt;br /&gt;
          } );&lt;br /&gt;
        }&lt;br /&gt;
        if ( currentScript !== &#039;deva&#039; ) applyScript( currentScript );&lt;br /&gt;
        setupToc();&lt;br /&gt;
      }, 150 );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) { document.addEventListener( &#039;DOMContentLoaded&#039;, init ); }&lt;br /&gt;
  else { init(); }&lt;br /&gt;
&lt;br /&gt;
}() );   /* ← end of main IIFE */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Inject &amp;quot;Help&amp;quot; and &amp;quot;About&amp;quot; links into the header ─────────────────&lt;br /&gt;
( function () {&lt;br /&gt;
  function wikiHref( title ) {&lt;br /&gt;
    if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( title );&lt;br /&gt;
    var ap = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
    return ap.replace( &#039;$1&#039;, title );&lt;br /&gt;
  }&lt;br /&gt;
  var linkStyle = [ &#039;color:rgba(255,255,255,0.88)&#039;,&#039;font-size:0.88em&#039;,&#039;font-family:system-ui,sans-serif&#039;,&#039;font-weight:500&#039;,&#039;text-decoration:none&#039;,&#039;padding:4px 10px&#039;,&#039;border-radius:4px&#039;,&#039;margin-right:4px&#039;,&#039;transition:color 0.15s,background 0.15s&#039;,&#039;white-space:nowrap&#039; ].join( &#039;;&#039; );&lt;br /&gt;
  function makeHeaderLink( id, href, label ) {&lt;br /&gt;
    var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
    a.id = id; a.href = href; a.textContent = label; a.style.cssText = linkStyle;&lt;br /&gt;
    a.addEventListener( &#039;mouseover&#039;, function () { this.style.color = &#039;#fff&#039;; this.style.background = &#039;rgba(255,255,255,0.12)&#039;; } );&lt;br /&gt;
    a.addEventListener( &#039;mouseout&#039;,  function () { this.style.color = &#039;rgba(255,255,255,0.88)&#039;; this.style.background = &#039;transparent&#039;; } );&lt;br /&gt;
    return a;&lt;br /&gt;
  }&lt;br /&gt;
function injectHeaderLinks() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-about-link&#039; ) ) return;&lt;br /&gt;
    var headerEnd = document.querySelector( &#039;.vector-header-end&#039; ) || document.querySelector( &#039;#vector-user-links&#039; ) || document.querySelector( &#039;.mw-header&#039; );&lt;br /&gt;
    if ( !headerEnd ) return;&lt;br /&gt;
    var helpLink  = makeHeaderLink( &#039;gr-help-link&#039;,  wikiHref( &#039;My_wiki:Help&#039;  ), &#039;Help&#039;  );&lt;br /&gt;
    var aboutLink = makeHeaderLink( &#039;gr-about-link&#039;, wikiHref( &#039;My_wiki:About&#039; ), &#039;About&#039; );&lt;br /&gt;
&lt;br /&gt;
    var userName = window.mw ? mw.config.get( &#039;wgUserName&#039; ) : null;&lt;br /&gt;
    var isAnon   = !userName || ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgUserId&#039; ) === null );&lt;br /&gt;
&lt;br /&gt;
    // Build the trailing auth element (Login link for anon, dropdown for logged-in)&lt;br /&gt;
    var authEl = null;&lt;br /&gt;
    if ( isAnon ) {&lt;br /&gt;
      if ( !document.getElementById( &#039;gr-header-login&#039; ) ) {&lt;br /&gt;
        authEl = makeHeaderLink( &#039;gr-header-login&#039;, wikiHref( &#039;Special:UserLogin&#039; ), &#039;Login/Signup&#039; );&lt;br /&gt;
      }&lt;br /&gt;
    } else if ( !document.getElementById( &#039;gr-header-user&#039; ) ) {&lt;br /&gt;
      authEl = buildHeaderUserDropdown( userName );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var ul = document.querySelector( &#039;.vector-user-links&#039; ) || document.querySelector( &#039;#pt-userpage&#039; );&lt;br /&gt;
    if ( ul &amp;amp;&amp;amp; ul.parentNode === headerEnd ) {&lt;br /&gt;
      if ( authEl ) headerEnd.insertBefore( authEl, ul );&lt;br /&gt;
      headerEnd.insertBefore( aboutLink, authEl || ul );&lt;br /&gt;
      headerEnd.insertBefore( helpLink, aboutLink );&lt;br /&gt;
    } else {&lt;br /&gt;
      headerEnd.appendChild( helpLink );&lt;br /&gt;
      headerEnd.appendChild( aboutLink );&lt;br /&gt;
      if ( authEl ) headerEnd.appendChild( authEl );&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function buildHeaderUserDropdown( userName ) {&lt;br /&gt;
    var wrap = document.createElement( &#039;div&#039; );&lt;br /&gt;
    wrap.id = &#039;gr-header-user&#039;;&lt;br /&gt;
    wrap.style.cssText = &#039;position:relative;display:inline-block;margin-right:4px;&#039;;&lt;br /&gt;
&lt;br /&gt;
    var trigger = document.createElement( &#039;button&#039; );&lt;br /&gt;
    trigger.id = &#039;gr-header-user-trigger&#039;;&lt;br /&gt;
    trigger.type = &#039;button&#039;;&lt;br /&gt;
    trigger.setAttribute( &#039;aria-haspopup&#039;, &#039;true&#039; );&lt;br /&gt;
    trigger.setAttribute( &#039;aria-expanded&#039;, &#039;false&#039; );&lt;br /&gt;
    trigger.style.cssText = [&lt;br /&gt;
      &#039;display:inline-flex&#039;,&#039;align-items:center&#039;,&#039;gap:5px&#039;,&lt;br /&gt;
      &#039;color:rgba(255,255,255,0.88)&#039;,&#039;font-size:0.88em&#039;,&lt;br /&gt;
      &#039;font-family:system-ui,sans-serif&#039;,&#039;font-weight:500&#039;,&lt;br /&gt;
      &#039;background:transparent&#039;,&#039;border:none&#039;,&#039;cursor:pointer&#039;,&lt;br /&gt;
      &#039;padding:4px 10px&#039;,&#039;border-radius:4px&#039;,&#039;white-space:nowrap&#039;,&lt;br /&gt;
      &#039;transition:color 0.15s,background 0.15s&#039;&lt;br /&gt;
    ].join( &#039;;&#039; );&lt;br /&gt;
    trigger.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;span&amp;gt;&#039; + userName.replace( /&amp;lt;/g, &#039;&amp;amp;lt;&#039; ) + &#039;&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;span id=&amp;quot;gr-header-caret&amp;quot; style=&amp;quot;font-size:0.8em;transition:transform 0.2s;&amp;quot;&amp;gt;\u25be&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
    trigger.addEventListener( &#039;mouseover&#039;, function () { this.style.color = &#039;#fff&#039;; this.style.background = &#039;rgba(255,255,255,0.12)&#039;; } );&lt;br /&gt;
    trigger.addEventListener( &#039;mouseout&#039;,  function () { if ( menu.style.display === &#039;none&#039; ) { this.style.color = &#039;rgba(255,255,255,0.88)&#039;; this.style.background = &#039;transparent&#039;; } } );&lt;br /&gt;
&lt;br /&gt;
    var menu = document.createElement( &#039;div&#039; );&lt;br /&gt;
    menu.id = &#039;gr-header-user-menu&#039;;&lt;br /&gt;
    menu.setAttribute( &#039;role&#039;, &#039;menu&#039; );&lt;br /&gt;
    menu.style.cssText = [&lt;br /&gt;
      &#039;display:none&#039;,&#039;position:absolute&#039;,&#039;top:100%&#039;,&#039;right:0&#039;,&#039;margin-top:4px&#039;,&lt;br /&gt;
      &#039;min-width:150px&#039;,&#039;background:#fff&#039;,&#039;border-radius:6px&#039;,&lt;br /&gt;
      &#039;box-shadow:0 4px 16px rgba(0,0,0,0.18)&#039;,&#039;overflow:hidden&#039;,&#039;z-index:1000&#039;&lt;br /&gt;
    ].join( &#039;;&#039; );&lt;br /&gt;
&lt;br /&gt;
    var itemStyle = &#039;display:block;padding:10px 16px;font-size:0.9em;color:#2c1810;text-decoration:none;font-family:system-ui,sans-serif;background:#fff;&#039;;&lt;br /&gt;
    function makeMenuItem( href, label, id ) {&lt;br /&gt;
      var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
      a.href = href; a.setAttribute( &#039;role&#039;, &#039;menuitem&#039; );&lt;br /&gt;
      a.textContent = label; a.style.cssText = itemStyle;&lt;br /&gt;
      if ( id ) a.id = id;&lt;br /&gt;
      a.addEventListener( &#039;mouseover&#039;, function () { this.style.background = &#039;#f5efe9&#039;; } );&lt;br /&gt;
      a.addEventListener( &#039;mouseout&#039;,  function () { this.style.background = &#039;#fff&#039;; } );&lt;br /&gt;
      return a;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    menu.appendChild( makeMenuItem( wikiHref( &#039;Special:Profile&#039; ), &#039;Profile&#039; ) );&lt;br /&gt;
    menu.appendChild( makeMenuItem( &#039;#&#039;, &#039;Log out&#039;, &#039;gr-header-logout&#039; ) );&lt;br /&gt;
&lt;br /&gt;
    function setOpen( open ) {&lt;br /&gt;
      menu.style.display = open ? &#039;block&#039; : &#039;none&#039;;&lt;br /&gt;
      trigger.setAttribute( &#039;aria-expanded&#039;, open ? &#039;true&#039; : &#039;false&#039; );&lt;br /&gt;
      var caret = document.getElementById( &#039;gr-header-caret&#039; );&lt;br /&gt;
      if ( caret ) caret.style.transform = open ? &#039;rotate(180deg)&#039; : &#039;&#039;;&lt;br /&gt;
      if ( open ) { trigger.style.color = &#039;#fff&#039;; trigger.style.background = &#039;rgba(255,255,255,0.12)&#039;; }&lt;br /&gt;
      else { trigger.style.color = &#039;rgba(255,255,255,0.88)&#039;; trigger.style.background = &#039;transparent&#039;; }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    trigger.addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      e.stopPropagation();&lt;br /&gt;
      setOpen( menu.style.display === &#039;none&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
    document.addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      if ( !wrap.contains( e.target ) ) setOpen( false );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    // Logout: POST with CSRF token (same approach as the desktop dropdown)&lt;br /&gt;
    menu.querySelector( &#039;#gr-header-logout&#039; ).addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      e.preventDefault();&lt;br /&gt;
      if ( window.mw &amp;amp;&amp;amp; mw.user &amp;amp;&amp;amp; mw.user.tokens ) {&lt;br /&gt;
        var t = mw.user.tokens.get( &#039;csrfToken&#039; );&lt;br /&gt;
        if ( t ) {&lt;br /&gt;
          var script = ( mw.util &amp;amp;&amp;amp; mw.util.wikiScript ) ? mw.util.wikiScript() : &#039;/index.php&#039;;&lt;br /&gt;
          var form = document.createElement( &#039;form&#039; );&lt;br /&gt;
          form.method = &#039;post&#039;;&lt;br /&gt;
          form.action = script + &#039;?title=Special:UserLogout&#039;;&lt;br /&gt;
          form.style.display = &#039;none&#039;;&lt;br /&gt;
          form.innerHTML =&lt;br /&gt;
            &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;wpEditToken&amp;quot; value=&amp;quot;&#039; + String( t ).replace( /&amp;quot;/g, &#039;&amp;amp;quot;&#039; ) + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
            &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;title&amp;quot; value=&amp;quot;Special:UserLogout&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
            &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;returnto&amp;quot; value=&amp;quot;Main Page&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
          document.body.appendChild( form );&lt;br /&gt;
          form.submit();&lt;br /&gt;
          return;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if ( window.mw &amp;amp;&amp;amp; mw.Api ) {&lt;br /&gt;
        new mw.Api().postWithToken( &#039;csrf&#039;, { action: &#039;logout&#039; } )&lt;br /&gt;
          .done( function () { location.href = &#039;/Main_Page&#039;; } )&lt;br /&gt;
          .fail( function () { location.href = &#039;/index.php?title=Special:UserLogout&#039;; } );&lt;br /&gt;
      } else {&lt;br /&gt;
        location.href = &#039;/index.php?title=Special:UserLogout&#039;;&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    wrap.appendChild( trigger );&lt;br /&gt;
    wrap.appendChild( menu );&lt;br /&gt;
    return wrap;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Main page: by-Grantha / by-Author toggle ──────────────────────&lt;br /&gt;
( function () {&lt;br /&gt;
  function grHomeView( v ) {&lt;br /&gt;
    var gView = document.getElementById( &#039;gr-view-grantha&#039; );&lt;br /&gt;
    var aView = document.getElementById( &#039;gr-view-author&#039; );&lt;br /&gt;
    var gBtn  = document.getElementById( &#039;gr-toggle-grantha&#039; );&lt;br /&gt;
    var aBtn  = document.getElementById( &#039;gr-toggle-author&#039; );&lt;br /&gt;
    if ( !gView || !aView || !gBtn || !aBtn ) return;&lt;br /&gt;
    gView.style.display = ( v === &#039;grantha&#039; ) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
    aView.style.display = ( v === &#039;author&#039;  ) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
    gBtn.className = &#039;gr-toggle-btn&#039; + ( v === &#039;grantha&#039; ? &#039; gr-toggle-active&#039; : &#039;&#039; );&lt;br /&gt;
    aBtn.className = &#039;gr-toggle-btn&#039; + ( v === &#039;author&#039;  ? &#039; gr-toggle-active&#039; : &#039;&#039; );&lt;br /&gt;
    try { localStorage.setItem( &#039;gr_home_view&#039;, v ); } catch ( e ) {}&lt;br /&gt;
  }&lt;br /&gt;
  function initHomeToggle() {&lt;br /&gt;
    var gBtn = document.getElementById( &#039;gr-toggle-grantha&#039; );&lt;br /&gt;
    var aBtn = document.getElementById( &#039;gr-toggle-author&#039; );&lt;br /&gt;
    if ( !gBtn || !aBtn ) return;&lt;br /&gt;
    gBtn.addEventListener( &#039;click&#039;, function () { grHomeView( &#039;grantha&#039; ); } );&lt;br /&gt;
    aBtn.addEventListener( &#039;click&#039;, function () { grHomeView( &#039;author&#039; );  } );&lt;br /&gt;
    [ gBtn, aBtn ].forEach( function ( btn ) { btn.addEventListener( &#039;keydown&#039;, function ( e ) { if ( e.key === &#039;Enter&#039; || e.key === &#039; &#039; ) btn.click(); } ); } );&lt;br /&gt;
    var saved; try { saved = localStorage.getItem( &#039;gr_home_view&#039; ); } catch ( e ) {}&lt;br /&gt;
    if ( saved === &#039;author&#039; ) grHomeView( &#039;author&#039; );&lt;br /&gt;
  }&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) document.addEventListener( &#039;DOMContentLoaded&#039;, initHomeToggle );&lt;br /&gt;
  else initHomeToggle();&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Ullekha reference link handler ─────────────────────────────────&lt;br /&gt;
( function () {&lt;br /&gt;
  function highlightOnArrival() {&lt;br /&gt;
    var search = window.location.search;&lt;br /&gt;
    if ( !search ) return;&lt;br /&gt;
    var m = search.match( /[?&amp;amp;]hlUllekha=([^&amp;amp;]+)/ );&lt;br /&gt;
    if ( !m ) return;&lt;br /&gt;
    var needle;&lt;br /&gt;
    try { needle = decodeURIComponent( m[ 1 ] ); } catch ( e ) { return; }&lt;br /&gt;
    if ( !needle || needle.length &amp;lt; 4 ) return;&lt;br /&gt;
    function doHighlight() {&lt;br /&gt;
      var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
      if ( !content ) return;&lt;br /&gt;
      var snippet = needle.slice( 0, 40 );&lt;br /&gt;
      var found   = false;&lt;br /&gt;
      var spans = content.querySelectorAll( &#039;[data-deva]&#039; );&lt;br /&gt;
      for ( var i = 0; i &amp;lt; spans.length &amp;amp;&amp;amp; !found; i++ ) {&lt;br /&gt;
        var spanEl = spans[ i ];&lt;br /&gt;
        var orig   = spanEl.getAttribute( &#039;data-deva&#039; ) || &#039;&#039;;&lt;br /&gt;
        if ( orig.indexOf( snippet ) === -1 ) continue;&lt;br /&gt;
        var idx    = orig.indexOf( snippet );&lt;br /&gt;
        var hlText = orig.slice( idx, Math.min( idx + needle.length, orig.length ) );&lt;br /&gt;
        var mark   = document.createElement( &#039;mark&#039; );&lt;br /&gt;
        mark.className = &#039;gr-ullekha-highlight&#039;;&lt;br /&gt;
        mark.style.cssText = &#039;background:#fff176;border-radius:2px;padding:0 2px;&#039;;&lt;br /&gt;
        mark.textContent = hlText;&lt;br /&gt;
        var parent = spanEl.parentNode;&lt;br /&gt;
        if ( !parent ) continue;&lt;br /&gt;
        var before = document.createTextNode( orig.slice( 0, idx ) );&lt;br /&gt;
        var after  = document.createTextNode( orig.slice( idx + hlText.length ) );&lt;br /&gt;
        parent.insertBefore( before, spanEl ); parent.insertBefore( mark, spanEl ); parent.insertBefore( after, spanEl ); parent.removeChild( spanEl );&lt;br /&gt;
        setTimeout( function () { mark.scrollIntoView( { behavior: &#039;smooth&#039;, block: &#039;center&#039; } ); }, 100 );&lt;br /&gt;
        found = true;&lt;br /&gt;
      }&lt;br /&gt;
      if ( !found ) {&lt;br /&gt;
        var walker = document.createTreeWalker( content, NodeFilter.SHOW_TEXT );&lt;br /&gt;
        while ( walker.nextNode() &amp;amp;&amp;amp; !found ) {&lt;br /&gt;
          var node = walker.currentNode;&lt;br /&gt;
          var txt  = node.textContent || &#039;&#039;;&lt;br /&gt;
          if ( txt.indexOf( snippet ) === -1 ) continue;&lt;br /&gt;
          var idx2  = txt.indexOf( snippet );&lt;br /&gt;
          var mark2 = document.createElement( &#039;mark&#039; );&lt;br /&gt;
          mark2.className = &#039;gr-ullekha-highlight&#039;;&lt;br /&gt;
          mark2.style.cssText = &#039;background:#fff176;border-radius:2px;padding:0 2px;&#039;;&lt;br /&gt;
          mark2.textContent = txt.slice( idx2, Math.min( idx2 + needle.length, txt.length ) );&lt;br /&gt;
          var p = node.parentNode;&lt;br /&gt;
          p.insertBefore( document.createTextNode( txt.slice( 0, idx2 ) ), node );&lt;br /&gt;
          p.insertBefore( mark2, node );&lt;br /&gt;
          p.insertBefore( document.createTextNode( txt.slice( idx2 + mark2.textContent.length ) ), node );&lt;br /&gt;
          p.removeChild( node );&lt;br /&gt;
          setTimeout( function () { mark2.scrollIntoView( { behavior: &#039;smooth&#039;, block: &#039;center&#039; } ); }, 100 );&lt;br /&gt;
          found = true;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    doHighlight();&lt;br /&gt;
  }&lt;br /&gt;
  function wireUllekhaLinks() {&lt;br /&gt;
    document.querySelectorAll( &#039;.gr-ullekha-ref-link&#039; ).forEach( function ( wrap ) {&lt;br /&gt;
      var anchor = wrap.getAttribute( &#039;data-anchor&#039; ) || &#039;&#039;;&lt;br /&gt;
      var hl     = wrap.getAttribute( &#039;data-hl&#039; )     || &#039;&#039;;&lt;br /&gt;
      var a = wrap.querySelector( &#039;a&#039; );&lt;br /&gt;
      if ( !a ) return;&lt;br /&gt;
      var base = a.href.split( &#039;#&#039; )[ 0 ];&lt;br /&gt;
      var encoded = encodeURIComponent( hl );&lt;br /&gt;
      a.href = base + ( hl ? &#039;?hlUllekha=&#039; + encoded : &#039;&#039; ) + ( anchor ? &#039;#&#039; + anchor : &#039;&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) { document.addEventListener( &#039;DOMContentLoaded&#039;, function () { highlightOnArrival(); wireUllekhaLinks(); } ); }&lt;br /&gt;
  else { highlightOnArrival(); wireUllekhaLinks(); }&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
/* ── Search result highlight ──────────────────────────────────── */&lt;br /&gt;
/* EXACT REPLACEMENT for the search highlight IIFE in MediaWiki:Common.js.&lt;br /&gt;
 * Only changes from the original working version:&lt;br /&gt;
 *  - Mobile bar: full-width terracotta bottom bar instead of floating pill&lt;br /&gt;
 *  - showDismissBar: guard added (if !count return) to prevent empty bar&lt;br /&gt;
 * Everything else (storeQueryForLink, applyHighlight, wrapMatches) is&lt;br /&gt;
 * identical to the version that was working.&lt;br /&gt;
 */&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
  function storeQueryForLink( url, query ) {&lt;br /&gt;
    try {&lt;br /&gt;
      var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
      a.href = url;&lt;br /&gt;
      sessionStorage.setItem( &#039;gr_search_hl&#039;, JSON.stringify({&lt;br /&gt;
        query:    query,&lt;br /&gt;
        pathname: a.pathname&lt;br /&gt;
      }) );&lt;br /&gt;
    } catch(e) {}&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function applyHighlight() {&lt;br /&gt;
    var stored;&lt;br /&gt;
    try {&lt;br /&gt;
      stored = JSON.parse( sessionStorage.getItem( &#039;gr_search_hl&#039; ) || &#039;null&#039; );&lt;br /&gt;
    } catch(e) { return; }&lt;br /&gt;
    if ( !stored || !stored.query ) return;&lt;br /&gt;
&lt;br /&gt;
    var currentPath = window.location.pathname;&lt;br /&gt;
    var storedPath  = stored.pathname || &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
    function normPath(p) { return decodeURIComponent(p).replace(/\/+$/, &#039;&#039;); }&lt;br /&gt;
    if ( storedPath &amp;amp;&amp;amp; normPath(storedPath) !== normPath(currentPath) ) {&lt;br /&gt;
      try { sessionStorage.removeItem( &#039;gr_search_hl&#039; ); } catch(e) {}&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var query = stored.query.trim();&lt;br /&gt;
    if ( !query ) return;&lt;br /&gt;
&lt;br /&gt;
    try { sessionStorage.removeItem( &#039;gr_search_hl&#039; ); } catch(e) {}&lt;br /&gt;
&lt;br /&gt;
    var delays = [ 0, 200, 600 ];&lt;br /&gt;
    delays.forEach( function(ms) {&lt;br /&gt;
      setTimeout( function() {&lt;br /&gt;
        if ( document.querySelector( &#039;.gr-search-hl&#039; ) ) return;&lt;br /&gt;
        highlightText( query );&lt;br /&gt;
      }, ms );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function highlightText( query ) {&lt;br /&gt;
    var content = document.querySelector( &#039;#mw-content-text .mw-parser-output&#039; );&lt;br /&gt;
    if ( !content ) return;&lt;br /&gt;
&lt;br /&gt;
    var raw = query.replace( /^&amp;quot;|&amp;quot;$/g, &#039;&#039; ).trim();&lt;br /&gt;
    if ( !raw ) return;&lt;br /&gt;
&lt;br /&gt;
    var patterns = [];&lt;br /&gt;
    patterns.push( escapeRegex( raw ) );&lt;br /&gt;
    raw.split( /\s+/ ).forEach( function(w) {&lt;br /&gt;
      if ( w.length &amp;gt;= 2 ) patterns.push( escapeRegex( w ) );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    var matched = false;&lt;br /&gt;
    for ( var pi = 0; pi &amp;lt; patterns.length; pi++ ) {&lt;br /&gt;
      var re;&lt;br /&gt;
      try { re = new RegExp( &#039;(&#039; + patterns[pi] + &#039;)&#039;, &#039;gi&#039; ); }&lt;br /&gt;
      catch(e) { continue; }&lt;br /&gt;
      var count = wrapMatches( content, re );&lt;br /&gt;
      if ( count &amp;gt; 0 ) { matched = true; break; }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ( !matched ) return;&lt;br /&gt;
&lt;br /&gt;
    var first = document.querySelector( &#039;.gr-search-hl&#039; );&lt;br /&gt;
    if ( first ) {&lt;br /&gt;
      first.scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; });&lt;br /&gt;
      first.classList.add( &#039;gr-search-hl-pulse&#039; );&lt;br /&gt;
      setTimeout( function() { first.classList.remove( &#039;gr-search-hl-pulse&#039; ); }, 2000 );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    showDismissBar( query );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function escapeRegex( s ) {&lt;br /&gt;
    return s.replace( /[.*+?^${}()|[\]\\]/g, &#039;\\$&amp;amp;&#039; );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function wrapMatches( root, re ) {&lt;br /&gt;
    var count = 0;&lt;br /&gt;
    var walker = document.createTreeWalker(&lt;br /&gt;
      root, NodeFilter.SHOW_TEXT, {&lt;br /&gt;
        acceptNode: function( node ) {&lt;br /&gt;
          var p = node.parentElement;&lt;br /&gt;
          if ( !p ) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
          var tag = p.tagName.toUpperCase();&lt;br /&gt;
          if ( tag === &#039;SCRIPT&#039; || tag === &#039;STYLE&#039; || tag === &#039;NOSCRIPT&#039; ) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
          if ( p.classList.contains( &#039;gr-search-hl&#039; ) ) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
          return NodeFilter.FILTER_ACCEPT;&lt;br /&gt;
        }&lt;br /&gt;
      }, false&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    var nodes = [];&lt;br /&gt;
    var node;&lt;br /&gt;
    while ( ( node = walker.nextNode() ) ) nodes.push( node );&lt;br /&gt;
&lt;br /&gt;
    nodes.forEach( function( textNode ) {&lt;br /&gt;
      var val = textNode.nodeValue;&lt;br /&gt;
      if ( !re.test( val ) ) return;&lt;br /&gt;
      re.lastIndex = 0;&lt;br /&gt;
&lt;br /&gt;
      var frag = document.createDocumentFragment();&lt;br /&gt;
      var last = 0;&lt;br /&gt;
      var m;&lt;br /&gt;
      while ( ( m = re.exec( val ) ) !== null ) {&lt;br /&gt;
        if ( m.index &amp;gt; last ) {&lt;br /&gt;
          frag.appendChild( document.createTextNode( val.slice( last, m.index ) ) );&lt;br /&gt;
        }&lt;br /&gt;
        var span = document.createElement( &#039;span&#039; );&lt;br /&gt;
        span.className = &#039;gr-search-hl&#039;;&lt;br /&gt;
        span.textContent = m[0];&lt;br /&gt;
        frag.appendChild( span );&lt;br /&gt;
        last = m.index + m[0].length;&lt;br /&gt;
        count++;&lt;br /&gt;
      }&lt;br /&gt;
      if ( last &amp;lt; val.length ) {&lt;br /&gt;
        frag.appendChild( document.createTextNode( val.slice( last ) ) );&lt;br /&gt;
      }&lt;br /&gt;
      textNode.parentNode.replaceChild( frag, textNode );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    return count;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function showDismissBar( query ) {&lt;br /&gt;
    var existing = document.getElementById( &#039;gr-hl-bar&#039; );&lt;br /&gt;
    if ( existing ) existing.remove();&lt;br /&gt;
&lt;br /&gt;
    var count = document.querySelectorAll( &#039;.gr-search-hl&#039; ).length;&lt;br /&gt;
    if ( !count ) return;&lt;br /&gt;
&lt;br /&gt;
    var isMob = window.innerWidth &amp;lt; 768 || !!document.getElementById( &#039;mw-mf-viewport&#039; );&lt;br /&gt;
    var bar = document.createElement( &#039;div&#039; );&lt;br /&gt;
    bar.id = &#039;gr-hl-bar&#039;;&lt;br /&gt;
&lt;br /&gt;
    if ( isMob ) {&lt;br /&gt;
      bar.style.cssText = [&lt;br /&gt;
        &#039;position:fixed&#039;, &#039;bottom:0&#039;, &#039;left:0&#039;, &#039;right:0&#039;,&lt;br /&gt;
        &#039;z-index:10200&#039;, &#039;background:#b5451b&#039;, &#039;color:#fff&#039;,&lt;br /&gt;
        &#039;padding:0&#039;, &#039;display:flex&#039;, &#039;align-items:stretch&#039;,&lt;br /&gt;
        &#039;font-family:system-ui,sans-serif&#039;,&lt;br /&gt;
        &#039;box-shadow:0 -2px 12px rgba(0,0,0,0.25)&#039;, &#039;height:56px&#039;&lt;br /&gt;
      ].join(&#039;;&#039;);&lt;br /&gt;
&lt;br /&gt;
      var mbs = &#039;flex:1;display:flex;flex-direction:column;align-items:center;&#039; +&lt;br /&gt;
        &#039;justify-content:center;background:none;border:none;color:#fff;cursor:pointer;&#039; +&lt;br /&gt;
        &#039;padding:6px 4px;font-family:system-ui,sans-serif;font-size:11px;font-weight:500;&#039; +&lt;br /&gt;
        &#039;gap:3px;-webkit-tap-highlight-color:rgba(0,0,0,0.12);&#039;;&lt;br /&gt;
&lt;br /&gt;
      bar.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-prev&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;polyline points=&amp;quot;15 18 9 12 15 6&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;Prev&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-next&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;polyline points=&amp;quot;9 18 15 12 9 6&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;Next&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-results&amp;quot; style=&amp;quot;&#039; + mbs + &#039;flex:1.6;border-left:1px solid rgba(255,255,255,0.2);border-right:1px solid rgba(255,255,255,0.2);&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;circle cx=&amp;quot;11&amp;quot; cy=&amp;quot;11&amp;quot; r=&amp;quot;7&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;16.5&amp;quot; y1=&amp;quot;16.5&amp;quot; x2=&amp;quot;22&amp;quot; y2=&amp;quot;22&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;&#039; + count + &#039; match&#039; + (count===1?&#039;&#039;:&#039;es&#039;) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-dismiss&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;line x1=&amp;quot;18&amp;quot; y1=&amp;quot;6&amp;quot; x2=&amp;quot;6&amp;quot; y2=&amp;quot;18&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;6&amp;quot; y1=&amp;quot;6&amp;quot; x2=&amp;quot;18&amp;quot; y2=&amp;quot;18&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;Close&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
    } else {&lt;br /&gt;
      bar.style.cssText = [&lt;br /&gt;
        &#039;position:fixed&#039;, &#039;bottom:0&#039;, &#039;left:0&#039;, &#039;right:0&#039;, &#039;z-index:10200&#039;,&lt;br /&gt;
        &#039;background:#b5451b&#039;, &#039;color:#fff&#039;, &#039;padding:10px 16px&#039;,&lt;br /&gt;
        &#039;display:flex&#039;, &#039;align-items:center&#039;, &#039;justify-content:space-between&#039;,&lt;br /&gt;
        &#039;font-family:system-ui,sans-serif&#039;, &#039;font-size:14px&#039;,&lt;br /&gt;
        &#039;box-shadow:0 -2px 8px rgba(0,0,0,0.2)&#039;&lt;br /&gt;
      ].join(&#039;;&#039;);&lt;br /&gt;
&lt;br /&gt;
      var nav = document.createElement( &#039;div&#039; );&lt;br /&gt;
      nav.style.cssText = &#039;display:flex;align-items:center;gap:12px;&#039;;&lt;br /&gt;
      nav.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;🔍 &amp;lt;strong&amp;gt;&#039; + escHtml(query) + &#039;&amp;lt;/strong&amp;gt; — &#039; + count + &#039; match&#039; + (count===1?&#039;&#039;:&#039;es&#039;) + &#039;&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-prev&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;↑ Prev&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-next&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;↓ Next&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-results&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;← Results&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
      bar.appendChild( nav );&lt;br /&gt;
&lt;br /&gt;
      var db = document.createElement( &#039;button&#039; );&lt;br /&gt;
      db.id = &#039;gr-hl-dismiss&#039;; db.textContent = &#039;✕ Close&#039;;&lt;br /&gt;
      db.style.cssText = &#039;background:rgba(255,255,255,0.15);border:none;color:#fff;padding:4px 12px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&#039;;&lt;br /&gt;
      bar.appendChild( db );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    document.body.appendChild( bar );&lt;br /&gt;
&lt;br /&gt;
    var hlEls = Array.from( document.querySelectorAll( &#039;.gr-search-hl&#039; ) );&lt;br /&gt;
    var current = 0;&lt;br /&gt;
&lt;br /&gt;
    function goTo( idx ) {&lt;br /&gt;
      hlEls.forEach( function(el) { el.classList.remove( &#039;gr-search-hl-current&#039; ); } );&lt;br /&gt;
      current = ( ( idx % hlEls.length ) + hlEls.length ) % hlEls.length;&lt;br /&gt;
      hlEls[ current ].classList.add( &#039;gr-search-hl-current&#039; );&lt;br /&gt;
      hlEls[ current ].scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function dismiss() { clearHighlights(); bar.remove(); }&lt;br /&gt;
&lt;br /&gt;
    var nb = document.getElementById( &#039;gr-hl-next&#039; );&lt;br /&gt;
    var pb = document.getElementById( &#039;gr-hl-prev&#039; );&lt;br /&gt;
    var rb = document.getElementById( &#039;gr-hl-results&#039; );&lt;br /&gt;
    var db2 = document.getElementById( &#039;gr-hl-dismiss&#039; );&lt;br /&gt;
    if ( nb ) nb.onclick = function() { goTo( current + 1 ); };&lt;br /&gt;
    if ( pb ) pb.onclick = function() { goTo( current - 1 ); };&lt;br /&gt;
    if ( db2 ) db2.onclick = dismiss;&lt;br /&gt;
    if ( rb ) rb.onclick = function() {&lt;br /&gt;
      bar.remove(); clearHighlights();&lt;br /&gt;
      if ( window.showSearchDialog ) window.showSearchDialog( query );&lt;br /&gt;
    };&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function clearHighlights() {&lt;br /&gt;
    document.querySelectorAll( &#039;.gr-search-hl&#039; ).forEach( function( span ) {&lt;br /&gt;
      var p = span.parentNode; if ( !p ) return;&lt;br /&gt;
      while ( span.firstChild ) p.insertBefore( span.firstChild, span );&lt;br /&gt;
      p.removeChild( span );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function escHtml( s ) {&lt;br /&gt;
    return String(s).replace(/&amp;amp;/g,&#039;&amp;amp;amp;&#039;).replace(/&amp;lt;/g,&#039;&amp;amp;lt;&#039;).replace(/&amp;gt;/g,&#039;&amp;amp;gt;&#039;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function injectHighlightCSS() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-hl-css&#039; ) ) return;&lt;br /&gt;
    var s = document.createElement( &#039;style&#039; );&lt;br /&gt;
    s.id = &#039;gr-hl-css&#039;;&lt;br /&gt;
    s.textContent = [&lt;br /&gt;
      &#039;.gr-search-hl{background:#fff176;color:#1a1a1a;border-radius:2px;padding:0 1px;box-shadow:0 0 0 1px rgba(181,69,27,0.25);}&#039;,&lt;br /&gt;
      &#039;.gr-search-hl-current{background:#ffb300!important;box-shadow:0 0 0 2px #b5451b!important;}&#039;,&lt;br /&gt;
      &#039;@keyframes gr-hl-pulse{0%{background:#ffb300;}50%{background:#fff176;}100%{background:#fff176;}}&#039;,&lt;br /&gt;
      &#039;.gr-search-hl-pulse{animation:gr-hl-pulse 1.2s ease 2;}&#039;,&lt;br /&gt;
    ].join(&#039;&#039;);&lt;br /&gt;
    document.head.appendChild( s );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  injectHighlightCSS();&lt;br /&gt;
&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) {&lt;br /&gt;
    document.addEventListener( &#039;DOMContentLoaded&#039;, applyHighlight );&lt;br /&gt;
  } else {&lt;br /&gt;
    applyHighlight();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ( window.mw ) {&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function() {&lt;br /&gt;
      setTimeout( applyHighlight, 100 );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  window.grStoreSearchHL = storeQueryForLink;&lt;br /&gt;
&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
/* ═══════════════════════════════════════════════════════════════&lt;br /&gt;
   Mobile addon — only runs on Minerva (mobile) skin&lt;br /&gt;
   ═══════════════════════════════════════════════════════════════ */&lt;br /&gt;
( function () {&lt;br /&gt;
  if ( !document.body.classList.contains( &#039;skin-minerva&#039; ) ) return;&lt;br /&gt;
  function injectCSS() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-mob-css&#039; ) ) return;&lt;br /&gt;
    var s = document.createElement( &#039;style&#039; );&lt;br /&gt;
    s.id = &#039;gr-mob-css&#039;;&lt;br /&gt;
    s.textContent =&lt;br /&gt;
      &#039;body,#mw-mf-viewport,#mw-mf-page-center{padding-top:0!important;margin-top:0!important;}&#039; +&lt;br /&gt;
      &#039;html,body,#mw-mf-viewport,#mw-mf-page-center{overflow-x:hidden!important;max-width:100vw!important;}&#039; +&lt;br /&gt;
      &#039;header.header-container{background:#b5451b!important;position:sticky!important;top:0!important;z-index:300!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header{background:#b5451b!important;min-height:54px!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header .search-toggle,.minerva-header .minerva-user-notifications{display:none!important;}&#039; +&lt;br /&gt;
      &#039;.branding-box a{display:flex!important;align-items:center!important;text-decoration:none!important;max-width:calc(100vw - 80px)!important;}&#039; +&lt;br /&gt;
      &#039;.branding-box a::before{content:&amp;quot;&amp;quot;;display:block;width:30px;height:30px;flex-shrink:0;background:url(&amp;quot;/favicon.png&amp;quot;) center/contain no-repeat;margin-right:8px;}&#039; +&lt;br /&gt;
      &#039;.branding-box a span{color:#fff!important;font-size:16px!important;font-weight:700!important;font-family:system-ui,sans-serif!important;line-height:1.2!important;flex:1 1 auto!important;min-width:0!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header svg path,.minerva-header svg rect,.minerva-header svg circle{fill:#fff!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header label{color:#fff!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-tabs,.mw-portlet-associated-pages,.page-actions-menu,#page-secondary-actions,.last-modified-bar,.minerva-anon-talk-link{display:none!important;}&#039; +&lt;br /&gt;
      &#039;#gr-mob-menu-items{display:block!important;}&#039; +&lt;br /&gt;
      &#039;.mw-footer.minerva-footer,.footer-places,.footer-info,.minerva-footer-logo,#footer-places-about,#footer-places-disclaimers,#footer-places-privacy{display:none!important;}&#039; +&lt;br /&gt;
      &#039;#gr-static-bar{position:sticky!important;top:54px!important;z-index:200!important;}&#039; +&lt;br /&gt;
      &#039;.mf-section-0,.mf-section-1,.mf-section-2,.mf-section-3,.mf-section-4,.mf-section-5,.mf-section-6,.mf-section-7,.mf-section-8,.mf-section-9,.mf-section-10{display:block!important;visibility:visible!important;}&#039; +&lt;br /&gt;
      &#039;.collapsible-block{display:block!important;}&#039; +&lt;br /&gt;
      &#039;.section-heading .indicator,.collapsible-heading .indicator{display:none!important;}&#039; +&lt;br /&gt;
      &#039;.section-heading,.collapsible-heading{pointer-events:none!important;}&#039; +&lt;br /&gt;
      &#039;.gr-home-grid{flex-direction:column!important;flex-wrap:nowrap!important;gap:12px!important;width:100%!important;}&#039; +&lt;br /&gt;
      &#039;.gr-home-card{width:100%!important;max-width:100%!important;min-width:unset!important;box-sizing:border-box!important;flex:none!important;}&#039; +&lt;br /&gt;
      &#039;.gr-home-toggle{flex-wrap:wrap!important;}&#039; +&lt;br /&gt;
      &#039;.mw-parser-output{font-size:18px!important;line-height:1.8!important;}&#039; +&lt;br /&gt;
      &#039;.mw-parser-output h2,.mw-parser-output h3{width:100%!important;}&#039; +&lt;br /&gt;
      &#039;.bhashyam-block{margin-left:8px!important;}&#039; +&lt;br /&gt;
      &#039;#footer,.mw-footer,.catlinks,#catlinks{display:none!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-panel{position:fixed!important;top:0!important;left:0!important;bottom:0!important;width:82vw!important;max-width:340px!important;background:#fff!important;z-index:10400!important;box-shadow:4px 0 28px rgba(0,0,0,0.22)!important;overflow-y:auto!important;padding:0 0 40px!important;transform:translateX(-110%)!important;transition:transform 0.26s cubic-bezier(0.4,0,0.2,1)!important;display:block!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-panel.open{transform:translateX(0)!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-backdrop{display:none!important;position:fixed!important;inset:0!important;background:rgba(0,0,0,0.4)!important;z-index:10399!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-backdrop.open{display:block!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-header{position:sticky!important;top:0!important;background:#fff!important;display:flex!important;align-items:center!important;justify-content:space-between!important;padding:16px 16px 12px!important;border-bottom:1px solid #f0ebe6!important;z-index:1!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-title{font-size:13px!important;font-weight:700!important;text-transform:uppercase!important;letter-spacing:0.08em!important;color:#b5451b!important;font-family:system-ui,sans-serif!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-close{background:none!important;border:none!important;font-size:22px!important;color:#999!important;cursor:pointer!important;padding:4px 8px!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-body{padding:12px 16px!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-body a{display:block!important;font-size:16px!important;line-height:1.6!important;color:#2c1810!important;text-decoration:none!important;padding:8px 0!important;border-bottom:1px solid #f5f0ed!important;}&#039;;&lt;br /&gt;
    document.head.appendChild( s );&lt;br /&gt;
  }&lt;br /&gt;
  function expandSections() {&lt;br /&gt;
    document.querySelectorAll( &#039;[class*=&amp;quot;mf-section-&amp;quot;], .collapsible-block&#039; ).forEach( function ( el ) { el.removeAttribute( &#039;hidden&#039; ); el.style.setProperty( &#039;display&#039;, &#039;block&#039;, &#039;important&#039; ); el.style.setProperty( &#039;visibility&#039;, &#039;visible&#039;, &#039;important&#039; ); el.removeAttribute( &#039;aria-hidden&#039; ); } );&lt;br /&gt;
    document.querySelectorAll( &#039;.section-heading, .collapsible-heading&#039; ).forEach( function ( el ) { el.setAttribute( &#039;aria-expanded&#039;, &#039;true&#039; ); el.style.setProperty( &#039;pointer-events&#039;, &#039;none&#039;, &#039;important&#039; ); } );&lt;br /&gt;
  }&lt;br /&gt;
  function watchSections() {&lt;br /&gt;
    var t = null;&lt;br /&gt;
    var obs = new MutationObserver( function ( ms ) { if ( ms.some( function(m){ return m.attributeName === &#039;hidden&#039;; } ) ) { clearTimeout(t); t = setTimeout( expandSections, 30 ); } } );&lt;br /&gt;
    obs.observe( document.querySelector( &#039;#mw-content-text&#039; ) || document.body, { subtree:true, attributes:true, attributeFilter:[&#039;hidden&#039;,&#039;aria-hidden&#039;] } );&lt;br /&gt;
  }&lt;br /&gt;
  function watchBodyPadding() {&lt;br /&gt;
    new MutationObserver( function () { if ( document.body.style.paddingTop &amp;amp;&amp;amp; document.body.style.paddingTop !== &#039;0px&#039; ) document.body.style.paddingTop = &#039;&#039;; } ).observe( document.body, { attributes:true, attributeFilter:[&#039;style&#039;] } );&lt;br /&gt;
  }&lt;br /&gt;
  function injectMenuLinks() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-mob-menu-items&#039; ) ) return;&lt;br /&gt;
    var navDrawer = document.querySelector( &#039;.navigation-drawer&#039; );&lt;br /&gt;
    if ( !navDrawer ) return;&lt;br /&gt;
    var wrap = document.createElement( &#039;div&#039; ); wrap.id = &#039;gr-mob-menu-items&#039;; wrap.style.cssText = &#039;width:100%;background:#fff;margin-top:8px;&#039;;&lt;br /&gt;
    var itemStyle = &#039;display:flex;align-items:center;gap:14px;padding:15px 20px;font-size:16px;color:#2c1810;text-decoration:none;font-family:system-ui,sans-serif;border-bottom:1px solid #f0ebe6;background:#fff;&#039;;&lt;br /&gt;
    function makeItem( href, label ) { var a = document.createElement( &#039;a&#039; ); a.href = href; a.style.cssText = itemStyle; a.innerHTML = &#039;&amp;lt;span&amp;gt;&#039; + label + &#039;&amp;lt;/span&amp;gt;&#039;; return a; }&lt;br /&gt;
    wrap.appendChild( makeItem( &#039;/Main_Page&#039;, &#039;Home&#039; ) );&lt;br /&gt;
    wrap.appendChild( makeItem( &#039;/My_wiki:Help&#039;, &#039;Help&#039; ) );&lt;br /&gt;
    wrap.appendChild( makeItem( &#039;/My_wiki:About&#039;, &#039;About&#039; ) );&lt;br /&gt;
    var userName = window.mw ? mw.config.get( &#039;wgUserName&#039; ) : null;&lt;br /&gt;
    if ( userName ) {&lt;br /&gt;
      wrap.appendChild( makeItem( ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) ? mw.util.getUrl( &#039;Special:Profile&#039; ) : &#039;/Special:Profile&#039;, &#039;Profile&#039; ) );&lt;br /&gt;
      var la = document.querySelector( &#039;a[href*=&amp;quot;action=logout&amp;quot;]&#039; );&lt;br /&gt;
      wrap.appendChild( makeItem( la ? la.href : &#039;/index.php?title=Special:UserLogout&#039;, &#039;Log out&#039; ) );&lt;br /&gt;
    }&lt;br /&gt;
    else wrap.appendChild( makeItem( &#039;/index.php?title=Special:UserLogin&#039;, &#039;Log in&#039; ) );&lt;br /&gt;
    var pageLeft = document.getElementById( &#039;mw-mf-page-left&#039; );&lt;br /&gt;
    if ( pageLeft ) { while ( pageLeft.firstChild ) pageLeft.removeChild( pageLeft.firstChild ); pageLeft.style.removeProperty( &#039;display&#039; ); pageLeft.appendChild( wrap ); }&lt;br /&gt;
    else navDrawer.appendChild( wrap );&lt;br /&gt;
  }&lt;br /&gt;
  var _tocDone = false;&lt;br /&gt;
  function initToc() {&lt;br /&gt;
    if ( _tocDone ) return;&lt;br /&gt;
    var tocList = document.querySelector( &#039;.vector-toc-contents, .vector-toc .vector-toc-list&#039; );&lt;br /&gt;
    if ( !tocList || !tocList.querySelector( &#039;li&#039; ) ) return;&lt;br /&gt;
    _tocDone = true;&lt;br /&gt;
    var bd = document.createElement( &#039;div&#039; ); bd.className = &#039;gr-mob-toc-backdrop&#039;; document.body.appendChild( bd );&lt;br /&gt;
    var panel = document.createElement( &#039;div&#039; ); panel.className = &#039;gr-mob-toc-panel&#039;;&lt;br /&gt;
    var hdr = document.createElement( &#039;div&#039; ); hdr.className = &#039;gr-mob-toc-header&#039;;&lt;br /&gt;
    var ttl = document.createElement( &#039;div&#039; ); ttl.className = &#039;gr-mob-toc-title&#039;; ttl.textContent = &#039;विषयसूची&#039;;&lt;br /&gt;
    var cls = document.createElement( &#039;button&#039; ); cls.className = &#039;gr-mob-toc-close&#039;; cls.textContent = &#039;✕&#039;;&lt;br /&gt;
    hdr.appendChild( ttl ); hdr.appendChild( cls ); panel.appendChild( hdr );&lt;br /&gt;
    var body = document.createElement( &#039;div&#039; ); body.className = &#039;gr-mob-toc-body&#039;; body.appendChild( tocList.cloneNode( true ) ); panel.appendChild( body ); document.body.appendChild( panel );&lt;br /&gt;
    var btn = document.createElement( &#039;button&#039; ); btn.id = &#039;gr-mob-toc-btn&#039;; btn.innerHTML = &#039;☰ &amp;amp;nbsp;Contents&#039;;&lt;br /&gt;
    btn.style.cssText = &#039;position:fixed;bottom:148px;left:16px;z-index:9100;background:#fff;border:1.5px solid #b5451b;border-radius:24px;padding:10px 16px;font-size:15px;font-family:system-ui,sans-serif;color:#b5451b;font-weight:600;box-shadow:0 3px 14px rgba(0,0,0,0.15);cursor:pointer;&#039;;&lt;br /&gt;
    document.body.appendChild( btn );&lt;br /&gt;
    function open()  { panel.classList.add(&#039;open&#039;); bd.classList.add(&#039;open&#039;); document.body.style.overflow=&#039;hidden&#039;; }&lt;br /&gt;
    function close() { panel.classList.remove(&#039;open&#039;); bd.classList.remove(&#039;open&#039;); document.body.style.overflow=&#039;&#039;; }&lt;br /&gt;
    btn.onclick = open; cls.onclick = close; bd.onclick = close;&lt;br /&gt;
    body.querySelectorAll(&#039;a&#039;).forEach(function(a){ a.onclick = close; });&lt;br /&gt;
  }&lt;br /&gt;
  function injectMoolaUllekhaLinks() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-mob-doc-nav&#039; ) ) return;&lt;br /&gt;
    var pageName = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039; ) ) || &#039;&#039;;&lt;br /&gt;
    if ( pageName === &#039;Main_Page&#039; || !pageName ) return;&lt;br /&gt;
    function wikiUrl( slug ) { if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( slug ); return ( ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039; ).replace( &#039;$1&#039;, encodeURIComponent( slug ).replace( /%2F/g, &#039;/&#039; ) ); }&lt;br /&gt;
    var teekaPage = document.querySelector( &#039;.gr-teeka-page&#039; );&lt;br /&gt;
    var primarySlug = teekaPage ? ( teekaPage.getAttribute( &#039;data-primary&#039; ) || pageName.split(&#039;/&#039;)[0] ) : pageName.split(&#039;/&#039;)[0];&lt;br /&gt;
    var docTitleEl = document.querySelector( &#039;.gr-doc-title&#039; );&lt;br /&gt;
    var hasMoolaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-moola&#039; ) === &#039;1&#039;;&lt;br /&gt;
    var hasUllekhaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-ullekha&#039; ) === &#039;1&#039;;&lt;br /&gt;
    var showMoolam = !!teekaPage || hasMoolaPage, showUllekha = hasUllekhaPage || !!teekaPage;&lt;br /&gt;
    if ( !showMoolam &amp;amp;&amp;amp; !showUllekha ) return;&lt;br /&gt;
    var nav = document.createElement( &#039;div&#039; ); nav.id = &#039;gr-mob-doc-nav&#039;;&lt;br /&gt;
    nav.style.cssText = &#039;display:flex;gap:10px;padding:10px 16px 8px;background:#fdf8f5;border-bottom:1px solid #f0e0d6;font-family:system-ui,sans-serif;&#039;;&lt;br /&gt;
    function makeLink( href, label ) { var a = document.createElement( &#039;a&#039; ); a.href = href; a.textContent = label; a.style.cssText = &#039;display:inline-flex;align-items:center;padding:5px 16px;border-radius:20px;background:#fff;border:1.5px solid #e8cfc4;color:#b5451b;font-size:14px;font-weight:600;text-decoration:none;&#039;; return a; }&lt;br /&gt;
    if ( teekaPage ) nav.appendChild( makeLink( wikiUrl( primarySlug ), &#039;मूल&#039; ) );&lt;br /&gt;
    else if ( hasMoolaPage ) nav.appendChild( makeLink( wikiUrl( primarySlug + &#039;/Moola&#039; ), &#039;मूलम्&#039; ) );&lt;br /&gt;
    if ( showUllekha ) nav.appendChild( makeLink( wikiUrl( primarySlug + &#039;/Ullekha&#039; ), &#039;उल्लेख&#039; ) );&lt;br /&gt;
    var h1 = document.getElementById( &#039;firstHeading&#039; ) || document.querySelector( &#039;.page-heading, h1.firstHeading, .mw-first-heading&#039; );&lt;br /&gt;
    if ( h1 &amp;amp;&amp;amp; h1.parentNode ) h1.parentNode.insertBefore( nav, h1.nextSibling );&lt;br /&gt;
    else { var ct = document.getElementById( &#039;mw-content-text&#039; ); if ( ct ) ct.insertBefore( nav, ct.firstChild ); }&lt;br /&gt;
  }&lt;br /&gt;
  injectCSS(); watchBodyPadding();&lt;br /&gt;
  function boot() { expandSections(); watchSections(); injectMenuLinks(); injectMoolaUllekhaLinks(); [100,400,900,1800].forEach(function(ms){ setTimeout(expandSections,ms); }); setTimeout(initToc,700); }&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) document.addEventListener( &#039;DOMContentLoaded&#039;, boot );&lt;br /&gt;
  else boot();&lt;br /&gt;
  if ( window.mw ) mw.hook( &#039;wikipage.content&#039; ).add(function(){ setTimeout(function(){ expandSections(); injectMenuLinks(); injectMoolaUllekhaLinks(); initToc(); },300); });&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
  mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
    setTimeout( function () {&lt;br /&gt;
      var blocks = document.querySelectorAll( &#039;.collapsible-block, .toggle-list&#039; );&lt;br /&gt;
      Array.prototype.forEach.call( blocks, function ( el ) { if ( !el.parentNode ) { try { el.remove(); } catch(e) {} } } );&lt;br /&gt;
    }, 0 );&lt;br /&gt;
  } );&lt;br /&gt;
  if ( mw.config.get( &#039;wgPageName&#039; ) !== &#039;Main_Page&#039; ) return;&lt;br /&gt;
  mw.loader.using( &#039;mediawiki.util&#039; ).done( function () {&lt;br /&gt;
    $( function () { applyHomeToggleOffset(); window.addEventListener( &#039;resize&#039;, applyHomeToggleOffset, { passive: true } ); setTimeout( applyHomeToggleOffset, 300 ); setTimeout( applyHomeToggleOffset, 800 ); } );&lt;br /&gt;
  } );&lt;br /&gt;
  function applyHomeToggleOffset() {&lt;br /&gt;
    var bar = document.getElementById( &#039;gr-static-bar&#039; ); if ( !bar ) return;&lt;br /&gt;
    var barBottom = Math.round( bar.getBoundingClientRect().bottom );&lt;br /&gt;
    [ document.getElementById(&#039;gr-home&#039;), document.getElementById(&#039;gr-home-toggle&#039;), document.querySelector(&#039;#mw-content-text .mw-parser-output &amp;gt; .gr-home, #mw-content-text .mw-parser-output &amp;gt; *:first-child&#039;) ].forEach( function(el){ if(el) el.style.scrollMarginTop=(barBottom+4)+&#039;px&#039;; } );&lt;br /&gt;
    var isMob = window.innerWidth &amp;lt; 768 || !!document.getElementById( &#039;mw-mf-viewport&#039; );&lt;br /&gt;
    if ( isMob ) { var toggleEl = document.getElementById(&#039;gr-home-toggle&#039;); if ( toggleEl ) { var tr = toggleEl.getBoundingClientRect(); if ( tr.top &amp;lt; barBottom ) { var cp = parseInt(window.getComputedStyle(document.body).paddingTop,10)||0; document.body.style.paddingTop=(cp+(barBottom-tr.top)+4)+&#039;px&#039;; } } }&lt;br /&gt;
  }&lt;br /&gt;
  $( function () {&lt;br /&gt;
    var $toggle=$(&#039;#gr-home-toggle&#039;),$viewG=$(&#039;#gr-view-grantha&#039;),$viewA=$(&#039;#gr-view-author&#039;),$btnG=$(&#039;#gr-toggle-grantha&#039;),$btnA=$(&#039;#gr-toggle-author&#039;);&lt;br /&gt;
    if(!$toggle.length||!$viewG.length||!$viewA.length)return; if($toggle.data(&#039;gr-wired&#039;))return; $toggle.data(&#039;gr-wired&#039;,true);&lt;br /&gt;
    function showView(which){ if(which===&#039;grantha&#039;){$viewG.show();$viewA.hide();$btnG.addClass(&#039;gr-toggle-active&#039;);$btnA.removeClass(&#039;gr-toggle-active&#039;);}else{$viewA.show();$viewG.hide();$btnA.addClass(&#039;gr-toggle-active&#039;);$btnG.removeClass(&#039;gr-toggle-active&#039;);} try{localStorage.setItem(&#039;grantha_home_tab&#039;,which);}catch(e){} }&lt;br /&gt;
    $btnG.on(&#039;click keydown&#039;,function(e){if(e.type===&#039;keydown&#039;&amp;amp;&amp;amp;e.key!==&#039;Enter&#039;&amp;amp;&amp;amp;e.key!==&#039; &#039;)return;showView(&#039;grantha&#039;);});&lt;br /&gt;
    $btnA.on(&#039;click keydown&#039;,function(e){if(e.type===&#039;keydown&#039;&amp;amp;&amp;amp;e.key!==&#039;Enter&#039;&amp;amp;&amp;amp;e.key!==&#039; &#039;)return;showView(&#039;author&#039;);});&lt;br /&gt;
    try{var saved=localStorage.getItem(&#039;grantha_home_tab&#039;);if(saved===&#039;author&#039;)showView(&#039;author&#039;);else showView(&#039;grantha&#039;);}catch(e){showView(&#039;grantha&#039;);}&lt;br /&gt;
  } );&lt;br /&gt;
}() );&lt;br /&gt;
// ── Replace MediaWiki user links with a single username dropdown (Profile + Logout) ──&lt;br /&gt;
( function () {&lt;br /&gt;
  function wikiHref( title ) {&lt;br /&gt;
    if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( title );&lt;br /&gt;
    var ap = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
    return ap.replace( &#039;$1&#039;, title );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function buildLogoutForm( token ) {&lt;br /&gt;
    token = token || &#039;&#039;;&lt;br /&gt;
    var esc = String( token ).replace( /&amp;quot;/g, &#039;&amp;amp;quot;&#039; );&lt;br /&gt;
    var script = ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.wikiScript ) ? mw.util.wikiScript() : &#039;/index.php&#039;;&lt;br /&gt;
    var form = document.createElement( &#039;form&#039; );&lt;br /&gt;
    form.method = &#039;post&#039;;&lt;br /&gt;
    form.action = script + &#039;?title=Special:UserLogout&#039;;&lt;br /&gt;
    form.style.display = &#039;none&#039;;&lt;br /&gt;
    form.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;wpEditToken&amp;quot; value=&amp;quot;&#039; + esc + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;title&amp;quot; value=&amp;quot;Special:UserLogout&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;returnto&amp;quot; value=&amp;quot;Main Page&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
    document.body.appendChild( form );&lt;br /&gt;
    return form;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.js&amp;diff=6210</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.js&amp;diff=6210"/>
		<updated>2026-06-12T17:33:33Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* MediaWiki:Common.js — grantha.io  (v7) */&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
  var LS_SCRIPT_KEY = &#039;grantha_reader_script&#039;;&lt;br /&gt;
  var currentScript = &#039;deva&#039;;&lt;br /&gt;
&lt;br /&gt;
  function devanagariToIAST( text ) {&lt;br /&gt;
    var CONSONANTS = {&lt;br /&gt;
      &#039;क&#039;:&#039;k&#039;,&#039;ख&#039;:&#039;kh&#039;,&#039;ग&#039;:&#039;g&#039;,&#039;घ&#039;:&#039;gh&#039;,&#039;ङ&#039;:&#039;ṅ&#039;,&lt;br /&gt;
      &#039;च&#039;:&#039;c&#039;,&#039;छ&#039;:&#039;ch&#039;,&#039;ज&#039;:&#039;j&#039;,&#039;झ&#039;:&#039;jh&#039;,&#039;ञ&#039;:&#039;ñ&#039;,&lt;br /&gt;
      &#039;ट&#039;:&#039;ṭ&#039;,&#039;ठ&#039;:&#039;ṭh&#039;,&#039;ड&#039;:&#039;ḍ&#039;,&#039;ढ&#039;:&#039;ḍh&#039;,&#039;ण&#039;:&#039;ṇ&#039;,&lt;br /&gt;
      &#039;त&#039;:&#039;t&#039;,&#039;थ&#039;:&#039;th&#039;,&#039;द&#039;:&#039;d&#039;,&#039;ध&#039;:&#039;dh&#039;,&#039;न&#039;:&#039;n&#039;,&lt;br /&gt;
      &#039;प&#039;:&#039;p&#039;,&#039;फ&#039;:&#039;ph&#039;,&#039;ब&#039;:&#039;b&#039;,&#039;भ&#039;:&#039;bh&#039;,&#039;म&#039;:&#039;m&#039;,&lt;br /&gt;
      &#039;य&#039;:&#039;y&#039;,&#039;र&#039;:&#039;r&#039;,&#039;ल&#039;:&#039;l&#039;,&#039;ळ&#039;:&#039;ḷ&#039;,&#039;व&#039;:&#039;v&#039;,&lt;br /&gt;
      &#039;श&#039;:&#039;ś&#039;,&#039;ष&#039;:&#039;ṣ&#039;,&#039;स&#039;:&#039;s&#039;,&#039;ह&#039;:&#039;h&#039;&lt;br /&gt;
    };&lt;br /&gt;
    var DIACRITICS = {&lt;br /&gt;
      &#039;ा&#039;:&#039;ā&#039;,&#039;ि&#039;:&#039;i&#039;,&#039;ी&#039;:&#039;ī&#039;,&#039;ु&#039;:&#039;u&#039;,&#039;ू&#039;:&#039;ū&#039;,&lt;br /&gt;
      &#039;ृ&#039;:&#039;ṛ&#039;,&#039;ॄ&#039;:&#039;ṝ&#039;,&#039;े&#039;:&#039;e&#039;,&#039;ै&#039;:&#039;ai&#039;,&#039;ो&#039;:&#039;o&#039;,&#039;ौ&#039;:&#039;au&#039;&lt;br /&gt;
    };&lt;br /&gt;
    var VOWELS = {&lt;br /&gt;
      &#039;अ&#039;:&#039;a&#039;,&#039;आ&#039;:&#039;ā&#039;,&#039;इ&#039;:&#039;i&#039;,&#039;ई&#039;:&#039;ī&#039;,&#039;उ&#039;:&#039;u&#039;,&#039;ऊ&#039;:&#039;ū&#039;,&lt;br /&gt;
      &#039;ऋ&#039;:&#039;ṛ&#039;,&#039;ॠ&#039;:&#039;ṝ&#039;,&#039;ए&#039;:&#039;e&#039;,&#039;ऐ&#039;:&#039;ai&#039;,&#039;ओ&#039;:&#039;o&#039;,&#039;औ&#039;:&#039;au&#039;,&#039;ऽ&#039;:&amp;quot;&#039;&amp;quot;&lt;br /&gt;
    };&lt;br /&gt;
    var MISC = {&lt;br /&gt;
      &#039;ं&#039;:&#039;ṃ&#039;,&#039;ः&#039;:&#039;ḥ&#039;,&#039;ँ&#039;:&#039;m̐&#039;,&#039;ॐ&#039;:&#039;oṃ&#039;,&lt;br /&gt;
      &#039;०&#039;:&#039;0&#039;,&#039;१&#039;:&#039;1&#039;,&#039;२&#039;:&#039;2&#039;,&#039;३&#039;:&#039;3&#039;,&#039;४&#039;:&#039;4&#039;,&lt;br /&gt;
      &#039;५&#039;:&#039;5&#039;,&#039;६&#039;:&#039;6&#039;,&#039;७&#039;:&#039;7&#039;,&#039;८&#039;:&#039;8&#039;,&#039;९&#039;:&#039;9&#039;&lt;br /&gt;
    };&lt;br /&gt;
    var HALANTA = &#039;्&#039;;&lt;br /&gt;
    var chars = Array.from( text );&lt;br /&gt;
    var result = &#039;&#039;;&lt;br /&gt;
    var i = 0;&lt;br /&gt;
    while ( i &amp;lt; chars.length ) {&lt;br /&gt;
      var ch   = chars[ i ];&lt;br /&gt;
      var next = chars[ i + 1 ];&lt;br /&gt;
      if ( CONSONANTS[ ch ] ) {&lt;br /&gt;
        var base = CONSONANTS[ ch ];&lt;br /&gt;
        if ( next === HALANTA )          { result += base;               i += 2; }&lt;br /&gt;
        else if ( DIACRITICS[ next ] )   { result += base + DIACRITICS[ next ]; i += 2; }&lt;br /&gt;
        else if ( next === &#039;ं&#039; || next === &#039;ः&#039; ) { result += base + &#039;a&#039; + MISC[ next ]; i += 2; }&lt;br /&gt;
        else                             { result += base + &#039;a&#039;;         i++;    }&lt;br /&gt;
      } else if ( VOWELS[ ch ] )         { result += VOWELS[ ch ];       i++; }&lt;br /&gt;
      else if ( DIACRITICS[ ch ] )       { result += DIACRITICS[ ch ];   i++; }&lt;br /&gt;
      else if ( MISC[ ch ] )             { result += MISC[ ch ];         i++; }&lt;br /&gt;
      else                               { result += ch;                 i++; }&lt;br /&gt;
    }&lt;br /&gt;
    return result;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var SCRIPT_MAP = {&lt;br /&gt;
    kn: {&lt;br /&gt;
      &#039;अ&#039;:&#039;ಅ&#039;,&#039;आ&#039;:&#039;ಆ&#039;,&#039;इ&#039;:&#039;ಇ&#039;,&#039;ई&#039;:&#039;ಈ&#039;,&#039;उ&#039;:&#039;ಉ&#039;,&#039;ऊ&#039;:&#039;ಊ&#039;,&#039;ऋ&#039;:&#039;ಋ&#039;,&lt;br /&gt;
      &#039;ए&#039;:&#039;ಏ&#039;,&#039;ऐ&#039;:&#039;ಐ&#039;,&#039;ओ&#039;:&#039;ಓ&#039;,&#039;औ&#039;:&#039;ಔ&#039;,&#039;ऽ&#039;:&#039;ಽ&#039;,&lt;br /&gt;
      &#039;क&#039;:&#039;ಕ&#039;,&#039;ख&#039;:&#039;ಖ&#039;,&#039;ग&#039;:&#039;ಗ&#039;,&#039;घ&#039;:&#039;ಘ&#039;,&#039;ङ&#039;:&#039;ಙ&#039;,&lt;br /&gt;
      &#039;च&#039;:&#039;ಚ&#039;,&#039;छ&#039;:&#039;ಛ&#039;,&#039;ज&#039;:&#039;ಜ&#039;,&#039;झ&#039;:&#039;ಝ&#039;,&#039;ञ&#039;:&#039;ಞ&#039;,&lt;br /&gt;
      &#039;ट&#039;:&#039;ಟ&#039;,&#039;ठ&#039;:&#039;ಠ&#039;,&#039;ड&#039;:&#039;ಡ&#039;,&#039;ढ&#039;:&#039;ಢ&#039;,&#039;ण&#039;:&#039;ಣ&#039;,&lt;br /&gt;
      &#039;त&#039;:&#039;ತ&#039;,&#039;थ&#039;:&#039;ಥ&#039;,&#039;द&#039;:&#039;ದ&#039;,&#039;ध&#039;:&#039;ಧ&#039;,&#039;न&#039;:&#039;ನ&#039;,&lt;br /&gt;
      &#039;प&#039;:&#039;ಪ&#039;,&#039;फ&#039;:&#039;ಫ&#039;,&#039;ब&#039;:&#039;ಬ&#039;,&#039;भ&#039;:&#039;ಭ&#039;,&#039;म&#039;:&#039;ಮ&#039;,&lt;br /&gt;
      &#039;य&#039;:&#039;ಯ&#039;,&#039;र&#039;:&#039;ರ&#039;,&#039;ल&#039;:&#039;ಲ&#039;,&#039;व&#039;:&#039;ವ&#039;,&lt;br /&gt;
      &#039;श&#039;:&#039;ಶ&#039;,&#039;ष&#039;:&#039;ಷ&#039;,&#039;स&#039;:&#039;ಸ&#039;,&#039;ह&#039;:&#039;ಹ&#039;,&lt;br /&gt;
      &#039;ा&#039;:&#039;ಾ&#039;,&#039;ि&#039;:&#039;ಿ&#039;,&#039;ी&#039;:&#039;ೀ&#039;,&#039;ु&#039;:&#039;ು&#039;,&#039;ू&#039;:&#039;ೂ&#039;,&lt;br /&gt;
      &#039;ृ&#039;:&#039;ೃ&#039;,&#039;े&#039;:&#039;ೇ&#039;,&#039;ै&#039;:&#039;ೈ&#039;,&#039;ो&#039;:&#039;ೋ&#039;,&#039;ौ&#039;:&#039;ೌ&#039;,&lt;br /&gt;
      &#039;ं&#039;:&#039;ಂ&#039;,&#039;ः&#039;:&#039;ಃ&#039;,&#039;्&#039;:&#039;್&#039;,&lt;br /&gt;
      &#039;०&#039;:&#039;೦&#039;,&#039;१&#039;:&#039;೧&#039;,&#039;२&#039;:&#039;೨&#039;,&#039;३&#039;:&#039;೩&#039;,&#039;४&#039;:&#039;೪&#039;,&lt;br /&gt;
      &#039;५&#039;:&#039;೫&#039;,&#039;६&#039;:&#039;೬&#039;,&#039;७&#039;:&#039;೭&#039;,&#039;८&#039;:&#039;೮&#039;,&#039;९&#039;:&#039;೯&#039;&lt;br /&gt;
    },&lt;br /&gt;
    ta: {&lt;br /&gt;
      &#039;अ&#039;:&#039;அ&#039;,&#039;आ&#039;:&#039;ஆ&#039;,&#039;इ&#039;:&#039;இ&#039;,&#039;ई&#039;:&#039;ஈ&#039;,&#039;उ&#039;:&#039;உ&#039;,&#039;ऊ&#039;:&#039;ஊ&#039;,&lt;br /&gt;
      &#039;ऋ&#039;:&#039;ரு&#039;,&#039;ॠ&#039;:&#039;ரூ&#039;,&lt;br /&gt;
      &#039;ए&#039;:&#039;ஏ&#039;,&#039;ऐ&#039;:&#039;ஐ&#039;,&#039;ओ&#039;:&#039;ஓ&#039;,&#039;औ&#039;:&#039;ஔ&#039;,&lt;br /&gt;
      &#039;क&#039;:&#039;க&#039;,&#039;ख&#039;:&#039;க&#039;,&#039;ग&#039;:&#039;க&#039;,&#039;घ&#039;:&#039;க&#039;,&#039;ङ&#039;:&#039;ங&#039;,&lt;br /&gt;
      &#039;च&#039;:&#039;ச&#039;,&#039;छ&#039;:&#039;ச&#039;,&#039;ज&#039;:&#039;ஜ&#039;,&#039;झ&#039;:&#039;ஜ&#039;,&#039;ञ&#039;:&#039;ஞ&#039;,&lt;br /&gt;
      &#039;ட&#039;:&#039;ட&#039;,&#039;ठ&#039;:&#039;ட&#039;,&#039;ड&#039;:&#039;ட&#039;,&#039;ढ&#039;:&#039;ட&#039;,&#039;ண&#039;:&#039;ண&#039;,&lt;br /&gt;
      &#039;त&#039;:&#039;த&#039;,&#039;थ&#039;:&#039;த&#039;,&#039;द&#039;:&#039;த&#039;,&#039;ध&#039;:&#039;த&#039;,&#039;न&#039;:&#039;ந&#039;,&lt;br /&gt;
      &#039;प&#039;:&#039;ப&#039;,&#039;फ&#039;:&#039;ப&#039;,&#039;ब&#039;:&#039;ப&#039;,&#039;भ&#039;:&#039;ப&#039;,&#039;म&#039;:&#039;ம&#039;,&lt;br /&gt;
      &#039;य&#039;:&#039;ய&#039;,&#039;र&#039;:&#039;ர&#039;,&#039;ल&#039;:&#039;ல&#039;,&#039;ळ&#039;:&#039;ழ&#039;,&#039;व&#039;:&#039;வ&#039;,&lt;br /&gt;
      &#039;श&#039;:&#039;ஶ&#039;,&#039;ष&#039;:&#039;ஷ&#039;,&#039;स&#039;:&#039;ஸ&#039;,&#039;ह&#039;:&#039;ஹ&#039;,&lt;br /&gt;
      &#039;ा&#039;:&#039;ா&#039;,&#039;ि&#039;:&#039;ி&#039;,&#039;ी&#039;:&#039;ீ&#039;,&#039;ु&#039;:&#039;ு&#039;,&#039;ू&#039;:&#039;ூ&#039;,&lt;br /&gt;
      &#039;ृ&#039;:&#039;ு&#039;,&#039;ॄ&#039;:&#039;ூ&#039;,&lt;br /&gt;
      &#039;े&#039;:&#039;ே&#039;,&#039;ை&#039;:&#039;ை&#039;,&#039;ो&#039;:&#039;ோ&#039;,&#039;ौ&#039;:&#039;ௌ&#039;,&lt;br /&gt;
      &#039;ं&#039;:&#039;ம்&#039;,&#039;ः&#039;:&#039;:&#039;,&#039;ँ&#039;:&#039;ம்&#039;,&#039;्&#039;:&#039;்&#039;,&#039;ॐ&#039;:&#039;ௐ&#039;,&#039;ऽ&#039;:&#039;ௗ&#039;,&lt;br /&gt;
      &#039;०&#039;:&#039;0&#039;,&#039;१&#039;:&#039;1&#039;,&#039;२&#039;:&#039;2&#039;,&#039;३&#039;:&#039;3&#039;,&#039;४&#039;:&#039;4&#039;,&lt;br /&gt;
      &#039;५&#039;:&#039;5&#039;,&#039;६&#039;:&#039;6&#039;,&#039;७&#039;:&#039;7&#039;,&#039;८&#039;:&#039;8&#039;,&#039;९&#039;:&#039;9&#039;&lt;br /&gt;
    }&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  var PRE = [&lt;br /&gt;
    [ /ङ्क/g, &#039;ंक&#039; ], [ /ङ्ख/g, &#039;ंख&#039; ], [ /ङ्ग/g, &#039;ंग&#039; ], [ /ङ्घ/g, &#039;ंघ&#039; ],&lt;br /&gt;
    [ /ञ्च/g, &#039;ंच&#039; ], [ /ञ्ज/g, &#039;ंज&#039; ], [ /ण्ट/g, &#039;ंट&#039; ], [ /ण्ड/g, &#039;ंड&#039; ],&lt;br /&gt;
    [ /न्त/g, &#039;ंत&#039; ], [ /न्द/g, &#039;ंद&#039; ], [ /म्ब/g, &#039;ंब&#039; ], [ /म्भ/g, &#039;ंभ&#039; ]&lt;br /&gt;
  ];&lt;br /&gt;
&lt;br /&gt;
  function transliterateText( text, script ) {&lt;br /&gt;
    if ( script === &#039;en&#039; ) return devanagariToIAST( text );&lt;br /&gt;
    var map = SCRIPT_MAP[ script ];&lt;br /&gt;
    if ( !map ) return text;&lt;br /&gt;
    var t = text;&lt;br /&gt;
    PRE.forEach( function ( p ) { t = t.replace( p[ 0 ], p[ 1 ] ); } );&lt;br /&gt;
    return Array.from( t ).map( function ( ch ) {&lt;br /&gt;
      return map[ ch ] !== undefined ? map[ ch ] : ch;&lt;br /&gt;
    } ).join( &#039;&#039; );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var translatableSpans = [];&lt;br /&gt;
&lt;br /&gt;
  function tagTextNodes() {&lt;br /&gt;
    var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
    if ( content ) {&lt;br /&gt;
      var walker = document.createTreeWalker( content, NodeFilter.SHOW_TEXT );&lt;br /&gt;
      var nodes  = [];&lt;br /&gt;
      while ( walker.nextNode() ) nodes.push( walker.currentNode );&lt;br /&gt;
      nodes.forEach( function ( node ) {&lt;br /&gt;
        var p = node.parentNode;&lt;br /&gt;
        if ( !p ) return;&lt;br /&gt;
        if ( p.hasAttribute &amp;amp;&amp;amp; p.hasAttribute( &#039;data-deva&#039; ) ) return;&lt;br /&gt;
        if ( p.closest ) {&lt;br /&gt;
          if ( p.closest( &#039;.gr-controls&#039; )    ) return;&lt;br /&gt;
          if ( p.closest( &#039;.mw-editsection&#039; ) ) return;&lt;br /&gt;
        }&lt;br /&gt;
        var orig = node.textContent;&lt;br /&gt;
        if ( !orig.trim() ) return;&lt;br /&gt;
        var span = document.createElement( &#039;span&#039; );&lt;br /&gt;
        span.setAttribute( &#039;data-deva&#039;, orig );&lt;br /&gt;
        span.textContent = orig;&lt;br /&gt;
        p.replaceChild( span, node );&lt;br /&gt;
        translatableSpans.push( span );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
    document.querySelectorAll( &#039;.vector-toc .vector-toc-text&#039; ).forEach( function ( span ) {&lt;br /&gt;
      if ( span.hasAttribute( &#039;data-deva&#039; ) ) return;&lt;br /&gt;
      var orig = span.textContent;&lt;br /&gt;
      if ( !orig.trim() ) return;&lt;br /&gt;
      span.setAttribute( &#039;data-deva&#039;, orig );&lt;br /&gt;
      translatableSpans.push( span );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function applyScript( script ) {&lt;br /&gt;
    currentScript = script;&lt;br /&gt;
    translatableSpans.forEach( function ( span ) {&lt;br /&gt;
      if ( !span.parentNode ) return;&lt;br /&gt;
      var orig = span.getAttribute( &#039;data-deva&#039; );&lt;br /&gt;
      if ( !orig ) return;&lt;br /&gt;
      span.textContent = ( script === &#039;deva&#039; )&lt;br /&gt;
        ? orig&lt;br /&gt;
        : transliterateText( orig, script );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function _isNoTocPage() {&lt;br /&gt;
    var pn = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039; ) ) || &#039;&#039;;&lt;br /&gt;
    return pn === &#039;Main_Page&#039; || /^[A-Za-z0-9_]+:About$/.test( pn );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function renameTocTitle() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    var titleEl = toc.querySelector(&#039;.vector-toc-title&#039;) || toc.querySelector(&#039;.vector-pinnable-header-label&#039;);&lt;br /&gt;
    if ( !titleEl ) return;&lt;br /&gt;
    var LABEL = &#039;विषयसूची&#039;;&lt;br /&gt;
    var span = titleEl.querySelector(&#039;.gr-toc-title&#039;);&lt;br /&gt;
    if ( !span ) {&lt;br /&gt;
      titleEl.innerHTML = &#039;&#039;;&lt;br /&gt;
      span = document.createElement(&#039;span&#039;);&lt;br /&gt;
      span.className = &#039;gr-toc-title&#039;;&lt;br /&gt;
      span.setAttribute(&#039;data-deva&#039;, LABEL);&lt;br /&gt;
      titleEl.appendChild(span);&lt;br /&gt;
      translatableSpans.push(span);&lt;br /&gt;
    }&lt;br /&gt;
    span.textContent = currentScript === &#039;deva&#039; ? LABEL : transliterateText(LABEL, currentScript);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function removeTocBeginning() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    var el = toc.querySelector( &#039;#vector-toc-beginning&#039; );&lt;br /&gt;
    if ( !el ) {&lt;br /&gt;
      var items = toc.querySelectorAll( &#039;.vector-toc-list-item&#039; );&lt;br /&gt;
      for ( var i = 0; i &amp;lt; items.length; i++ ) {&lt;br /&gt;
        var a = items[ i ].querySelector( &#039;a&#039; );&lt;br /&gt;
        if ( a ) {&lt;br /&gt;
          var href = a.getAttribute( &#039;href&#039; ) || &#039;&#039;;&lt;br /&gt;
          if ( href.indexOf( &#039;#&#039; ) === -1 ) { el = items[ i ]; break; }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if ( el &amp;amp;&amp;amp; el.parentNode ) el.parentNode.removeChild( el );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function expandTocSections() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    toc.querySelectorAll( &#039;.vector-toc-list-item-collapsed&#039; ).forEach( function ( li ) {&lt;br /&gt;
      li.classList.remove( &#039;vector-toc-list-item-collapsed&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function injectTocDocNav() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    if ( document.getElementById( &#039;gr-toc-doc-nav&#039; ) ) return;&lt;br /&gt;
    var artPath   = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
    var pageTitle = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039;   ) ) || &#039;&#039;;&lt;br /&gt;
    var teekaPage   = document.querySelector( &#039;.gr-teeka-page&#039; );&lt;br /&gt;
    var primarySlug = teekaPage ? ( teekaPage.getAttribute( &#039;data-primary&#039; ) || &#039;&#039; ) : &#039;&#039;;&lt;br /&gt;
    if ( !primarySlug ) { primarySlug = pageTitle.split( &#039;/&#039; )[ 0 ]; }&lt;br /&gt;
    if ( !primarySlug ) return;&lt;br /&gt;
    function wikiUrl( slug ) {&lt;br /&gt;
      if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( slug );&lt;br /&gt;
      return artPath.replace( &#039;$1&#039;, encodeURIComponent( slug ).replace( /%2F/g, &#039;/&#039; ) );&lt;br /&gt;
    }&lt;br /&gt;
    var docTitleEl     = document.querySelector( &#039;.gr-doc-title&#039; );&lt;br /&gt;
    var hasMoolaPage   = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-moola&#039; )   === &#039;1&#039;;&lt;br /&gt;
    var hasUllekhaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-ullekha&#039; ) === &#039;1&#039;;&lt;br /&gt;
    var showMoolaPage  = !teekaPage &amp;amp;&amp;amp; hasMoolaPage;&lt;br /&gt;
    var showMoolaBack  = !!teekaPage;&lt;br /&gt;
    var showUllekha    = hasUllekhaPage || !!teekaPage;&lt;br /&gt;
    if ( !showMoolaPage &amp;amp;&amp;amp; !showMoolaBack &amp;amp;&amp;amp; !showUllekha ) return;&lt;br /&gt;
    var nav = document.createElement( &#039;div&#039; );&lt;br /&gt;
    nav.id = &#039;gr-toc-doc-nav&#039;;&lt;br /&gt;
    nav.setAttribute( &#039;class&#039;, &#039;toc-main-links&#039; );&lt;br /&gt;
    function makeBtn( href, label ) {&lt;br /&gt;
      var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
      a.href = href;&lt;br /&gt;
      a.setAttribute( &#039;class&#039;, &#039;toc-main-link-item&#039; );&lt;br /&gt;
      var lspan = document.createElement( &#039;span&#039; );&lt;br /&gt;
      lspan.setAttribute( &#039;data-deva&#039;, label );&lt;br /&gt;
      lspan.textContent = ( currentScript &amp;amp;&amp;amp; currentScript !== &#039;deva&#039; ) ? transliterateText( label, currentScript ) : label;&lt;br /&gt;
      translatableSpans.push( lspan );&lt;br /&gt;
      a.appendChild( lspan );&lt;br /&gt;
      a.addEventListener( &#039;mouseover&#039;, function () { this.style.opacity = &#039;0.72&#039;; } );&lt;br /&gt;
      a.addEventListener( &#039;mouseout&#039;,  function () { this.style.opacity = &#039;1&#039;;    } );&lt;br /&gt;
      return a;&lt;br /&gt;
    }&lt;br /&gt;
    if ( showMoolaPage ) nav.appendChild( makeBtn( wikiUrl( primarySlug + &#039;/Moola&#039; ), &#039;मूलम्&#039; ) );&lt;br /&gt;
    if ( showMoolaBack ) nav.appendChild( makeBtn( wikiUrl( primarySlug ),            &#039;मूल&#039;   ) );&lt;br /&gt;
    if ( showUllekha   ) nav.appendChild( makeBtn( wikiUrl( primarySlug + &#039;/Ullekha&#039;), &#039;उल्लेख&#039;) );&lt;br /&gt;
    var tocContents = toc.querySelector( &#039;.vector-toc-contents&#039; );&lt;br /&gt;
    if ( tocContents ) toc.insertBefore( nav, tocContents );&lt;br /&gt;
    else               toc.appendChild( nav );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var _headingObserver = null;&lt;br /&gt;
&lt;br /&gt;
  function attachHeadingObserver() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    if ( _headingObserver ) return;&lt;br /&gt;
    if ( !window.IntersectionObserver ) return;&lt;br /&gt;
    var ACTIVE_COLOR = &#039;#f57c00&#039;;&lt;br /&gt;
    var _activeId    = null;&lt;br /&gt;
    var content  = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
    if ( !content ) return;&lt;br /&gt;
    var headings = Array.from( content.querySelectorAll( &#039;h1[id],h2[id],h3[id],h4[id],h5[id],h6[id]&#039; ) );&lt;br /&gt;
    if ( !headings.length ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    function getTocLink( id ) { return toc.querySelector( &#039;a[href=&amp;quot;#&#039; + CSS.escape( id ) + &#039;&amp;quot;]&#039; ); }&lt;br /&gt;
    function getTocLi( id ) { var a = getTocLink( id ); return a ? a.closest( &#039;.vector-toc-list-item&#039; ) : null; }&lt;br /&gt;
    function clearActive() {&lt;br /&gt;
      toc.querySelectorAll( &#039;.vector-toc-list-item&#039; ).forEach( function ( li ) {&lt;br /&gt;
        li.classList.remove( &#039;vector-toc-list-item-active&#039; );&lt;br /&gt;
        var lnk = li.querySelector( &#039;.vector-toc-link&#039; );&lt;br /&gt;
        if ( !lnk ) return;&lt;br /&gt;
        lnk.style.removeProperty( &#039;color&#039; );&lt;br /&gt;
        lnk.style.setProperty( &#039;font-weight&#039;, &#039;400&#039;, &#039;important&#039; );&lt;br /&gt;
        lnk.querySelectorAll( &#039;*&#039; ).forEach( function ( el ) { el.style.removeProperty( &#039;color&#039; ); el.style.setProperty( &#039;font-weight&#039;, &#039;400&#039;, &#039;important&#039; ); } );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
    function setActive( id ) {&lt;br /&gt;
      if ( _activeId === id ) return;&lt;br /&gt;
      _activeId = id;&lt;br /&gt;
      clearActive();&lt;br /&gt;
      if ( !id ) return;&lt;br /&gt;
      var li = getTocLi( id );&lt;br /&gt;
      if ( !li ) return;&lt;br /&gt;
      li.classList.add( &#039;vector-toc-list-item-active&#039; );&lt;br /&gt;
      var hasActiveChild = !!li.querySelector( &#039;.vector-toc-list-item .vector-toc-list-item-active&#039; );&lt;br /&gt;
      if ( !hasActiveChild ) {&lt;br /&gt;
        var lnk = li.querySelector( &#039;.vector-toc-link&#039; );&lt;br /&gt;
        if ( lnk ) {&lt;br /&gt;
          lnk.style.setProperty( &#039;color&#039;, ACTIVE_COLOR, &#039;important&#039; );&lt;br /&gt;
          lnk.style.setProperty( &#039;font-weight&#039;, &#039;700&#039;, &#039;important&#039; );&lt;br /&gt;
          lnk.querySelectorAll( &#039;*&#039; ).forEach( function ( el ) { el.style.setProperty( &#039;color&#039;, ACTIVE_COLOR, &#039;important&#039; ); el.style.setProperty( &#039;font-weight&#039;, &#039;700&#039;, &#039;important&#039; ); } );&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      var anc = li.parentNode;&lt;br /&gt;
      while ( anc &amp;amp;&amp;amp; anc !== toc ) {&lt;br /&gt;
        if ( anc.classList ) anc.classList.remove( &#039;vector-toc-list-item-collapsed&#039; );&lt;br /&gt;
        if ( anc.tagName === &#039;UL&#039; || anc.tagName === &#039;LI&#039; ) anc.style.removeProperty( &#039;display&#039; );&lt;br /&gt;
        anc = anc.parentNode;&lt;br /&gt;
      }&lt;br /&gt;
      var sticky = document.querySelector( &#039;.vector-sticky-pinned-container&#039; );&lt;br /&gt;
      var scrollEl = sticky || toc;&lt;br /&gt;
      if ( scrollEl.scrollHeight &amp;gt; scrollEl.clientHeight ) {&lt;br /&gt;
        var lr = li.getBoundingClientRect();&lt;br /&gt;
        var cr = scrollEl.getBoundingClientRect();&lt;br /&gt;
        if ( lr.top &amp;lt; cr.top + 8 || lr.bottom &amp;gt; cr.bottom - 8 ) {&lt;br /&gt;
          scrollEl.scrollTop += lr.top - cr.top - scrollEl.clientHeight / 2 + li.offsetHeight / 2;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    var _visible = new Set();&lt;br /&gt;
    _headingObserver = new IntersectionObserver( function ( entries ) {&lt;br /&gt;
      entries.forEach( function ( entry ) {&lt;br /&gt;
        if ( entry.isIntersecting ) _visible.add( entry.target.id );&lt;br /&gt;
        else _visible.delete( entry.target.id );&lt;br /&gt;
      } );&lt;br /&gt;
      var topId = null, topY = Infinity;&lt;br /&gt;
      _visible.forEach( function ( id ) {&lt;br /&gt;
        var el = document.getElementById( id );&lt;br /&gt;
        if ( el ) { var y = el.getBoundingClientRect().top; if ( y &amp;gt;= 0 &amp;amp;&amp;amp; y &amp;lt; topY ) { topY = y; topId = id; } }&lt;br /&gt;
      } );&lt;br /&gt;
      if ( !topId ) {&lt;br /&gt;
        var bestY = -Infinity;&lt;br /&gt;
        headings.forEach( function ( h ) { var y = h.getBoundingClientRect().top; if ( y &amp;lt; 0 &amp;amp;&amp;amp; y &amp;gt; bestY ) { bestY = y; topId = h.id; } } );&lt;br /&gt;
      }&lt;br /&gt;
      setActive( topId || null );&lt;br /&gt;
    }, { rootMargin: &#039;-60px 0px -65% 0px&#039;, threshold: 0 } );&lt;br /&gt;
    headings.forEach( function ( h ) { _headingObserver.observe( h ); } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function setupToc() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    removeTocBeginning();&lt;br /&gt;
    renameTocTitle();&lt;br /&gt;
    expandTocSections();&lt;br /&gt;
    injectTocDocNav();&lt;br /&gt;
    attachHeadingObserver();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function init() {&lt;br /&gt;
    var HIDE_IDS = [ &#039;vector-appearance&#039;, &#039;vector-appearance-pinned-container&#039;, &#039;vector-appearance-unpinned-container&#039; ];&lt;br /&gt;
    function removeHiddenEls() {&lt;br /&gt;
      HIDE_IDS.forEach( function ( id ) { var el = document.getElementById( id ); if ( el &amp;amp;&amp;amp; el.parentNode ) el.parentNode.removeChild( el ); } );&lt;br /&gt;
      var pt = document.getElementById( &#039;vector-page-tools&#039; ) || document.querySelector( &#039;.vector-page-tools-pinned-container&#039; );&lt;br /&gt;
      if ( pt ) pt.querySelectorAll( &#039;[aria-controls=&amp;quot;vector-appearance&amp;quot;]&#039; ).forEach( function ( el ) { if ( el.parentNode ) el.parentNode.removeChild( el ); } );&lt;br /&gt;
    }&lt;br /&gt;
    removeHiddenEls();&lt;br /&gt;
    ( function detectTeekaMode() {&lt;br /&gt;
      var tp = document.querySelector( &#039;.gr-teeka-page&#039; );&lt;br /&gt;
      if ( !tp ) return;&lt;br /&gt;
      var primary = tp.getAttribute( &#039;data-primary&#039; ) || &#039;&#039;;&lt;br /&gt;
      var artPath = ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
      var mainUrl = artPath.replace( &#039;$1&#039;, primary );&lt;br /&gt;
      var refParam = window.location.search.match( /[?&amp;amp;]ref=([01])/ );&lt;br /&gt;
      if ( refParam ) { document.body.classList.add( refParam[1] === &#039;1&#039; ? &#039;gr-ref-mode&#039; : &#039;gr-standalone&#039; ); return; }&lt;br /&gt;
      var ref = document.referrer || &#039;&#039;;&lt;br /&gt;
      document.body.classList.add( ( ref &amp;amp;&amp;amp; primary &amp;amp;&amp;amp; ref.indexOf( mainUrl ) !== -1 ) ? &#039;gr-ref-mode&#039; : &#039;gr-standalone&#039; );&lt;br /&gt;
    }() );&lt;br /&gt;
    if ( window.MutationObserver ) {&lt;br /&gt;
      var hideObs = new MutationObserver( function ( mutations ) {&lt;br /&gt;
        var dirty = false;&lt;br /&gt;
        mutations.forEach( function ( m ) { if ( m.addedNodes.length ) dirty = true; } );&lt;br /&gt;
        if ( dirty ) removeHiddenEls();&lt;br /&gt;
      } );&lt;br /&gt;
      hideObs.observe( document.body, { childList: true, subtree: false } );&lt;br /&gt;
      setTimeout( function () { hideObs.disconnect(); }, 6000 );&lt;br /&gt;
    }&lt;br /&gt;
    var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
    var alreadyTagged = content &amp;amp;&amp;amp; content.querySelector( &#039;[data-deva]&#039; );&lt;br /&gt;
    if ( !alreadyTagged ) { translatableSpans = []; tagTextNodes(); }&lt;br /&gt;
    else {&lt;br /&gt;
      document.querySelectorAll( &#039;.vector-toc .vector-toc-text:not([data-deva])&#039; ).forEach( function ( span ) {&lt;br /&gt;
        var orig = span.textContent; if ( !orig.trim() ) return;&lt;br /&gt;
        span.setAttribute( &#039;data-deva&#039;, orig ); translatableSpans.push( span );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
    var saved = ( function () { try { return localStorage.getItem( LS_SCRIPT_KEY ); } catch ( e ) { return null; } }() );&lt;br /&gt;
    if ( saved &amp;amp;&amp;amp; saved !== &#039;deva&#039; ) { applyScript( saved ); } else { currentScript = &#039;deva&#039;; }&lt;br /&gt;
    setTimeout( setupToc, 200 );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  window.addEventListener( &#039;gr-script-change&#039;, function ( e ) {&lt;br /&gt;
    var script = e &amp;amp;&amp;amp; e.detail &amp;amp;&amp;amp; e.detail.script;&lt;br /&gt;
    if ( script ) applyScript( script );&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
  window.addEventListener( &#039;gr-new-content&#039;, function ( e ) {&lt;br /&gt;
    var container = e &amp;amp;&amp;amp; e.detail &amp;amp;&amp;amp; e.detail.container;&lt;br /&gt;
    if ( !container ) return;&lt;br /&gt;
    var walker = document.createTreeWalker( container, NodeFilter.SHOW_TEXT );&lt;br /&gt;
    var nodes = [];&lt;br /&gt;
    while ( walker.nextNode() ) nodes.push( walker.currentNode );&lt;br /&gt;
    nodes.forEach( function ( node ) {&lt;br /&gt;
      var p = node.parentNode;&lt;br /&gt;
      if ( !p || ( p.hasAttribute &amp;amp;&amp;amp; p.hasAttribute( &#039;data-deva&#039; ) ) ) return;&lt;br /&gt;
      var orig = node.textContent;&lt;br /&gt;
      if ( !orig.trim() ) return;&lt;br /&gt;
      var span = document.createElement( &#039;span&#039; );&lt;br /&gt;
      span.setAttribute( &#039;data-deva&#039;, orig );&lt;br /&gt;
      span.textContent = currentScript !== &#039;deva&#039; ? transliterateText( orig, currentScript ) : orig;&lt;br /&gt;
      p.replaceChild( span, node );&lt;br /&gt;
      translatableSpans.push( span );&lt;br /&gt;
    } );&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
  try {&lt;br /&gt;
    var _grBC = new BroadcastChannel( &#039;gr-script&#039; );&lt;br /&gt;
    _grBC.onmessage = function ( e ) {&lt;br /&gt;
      var script = e &amp;amp;&amp;amp; e.data &amp;amp;&amp;amp; e.data.script;&lt;br /&gt;
      if ( script ) { currentScript = script; var sel = document.querySelector( &#039;.gr-script-sel&#039; ); if ( sel ) sel.value = script; applyScript( script ); }&lt;br /&gt;
    };&lt;br /&gt;
  } catch ( e ) {}&lt;br /&gt;
&lt;br /&gt;
  if ( window.mw ) {&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
      setTimeout( function () {&lt;br /&gt;
        var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
        var alreadyTagged = content &amp;amp;&amp;amp; content.querySelector( &#039;[data-deva]&#039; );&lt;br /&gt;
        if ( !alreadyTagged ) { translatableSpans = []; tagTextNodes(); }&lt;br /&gt;
        else {&lt;br /&gt;
          document.querySelectorAll( &#039;.vector-toc .vector-toc-text:not([data-deva])&#039; ).forEach( function ( span ) {&lt;br /&gt;
            var orig = span.textContent; if ( !orig.trim() ) return;&lt;br /&gt;
            span.setAttribute( &#039;data-deva&#039;, orig ); translatableSpans.push( span );&lt;br /&gt;
          } );&lt;br /&gt;
        }&lt;br /&gt;
        if ( currentScript !== &#039;deva&#039; ) applyScript( currentScript );&lt;br /&gt;
        setupToc();&lt;br /&gt;
      }, 150 );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) { document.addEventListener( &#039;DOMContentLoaded&#039;, init ); }&lt;br /&gt;
  else { init(); }&lt;br /&gt;
&lt;br /&gt;
}() );   /* ← end of main IIFE */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Inject &amp;quot;Help&amp;quot; and &amp;quot;About&amp;quot; links into the header ─────────────────&lt;br /&gt;
( function () {&lt;br /&gt;
  function wikiHref( title ) {&lt;br /&gt;
    if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( title );&lt;br /&gt;
    var ap = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
    return ap.replace( &#039;$1&#039;, title );&lt;br /&gt;
  }&lt;br /&gt;
  var linkStyle = [ &#039;color:rgba(255,255,255,0.88)&#039;,&#039;font-size:0.88em&#039;,&#039;font-family:system-ui,sans-serif&#039;,&#039;font-weight:500&#039;,&#039;text-decoration:none&#039;,&#039;padding:4px 10px&#039;,&#039;border-radius:4px&#039;,&#039;margin-right:4px&#039;,&#039;transition:color 0.15s,background 0.15s&#039;,&#039;white-space:nowrap&#039; ].join( &#039;;&#039; );&lt;br /&gt;
  function makeHeaderLink( id, href, label ) {&lt;br /&gt;
    var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
    a.id = id; a.href = href; a.textContent = label; a.style.cssText = linkStyle;&lt;br /&gt;
    a.addEventListener( &#039;mouseover&#039;, function () { this.style.color = &#039;#fff&#039;; this.style.background = &#039;rgba(255,255,255,0.12)&#039;; } );&lt;br /&gt;
    a.addEventListener( &#039;mouseout&#039;,  function () { this.style.color = &#039;rgba(255,255,255,0.88)&#039;; this.style.background = &#039;transparent&#039;; } );&lt;br /&gt;
    return a;&lt;br /&gt;
  }&lt;br /&gt;
function injectHeaderLinks() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-about-link&#039; ) ) return;&lt;br /&gt;
    var headerEnd = document.querySelector( &#039;.vector-header-end&#039; ) || document.querySelector( &#039;#vector-user-links&#039; ) || document.querySelector( &#039;.mw-header&#039; );&lt;br /&gt;
    if ( !headerEnd ) return;&lt;br /&gt;
    var helpLink  = makeHeaderLink( &#039;gr-help-link&#039;,  wikiHref( &#039;My_wiki:Help&#039;  ), &#039;Help&#039;  );&lt;br /&gt;
    var aboutLink = makeHeaderLink( &#039;gr-about-link&#039;, wikiHref( &#039;My_wiki:About&#039; ), &#039;About&#039; );&lt;br /&gt;
&lt;br /&gt;
    var userName = window.mw ? mw.config.get( &#039;wgUserName&#039; ) : null;&lt;br /&gt;
    var isAnon   = !userName || ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgUserId&#039; ) === null );&lt;br /&gt;
&lt;br /&gt;
    // Build the trailing auth element (Login link for anon, dropdown for logged-in)&lt;br /&gt;
    var authEl = null;&lt;br /&gt;
    if ( isAnon ) {&lt;br /&gt;
      if ( !document.getElementById( &#039;gr-header-login&#039; ) ) {&lt;br /&gt;
        authEl = makeHeaderLink( &#039;gr-header-login&#039;, wikiHref( &#039;Special:UserLogin&#039; ), &#039;Login/Signup&#039; );&lt;br /&gt;
      }&lt;br /&gt;
    } else if ( !document.getElementById( &#039;gr-header-user&#039; ) ) {&lt;br /&gt;
      authEl = buildHeaderUserDropdown( userName );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var ul = document.querySelector( &#039;.vector-user-links&#039; ) || document.querySelector( &#039;#pt-userpage&#039; );&lt;br /&gt;
    if ( ul &amp;amp;&amp;amp; ul.parentNode === headerEnd ) {&lt;br /&gt;
      if ( authEl ) headerEnd.insertBefore( authEl, ul );&lt;br /&gt;
      headerEnd.insertBefore( aboutLink, authEl || ul );&lt;br /&gt;
      headerEnd.insertBefore( helpLink, aboutLink );&lt;br /&gt;
    } else {&lt;br /&gt;
      headerEnd.appendChild( helpLink );&lt;br /&gt;
      headerEnd.appendChild( aboutLink );&lt;br /&gt;
      if ( authEl ) headerEnd.appendChild( authEl );&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function buildHeaderUserDropdown( userName ) {&lt;br /&gt;
    var wrap = document.createElement( &#039;div&#039; );&lt;br /&gt;
    wrap.id = &#039;gr-header-user&#039;;&lt;br /&gt;
    wrap.style.cssText = &#039;position:relative;display:inline-block;margin-right:4px;&#039;;&lt;br /&gt;
&lt;br /&gt;
    var trigger = document.createElement( &#039;button&#039; );&lt;br /&gt;
    trigger.id = &#039;gr-header-user-trigger&#039;;&lt;br /&gt;
    trigger.type = &#039;button&#039;;&lt;br /&gt;
    trigger.setAttribute( &#039;aria-haspopup&#039;, &#039;true&#039; );&lt;br /&gt;
    trigger.setAttribute( &#039;aria-expanded&#039;, &#039;false&#039; );&lt;br /&gt;
    trigger.style.cssText = [&lt;br /&gt;
      &#039;display:inline-flex&#039;,&#039;align-items:center&#039;,&#039;gap:5px&#039;,&lt;br /&gt;
      &#039;color:rgba(255,255,255,0.88)&#039;,&#039;font-size:0.88em&#039;,&lt;br /&gt;
      &#039;font-family:system-ui,sans-serif&#039;,&#039;font-weight:500&#039;,&lt;br /&gt;
      &#039;background:transparent&#039;,&#039;border:none&#039;,&#039;cursor:pointer&#039;,&lt;br /&gt;
      &#039;padding:4px 10px&#039;,&#039;border-radius:4px&#039;,&#039;white-space:nowrap&#039;,&lt;br /&gt;
      &#039;transition:color 0.15s,background 0.15s&#039;&lt;br /&gt;
    ].join( &#039;;&#039; );&lt;br /&gt;
    trigger.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;span&amp;gt;&#039; + userName.replace( /&amp;lt;/g, &#039;&amp;amp;lt;&#039; ) + &#039;&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;span id=&amp;quot;gr-header-caret&amp;quot; style=&amp;quot;font-size:0.8em;transition:transform 0.2s;&amp;quot;&amp;gt;\u25be&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
    trigger.addEventListener( &#039;mouseover&#039;, function () { this.style.color = &#039;#fff&#039;; this.style.background = &#039;rgba(255,255,255,0.12)&#039;; } );&lt;br /&gt;
    trigger.addEventListener( &#039;mouseout&#039;,  function () { if ( menu.style.display === &#039;none&#039; ) { this.style.color = &#039;rgba(255,255,255,0.88)&#039;; this.style.background = &#039;transparent&#039;; } } );&lt;br /&gt;
&lt;br /&gt;
    var menu = document.createElement( &#039;div&#039; );&lt;br /&gt;
    menu.id = &#039;gr-header-user-menu&#039;;&lt;br /&gt;
    menu.setAttribute( &#039;role&#039;, &#039;menu&#039; );&lt;br /&gt;
    menu.style.cssText = [&lt;br /&gt;
      &#039;display:none&#039;,&#039;position:absolute&#039;,&#039;top:100%&#039;,&#039;right:0&#039;,&#039;margin-top:4px&#039;,&lt;br /&gt;
      &#039;min-width:150px&#039;,&#039;background:#fff&#039;,&#039;border-radius:6px&#039;,&lt;br /&gt;
      &#039;box-shadow:0 4px 16px rgba(0,0,0,0.18)&#039;,&#039;overflow:hidden&#039;,&#039;z-index:1000&#039;&lt;br /&gt;
    ].join( &#039;;&#039; );&lt;br /&gt;
&lt;br /&gt;
    var itemStyle = &#039;display:block;padding:10px 16px;font-size:0.9em;color:#2c1810;text-decoration:none;font-family:system-ui,sans-serif;background:#fff;&#039;;&lt;br /&gt;
    function makeMenuItem( href, label, id ) {&lt;br /&gt;
      var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
      a.href = href; a.setAttribute( &#039;role&#039;, &#039;menuitem&#039; );&lt;br /&gt;
      a.textContent = label; a.style.cssText = itemStyle;&lt;br /&gt;
      if ( id ) a.id = id;&lt;br /&gt;
      a.addEventListener( &#039;mouseover&#039;, function () { this.style.background = &#039;#f5efe9&#039;; } );&lt;br /&gt;
      a.addEventListener( &#039;mouseout&#039;,  function () { this.style.background = &#039;#fff&#039;; } );&lt;br /&gt;
      return a;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    menu.appendChild( makeMenuItem( wikiHref( &#039;Special:Profile&#039; ), &#039;Profile&#039; ) );&lt;br /&gt;
    menu.appendChild( makeMenuItem( &#039;#&#039;, &#039;Log out&#039;, &#039;gr-header-logout&#039; ) );&lt;br /&gt;
&lt;br /&gt;
    function setOpen( open ) {&lt;br /&gt;
      menu.style.display = open ? &#039;block&#039; : &#039;none&#039;;&lt;br /&gt;
      trigger.setAttribute( &#039;aria-expanded&#039;, open ? &#039;true&#039; : &#039;false&#039; );&lt;br /&gt;
      var caret = document.getElementById( &#039;gr-header-caret&#039; );&lt;br /&gt;
      if ( caret ) caret.style.transform = open ? &#039;rotate(180deg)&#039; : &#039;&#039;;&lt;br /&gt;
      if ( open ) { trigger.style.color = &#039;#fff&#039;; trigger.style.background = &#039;rgba(255,255,255,0.12)&#039;; }&lt;br /&gt;
      else { trigger.style.color = &#039;rgba(255,255,255,0.88)&#039;; trigger.style.background = &#039;transparent&#039;; }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    trigger.addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      e.stopPropagation();&lt;br /&gt;
      setOpen( menu.style.display === &#039;none&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
    document.addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      if ( !wrap.contains( e.target ) ) setOpen( false );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    // Logout: POST with CSRF token (same approach as the desktop dropdown)&lt;br /&gt;
    menu.querySelector( &#039;#gr-header-logout&#039; ).addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      e.preventDefault();&lt;br /&gt;
      if ( window.mw &amp;amp;&amp;amp; mw.user &amp;amp;&amp;amp; mw.user.tokens ) {&lt;br /&gt;
        var t = mw.user.tokens.get( &#039;csrfToken&#039; );&lt;br /&gt;
        if ( t ) {&lt;br /&gt;
          var script = ( mw.util &amp;amp;&amp;amp; mw.util.wikiScript ) ? mw.util.wikiScript() : &#039;/index.php&#039;;&lt;br /&gt;
          var form = document.createElement( &#039;form&#039; );&lt;br /&gt;
          form.method = &#039;post&#039;;&lt;br /&gt;
          form.action = script + &#039;?title=Special:UserLogout&#039;;&lt;br /&gt;
          form.style.display = &#039;none&#039;;&lt;br /&gt;
          form.innerHTML =&lt;br /&gt;
            &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;wpEditToken&amp;quot; value=&amp;quot;&#039; + String( t ).replace( /&amp;quot;/g, &#039;&amp;amp;quot;&#039; ) + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
            &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;title&amp;quot; value=&amp;quot;Special:UserLogout&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
            &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;returnto&amp;quot; value=&amp;quot;Main Page&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
          document.body.appendChild( form );&lt;br /&gt;
          form.submit();&lt;br /&gt;
          return;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if ( window.mw &amp;amp;&amp;amp; mw.Api ) {&lt;br /&gt;
        new mw.Api().postWithToken( &#039;csrf&#039;, { action: &#039;logout&#039; } )&lt;br /&gt;
          .done( function () { location.href = &#039;/Main_Page&#039;; } )&lt;br /&gt;
          .fail( function () { location.href = &#039;/index.php?title=Special:UserLogout&#039;; } );&lt;br /&gt;
      } else {&lt;br /&gt;
        location.href = &#039;/index.php?title=Special:UserLogout&#039;;&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    wrap.appendChild( trigger );&lt;br /&gt;
    wrap.appendChild( menu );&lt;br /&gt;
    return wrap;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Main page: by-Grantha / by-Author toggle ──────────────────────&lt;br /&gt;
( function () {&lt;br /&gt;
  function grHomeView( v ) {&lt;br /&gt;
    var gView = document.getElementById( &#039;gr-view-grantha&#039; );&lt;br /&gt;
    var aView = document.getElementById( &#039;gr-view-author&#039; );&lt;br /&gt;
    var gBtn  = document.getElementById( &#039;gr-toggle-grantha&#039; );&lt;br /&gt;
    var aBtn  = document.getElementById( &#039;gr-toggle-author&#039; );&lt;br /&gt;
    if ( !gView || !aView || !gBtn || !aBtn ) return;&lt;br /&gt;
    gView.style.display = ( v === &#039;grantha&#039; ) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
    aView.style.display = ( v === &#039;author&#039;  ) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
    gBtn.className = &#039;gr-toggle-btn&#039; + ( v === &#039;grantha&#039; ? &#039; gr-toggle-active&#039; : &#039;&#039; );&lt;br /&gt;
    aBtn.className = &#039;gr-toggle-btn&#039; + ( v === &#039;author&#039;  ? &#039; gr-toggle-active&#039; : &#039;&#039; );&lt;br /&gt;
    try { localStorage.setItem( &#039;gr_home_view&#039;, v ); } catch ( e ) {}&lt;br /&gt;
  }&lt;br /&gt;
  function initHomeToggle() {&lt;br /&gt;
    var gBtn = document.getElementById( &#039;gr-toggle-grantha&#039; );&lt;br /&gt;
    var aBtn = document.getElementById( &#039;gr-toggle-author&#039; );&lt;br /&gt;
    if ( !gBtn || !aBtn ) return;&lt;br /&gt;
    gBtn.addEventListener( &#039;click&#039;, function () { grHomeView( &#039;grantha&#039; ); } );&lt;br /&gt;
    aBtn.addEventListener( &#039;click&#039;, function () { grHomeView( &#039;author&#039; );  } );&lt;br /&gt;
    [ gBtn, aBtn ].forEach( function ( btn ) { btn.addEventListener( &#039;keydown&#039;, function ( e ) { if ( e.key === &#039;Enter&#039; || e.key === &#039; &#039; ) btn.click(); } ); } );&lt;br /&gt;
    var saved; try { saved = localStorage.getItem( &#039;gr_home_view&#039; ); } catch ( e ) {}&lt;br /&gt;
    if ( saved === &#039;author&#039; ) grHomeView( &#039;author&#039; );&lt;br /&gt;
  }&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) document.addEventListener( &#039;DOMContentLoaded&#039;, initHomeToggle );&lt;br /&gt;
  else initHomeToggle();&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Ullekha reference link handler ─────────────────────────────────&lt;br /&gt;
( function () {&lt;br /&gt;
  function highlightOnArrival() {&lt;br /&gt;
    var search = window.location.search;&lt;br /&gt;
    if ( !search ) return;&lt;br /&gt;
    var m = search.match( /[?&amp;amp;]hlUllekha=([^&amp;amp;]+)/ );&lt;br /&gt;
    if ( !m ) return;&lt;br /&gt;
    var needle;&lt;br /&gt;
    try { needle = decodeURIComponent( m[ 1 ] ); } catch ( e ) { return; }&lt;br /&gt;
    if ( !needle || needle.length &amp;lt; 4 ) return;&lt;br /&gt;
    function doHighlight() {&lt;br /&gt;
      var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
      if ( !content ) return;&lt;br /&gt;
      var snippet = needle.slice( 0, 40 );&lt;br /&gt;
      var found   = false;&lt;br /&gt;
      var spans = content.querySelectorAll( &#039;[data-deva]&#039; );&lt;br /&gt;
      for ( var i = 0; i &amp;lt; spans.length &amp;amp;&amp;amp; !found; i++ ) {&lt;br /&gt;
        var spanEl = spans[ i ];&lt;br /&gt;
        var orig   = spanEl.getAttribute( &#039;data-deva&#039; ) || &#039;&#039;;&lt;br /&gt;
        if ( orig.indexOf( snippet ) === -1 ) continue;&lt;br /&gt;
        var idx    = orig.indexOf( snippet );&lt;br /&gt;
        var hlText = orig.slice( idx, Math.min( idx + needle.length, orig.length ) );&lt;br /&gt;
        var mark   = document.createElement( &#039;mark&#039; );&lt;br /&gt;
        mark.className = &#039;gr-ullekha-highlight&#039;;&lt;br /&gt;
        mark.style.cssText = &#039;background:#fff176;border-radius:2px;padding:0 2px;&#039;;&lt;br /&gt;
        mark.textContent = hlText;&lt;br /&gt;
        var parent = spanEl.parentNode;&lt;br /&gt;
        if ( !parent ) continue;&lt;br /&gt;
        var before = document.createTextNode( orig.slice( 0, idx ) );&lt;br /&gt;
        var after  = document.createTextNode( orig.slice( idx + hlText.length ) );&lt;br /&gt;
        parent.insertBefore( before, spanEl ); parent.insertBefore( mark, spanEl ); parent.insertBefore( after, spanEl ); parent.removeChild( spanEl );&lt;br /&gt;
        setTimeout( function () { mark.scrollIntoView( { behavior: &#039;smooth&#039;, block: &#039;center&#039; } ); }, 100 );&lt;br /&gt;
        found = true;&lt;br /&gt;
      }&lt;br /&gt;
      if ( !found ) {&lt;br /&gt;
        var walker = document.createTreeWalker( content, NodeFilter.SHOW_TEXT );&lt;br /&gt;
        while ( walker.nextNode() &amp;amp;&amp;amp; !found ) {&lt;br /&gt;
          var node = walker.currentNode;&lt;br /&gt;
          var txt  = node.textContent || &#039;&#039;;&lt;br /&gt;
          if ( txt.indexOf( snippet ) === -1 ) continue;&lt;br /&gt;
          var idx2  = txt.indexOf( snippet );&lt;br /&gt;
          var mark2 = document.createElement( &#039;mark&#039; );&lt;br /&gt;
          mark2.className = &#039;gr-ullekha-highlight&#039;;&lt;br /&gt;
          mark2.style.cssText = &#039;background:#fff176;border-radius:2px;padding:0 2px;&#039;;&lt;br /&gt;
          mark2.textContent = txt.slice( idx2, Math.min( idx2 + needle.length, txt.length ) );&lt;br /&gt;
          var p = node.parentNode;&lt;br /&gt;
          p.insertBefore( document.createTextNode( txt.slice( 0, idx2 ) ), node );&lt;br /&gt;
          p.insertBefore( mark2, node );&lt;br /&gt;
          p.insertBefore( document.createTextNode( txt.slice( idx2 + mark2.textContent.length ) ), node );&lt;br /&gt;
          p.removeChild( node );&lt;br /&gt;
          setTimeout( function () { mark2.scrollIntoView( { behavior: &#039;smooth&#039;, block: &#039;center&#039; } ); }, 100 );&lt;br /&gt;
          found = true;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    doHighlight();&lt;br /&gt;
  }&lt;br /&gt;
  function wireUllekhaLinks() {&lt;br /&gt;
    document.querySelectorAll( &#039;.gr-ullekha-ref-link&#039; ).forEach( function ( wrap ) {&lt;br /&gt;
      var anchor = wrap.getAttribute( &#039;data-anchor&#039; ) || &#039;&#039;;&lt;br /&gt;
      var hl     = wrap.getAttribute( &#039;data-hl&#039; )     || &#039;&#039;;&lt;br /&gt;
      var a = wrap.querySelector( &#039;a&#039; );&lt;br /&gt;
      if ( !a ) return;&lt;br /&gt;
      var base = a.href.split( &#039;#&#039; )[ 0 ];&lt;br /&gt;
      var encoded = encodeURIComponent( hl );&lt;br /&gt;
      a.href = base + ( hl ? &#039;?hlUllekha=&#039; + encoded : &#039;&#039; ) + ( anchor ? &#039;#&#039; + anchor : &#039;&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) { document.addEventListener( &#039;DOMContentLoaded&#039;, function () { highlightOnArrival(); wireUllekhaLinks(); } ); }&lt;br /&gt;
  else { highlightOnArrival(); wireUllekhaLinks(); }&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
/* ── Search result highlight ──────────────────────────────────── */&lt;br /&gt;
/* EXACT REPLACEMENT for the search highlight IIFE in MediaWiki:Common.js.&lt;br /&gt;
 * Only changes from the original working version:&lt;br /&gt;
 *  - Mobile bar: full-width terracotta bottom bar instead of floating pill&lt;br /&gt;
 *  - showDismissBar: guard added (if !count return) to prevent empty bar&lt;br /&gt;
 * Everything else (storeQueryForLink, applyHighlight, wrapMatches) is&lt;br /&gt;
 * identical to the version that was working.&lt;br /&gt;
 */&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
  function storeQueryForLink( url, query ) {&lt;br /&gt;
    try {&lt;br /&gt;
      var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
      a.href = url;&lt;br /&gt;
      sessionStorage.setItem( &#039;gr_search_hl&#039;, JSON.stringify({&lt;br /&gt;
        query:    query,&lt;br /&gt;
        pathname: a.pathname&lt;br /&gt;
      }) );&lt;br /&gt;
    } catch(e) {}&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function applyHighlight() {&lt;br /&gt;
    var stored;&lt;br /&gt;
    try {&lt;br /&gt;
      stored = JSON.parse( sessionStorage.getItem( &#039;gr_search_hl&#039; ) || &#039;null&#039; );&lt;br /&gt;
    } catch(e) { return; }&lt;br /&gt;
    if ( !stored || !stored.query ) return;&lt;br /&gt;
&lt;br /&gt;
    var currentPath = window.location.pathname;&lt;br /&gt;
    var storedPath  = stored.pathname || &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
    function normPath(p) { return decodeURIComponent(p).replace(/\/+$/, &#039;&#039;); }&lt;br /&gt;
    if ( storedPath &amp;amp;&amp;amp; normPath(storedPath) !== normPath(currentPath) ) {&lt;br /&gt;
      try { sessionStorage.removeItem( &#039;gr_search_hl&#039; ); } catch(e) {}&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var query = stored.query.trim();&lt;br /&gt;
    if ( !query ) return;&lt;br /&gt;
&lt;br /&gt;
    try { sessionStorage.removeItem( &#039;gr_search_hl&#039; ); } catch(e) {}&lt;br /&gt;
&lt;br /&gt;
    var delays = [ 0, 200, 600 ];&lt;br /&gt;
    delays.forEach( function(ms) {&lt;br /&gt;
      setTimeout( function() {&lt;br /&gt;
        if ( document.querySelector( &#039;.gr-search-hl&#039; ) ) return;&lt;br /&gt;
        highlightText( query );&lt;br /&gt;
      }, ms );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function highlightText( query ) {&lt;br /&gt;
    var content = document.querySelector( &#039;#mw-content-text .mw-parser-output&#039; );&lt;br /&gt;
    if ( !content ) return;&lt;br /&gt;
&lt;br /&gt;
    var raw = query.replace( /^&amp;quot;|&amp;quot;$/g, &#039;&#039; ).trim();&lt;br /&gt;
    if ( !raw ) return;&lt;br /&gt;
&lt;br /&gt;
    var patterns = [];&lt;br /&gt;
    patterns.push( escapeRegex( raw ) );&lt;br /&gt;
    raw.split( /\s+/ ).forEach( function(w) {&lt;br /&gt;
      if ( w.length &amp;gt;= 2 ) patterns.push( escapeRegex( w ) );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    var matched = false;&lt;br /&gt;
    for ( var pi = 0; pi &amp;lt; patterns.length; pi++ ) {&lt;br /&gt;
      var re;&lt;br /&gt;
      try { re = new RegExp( &#039;(&#039; + patterns[pi] + &#039;)&#039;, &#039;gi&#039; ); }&lt;br /&gt;
      catch(e) { continue; }&lt;br /&gt;
      var count = wrapMatches( content, re );&lt;br /&gt;
      if ( count &amp;gt; 0 ) { matched = true; break; }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ( !matched ) return;&lt;br /&gt;
&lt;br /&gt;
    var first = document.querySelector( &#039;.gr-search-hl&#039; );&lt;br /&gt;
    if ( first ) {&lt;br /&gt;
      first.scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; });&lt;br /&gt;
      first.classList.add( &#039;gr-search-hl-pulse&#039; );&lt;br /&gt;
      setTimeout( function() { first.classList.remove( &#039;gr-search-hl-pulse&#039; ); }, 2000 );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    showDismissBar( query );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function escapeRegex( s ) {&lt;br /&gt;
    return s.replace( /[.*+?^${}()|[\]\\]/g, &#039;\\$&amp;amp;&#039; );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function wrapMatches( root, re ) {&lt;br /&gt;
    var count = 0;&lt;br /&gt;
    var walker = document.createTreeWalker(&lt;br /&gt;
      root, NodeFilter.SHOW_TEXT, {&lt;br /&gt;
        acceptNode: function( node ) {&lt;br /&gt;
          var p = node.parentElement;&lt;br /&gt;
          if ( !p ) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
          var tag = p.tagName.toUpperCase();&lt;br /&gt;
          if ( tag === &#039;SCRIPT&#039; || tag === &#039;STYLE&#039; || tag === &#039;NOSCRIPT&#039; ) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
          if ( p.classList.contains( &#039;gr-search-hl&#039; ) ) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
          return NodeFilter.FILTER_ACCEPT;&lt;br /&gt;
        }&lt;br /&gt;
      }, false&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    var nodes = [];&lt;br /&gt;
    var node;&lt;br /&gt;
    while ( ( node = walker.nextNode() ) ) nodes.push( node );&lt;br /&gt;
&lt;br /&gt;
    nodes.forEach( function( textNode ) {&lt;br /&gt;
      var val = textNode.nodeValue;&lt;br /&gt;
      if ( !re.test( val ) ) return;&lt;br /&gt;
      re.lastIndex = 0;&lt;br /&gt;
&lt;br /&gt;
      var frag = document.createDocumentFragment();&lt;br /&gt;
      var last = 0;&lt;br /&gt;
      var m;&lt;br /&gt;
      while ( ( m = re.exec( val ) ) !== null ) {&lt;br /&gt;
        if ( m.index &amp;gt; last ) {&lt;br /&gt;
          frag.appendChild( document.createTextNode( val.slice( last, m.index ) ) );&lt;br /&gt;
        }&lt;br /&gt;
        var span = document.createElement( &#039;span&#039; );&lt;br /&gt;
        span.className = &#039;gr-search-hl&#039;;&lt;br /&gt;
        span.textContent = m[0];&lt;br /&gt;
        frag.appendChild( span );&lt;br /&gt;
        last = m.index + m[0].length;&lt;br /&gt;
        count++;&lt;br /&gt;
      }&lt;br /&gt;
      if ( last &amp;lt; val.length ) {&lt;br /&gt;
        frag.appendChild( document.createTextNode( val.slice( last ) ) );&lt;br /&gt;
      }&lt;br /&gt;
      textNode.parentNode.replaceChild( frag, textNode );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    return count;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function showDismissBar( query ) {&lt;br /&gt;
    var existing = document.getElementById( &#039;gr-hl-bar&#039; );&lt;br /&gt;
    if ( existing ) existing.remove();&lt;br /&gt;
&lt;br /&gt;
    var count = document.querySelectorAll( &#039;.gr-search-hl&#039; ).length;&lt;br /&gt;
    if ( !count ) return;&lt;br /&gt;
&lt;br /&gt;
    var isMob = window.innerWidth &amp;lt; 768 || !!document.getElementById( &#039;mw-mf-viewport&#039; );&lt;br /&gt;
    var bar = document.createElement( &#039;div&#039; );&lt;br /&gt;
    bar.id = &#039;gr-hl-bar&#039;;&lt;br /&gt;
&lt;br /&gt;
    if ( isMob ) {&lt;br /&gt;
      bar.style.cssText = [&lt;br /&gt;
        &#039;position:fixed&#039;, &#039;bottom:0&#039;, &#039;left:0&#039;, &#039;right:0&#039;,&lt;br /&gt;
        &#039;z-index:10200&#039;, &#039;background:#b5451b&#039;, &#039;color:#fff&#039;,&lt;br /&gt;
        &#039;padding:0&#039;, &#039;display:flex&#039;, &#039;align-items:stretch&#039;,&lt;br /&gt;
        &#039;font-family:system-ui,sans-serif&#039;,&lt;br /&gt;
        &#039;box-shadow:0 -2px 12px rgba(0,0,0,0.25)&#039;, &#039;height:56px&#039;&lt;br /&gt;
      ].join(&#039;;&#039;);&lt;br /&gt;
&lt;br /&gt;
      var mbs = &#039;flex:1;display:flex;flex-direction:column;align-items:center;&#039; +&lt;br /&gt;
        &#039;justify-content:center;background:none;border:none;color:#fff;cursor:pointer;&#039; +&lt;br /&gt;
        &#039;padding:6px 4px;font-family:system-ui,sans-serif;font-size:11px;font-weight:500;&#039; +&lt;br /&gt;
        &#039;gap:3px;-webkit-tap-highlight-color:rgba(0,0,0,0.12);&#039;;&lt;br /&gt;
&lt;br /&gt;
      bar.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-prev&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;polyline points=&amp;quot;15 18 9 12 15 6&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;Prev&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-next&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;polyline points=&amp;quot;9 18 15 12 9 6&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;Next&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-results&amp;quot; style=&amp;quot;&#039; + mbs + &#039;flex:1.6;border-left:1px solid rgba(255,255,255,0.2);border-right:1px solid rgba(255,255,255,0.2);&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;circle cx=&amp;quot;11&amp;quot; cy=&amp;quot;11&amp;quot; r=&amp;quot;7&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;16.5&amp;quot; y1=&amp;quot;16.5&amp;quot; x2=&amp;quot;22&amp;quot; y2=&amp;quot;22&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;&#039; + count + &#039; match&#039; + (count===1?&#039;&#039;:&#039;es&#039;) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-dismiss&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;line x1=&amp;quot;18&amp;quot; y1=&amp;quot;6&amp;quot; x2=&amp;quot;6&amp;quot; y2=&amp;quot;18&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;6&amp;quot; y1=&amp;quot;6&amp;quot; x2=&amp;quot;18&amp;quot; y2=&amp;quot;18&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;Close&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
    } else {&lt;br /&gt;
      bar.style.cssText = [&lt;br /&gt;
        &#039;position:fixed&#039;, &#039;bottom:0&#039;, &#039;left:0&#039;, &#039;right:0&#039;, &#039;z-index:10200&#039;,&lt;br /&gt;
        &#039;background:#b5451b&#039;, &#039;color:#fff&#039;, &#039;padding:10px 16px&#039;,&lt;br /&gt;
        &#039;display:flex&#039;, &#039;align-items:center&#039;, &#039;justify-content:space-between&#039;,&lt;br /&gt;
        &#039;font-family:system-ui,sans-serif&#039;, &#039;font-size:14px&#039;,&lt;br /&gt;
        &#039;box-shadow:0 -2px 8px rgba(0,0,0,0.2)&#039;&lt;br /&gt;
      ].join(&#039;;&#039;);&lt;br /&gt;
&lt;br /&gt;
      var nav = document.createElement( &#039;div&#039; );&lt;br /&gt;
      nav.style.cssText = &#039;display:flex;align-items:center;gap:12px;&#039;;&lt;br /&gt;
      nav.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;🔍 &amp;lt;strong&amp;gt;&#039; + escHtml(query) + &#039;&amp;lt;/strong&amp;gt; — &#039; + count + &#039; match&#039; + (count===1?&#039;&#039;:&#039;es&#039;) + &#039;&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-prev&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;↑ Prev&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-next&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;↓ Next&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-results&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;← Results&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
      bar.appendChild( nav );&lt;br /&gt;
&lt;br /&gt;
      var db = document.createElement( &#039;button&#039; );&lt;br /&gt;
      db.id = &#039;gr-hl-dismiss&#039;; db.textContent = &#039;✕ Close&#039;;&lt;br /&gt;
      db.style.cssText = &#039;background:rgba(255,255,255,0.15);border:none;color:#fff;padding:4px 12px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&#039;;&lt;br /&gt;
      bar.appendChild( db );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    document.body.appendChild( bar );&lt;br /&gt;
&lt;br /&gt;
    var hlEls = Array.from( document.querySelectorAll( &#039;.gr-search-hl&#039; ) );&lt;br /&gt;
    var current = 0;&lt;br /&gt;
&lt;br /&gt;
    function goTo( idx ) {&lt;br /&gt;
      hlEls.forEach( function(el) { el.classList.remove( &#039;gr-search-hl-current&#039; ); } );&lt;br /&gt;
      current = ( ( idx % hlEls.length ) + hlEls.length ) % hlEls.length;&lt;br /&gt;
      hlEls[ current ].classList.add( &#039;gr-search-hl-current&#039; );&lt;br /&gt;
      hlEls[ current ].scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function dismiss() { clearHighlights(); bar.remove(); }&lt;br /&gt;
&lt;br /&gt;
    var nb = document.getElementById( &#039;gr-hl-next&#039; );&lt;br /&gt;
    var pb = document.getElementById( &#039;gr-hl-prev&#039; );&lt;br /&gt;
    var rb = document.getElementById( &#039;gr-hl-results&#039; );&lt;br /&gt;
    var db2 = document.getElementById( &#039;gr-hl-dismiss&#039; );&lt;br /&gt;
    if ( nb ) nb.onclick = function() { goTo( current + 1 ); };&lt;br /&gt;
    if ( pb ) pb.onclick = function() { goTo( current - 1 ); };&lt;br /&gt;
    if ( db2 ) db2.onclick = dismiss;&lt;br /&gt;
    if ( rb ) rb.onclick = function() {&lt;br /&gt;
      bar.remove(); clearHighlights();&lt;br /&gt;
      if ( window.showSearchDialog ) window.showSearchDialog( query );&lt;br /&gt;
    };&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function clearHighlights() {&lt;br /&gt;
    document.querySelectorAll( &#039;.gr-search-hl&#039; ).forEach( function( span ) {&lt;br /&gt;
      var p = span.parentNode; if ( !p ) return;&lt;br /&gt;
      while ( span.firstChild ) p.insertBefore( span.firstChild, span );&lt;br /&gt;
      p.removeChild( span );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function escHtml( s ) {&lt;br /&gt;
    return String(s).replace(/&amp;amp;/g,&#039;&amp;amp;amp;&#039;).replace(/&amp;lt;/g,&#039;&amp;amp;lt;&#039;).replace(/&amp;gt;/g,&#039;&amp;amp;gt;&#039;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function injectHighlightCSS() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-hl-css&#039; ) ) return;&lt;br /&gt;
    var s = document.createElement( &#039;style&#039; );&lt;br /&gt;
    s.id = &#039;gr-hl-css&#039;;&lt;br /&gt;
    s.textContent = [&lt;br /&gt;
      &#039;.gr-search-hl{background:#fff176;color:#1a1a1a;border-radius:2px;padding:0 1px;box-shadow:0 0 0 1px rgba(181,69,27,0.25);}&#039;,&lt;br /&gt;
      &#039;.gr-search-hl-current{background:#ffb300!important;box-shadow:0 0 0 2px #b5451b!important;}&#039;,&lt;br /&gt;
      &#039;@keyframes gr-hl-pulse{0%{background:#ffb300;}50%{background:#fff176;}100%{background:#fff176;}}&#039;,&lt;br /&gt;
      &#039;.gr-search-hl-pulse{animation:gr-hl-pulse 1.2s ease 2;}&#039;,&lt;br /&gt;
    ].join(&#039;&#039;);&lt;br /&gt;
    document.head.appendChild( s );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  injectHighlightCSS();&lt;br /&gt;
&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) {&lt;br /&gt;
    document.addEventListener( &#039;DOMContentLoaded&#039;, applyHighlight );&lt;br /&gt;
  } else {&lt;br /&gt;
    applyHighlight();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ( window.mw ) {&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function() {&lt;br /&gt;
      setTimeout( applyHighlight, 100 );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  window.grStoreSearchHL = storeQueryForLink;&lt;br /&gt;
&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
/* ═══════════════════════════════════════════════════════════════&lt;br /&gt;
   Mobile addon — only runs on Minerva (mobile) skin&lt;br /&gt;
   ═══════════════════════════════════════════════════════════════ */&lt;br /&gt;
( function () {&lt;br /&gt;
  if ( !document.body.classList.contains( &#039;skin-minerva&#039; ) ) return;&lt;br /&gt;
  function injectCSS() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-mob-css&#039; ) ) return;&lt;br /&gt;
    var s = document.createElement( &#039;style&#039; );&lt;br /&gt;
    s.id = &#039;gr-mob-css&#039;;&lt;br /&gt;
    s.textContent =&lt;br /&gt;
      &#039;body,#mw-mf-viewport,#mw-mf-page-center{padding-top:0!important;margin-top:0!important;}&#039; +&lt;br /&gt;
      &#039;html,body,#mw-mf-viewport,#mw-mf-page-center{overflow-x:hidden!important;max-width:100vw!important;}&#039; +&lt;br /&gt;
      &#039;header.header-container{background:#b5451b!important;position:sticky!important;top:0!important;z-index:300!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header{background:#b5451b!important;min-height:54px!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header .search-toggle,.minerva-header .minerva-user-notifications{display:none!important;}&#039; +&lt;br /&gt;
      &#039;.branding-box a{display:flex!important;align-items:center!important;text-decoration:none!important;max-width:calc(100vw - 80px)!important;}&#039; +&lt;br /&gt;
      &#039;.branding-box a::before{content:&amp;quot;&amp;quot;;display:block;width:30px;height:30px;flex-shrink:0;background:url(&amp;quot;/favicon.png&amp;quot;) center/contain no-repeat;margin-right:8px;}&#039; +&lt;br /&gt;
      &#039;.branding-box a span{color:#fff!important;font-size:16px!important;font-weight:700!important;font-family:system-ui,sans-serif!important;line-height:1.2!important;flex:1 1 auto!important;min-width:0!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header svg path,.minerva-header svg rect,.minerva-header svg circle{fill:#fff!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header label{color:#fff!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-tabs,.mw-portlet-associated-pages,.page-actions-menu,#page-secondary-actions,.last-modified-bar,.minerva-anon-talk-link{display:none!important;}&#039; +&lt;br /&gt;
      &#039;#gr-mob-menu-items{display:block!important;}&#039; +&lt;br /&gt;
      &#039;.mw-footer.minerva-footer,.footer-places,.footer-info,.minerva-footer-logo,#footer-places-about,#footer-places-disclaimers,#footer-places-privacy{display:none!important;}&#039; +&lt;br /&gt;
      &#039;#gr-static-bar{position:sticky!important;top:54px!important;z-index:200!important;}&#039; +&lt;br /&gt;
      &#039;.mf-section-0,.mf-section-1,.mf-section-2,.mf-section-3,.mf-section-4,.mf-section-5,.mf-section-6,.mf-section-7,.mf-section-8,.mf-section-9,.mf-section-10{display:block!important;visibility:visible!important;}&#039; +&lt;br /&gt;
      &#039;.collapsible-block{display:block!important;}&#039; +&lt;br /&gt;
      &#039;.section-heading .indicator,.collapsible-heading .indicator{display:none!important;}&#039; +&lt;br /&gt;
      &#039;.section-heading,.collapsible-heading{pointer-events:none!important;}&#039; +&lt;br /&gt;
      &#039;.gr-home-grid{flex-direction:column!important;flex-wrap:nowrap!important;gap:12px!important;width:100%!important;}&#039; +&lt;br /&gt;
      &#039;.gr-home-card{width:100%!important;max-width:100%!important;min-width:unset!important;box-sizing:border-box!important;flex:none!important;}&#039; +&lt;br /&gt;
      &#039;.gr-home-toggle{flex-wrap:wrap!important;}&#039; +&lt;br /&gt;
      &#039;.mw-parser-output{font-size:18px!important;line-height:1.8!important;}&#039; +&lt;br /&gt;
      &#039;.mw-parser-output h2,.mw-parser-output h3{width:100%!important;}&#039; +&lt;br /&gt;
      &#039;.bhashyam-block{margin-left:8px!important;}&#039; +&lt;br /&gt;
      &#039;#footer,.mw-footer,.catlinks,#catlinks{display:none!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-panel{position:fixed!important;top:0!important;left:0!important;bottom:0!important;width:82vw!important;max-width:340px!important;background:#fff!important;z-index:10400!important;box-shadow:4px 0 28px rgba(0,0,0,0.22)!important;overflow-y:auto!important;padding:0 0 40px!important;transform:translateX(-110%)!important;transition:transform 0.26s cubic-bezier(0.4,0,0.2,1)!important;display:block!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-panel.open{transform:translateX(0)!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-backdrop{display:none!important;position:fixed!important;inset:0!important;background:rgba(0,0,0,0.4)!important;z-index:10399!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-backdrop.open{display:block!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-header{position:sticky!important;top:0!important;background:#fff!important;display:flex!important;align-items:center!important;justify-content:space-between!important;padding:16px 16px 12px!important;border-bottom:1px solid #f0ebe6!important;z-index:1!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-title{font-size:13px!important;font-weight:700!important;text-transform:uppercase!important;letter-spacing:0.08em!important;color:#b5451b!important;font-family:system-ui,sans-serif!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-close{background:none!important;border:none!important;font-size:22px!important;color:#999!important;cursor:pointer!important;padding:4px 8px!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-body{padding:12px 16px!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-body a{display:block!important;font-size:16px!important;line-height:1.6!important;color:#2c1810!important;text-decoration:none!important;padding:8px 0!important;border-bottom:1px solid #f5f0ed!important;}&#039;;&lt;br /&gt;
    document.head.appendChild( s );&lt;br /&gt;
  }&lt;br /&gt;
  function expandSections() {&lt;br /&gt;
    document.querySelectorAll( &#039;[class*=&amp;quot;mf-section-&amp;quot;], .collapsible-block&#039; ).forEach( function ( el ) { el.removeAttribute( &#039;hidden&#039; ); el.style.setProperty( &#039;display&#039;, &#039;block&#039;, &#039;important&#039; ); el.style.setProperty( &#039;visibility&#039;, &#039;visible&#039;, &#039;important&#039; ); el.removeAttribute( &#039;aria-hidden&#039; ); } );&lt;br /&gt;
    document.querySelectorAll( &#039;.section-heading, .collapsible-heading&#039; ).forEach( function ( el ) { el.setAttribute( &#039;aria-expanded&#039;, &#039;true&#039; ); el.style.setProperty( &#039;pointer-events&#039;, &#039;none&#039;, &#039;important&#039; ); } );&lt;br /&gt;
  }&lt;br /&gt;
  function watchSections() {&lt;br /&gt;
    var t = null;&lt;br /&gt;
    var obs = new MutationObserver( function ( ms ) { if ( ms.some( function(m){ return m.attributeName === &#039;hidden&#039;; } ) ) { clearTimeout(t); t = setTimeout( expandSections, 30 ); } } );&lt;br /&gt;
    obs.observe( document.querySelector( &#039;#mw-content-text&#039; ) || document.body, { subtree:true, attributes:true, attributeFilter:[&#039;hidden&#039;,&#039;aria-hidden&#039;] } );&lt;br /&gt;
  }&lt;br /&gt;
  function watchBodyPadding() {&lt;br /&gt;
    new MutationObserver( function () { if ( document.body.style.paddingTop &amp;amp;&amp;amp; document.body.style.paddingTop !== &#039;0px&#039; ) document.body.style.paddingTop = &#039;&#039;; } ).observe( document.body, { attributes:true, attributeFilter:[&#039;style&#039;] } );&lt;br /&gt;
  }&lt;br /&gt;
  function injectMenuLinks() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-mob-menu-items&#039; ) ) return;&lt;br /&gt;
    var navDrawer = document.querySelector( &#039;.navigation-drawer&#039; );&lt;br /&gt;
    if ( !navDrawer ) return;&lt;br /&gt;
    var wrap = document.createElement( &#039;div&#039; ); wrap.id = &#039;gr-mob-menu-items&#039;; wrap.style.cssText = &#039;width:100%;background:#fff;margin-top:8px;&#039;;&lt;br /&gt;
    var itemStyle = &#039;display:flex;align-items:center;gap:14px;padding:15px 20px;font-size:16px;color:#2c1810;text-decoration:none;font-family:system-ui,sans-serif;border-bottom:1px solid #f0ebe6;background:#fff;&#039;;&lt;br /&gt;
    function makeItem( href, label ) { var a = document.createElement( &#039;a&#039; ); a.href = href; a.style.cssText = itemStyle; a.innerHTML = &#039;&amp;lt;span&amp;gt;&#039; + label + &#039;&amp;lt;/span&amp;gt;&#039;; return a; }&lt;br /&gt;
    wrap.appendChild( makeItem( &#039;/Main_Page&#039;, &#039;Home&#039; ) );&lt;br /&gt;
    wrap.appendChild( makeItem( &#039;/My_wiki:Help&#039;, &#039;Help&#039; ) );&lt;br /&gt;
    wrap.appendChild( makeItem( &#039;/My_wiki:About&#039;, &#039;About&#039; ) );&lt;br /&gt;
    var userName = window.mw ? mw.config.get( &#039;wgUserName&#039; ) : null;&lt;br /&gt;
    if ( userName ) {&lt;br /&gt;
      wrap.appendChild( makeItem( ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) ? mw.util.getUrl( &#039;Special:Profile&#039; ) : &#039;/Special:Profile&#039;, &#039;Profile&#039; ) );&lt;br /&gt;
      var la = document.querySelector( &#039;a[href*=&amp;quot;action=logout&amp;quot;]&#039; );&lt;br /&gt;
      wrap.appendChild( makeItem( la ? la.href : &#039;/index.php?title=Special:UserLogout&#039;, &#039;Log out&#039; ) );&lt;br /&gt;
    }&lt;br /&gt;
    else wrap.appendChild( makeItem( &#039;/index.php?title=Special:UserLogin&#039;, &#039;Log in&#039; ) );&lt;br /&gt;
    var pageLeft = document.getElementById( &#039;mw-mf-page-left&#039; );&lt;br /&gt;
    if ( pageLeft ) { while ( pageLeft.firstChild ) pageLeft.removeChild( pageLeft.firstChild ); pageLeft.style.removeProperty( &#039;display&#039; ); pageLeft.appendChild( wrap ); }&lt;br /&gt;
    else navDrawer.appendChild( wrap );&lt;br /&gt;
  }&lt;br /&gt;
  var _tocDone = false;&lt;br /&gt;
  function initToc() {&lt;br /&gt;
    if ( _tocDone ) return;&lt;br /&gt;
    var tocList = document.querySelector( &#039;.vector-toc-contents, .vector-toc .vector-toc-list&#039; );&lt;br /&gt;
    if ( !tocList || !tocList.querySelector( &#039;li&#039; ) ) return;&lt;br /&gt;
    _tocDone = true;&lt;br /&gt;
    var bd = document.createElement( &#039;div&#039; ); bd.className = &#039;gr-mob-toc-backdrop&#039;; document.body.appendChild( bd );&lt;br /&gt;
    var panel = document.createElement( &#039;div&#039; ); panel.className = &#039;gr-mob-toc-panel&#039;;&lt;br /&gt;
    var hdr = document.createElement( &#039;div&#039; ); hdr.className = &#039;gr-mob-toc-header&#039;;&lt;br /&gt;
    var ttl = document.createElement( &#039;div&#039; ); ttl.className = &#039;gr-mob-toc-title&#039;; ttl.textContent = &#039;विषयसूची&#039;;&lt;br /&gt;
    var cls = document.createElement( &#039;button&#039; ); cls.className = &#039;gr-mob-toc-close&#039;; cls.textContent = &#039;✕&#039;;&lt;br /&gt;
    hdr.appendChild( ttl ); hdr.appendChild( cls ); panel.appendChild( hdr );&lt;br /&gt;
    var body = document.createElement( &#039;div&#039; ); body.className = &#039;gr-mob-toc-body&#039;; body.appendChild( tocList.cloneNode( true ) ); panel.appendChild( body ); document.body.appendChild( panel );&lt;br /&gt;
    var btn = document.createElement( &#039;button&#039; ); btn.id = &#039;gr-mob-toc-btn&#039;; btn.innerHTML = &#039;☰ &amp;amp;nbsp;Contents&#039;;&lt;br /&gt;
    btn.style.cssText = &#039;position:fixed;bottom:148px;left:16px;z-index:9100;background:#fff;border:1.5px solid #b5451b;border-radius:24px;padding:10px 16px;font-size:15px;font-family:system-ui,sans-serif;color:#b5451b;font-weight:600;box-shadow:0 3px 14px rgba(0,0,0,0.15);cursor:pointer;&#039;;&lt;br /&gt;
    document.body.appendChild( btn );&lt;br /&gt;
    function open()  { panel.classList.add(&#039;open&#039;); bd.classList.add(&#039;open&#039;); document.body.style.overflow=&#039;hidden&#039;; }&lt;br /&gt;
    function close() { panel.classList.remove(&#039;open&#039;); bd.classList.remove(&#039;open&#039;); document.body.style.overflow=&#039;&#039;; }&lt;br /&gt;
    btn.onclick = open; cls.onclick = close; bd.onclick = close;&lt;br /&gt;
    body.querySelectorAll(&#039;a&#039;).forEach(function(a){ a.onclick = close; });&lt;br /&gt;
  }&lt;br /&gt;
  function injectMoolaUllekhaLinks() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-mob-doc-nav&#039; ) ) return;&lt;br /&gt;
    var pageName = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039; ) ) || &#039;&#039;;&lt;br /&gt;
    if ( pageName === &#039;Main_Page&#039; || !pageName ) return;&lt;br /&gt;
    function wikiUrl( slug ) { if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( slug ); return ( ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039; ).replace( &#039;$1&#039;, encodeURIComponent( slug ).replace( /%2F/g, &#039;/&#039; ) ); }&lt;br /&gt;
    var teekaPage = document.querySelector( &#039;.gr-teeka-page&#039; );&lt;br /&gt;
    var primarySlug = teekaPage ? ( teekaPage.getAttribute( &#039;data-primary&#039; ) || pageName.split(&#039;/&#039;)[0] ) : pageName.split(&#039;/&#039;)[0];&lt;br /&gt;
    var docTitleEl = document.querySelector( &#039;.gr-doc-title&#039; );&lt;br /&gt;
    var hasMoolaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-moola&#039; ) === &#039;1&#039;;&lt;br /&gt;
    var hasUllekhaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-ullekha&#039; ) === &#039;1&#039;;&lt;br /&gt;
    var showMoolam = !!teekaPage || hasMoolaPage, showUllekha = hasUllekhaPage || !!teekaPage;&lt;br /&gt;
    if ( !showMoolam &amp;amp;&amp;amp; !showUllekha ) return;&lt;br /&gt;
    var nav = document.createElement( &#039;div&#039; ); nav.id = &#039;gr-mob-doc-nav&#039;;&lt;br /&gt;
    nav.style.cssText = &#039;display:flex;gap:10px;padding:10px 16px 8px;background:#fdf8f5;border-bottom:1px solid #f0e0d6;font-family:system-ui,sans-serif;&#039;;&lt;br /&gt;
    function makeLink( href, label ) { var a = document.createElement( &#039;a&#039; ); a.href = href; a.textContent = label; a.style.cssText = &#039;display:inline-flex;align-items:center;padding:5px 16px;border-radius:20px;background:#fff;border:1.5px solid #e8cfc4;color:#b5451b;font-size:14px;font-weight:600;text-decoration:none;&#039;; return a; }&lt;br /&gt;
    if ( teekaPage ) nav.appendChild( makeLink( wikiUrl( primarySlug ), &#039;मूल&#039; ) );&lt;br /&gt;
    else if ( hasMoolaPage ) nav.appendChild( makeLink( wikiUrl( primarySlug + &#039;/Moola&#039; ), &#039;मूलम्&#039; ) );&lt;br /&gt;
    if ( showUllekha ) nav.appendChild( makeLink( wikiUrl( primarySlug + &#039;/Ullekha&#039; ), &#039;उल्लेख&#039; ) );&lt;br /&gt;
    var h1 = document.getElementById( &#039;firstHeading&#039; ) || document.querySelector( &#039;.page-heading, h1.firstHeading, .mw-first-heading&#039; );&lt;br /&gt;
    if ( h1 &amp;amp;&amp;amp; h1.parentNode ) h1.parentNode.insertBefore( nav, h1.nextSibling );&lt;br /&gt;
    else { var ct = document.getElementById( &#039;mw-content-text&#039; ); if ( ct ) ct.insertBefore( nav, ct.firstChild ); }&lt;br /&gt;
  }&lt;br /&gt;
  injectCSS(); watchBodyPadding();&lt;br /&gt;
  function boot() { expandSections(); watchSections(); injectMenuLinks(); injectMoolaUllekhaLinks(); [100,400,900,1800].forEach(function(ms){ setTimeout(expandSections,ms); }); setTimeout(initToc,700); }&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) document.addEventListener( &#039;DOMContentLoaded&#039;, boot );&lt;br /&gt;
  else boot();&lt;br /&gt;
  if ( window.mw ) mw.hook( &#039;wikipage.content&#039; ).add(function(){ setTimeout(function(){ expandSections(); injectMenuLinks(); injectMoolaUllekhaLinks(); initToc(); },300); });&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
  mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
    setTimeout( function () {&lt;br /&gt;
      var blocks = document.querySelectorAll( &#039;.collapsible-block, .toggle-list&#039; );&lt;br /&gt;
      Array.prototype.forEach.call( blocks, function ( el ) { if ( !el.parentNode ) { try { el.remove(); } catch(e) {} } } );&lt;br /&gt;
    }, 0 );&lt;br /&gt;
  } );&lt;br /&gt;
  if ( mw.config.get( &#039;wgPageName&#039; ) !== &#039;Main_Page&#039; ) return;&lt;br /&gt;
  mw.loader.using( &#039;mediawiki.util&#039; ).done( function () {&lt;br /&gt;
    $( function () { applyHomeToggleOffset(); window.addEventListener( &#039;resize&#039;, applyHomeToggleOffset, { passive: true } ); setTimeout( applyHomeToggleOffset, 300 ); setTimeout( applyHomeToggleOffset, 800 ); } );&lt;br /&gt;
  } );&lt;br /&gt;
  function applyHomeToggleOffset() {&lt;br /&gt;
    var bar = document.getElementById( &#039;gr-static-bar&#039; ); if ( !bar ) return;&lt;br /&gt;
    var barBottom = Math.round( bar.getBoundingClientRect().bottom );&lt;br /&gt;
    [ document.getElementById(&#039;gr-home&#039;), document.getElementById(&#039;gr-home-toggle&#039;), document.querySelector(&#039;#mw-content-text .mw-parser-output &amp;gt; .gr-home, #mw-content-text .mw-parser-output &amp;gt; *:first-child&#039;) ].forEach( function(el){ if(el) el.style.scrollMarginTop=(barBottom+4)+&#039;px&#039;; } );&lt;br /&gt;
    var isMob = window.innerWidth &amp;lt; 768 || !!document.getElementById( &#039;mw-mf-viewport&#039; );&lt;br /&gt;
    if ( isMob ) { var toggleEl = document.getElementById(&#039;gr-home-toggle&#039;); if ( toggleEl ) { var tr = toggleEl.getBoundingClientRect(); if ( tr.top &amp;lt; barBottom ) { var cp = parseInt(window.getComputedStyle(document.body).paddingTop,10)||0; document.body.style.paddingTop=(cp+(barBottom-tr.top)+4)+&#039;px&#039;; } } }&lt;br /&gt;
  }&lt;br /&gt;
  $( function () {&lt;br /&gt;
    var $toggle=$(&#039;#gr-home-toggle&#039;),$viewG=$(&#039;#gr-view-grantha&#039;),$viewA=$(&#039;#gr-view-author&#039;),$btnG=$(&#039;#gr-toggle-grantha&#039;),$btnA=$(&#039;#gr-toggle-author&#039;);&lt;br /&gt;
    if(!$toggle.length||!$viewG.length||!$viewA.length)return; if($toggle.data(&#039;gr-wired&#039;))return; $toggle.data(&#039;gr-wired&#039;,true);&lt;br /&gt;
    function showView(which){ if(which===&#039;grantha&#039;){$viewG.show();$viewA.hide();$btnG.addClass(&#039;gr-toggle-active&#039;);$btnA.removeClass(&#039;gr-toggle-active&#039;);}else{$viewA.show();$viewG.hide();$btnA.addClass(&#039;gr-toggle-active&#039;);$btnG.removeClass(&#039;gr-toggle-active&#039;);} try{localStorage.setItem(&#039;grantha_home_tab&#039;,which);}catch(e){} }&lt;br /&gt;
    $btnG.on(&#039;click keydown&#039;,function(e){if(e.type===&#039;keydown&#039;&amp;amp;&amp;amp;e.key!==&#039;Enter&#039;&amp;amp;&amp;amp;e.key!==&#039; &#039;)return;showView(&#039;grantha&#039;);});&lt;br /&gt;
    $btnA.on(&#039;click keydown&#039;,function(e){if(e.type===&#039;keydown&#039;&amp;amp;&amp;amp;e.key!==&#039;Enter&#039;&amp;amp;&amp;amp;e.key!==&#039; &#039;)return;showView(&#039;author&#039;);});&lt;br /&gt;
    try{var saved=localStorage.getItem(&#039;grantha_home_tab&#039;);if(saved===&#039;author&#039;)showView(&#039;author&#039;);else showView(&#039;grantha&#039;);}catch(e){showView(&#039;grantha&#039;);}&lt;br /&gt;
  } );&lt;br /&gt;
}() );&lt;br /&gt;
// ── Replace MediaWiki user links with a single username dropdown (Profile + Logout) ──&lt;br /&gt;
( function () {&lt;br /&gt;
  function wikiHref( title ) {&lt;br /&gt;
    if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( title );&lt;br /&gt;
    var ap = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
    return ap.replace( &#039;$1&#039;, title );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function buildLogoutForm( token ) {&lt;br /&gt;
    token = token || &#039;&#039;;&lt;br /&gt;
    var esc = String( token ).replace( /&amp;quot;/g, &#039;&amp;amp;quot;&#039; );&lt;br /&gt;
    var script = ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.wikiScript ) ? mw.util.wikiScript() : &#039;/index.php&#039;;&lt;br /&gt;
    var form = document.createElement( &#039;form&#039; );&lt;br /&gt;
    form.method = &#039;post&#039;;&lt;br /&gt;
    form.action = script + &#039;?title=Special:UserLogout&#039;;&lt;br /&gt;
    form.style.display = &#039;none&#039;;&lt;br /&gt;
    form.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;wpEditToken&amp;quot; value=&amp;quot;&#039; + esc + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;title&amp;quot; value=&amp;quot;Special:UserLogout&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;returnto&amp;quot; value=&amp;quot;Main Page&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
    document.body.appendChild( form );&lt;br /&gt;
    return form;&lt;br /&gt;
  }&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.js&amp;diff=6209</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.js&amp;diff=6209"/>
		<updated>2026-06-12T06:50:01Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: Undo revision 6208 by Vaishnavi (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* MediaWiki:Common.js — grantha.io  (v7) */&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
  var LS_SCRIPT_KEY = &#039;grantha_reader_script&#039;;&lt;br /&gt;
  var currentScript = &#039;deva&#039;;&lt;br /&gt;
&lt;br /&gt;
  function devanagariToIAST( text ) {&lt;br /&gt;
    var CONSONANTS = {&lt;br /&gt;
      &#039;क&#039;:&#039;k&#039;,&#039;ख&#039;:&#039;kh&#039;,&#039;ग&#039;:&#039;g&#039;,&#039;घ&#039;:&#039;gh&#039;,&#039;ङ&#039;:&#039;ṅ&#039;,&lt;br /&gt;
      &#039;च&#039;:&#039;c&#039;,&#039;छ&#039;:&#039;ch&#039;,&#039;ज&#039;:&#039;j&#039;,&#039;झ&#039;:&#039;jh&#039;,&#039;ञ&#039;:&#039;ñ&#039;,&lt;br /&gt;
      &#039;ट&#039;:&#039;ṭ&#039;,&#039;ठ&#039;:&#039;ṭh&#039;,&#039;ड&#039;:&#039;ḍ&#039;,&#039;ढ&#039;:&#039;ḍh&#039;,&#039;ण&#039;:&#039;ṇ&#039;,&lt;br /&gt;
      &#039;त&#039;:&#039;t&#039;,&#039;थ&#039;:&#039;th&#039;,&#039;द&#039;:&#039;d&#039;,&#039;ध&#039;:&#039;dh&#039;,&#039;न&#039;:&#039;n&#039;,&lt;br /&gt;
      &#039;प&#039;:&#039;p&#039;,&#039;फ&#039;:&#039;ph&#039;,&#039;ब&#039;:&#039;b&#039;,&#039;भ&#039;:&#039;bh&#039;,&#039;म&#039;:&#039;m&#039;,&lt;br /&gt;
      &#039;य&#039;:&#039;y&#039;,&#039;र&#039;:&#039;r&#039;,&#039;ल&#039;:&#039;l&#039;,&#039;ळ&#039;:&#039;ḷ&#039;,&#039;व&#039;:&#039;v&#039;,&lt;br /&gt;
      &#039;श&#039;:&#039;ś&#039;,&#039;ष&#039;:&#039;ṣ&#039;,&#039;स&#039;:&#039;s&#039;,&#039;ह&#039;:&#039;h&#039;&lt;br /&gt;
    };&lt;br /&gt;
    var DIACRITICS = {&lt;br /&gt;
      &#039;ा&#039;:&#039;ā&#039;,&#039;ि&#039;:&#039;i&#039;,&#039;ी&#039;:&#039;ī&#039;,&#039;ु&#039;:&#039;u&#039;,&#039;ू&#039;:&#039;ū&#039;,&lt;br /&gt;
      &#039;ृ&#039;:&#039;ṛ&#039;,&#039;ॄ&#039;:&#039;ṝ&#039;,&#039;े&#039;:&#039;e&#039;,&#039;ै&#039;:&#039;ai&#039;,&#039;ो&#039;:&#039;o&#039;,&#039;ौ&#039;:&#039;au&#039;&lt;br /&gt;
    };&lt;br /&gt;
    var VOWELS = {&lt;br /&gt;
      &#039;अ&#039;:&#039;a&#039;,&#039;आ&#039;:&#039;ā&#039;,&#039;इ&#039;:&#039;i&#039;,&#039;ई&#039;:&#039;ī&#039;,&#039;उ&#039;:&#039;u&#039;,&#039;ऊ&#039;:&#039;ū&#039;,&lt;br /&gt;
      &#039;ऋ&#039;:&#039;ṛ&#039;,&#039;ॠ&#039;:&#039;ṝ&#039;,&#039;ए&#039;:&#039;e&#039;,&#039;ऐ&#039;:&#039;ai&#039;,&#039;ओ&#039;:&#039;o&#039;,&#039;औ&#039;:&#039;au&#039;,&#039;ऽ&#039;:&amp;quot;&#039;&amp;quot;&lt;br /&gt;
    };&lt;br /&gt;
    var MISC = {&lt;br /&gt;
      &#039;ं&#039;:&#039;ṃ&#039;,&#039;ः&#039;:&#039;ḥ&#039;,&#039;ँ&#039;:&#039;m̐&#039;,&#039;ॐ&#039;:&#039;oṃ&#039;,&lt;br /&gt;
      &#039;०&#039;:&#039;0&#039;,&#039;१&#039;:&#039;1&#039;,&#039;२&#039;:&#039;2&#039;,&#039;३&#039;:&#039;3&#039;,&#039;४&#039;:&#039;4&#039;,&lt;br /&gt;
      &#039;५&#039;:&#039;5&#039;,&#039;६&#039;:&#039;6&#039;,&#039;७&#039;:&#039;7&#039;,&#039;८&#039;:&#039;8&#039;,&#039;९&#039;:&#039;9&#039;&lt;br /&gt;
    };&lt;br /&gt;
    var HALANTA = &#039;्&#039;;&lt;br /&gt;
    var chars = Array.from( text );&lt;br /&gt;
    var result = &#039;&#039;;&lt;br /&gt;
    var i = 0;&lt;br /&gt;
    while ( i &amp;lt; chars.length ) {&lt;br /&gt;
      var ch   = chars[ i ];&lt;br /&gt;
      var next = chars[ i + 1 ];&lt;br /&gt;
      if ( CONSONANTS[ ch ] ) {&lt;br /&gt;
        var base = CONSONANTS[ ch ];&lt;br /&gt;
        if ( next === HALANTA )          { result += base;               i += 2; }&lt;br /&gt;
        else if ( DIACRITICS[ next ] )   { result += base + DIACRITICS[ next ]; i += 2; }&lt;br /&gt;
        else if ( next === &#039;ं&#039; || next === &#039;ः&#039; ) { result += base + &#039;a&#039; + MISC[ next ]; i += 2; }&lt;br /&gt;
        else                             { result += base + &#039;a&#039;;         i++;    }&lt;br /&gt;
      } else if ( VOWELS[ ch ] )         { result += VOWELS[ ch ];       i++; }&lt;br /&gt;
      else if ( DIACRITICS[ ch ] )       { result += DIACRITICS[ ch ];   i++; }&lt;br /&gt;
      else if ( MISC[ ch ] )             { result += MISC[ ch ];         i++; }&lt;br /&gt;
      else                               { result += ch;                 i++; }&lt;br /&gt;
    }&lt;br /&gt;
    return result;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var SCRIPT_MAP = {&lt;br /&gt;
    kn: {&lt;br /&gt;
      &#039;अ&#039;:&#039;ಅ&#039;,&#039;आ&#039;:&#039;ಆ&#039;,&#039;इ&#039;:&#039;ಇ&#039;,&#039;ई&#039;:&#039;ಈ&#039;,&#039;उ&#039;:&#039;ಉ&#039;,&#039;ऊ&#039;:&#039;ಊ&#039;,&#039;ऋ&#039;:&#039;ಋ&#039;,&lt;br /&gt;
      &#039;ए&#039;:&#039;ಏ&#039;,&#039;ऐ&#039;:&#039;ಐ&#039;,&#039;ओ&#039;:&#039;ಓ&#039;,&#039;औ&#039;:&#039;ಔ&#039;,&#039;ऽ&#039;:&#039;ಽ&#039;,&lt;br /&gt;
      &#039;क&#039;:&#039;ಕ&#039;,&#039;ख&#039;:&#039;ಖ&#039;,&#039;ग&#039;:&#039;ಗ&#039;,&#039;घ&#039;:&#039;ಘ&#039;,&#039;ङ&#039;:&#039;ಙ&#039;,&lt;br /&gt;
      &#039;च&#039;:&#039;ಚ&#039;,&#039;छ&#039;:&#039;ಛ&#039;,&#039;ज&#039;:&#039;ಜ&#039;,&#039;झ&#039;:&#039;ಝ&#039;,&#039;ञ&#039;:&#039;ಞ&#039;,&lt;br /&gt;
      &#039;ट&#039;:&#039;ಟ&#039;,&#039;ठ&#039;:&#039;ಠ&#039;,&#039;ड&#039;:&#039;ಡ&#039;,&#039;ढ&#039;:&#039;ಢ&#039;,&#039;ण&#039;:&#039;ಣ&#039;,&lt;br /&gt;
      &#039;त&#039;:&#039;ತ&#039;,&#039;थ&#039;:&#039;ಥ&#039;,&#039;द&#039;:&#039;ದ&#039;,&#039;ध&#039;:&#039;ಧ&#039;,&#039;न&#039;:&#039;ನ&#039;,&lt;br /&gt;
      &#039;प&#039;:&#039;ಪ&#039;,&#039;फ&#039;:&#039;ಫ&#039;,&#039;ब&#039;:&#039;ಬ&#039;,&#039;भ&#039;:&#039;ಭ&#039;,&#039;म&#039;:&#039;ಮ&#039;,&lt;br /&gt;
      &#039;य&#039;:&#039;ಯ&#039;,&#039;र&#039;:&#039;ರ&#039;,&#039;ल&#039;:&#039;ಲ&#039;,&#039;व&#039;:&#039;ವ&#039;,&lt;br /&gt;
      &#039;श&#039;:&#039;ಶ&#039;,&#039;ष&#039;:&#039;ಷ&#039;,&#039;स&#039;:&#039;ಸ&#039;,&#039;ह&#039;:&#039;ಹ&#039;,&lt;br /&gt;
      &#039;ा&#039;:&#039;ಾ&#039;,&#039;ि&#039;:&#039;ಿ&#039;,&#039;ी&#039;:&#039;ೀ&#039;,&#039;ु&#039;:&#039;ು&#039;,&#039;ू&#039;:&#039;ೂ&#039;,&lt;br /&gt;
      &#039;ृ&#039;:&#039;ೃ&#039;,&#039;े&#039;:&#039;ೇ&#039;,&#039;ै&#039;:&#039;ೈ&#039;,&#039;ो&#039;:&#039;ೋ&#039;,&#039;ौ&#039;:&#039;ೌ&#039;,&lt;br /&gt;
      &#039;ं&#039;:&#039;ಂ&#039;,&#039;ः&#039;:&#039;ಃ&#039;,&#039;्&#039;:&#039;್&#039;,&lt;br /&gt;
      &#039;०&#039;:&#039;೦&#039;,&#039;१&#039;:&#039;೧&#039;,&#039;२&#039;:&#039;೨&#039;,&#039;३&#039;:&#039;೩&#039;,&#039;४&#039;:&#039;೪&#039;,&lt;br /&gt;
      &#039;५&#039;:&#039;೫&#039;,&#039;६&#039;:&#039;೬&#039;,&#039;७&#039;:&#039;೭&#039;,&#039;८&#039;:&#039;೮&#039;,&#039;९&#039;:&#039;೯&#039;&lt;br /&gt;
    },&lt;br /&gt;
    ta: {&lt;br /&gt;
      &#039;अ&#039;:&#039;அ&#039;,&#039;आ&#039;:&#039;ஆ&#039;,&#039;इ&#039;:&#039;இ&#039;,&#039;ई&#039;:&#039;ஈ&#039;,&#039;उ&#039;:&#039;உ&#039;,&#039;ऊ&#039;:&#039;ஊ&#039;,&lt;br /&gt;
      &#039;ऋ&#039;:&#039;ரு&#039;,&#039;ॠ&#039;:&#039;ரூ&#039;,&lt;br /&gt;
      &#039;ए&#039;:&#039;ஏ&#039;,&#039;ऐ&#039;:&#039;ஐ&#039;,&#039;ओ&#039;:&#039;ஓ&#039;,&#039;औ&#039;:&#039;ஔ&#039;,&lt;br /&gt;
      &#039;क&#039;:&#039;க&#039;,&#039;ख&#039;:&#039;க&#039;,&#039;ग&#039;:&#039;க&#039;,&#039;घ&#039;:&#039;க&#039;,&#039;ङ&#039;:&#039;ங&#039;,&lt;br /&gt;
      &#039;च&#039;:&#039;ச&#039;,&#039;छ&#039;:&#039;ச&#039;,&#039;ज&#039;:&#039;ஜ&#039;,&#039;झ&#039;:&#039;ஜ&#039;,&#039;ञ&#039;:&#039;ஞ&#039;,&lt;br /&gt;
      &#039;ட&#039;:&#039;ட&#039;,&#039;ठ&#039;:&#039;ட&#039;,&#039;ड&#039;:&#039;ட&#039;,&#039;ढ&#039;:&#039;ட&#039;,&#039;ண&#039;:&#039;ண&#039;,&lt;br /&gt;
      &#039;त&#039;:&#039;த&#039;,&#039;थ&#039;:&#039;த&#039;,&#039;द&#039;:&#039;த&#039;,&#039;ध&#039;:&#039;த&#039;,&#039;न&#039;:&#039;ந&#039;,&lt;br /&gt;
      &#039;प&#039;:&#039;ப&#039;,&#039;फ&#039;:&#039;ப&#039;,&#039;ब&#039;:&#039;ப&#039;,&#039;भ&#039;:&#039;ப&#039;,&#039;म&#039;:&#039;ம&#039;,&lt;br /&gt;
      &#039;य&#039;:&#039;ய&#039;,&#039;र&#039;:&#039;ர&#039;,&#039;ल&#039;:&#039;ல&#039;,&#039;ळ&#039;:&#039;ழ&#039;,&#039;व&#039;:&#039;வ&#039;,&lt;br /&gt;
      &#039;श&#039;:&#039;ஶ&#039;,&#039;ष&#039;:&#039;ஷ&#039;,&#039;स&#039;:&#039;ஸ&#039;,&#039;ह&#039;:&#039;ஹ&#039;,&lt;br /&gt;
      &#039;ा&#039;:&#039;ா&#039;,&#039;ि&#039;:&#039;ி&#039;,&#039;ी&#039;:&#039;ீ&#039;,&#039;ु&#039;:&#039;ு&#039;,&#039;ू&#039;:&#039;ூ&#039;,&lt;br /&gt;
      &#039;ृ&#039;:&#039;ு&#039;,&#039;ॄ&#039;:&#039;ூ&#039;,&lt;br /&gt;
      &#039;े&#039;:&#039;ே&#039;,&#039;ை&#039;:&#039;ை&#039;,&#039;ो&#039;:&#039;ோ&#039;,&#039;ौ&#039;:&#039;ௌ&#039;,&lt;br /&gt;
      &#039;ं&#039;:&#039;ம்&#039;,&#039;ः&#039;:&#039;:&#039;,&#039;ँ&#039;:&#039;ம்&#039;,&#039;्&#039;:&#039;்&#039;,&#039;ॐ&#039;:&#039;ௐ&#039;,&#039;ऽ&#039;:&#039;ௗ&#039;,&lt;br /&gt;
      &#039;०&#039;:&#039;0&#039;,&#039;१&#039;:&#039;1&#039;,&#039;२&#039;:&#039;2&#039;,&#039;३&#039;:&#039;3&#039;,&#039;४&#039;:&#039;4&#039;,&lt;br /&gt;
      &#039;५&#039;:&#039;5&#039;,&#039;६&#039;:&#039;6&#039;,&#039;७&#039;:&#039;7&#039;,&#039;८&#039;:&#039;8&#039;,&#039;९&#039;:&#039;9&#039;&lt;br /&gt;
    }&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  var PRE = [&lt;br /&gt;
    [ /ङ्क/g, &#039;ंक&#039; ], [ /ङ्ख/g, &#039;ंख&#039; ], [ /ङ्ग/g, &#039;ंग&#039; ], [ /ङ्घ/g, &#039;ंघ&#039; ],&lt;br /&gt;
    [ /ञ्च/g, &#039;ंच&#039; ], [ /ञ्ज/g, &#039;ंज&#039; ], [ /ण्ट/g, &#039;ंट&#039; ], [ /ण्ड/g, &#039;ंड&#039; ],&lt;br /&gt;
    [ /न्त/g, &#039;ंत&#039; ], [ /न्द/g, &#039;ंद&#039; ], [ /म्ब/g, &#039;ंब&#039; ], [ /म्भ/g, &#039;ंभ&#039; ]&lt;br /&gt;
  ];&lt;br /&gt;
&lt;br /&gt;
  function transliterateText( text, script ) {&lt;br /&gt;
    if ( script === &#039;en&#039; ) return devanagariToIAST( text );&lt;br /&gt;
    var map = SCRIPT_MAP[ script ];&lt;br /&gt;
    if ( !map ) return text;&lt;br /&gt;
    var t = text;&lt;br /&gt;
    PRE.forEach( function ( p ) { t = t.replace( p[ 0 ], p[ 1 ] ); } );&lt;br /&gt;
    return Array.from( t ).map( function ( ch ) {&lt;br /&gt;
      return map[ ch ] !== undefined ? map[ ch ] : ch;&lt;br /&gt;
    } ).join( &#039;&#039; );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var translatableSpans = [];&lt;br /&gt;
&lt;br /&gt;
  function tagTextNodes() {&lt;br /&gt;
    var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
    if ( content ) {&lt;br /&gt;
      var walker = document.createTreeWalker( content, NodeFilter.SHOW_TEXT );&lt;br /&gt;
      var nodes  = [];&lt;br /&gt;
      while ( walker.nextNode() ) nodes.push( walker.currentNode );&lt;br /&gt;
      nodes.forEach( function ( node ) {&lt;br /&gt;
        var p = node.parentNode;&lt;br /&gt;
        if ( !p ) return;&lt;br /&gt;
        if ( p.hasAttribute &amp;amp;&amp;amp; p.hasAttribute( &#039;data-deva&#039; ) ) return;&lt;br /&gt;
        if ( p.closest ) {&lt;br /&gt;
          if ( p.closest( &#039;.gr-controls&#039; )    ) return;&lt;br /&gt;
          if ( p.closest( &#039;.mw-editsection&#039; ) ) return;&lt;br /&gt;
        }&lt;br /&gt;
        var orig = node.textContent;&lt;br /&gt;
        if ( !orig.trim() ) return;&lt;br /&gt;
        var span = document.createElement( &#039;span&#039; );&lt;br /&gt;
        span.setAttribute( &#039;data-deva&#039;, orig );&lt;br /&gt;
        span.textContent = orig;&lt;br /&gt;
        p.replaceChild( span, node );&lt;br /&gt;
        translatableSpans.push( span );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
    document.querySelectorAll( &#039;.vector-toc .vector-toc-text&#039; ).forEach( function ( span ) {&lt;br /&gt;
      if ( span.hasAttribute( &#039;data-deva&#039; ) ) return;&lt;br /&gt;
      var orig = span.textContent;&lt;br /&gt;
      if ( !orig.trim() ) return;&lt;br /&gt;
      span.setAttribute( &#039;data-deva&#039;, orig );&lt;br /&gt;
      translatableSpans.push( span );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function applyScript( script ) {&lt;br /&gt;
    currentScript = script;&lt;br /&gt;
    translatableSpans.forEach( function ( span ) {&lt;br /&gt;
      if ( !span.parentNode ) return;&lt;br /&gt;
      var orig = span.getAttribute( &#039;data-deva&#039; );&lt;br /&gt;
      if ( !orig ) return;&lt;br /&gt;
      span.textContent = ( script === &#039;deva&#039; )&lt;br /&gt;
        ? orig&lt;br /&gt;
        : transliterateText( orig, script );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function _isNoTocPage() {&lt;br /&gt;
    var pn = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039; ) ) || &#039;&#039;;&lt;br /&gt;
    return pn === &#039;Main_Page&#039; || /^[A-Za-z0-9_]+:About$/.test( pn );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function renameTocTitle() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    var titleEl = toc.querySelector(&#039;.vector-toc-title&#039;) || toc.querySelector(&#039;.vector-pinnable-header-label&#039;);&lt;br /&gt;
    if ( !titleEl ) return;&lt;br /&gt;
    var LABEL = &#039;विषयसूची&#039;;&lt;br /&gt;
    var span = titleEl.querySelector(&#039;.gr-toc-title&#039;);&lt;br /&gt;
    if ( !span ) {&lt;br /&gt;
      titleEl.innerHTML = &#039;&#039;;&lt;br /&gt;
      span = document.createElement(&#039;span&#039;);&lt;br /&gt;
      span.className = &#039;gr-toc-title&#039;;&lt;br /&gt;
      span.setAttribute(&#039;data-deva&#039;, LABEL);&lt;br /&gt;
      titleEl.appendChild(span);&lt;br /&gt;
      translatableSpans.push(span);&lt;br /&gt;
    }&lt;br /&gt;
    span.textContent = currentScript === &#039;deva&#039; ? LABEL : transliterateText(LABEL, currentScript);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function removeTocBeginning() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    var el = toc.querySelector( &#039;#vector-toc-beginning&#039; );&lt;br /&gt;
    if ( !el ) {&lt;br /&gt;
      var items = toc.querySelectorAll( &#039;.vector-toc-list-item&#039; );&lt;br /&gt;
      for ( var i = 0; i &amp;lt; items.length; i++ ) {&lt;br /&gt;
        var a = items[ i ].querySelector( &#039;a&#039; );&lt;br /&gt;
        if ( a ) {&lt;br /&gt;
          var href = a.getAttribute( &#039;href&#039; ) || &#039;&#039;;&lt;br /&gt;
          if ( href.indexOf( &#039;#&#039; ) === -1 ) { el = items[ i ]; break; }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if ( el &amp;amp;&amp;amp; el.parentNode ) el.parentNode.removeChild( el );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function expandTocSections() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    toc.querySelectorAll( &#039;.vector-toc-list-item-collapsed&#039; ).forEach( function ( li ) {&lt;br /&gt;
      li.classList.remove( &#039;vector-toc-list-item-collapsed&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function injectTocDocNav() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    if ( document.getElementById( &#039;gr-toc-doc-nav&#039; ) ) return;&lt;br /&gt;
    var artPath   = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
    var pageTitle = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039;   ) ) || &#039;&#039;;&lt;br /&gt;
    var teekaPage   = document.querySelector( &#039;.gr-teeka-page&#039; );&lt;br /&gt;
    var primarySlug = teekaPage ? ( teekaPage.getAttribute( &#039;data-primary&#039; ) || &#039;&#039; ) : &#039;&#039;;&lt;br /&gt;
    if ( !primarySlug ) { primarySlug = pageTitle.split( &#039;/&#039; )[ 0 ]; }&lt;br /&gt;
    if ( !primarySlug ) return;&lt;br /&gt;
    function wikiUrl( slug ) {&lt;br /&gt;
      if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( slug );&lt;br /&gt;
      return artPath.replace( &#039;$1&#039;, encodeURIComponent( slug ).replace( /%2F/g, &#039;/&#039; ) );&lt;br /&gt;
    }&lt;br /&gt;
    var docTitleEl     = document.querySelector( &#039;.gr-doc-title&#039; );&lt;br /&gt;
    var hasMoolaPage   = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-moola&#039; )   === &#039;1&#039;;&lt;br /&gt;
    var hasUllekhaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-ullekha&#039; ) === &#039;1&#039;;&lt;br /&gt;
    var showMoolaPage  = !teekaPage &amp;amp;&amp;amp; hasMoolaPage;&lt;br /&gt;
    var showMoolaBack  = !!teekaPage;&lt;br /&gt;
    var showUllekha    = hasUllekhaPage || !!teekaPage;&lt;br /&gt;
    if ( !showMoolaPage &amp;amp;&amp;amp; !showMoolaBack &amp;amp;&amp;amp; !showUllekha ) return;&lt;br /&gt;
    var nav = document.createElement( &#039;div&#039; );&lt;br /&gt;
    nav.id = &#039;gr-toc-doc-nav&#039;;&lt;br /&gt;
    nav.setAttribute( &#039;class&#039;, &#039;toc-main-links&#039; );&lt;br /&gt;
    function makeBtn( href, label ) {&lt;br /&gt;
      var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
      a.href = href;&lt;br /&gt;
      a.setAttribute( &#039;class&#039;, &#039;toc-main-link-item&#039; );&lt;br /&gt;
      var lspan = document.createElement( &#039;span&#039; );&lt;br /&gt;
      lspan.setAttribute( &#039;data-deva&#039;, label );&lt;br /&gt;
      lspan.textContent = ( currentScript &amp;amp;&amp;amp; currentScript !== &#039;deva&#039; ) ? transliterateText( label, currentScript ) : label;&lt;br /&gt;
      translatableSpans.push( lspan );&lt;br /&gt;
      a.appendChild( lspan );&lt;br /&gt;
      a.addEventListener( &#039;mouseover&#039;, function () { this.style.opacity = &#039;0.72&#039;; } );&lt;br /&gt;
      a.addEventListener( &#039;mouseout&#039;,  function () { this.style.opacity = &#039;1&#039;;    } );&lt;br /&gt;
      return a;&lt;br /&gt;
    }&lt;br /&gt;
    if ( showMoolaPage ) nav.appendChild( makeBtn( wikiUrl( primarySlug + &#039;/Moola&#039; ), &#039;मूलम्&#039; ) );&lt;br /&gt;
    if ( showMoolaBack ) nav.appendChild( makeBtn( wikiUrl( primarySlug ),            &#039;मूल&#039;   ) );&lt;br /&gt;
    if ( showUllekha   ) nav.appendChild( makeBtn( wikiUrl( primarySlug + &#039;/Ullekha&#039;), &#039;उल्लेख&#039;) );&lt;br /&gt;
    var tocContents = toc.querySelector( &#039;.vector-toc-contents&#039; );&lt;br /&gt;
    if ( tocContents ) toc.insertBefore( nav, tocContents );&lt;br /&gt;
    else               toc.appendChild( nav );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var _headingObserver = null;&lt;br /&gt;
&lt;br /&gt;
  function attachHeadingObserver() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    if ( _headingObserver ) return;&lt;br /&gt;
    if ( !window.IntersectionObserver ) return;&lt;br /&gt;
    var ACTIVE_COLOR = &#039;#f57c00&#039;;&lt;br /&gt;
    var _activeId    = null;&lt;br /&gt;
    var content  = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
    if ( !content ) return;&lt;br /&gt;
    var headings = Array.from( content.querySelectorAll( &#039;h1[id],h2[id],h3[id],h4[id],h5[id],h6[id]&#039; ) );&lt;br /&gt;
    if ( !headings.length ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    function getTocLink( id ) { return toc.querySelector( &#039;a[href=&amp;quot;#&#039; + CSS.escape( id ) + &#039;&amp;quot;]&#039; ); }&lt;br /&gt;
    function getTocLi( id ) { var a = getTocLink( id ); return a ? a.closest( &#039;.vector-toc-list-item&#039; ) : null; }&lt;br /&gt;
    function clearActive() {&lt;br /&gt;
      toc.querySelectorAll( &#039;.vector-toc-list-item&#039; ).forEach( function ( li ) {&lt;br /&gt;
        li.classList.remove( &#039;vector-toc-list-item-active&#039; );&lt;br /&gt;
        var lnk = li.querySelector( &#039;.vector-toc-link&#039; );&lt;br /&gt;
        if ( !lnk ) return;&lt;br /&gt;
        lnk.style.removeProperty( &#039;color&#039; );&lt;br /&gt;
        lnk.style.setProperty( &#039;font-weight&#039;, &#039;400&#039;, &#039;important&#039; );&lt;br /&gt;
        lnk.querySelectorAll( &#039;*&#039; ).forEach( function ( el ) { el.style.removeProperty( &#039;color&#039; ); el.style.setProperty( &#039;font-weight&#039;, &#039;400&#039;, &#039;important&#039; ); } );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
    function setActive( id ) {&lt;br /&gt;
      if ( _activeId === id ) return;&lt;br /&gt;
      _activeId = id;&lt;br /&gt;
      clearActive();&lt;br /&gt;
      if ( !id ) return;&lt;br /&gt;
      var li = getTocLi( id );&lt;br /&gt;
      if ( !li ) return;&lt;br /&gt;
      li.classList.add( &#039;vector-toc-list-item-active&#039; );&lt;br /&gt;
      var hasActiveChild = !!li.querySelector( &#039;.vector-toc-list-item .vector-toc-list-item-active&#039; );&lt;br /&gt;
      if ( !hasActiveChild ) {&lt;br /&gt;
        var lnk = li.querySelector( &#039;.vector-toc-link&#039; );&lt;br /&gt;
        if ( lnk ) {&lt;br /&gt;
          lnk.style.setProperty( &#039;color&#039;, ACTIVE_COLOR, &#039;important&#039; );&lt;br /&gt;
          lnk.style.setProperty( &#039;font-weight&#039;, &#039;700&#039;, &#039;important&#039; );&lt;br /&gt;
          lnk.querySelectorAll( &#039;*&#039; ).forEach( function ( el ) { el.style.setProperty( &#039;color&#039;, ACTIVE_COLOR, &#039;important&#039; ); el.style.setProperty( &#039;font-weight&#039;, &#039;700&#039;, &#039;important&#039; ); } );&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      var anc = li.parentNode;&lt;br /&gt;
      while ( anc &amp;amp;&amp;amp; anc !== toc ) {&lt;br /&gt;
        if ( anc.classList ) anc.classList.remove( &#039;vector-toc-list-item-collapsed&#039; );&lt;br /&gt;
        if ( anc.tagName === &#039;UL&#039; || anc.tagName === &#039;LI&#039; ) anc.style.removeProperty( &#039;display&#039; );&lt;br /&gt;
        anc = anc.parentNode;&lt;br /&gt;
      }&lt;br /&gt;
      var sticky = document.querySelector( &#039;.vector-sticky-pinned-container&#039; );&lt;br /&gt;
      var scrollEl = sticky || toc;&lt;br /&gt;
      if ( scrollEl.scrollHeight &amp;gt; scrollEl.clientHeight ) {&lt;br /&gt;
        var lr = li.getBoundingClientRect();&lt;br /&gt;
        var cr = scrollEl.getBoundingClientRect();&lt;br /&gt;
        if ( lr.top &amp;lt; cr.top + 8 || lr.bottom &amp;gt; cr.bottom - 8 ) {&lt;br /&gt;
          scrollEl.scrollTop += lr.top - cr.top - scrollEl.clientHeight / 2 + li.offsetHeight / 2;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    var _visible = new Set();&lt;br /&gt;
    _headingObserver = new IntersectionObserver( function ( entries ) {&lt;br /&gt;
      entries.forEach( function ( entry ) {&lt;br /&gt;
        if ( entry.isIntersecting ) _visible.add( entry.target.id );&lt;br /&gt;
        else _visible.delete( entry.target.id );&lt;br /&gt;
      } );&lt;br /&gt;
      var topId = null, topY = Infinity;&lt;br /&gt;
      _visible.forEach( function ( id ) {&lt;br /&gt;
        var el = document.getElementById( id );&lt;br /&gt;
        if ( el ) { var y = el.getBoundingClientRect().top; if ( y &amp;gt;= 0 &amp;amp;&amp;amp; y &amp;lt; topY ) { topY = y; topId = id; } }&lt;br /&gt;
      } );&lt;br /&gt;
      if ( !topId ) {&lt;br /&gt;
        var bestY = -Infinity;&lt;br /&gt;
        headings.forEach( function ( h ) { var y = h.getBoundingClientRect().top; if ( y &amp;lt; 0 &amp;amp;&amp;amp; y &amp;gt; bestY ) { bestY = y; topId = h.id; } } );&lt;br /&gt;
      }&lt;br /&gt;
      setActive( topId || null );&lt;br /&gt;
    }, { rootMargin: &#039;-60px 0px -65% 0px&#039;, threshold: 0 } );&lt;br /&gt;
    headings.forEach( function ( h ) { _headingObserver.observe( h ); } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function setupToc() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    removeTocBeginning();&lt;br /&gt;
    renameTocTitle();&lt;br /&gt;
    expandTocSections();&lt;br /&gt;
    injectTocDocNav();&lt;br /&gt;
    attachHeadingObserver();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function init() {&lt;br /&gt;
    var HIDE_IDS = [ &#039;vector-appearance&#039;, &#039;vector-appearance-pinned-container&#039;, &#039;vector-appearance-unpinned-container&#039; ];&lt;br /&gt;
    function removeHiddenEls() {&lt;br /&gt;
      HIDE_IDS.forEach( function ( id ) { var el = document.getElementById( id ); if ( el &amp;amp;&amp;amp; el.parentNode ) el.parentNode.removeChild( el ); } );&lt;br /&gt;
      var pt = document.getElementById( &#039;vector-page-tools&#039; ) || document.querySelector( &#039;.vector-page-tools-pinned-container&#039; );&lt;br /&gt;
      if ( pt ) pt.querySelectorAll( &#039;[aria-controls=&amp;quot;vector-appearance&amp;quot;]&#039; ).forEach( function ( el ) { if ( el.parentNode ) el.parentNode.removeChild( el ); } );&lt;br /&gt;
    }&lt;br /&gt;
    removeHiddenEls();&lt;br /&gt;
    ( function detectTeekaMode() {&lt;br /&gt;
      var tp = document.querySelector( &#039;.gr-teeka-page&#039; );&lt;br /&gt;
      if ( !tp ) return;&lt;br /&gt;
      var primary = tp.getAttribute( &#039;data-primary&#039; ) || &#039;&#039;;&lt;br /&gt;
      var artPath = ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
      var mainUrl = artPath.replace( &#039;$1&#039;, primary );&lt;br /&gt;
      var refParam = window.location.search.match( /[?&amp;amp;]ref=([01])/ );&lt;br /&gt;
      if ( refParam ) { document.body.classList.add( refParam[1] === &#039;1&#039; ? &#039;gr-ref-mode&#039; : &#039;gr-standalone&#039; ); return; }&lt;br /&gt;
      var ref = document.referrer || &#039;&#039;;&lt;br /&gt;
      document.body.classList.add( ( ref &amp;amp;&amp;amp; primary &amp;amp;&amp;amp; ref.indexOf( mainUrl ) !== -1 ) ? &#039;gr-ref-mode&#039; : &#039;gr-standalone&#039; );&lt;br /&gt;
    }() );&lt;br /&gt;
    if ( window.MutationObserver ) {&lt;br /&gt;
      var hideObs = new MutationObserver( function ( mutations ) {&lt;br /&gt;
        var dirty = false;&lt;br /&gt;
        mutations.forEach( function ( m ) { if ( m.addedNodes.length ) dirty = true; } );&lt;br /&gt;
        if ( dirty ) removeHiddenEls();&lt;br /&gt;
      } );&lt;br /&gt;
      hideObs.observe( document.body, { childList: true, subtree: false } );&lt;br /&gt;
      setTimeout( function () { hideObs.disconnect(); }, 6000 );&lt;br /&gt;
    }&lt;br /&gt;
    var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
    var alreadyTagged = content &amp;amp;&amp;amp; content.querySelector( &#039;[data-deva]&#039; );&lt;br /&gt;
    if ( !alreadyTagged ) { translatableSpans = []; tagTextNodes(); }&lt;br /&gt;
    else {&lt;br /&gt;
      document.querySelectorAll( &#039;.vector-toc .vector-toc-text:not([data-deva])&#039; ).forEach( function ( span ) {&lt;br /&gt;
        var orig = span.textContent; if ( !orig.trim() ) return;&lt;br /&gt;
        span.setAttribute( &#039;data-deva&#039;, orig ); translatableSpans.push( span );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
    var saved = ( function () { try { return localStorage.getItem( LS_SCRIPT_KEY ); } catch ( e ) { return null; } }() );&lt;br /&gt;
    if ( saved &amp;amp;&amp;amp; saved !== &#039;deva&#039; ) { applyScript( saved ); } else { currentScript = &#039;deva&#039;; }&lt;br /&gt;
    setTimeout( setupToc, 200 );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  window.addEventListener( &#039;gr-script-change&#039;, function ( e ) {&lt;br /&gt;
    var script = e &amp;amp;&amp;amp; e.detail &amp;amp;&amp;amp; e.detail.script;&lt;br /&gt;
    if ( script ) applyScript( script );&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
  window.addEventListener( &#039;gr-new-content&#039;, function ( e ) {&lt;br /&gt;
    var container = e &amp;amp;&amp;amp; e.detail &amp;amp;&amp;amp; e.detail.container;&lt;br /&gt;
    if ( !container ) return;&lt;br /&gt;
    var walker = document.createTreeWalker( container, NodeFilter.SHOW_TEXT );&lt;br /&gt;
    var nodes = [];&lt;br /&gt;
    while ( walker.nextNode() ) nodes.push( walker.currentNode );&lt;br /&gt;
    nodes.forEach( function ( node ) {&lt;br /&gt;
      var p = node.parentNode;&lt;br /&gt;
      if ( !p || ( p.hasAttribute &amp;amp;&amp;amp; p.hasAttribute( &#039;data-deva&#039; ) ) ) return;&lt;br /&gt;
      var orig = node.textContent;&lt;br /&gt;
      if ( !orig.trim() ) return;&lt;br /&gt;
      var span = document.createElement( &#039;span&#039; );&lt;br /&gt;
      span.setAttribute( &#039;data-deva&#039;, orig );&lt;br /&gt;
      span.textContent = currentScript !== &#039;deva&#039; ? transliterateText( orig, currentScript ) : orig;&lt;br /&gt;
      p.replaceChild( span, node );&lt;br /&gt;
      translatableSpans.push( span );&lt;br /&gt;
    } );&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
  try {&lt;br /&gt;
    var _grBC = new BroadcastChannel( &#039;gr-script&#039; );&lt;br /&gt;
    _grBC.onmessage = function ( e ) {&lt;br /&gt;
      var script = e &amp;amp;&amp;amp; e.data &amp;amp;&amp;amp; e.data.script;&lt;br /&gt;
      if ( script ) { currentScript = script; var sel = document.querySelector( &#039;.gr-script-sel&#039; ); if ( sel ) sel.value = script; applyScript( script ); }&lt;br /&gt;
    };&lt;br /&gt;
  } catch ( e ) {}&lt;br /&gt;
&lt;br /&gt;
  if ( window.mw ) {&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
      setTimeout( function () {&lt;br /&gt;
        var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
        var alreadyTagged = content &amp;amp;&amp;amp; content.querySelector( &#039;[data-deva]&#039; );&lt;br /&gt;
        if ( !alreadyTagged ) { translatableSpans = []; tagTextNodes(); }&lt;br /&gt;
        else {&lt;br /&gt;
          document.querySelectorAll( &#039;.vector-toc .vector-toc-text:not([data-deva])&#039; ).forEach( function ( span ) {&lt;br /&gt;
            var orig = span.textContent; if ( !orig.trim() ) return;&lt;br /&gt;
            span.setAttribute( &#039;data-deva&#039;, orig ); translatableSpans.push( span );&lt;br /&gt;
          } );&lt;br /&gt;
        }&lt;br /&gt;
        if ( currentScript !== &#039;deva&#039; ) applyScript( currentScript );&lt;br /&gt;
        setupToc();&lt;br /&gt;
      }, 150 );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) { document.addEventListener( &#039;DOMContentLoaded&#039;, init ); }&lt;br /&gt;
  else { init(); }&lt;br /&gt;
&lt;br /&gt;
}() );   /* ← end of main IIFE */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Inject &amp;quot;Help&amp;quot; and &amp;quot;About&amp;quot; links into the header ─────────────────&lt;br /&gt;
( function () {&lt;br /&gt;
  function wikiHref( title ) {&lt;br /&gt;
    if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( title );&lt;br /&gt;
    var ap = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
    return ap.replace( &#039;$1&#039;, title );&lt;br /&gt;
  }&lt;br /&gt;
  var linkStyle = [ &#039;color:rgba(255,255,255,0.88)&#039;,&#039;font-size:0.88em&#039;,&#039;font-family:system-ui,sans-serif&#039;,&#039;font-weight:500&#039;,&#039;text-decoration:none&#039;,&#039;padding:4px 10px&#039;,&#039;border-radius:4px&#039;,&#039;margin-right:4px&#039;,&#039;transition:color 0.15s,background 0.15s&#039;,&#039;white-space:nowrap&#039; ].join( &#039;;&#039; );&lt;br /&gt;
  function makeHeaderLink( id, href, label ) {&lt;br /&gt;
    var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
    a.id = id; a.href = href; a.textContent = label; a.style.cssText = linkStyle;&lt;br /&gt;
    a.addEventListener( &#039;mouseover&#039;, function () { this.style.color = &#039;#fff&#039;; this.style.background = &#039;rgba(255,255,255,0.12)&#039;; } );&lt;br /&gt;
    a.addEventListener( &#039;mouseout&#039;,  function () { this.style.color = &#039;rgba(255,255,255,0.88)&#039;; this.style.background = &#039;transparent&#039;; } );&lt;br /&gt;
    return a;&lt;br /&gt;
  }&lt;br /&gt;
  function injectHeaderLinks() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-about-link&#039; ) ) return;&lt;br /&gt;
    var headerEnd = document.querySelector( &#039;.vector-header-end&#039; ) || document.querySelector( &#039;#vector-user-links&#039; ) || document.querySelector( &#039;.mw-header&#039; );&lt;br /&gt;
    if ( !headerEnd ) return;&lt;br /&gt;
    var helpLink  = makeHeaderLink( &#039;gr-help-link&#039;,  wikiHref( &#039;My_wiki:Help&#039;  ), &#039;Help&#039;  );&lt;br /&gt;
    var aboutLink = makeHeaderLink( &#039;gr-about-link&#039;, wikiHref( &#039;My_wiki:About&#039; ), &#039;About&#039; );&lt;br /&gt;
    var ul = document.querySelector( &#039;.vector-user-links&#039; ) || document.querySelector( &#039;#pt-userpage&#039; );&lt;br /&gt;
    if ( ul &amp;amp;&amp;amp; ul.parentNode === headerEnd ) { headerEnd.insertBefore( aboutLink, ul ); headerEnd.insertBefore( helpLink, aboutLink ); }&lt;br /&gt;
    else { headerEnd.appendChild( helpLink ); headerEnd.appendChild( aboutLink ); }&lt;br /&gt;
  }&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) document.addEventListener( &#039;DOMContentLoaded&#039;, injectHeaderLinks );&lt;br /&gt;
  else injectHeaderLinks();&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Main page: by-Grantha / by-Author toggle ──────────────────────&lt;br /&gt;
( function () {&lt;br /&gt;
  function grHomeView( v ) {&lt;br /&gt;
    var gView = document.getElementById( &#039;gr-view-grantha&#039; );&lt;br /&gt;
    var aView = document.getElementById( &#039;gr-view-author&#039; );&lt;br /&gt;
    var gBtn  = document.getElementById( &#039;gr-toggle-grantha&#039; );&lt;br /&gt;
    var aBtn  = document.getElementById( &#039;gr-toggle-author&#039; );&lt;br /&gt;
    if ( !gView || !aView || !gBtn || !aBtn ) return;&lt;br /&gt;
    gView.style.display = ( v === &#039;grantha&#039; ) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
    aView.style.display = ( v === &#039;author&#039;  ) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
    gBtn.className = &#039;gr-toggle-btn&#039; + ( v === &#039;grantha&#039; ? &#039; gr-toggle-active&#039; : &#039;&#039; );&lt;br /&gt;
    aBtn.className = &#039;gr-toggle-btn&#039; + ( v === &#039;author&#039;  ? &#039; gr-toggle-active&#039; : &#039;&#039; );&lt;br /&gt;
    try { localStorage.setItem( &#039;gr_home_view&#039;, v ); } catch ( e ) {}&lt;br /&gt;
  }&lt;br /&gt;
  function initHomeToggle() {&lt;br /&gt;
    var gBtn = document.getElementById( &#039;gr-toggle-grantha&#039; );&lt;br /&gt;
    var aBtn = document.getElementById( &#039;gr-toggle-author&#039; );&lt;br /&gt;
    if ( !gBtn || !aBtn ) return;&lt;br /&gt;
    gBtn.addEventListener( &#039;click&#039;, function () { grHomeView( &#039;grantha&#039; ); } );&lt;br /&gt;
    aBtn.addEventListener( &#039;click&#039;, function () { grHomeView( &#039;author&#039; );  } );&lt;br /&gt;
    [ gBtn, aBtn ].forEach( function ( btn ) { btn.addEventListener( &#039;keydown&#039;, function ( e ) { if ( e.key === &#039;Enter&#039; || e.key === &#039; &#039; ) btn.click(); } ); } );&lt;br /&gt;
    var saved; try { saved = localStorage.getItem( &#039;gr_home_view&#039; ); } catch ( e ) {}&lt;br /&gt;
    if ( saved === &#039;author&#039; ) grHomeView( &#039;author&#039; );&lt;br /&gt;
  }&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) document.addEventListener( &#039;DOMContentLoaded&#039;, initHomeToggle );&lt;br /&gt;
  else initHomeToggle();&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Ullekha reference link handler ─────────────────────────────────&lt;br /&gt;
( function () {&lt;br /&gt;
  function highlightOnArrival() {&lt;br /&gt;
    var search = window.location.search;&lt;br /&gt;
    if ( !search ) return;&lt;br /&gt;
    var m = search.match( /[?&amp;amp;]hlUllekha=([^&amp;amp;]+)/ );&lt;br /&gt;
    if ( !m ) return;&lt;br /&gt;
    var needle;&lt;br /&gt;
    try { needle = decodeURIComponent( m[ 1 ] ); } catch ( e ) { return; }&lt;br /&gt;
    if ( !needle || needle.length &amp;lt; 4 ) return;&lt;br /&gt;
    function doHighlight() {&lt;br /&gt;
      var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
      if ( !content ) return;&lt;br /&gt;
      var snippet = needle.slice( 0, 40 );&lt;br /&gt;
      var found   = false;&lt;br /&gt;
      var spans = content.querySelectorAll( &#039;[data-deva]&#039; );&lt;br /&gt;
      for ( var i = 0; i &amp;lt; spans.length &amp;amp;&amp;amp; !found; i++ ) {&lt;br /&gt;
        var spanEl = spans[ i ];&lt;br /&gt;
        var orig   = spanEl.getAttribute( &#039;data-deva&#039; ) || &#039;&#039;;&lt;br /&gt;
        if ( orig.indexOf( snippet ) === -1 ) continue;&lt;br /&gt;
        var idx    = orig.indexOf( snippet );&lt;br /&gt;
        var hlText = orig.slice( idx, Math.min( idx + needle.length, orig.length ) );&lt;br /&gt;
        var mark   = document.createElement( &#039;mark&#039; );&lt;br /&gt;
        mark.className = &#039;gr-ullekha-highlight&#039;;&lt;br /&gt;
        mark.style.cssText = &#039;background:#fff176;border-radius:2px;padding:0 2px;&#039;;&lt;br /&gt;
        mark.textContent = hlText;&lt;br /&gt;
        var parent = spanEl.parentNode;&lt;br /&gt;
        if ( !parent ) continue;&lt;br /&gt;
        var before = document.createTextNode( orig.slice( 0, idx ) );&lt;br /&gt;
        var after  = document.createTextNode( orig.slice( idx + hlText.length ) );&lt;br /&gt;
        parent.insertBefore( before, spanEl ); parent.insertBefore( mark, spanEl ); parent.insertBefore( after, spanEl ); parent.removeChild( spanEl );&lt;br /&gt;
        setTimeout( function () { mark.scrollIntoView( { behavior: &#039;smooth&#039;, block: &#039;center&#039; } ); }, 100 );&lt;br /&gt;
        found = true;&lt;br /&gt;
      }&lt;br /&gt;
      if ( !found ) {&lt;br /&gt;
        var walker = document.createTreeWalker( content, NodeFilter.SHOW_TEXT );&lt;br /&gt;
        while ( walker.nextNode() &amp;amp;&amp;amp; !found ) {&lt;br /&gt;
          var node = walker.currentNode;&lt;br /&gt;
          var txt  = node.textContent || &#039;&#039;;&lt;br /&gt;
          if ( txt.indexOf( snippet ) === -1 ) continue;&lt;br /&gt;
          var idx2  = txt.indexOf( snippet );&lt;br /&gt;
          var mark2 = document.createElement( &#039;mark&#039; );&lt;br /&gt;
          mark2.className = &#039;gr-ullekha-highlight&#039;;&lt;br /&gt;
          mark2.style.cssText = &#039;background:#fff176;border-radius:2px;padding:0 2px;&#039;;&lt;br /&gt;
          mark2.textContent = txt.slice( idx2, Math.min( idx2 + needle.length, txt.length ) );&lt;br /&gt;
          var p = node.parentNode;&lt;br /&gt;
          p.insertBefore( document.createTextNode( txt.slice( 0, idx2 ) ), node );&lt;br /&gt;
          p.insertBefore( mark2, node );&lt;br /&gt;
          p.insertBefore( document.createTextNode( txt.slice( idx2 + mark2.textContent.length ) ), node );&lt;br /&gt;
          p.removeChild( node );&lt;br /&gt;
          setTimeout( function () { mark2.scrollIntoView( { behavior: &#039;smooth&#039;, block: &#039;center&#039; } ); }, 100 );&lt;br /&gt;
          found = true;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    doHighlight();&lt;br /&gt;
  }&lt;br /&gt;
  function wireUllekhaLinks() {&lt;br /&gt;
    document.querySelectorAll( &#039;.gr-ullekha-ref-link&#039; ).forEach( function ( wrap ) {&lt;br /&gt;
      var anchor = wrap.getAttribute( &#039;data-anchor&#039; ) || &#039;&#039;;&lt;br /&gt;
      var hl     = wrap.getAttribute( &#039;data-hl&#039; )     || &#039;&#039;;&lt;br /&gt;
      var a = wrap.querySelector( &#039;a&#039; );&lt;br /&gt;
      if ( !a ) return;&lt;br /&gt;
      var base = a.href.split( &#039;#&#039; )[ 0 ];&lt;br /&gt;
      var encoded = encodeURIComponent( hl );&lt;br /&gt;
      a.href = base + ( hl ? &#039;?hlUllekha=&#039; + encoded : &#039;&#039; ) + ( anchor ? &#039;#&#039; + anchor : &#039;&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) { document.addEventListener( &#039;DOMContentLoaded&#039;, function () { highlightOnArrival(); wireUllekhaLinks(); } ); }&lt;br /&gt;
  else { highlightOnArrival(); wireUllekhaLinks(); }&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
/* ── Search result highlight ──────────────────────────────────── */&lt;br /&gt;
/* EXACT REPLACEMENT for the search highlight IIFE in MediaWiki:Common.js.&lt;br /&gt;
 * Only changes from the original working version:&lt;br /&gt;
 *  - Mobile bar: full-width terracotta bottom bar instead of floating pill&lt;br /&gt;
 *  - showDismissBar: guard added (if !count return) to prevent empty bar&lt;br /&gt;
 * Everything else (storeQueryForLink, applyHighlight, wrapMatches) is&lt;br /&gt;
 * identical to the version that was working.&lt;br /&gt;
 */&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
  function storeQueryForLink( url, query ) {&lt;br /&gt;
    try {&lt;br /&gt;
      var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
      a.href = url;&lt;br /&gt;
      sessionStorage.setItem( &#039;gr_search_hl&#039;, JSON.stringify({&lt;br /&gt;
        query:    query,&lt;br /&gt;
        pathname: a.pathname&lt;br /&gt;
      }) );&lt;br /&gt;
    } catch(e) {}&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function applyHighlight() {&lt;br /&gt;
    var stored;&lt;br /&gt;
    try {&lt;br /&gt;
      stored = JSON.parse( sessionStorage.getItem( &#039;gr_search_hl&#039; ) || &#039;null&#039; );&lt;br /&gt;
    } catch(e) { return; }&lt;br /&gt;
    if ( !stored || !stored.query ) return;&lt;br /&gt;
&lt;br /&gt;
    var currentPath = window.location.pathname;&lt;br /&gt;
    var storedPath  = stored.pathname || &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
    function normPath(p) { return decodeURIComponent(p).replace(/\/+$/, &#039;&#039;); }&lt;br /&gt;
    if ( storedPath &amp;amp;&amp;amp; normPath(storedPath) !== normPath(currentPath) ) {&lt;br /&gt;
      try { sessionStorage.removeItem( &#039;gr_search_hl&#039; ); } catch(e) {}&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var query = stored.query.trim();&lt;br /&gt;
    if ( !query ) return;&lt;br /&gt;
&lt;br /&gt;
    try { sessionStorage.removeItem( &#039;gr_search_hl&#039; ); } catch(e) {}&lt;br /&gt;
&lt;br /&gt;
    var delays = [ 0, 200, 600 ];&lt;br /&gt;
    delays.forEach( function(ms) {&lt;br /&gt;
      setTimeout( function() {&lt;br /&gt;
        if ( document.querySelector( &#039;.gr-search-hl&#039; ) ) return;&lt;br /&gt;
        highlightText( query );&lt;br /&gt;
      }, ms );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function highlightText( query ) {&lt;br /&gt;
    var content = document.querySelector( &#039;#mw-content-text .mw-parser-output&#039; );&lt;br /&gt;
    if ( !content ) return;&lt;br /&gt;
&lt;br /&gt;
    var raw = query.replace( /^&amp;quot;|&amp;quot;$/g, &#039;&#039; ).trim();&lt;br /&gt;
    if ( !raw ) return;&lt;br /&gt;
&lt;br /&gt;
    var patterns = [];&lt;br /&gt;
    patterns.push( escapeRegex( raw ) );&lt;br /&gt;
    raw.split( /\s+/ ).forEach( function(w) {&lt;br /&gt;
      if ( w.length &amp;gt;= 2 ) patterns.push( escapeRegex( w ) );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    var matched = false;&lt;br /&gt;
    for ( var pi = 0; pi &amp;lt; patterns.length; pi++ ) {&lt;br /&gt;
      var re;&lt;br /&gt;
      try { re = new RegExp( &#039;(&#039; + patterns[pi] + &#039;)&#039;, &#039;gi&#039; ); }&lt;br /&gt;
      catch(e) { continue; }&lt;br /&gt;
      var count = wrapMatches( content, re );&lt;br /&gt;
      if ( count &amp;gt; 0 ) { matched = true; break; }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ( !matched ) return;&lt;br /&gt;
&lt;br /&gt;
    var first = document.querySelector( &#039;.gr-search-hl&#039; );&lt;br /&gt;
    if ( first ) {&lt;br /&gt;
      first.scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; });&lt;br /&gt;
      first.classList.add( &#039;gr-search-hl-pulse&#039; );&lt;br /&gt;
      setTimeout( function() { first.classList.remove( &#039;gr-search-hl-pulse&#039; ); }, 2000 );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    showDismissBar( query );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function escapeRegex( s ) {&lt;br /&gt;
    return s.replace( /[.*+?^${}()|[\]\\]/g, &#039;\\$&amp;amp;&#039; );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function wrapMatches( root, re ) {&lt;br /&gt;
    var count = 0;&lt;br /&gt;
    var walker = document.createTreeWalker(&lt;br /&gt;
      root, NodeFilter.SHOW_TEXT, {&lt;br /&gt;
        acceptNode: function( node ) {&lt;br /&gt;
          var p = node.parentElement;&lt;br /&gt;
          if ( !p ) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
          var tag = p.tagName.toUpperCase();&lt;br /&gt;
          if ( tag === &#039;SCRIPT&#039; || tag === &#039;STYLE&#039; || tag === &#039;NOSCRIPT&#039; ) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
          if ( p.classList.contains( &#039;gr-search-hl&#039; ) ) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
          return NodeFilter.FILTER_ACCEPT;&lt;br /&gt;
        }&lt;br /&gt;
      }, false&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    var nodes = [];&lt;br /&gt;
    var node;&lt;br /&gt;
    while ( ( node = walker.nextNode() ) ) nodes.push( node );&lt;br /&gt;
&lt;br /&gt;
    nodes.forEach( function( textNode ) {&lt;br /&gt;
      var val = textNode.nodeValue;&lt;br /&gt;
      if ( !re.test( val ) ) return;&lt;br /&gt;
      re.lastIndex = 0;&lt;br /&gt;
&lt;br /&gt;
      var frag = document.createDocumentFragment();&lt;br /&gt;
      var last = 0;&lt;br /&gt;
      var m;&lt;br /&gt;
      while ( ( m = re.exec( val ) ) !== null ) {&lt;br /&gt;
        if ( m.index &amp;gt; last ) {&lt;br /&gt;
          frag.appendChild( document.createTextNode( val.slice( last, m.index ) ) );&lt;br /&gt;
        }&lt;br /&gt;
        var span = document.createElement( &#039;span&#039; );&lt;br /&gt;
        span.className = &#039;gr-search-hl&#039;;&lt;br /&gt;
        span.textContent = m[0];&lt;br /&gt;
        frag.appendChild( span );&lt;br /&gt;
        last = m.index + m[0].length;&lt;br /&gt;
        count++;&lt;br /&gt;
      }&lt;br /&gt;
      if ( last &amp;lt; val.length ) {&lt;br /&gt;
        frag.appendChild( document.createTextNode( val.slice( last ) ) );&lt;br /&gt;
      }&lt;br /&gt;
      textNode.parentNode.replaceChild( frag, textNode );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    return count;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function showDismissBar( query ) {&lt;br /&gt;
    var existing = document.getElementById( &#039;gr-hl-bar&#039; );&lt;br /&gt;
    if ( existing ) existing.remove();&lt;br /&gt;
&lt;br /&gt;
    var count = document.querySelectorAll( &#039;.gr-search-hl&#039; ).length;&lt;br /&gt;
    if ( !count ) return;&lt;br /&gt;
&lt;br /&gt;
    var isMob = window.innerWidth &amp;lt; 768 || !!document.getElementById( &#039;mw-mf-viewport&#039; );&lt;br /&gt;
    var bar = document.createElement( &#039;div&#039; );&lt;br /&gt;
    bar.id = &#039;gr-hl-bar&#039;;&lt;br /&gt;
&lt;br /&gt;
    if ( isMob ) {&lt;br /&gt;
      bar.style.cssText = [&lt;br /&gt;
        &#039;position:fixed&#039;, &#039;bottom:0&#039;, &#039;left:0&#039;, &#039;right:0&#039;,&lt;br /&gt;
        &#039;z-index:10200&#039;, &#039;background:#b5451b&#039;, &#039;color:#fff&#039;,&lt;br /&gt;
        &#039;padding:0&#039;, &#039;display:flex&#039;, &#039;align-items:stretch&#039;,&lt;br /&gt;
        &#039;font-family:system-ui,sans-serif&#039;,&lt;br /&gt;
        &#039;box-shadow:0 -2px 12px rgba(0,0,0,0.25)&#039;, &#039;height:56px&#039;&lt;br /&gt;
      ].join(&#039;;&#039;);&lt;br /&gt;
&lt;br /&gt;
      var mbs = &#039;flex:1;display:flex;flex-direction:column;align-items:center;&#039; +&lt;br /&gt;
        &#039;justify-content:center;background:none;border:none;color:#fff;cursor:pointer;&#039; +&lt;br /&gt;
        &#039;padding:6px 4px;font-family:system-ui,sans-serif;font-size:11px;font-weight:500;&#039; +&lt;br /&gt;
        &#039;gap:3px;-webkit-tap-highlight-color:rgba(0,0,0,0.12);&#039;;&lt;br /&gt;
&lt;br /&gt;
      bar.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-prev&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;polyline points=&amp;quot;15 18 9 12 15 6&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;Prev&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-next&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;polyline points=&amp;quot;9 18 15 12 9 6&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;Next&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-results&amp;quot; style=&amp;quot;&#039; + mbs + &#039;flex:1.6;border-left:1px solid rgba(255,255,255,0.2);border-right:1px solid rgba(255,255,255,0.2);&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;circle cx=&amp;quot;11&amp;quot; cy=&amp;quot;11&amp;quot; r=&amp;quot;7&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;16.5&amp;quot; y1=&amp;quot;16.5&amp;quot; x2=&amp;quot;22&amp;quot; y2=&amp;quot;22&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;&#039; + count + &#039; match&#039; + (count===1?&#039;&#039;:&#039;es&#039;) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-dismiss&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;line x1=&amp;quot;18&amp;quot; y1=&amp;quot;6&amp;quot; x2=&amp;quot;6&amp;quot; y2=&amp;quot;18&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;6&amp;quot; y1=&amp;quot;6&amp;quot; x2=&amp;quot;18&amp;quot; y2=&amp;quot;18&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;Close&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
    } else {&lt;br /&gt;
      bar.style.cssText = [&lt;br /&gt;
        &#039;position:fixed&#039;, &#039;bottom:0&#039;, &#039;left:0&#039;, &#039;right:0&#039;, &#039;z-index:10200&#039;,&lt;br /&gt;
        &#039;background:#b5451b&#039;, &#039;color:#fff&#039;, &#039;padding:10px 16px&#039;,&lt;br /&gt;
        &#039;display:flex&#039;, &#039;align-items:center&#039;, &#039;justify-content:space-between&#039;,&lt;br /&gt;
        &#039;font-family:system-ui,sans-serif&#039;, &#039;font-size:14px&#039;,&lt;br /&gt;
        &#039;box-shadow:0 -2px 8px rgba(0,0,0,0.2)&#039;&lt;br /&gt;
      ].join(&#039;;&#039;);&lt;br /&gt;
&lt;br /&gt;
      var nav = document.createElement( &#039;div&#039; );&lt;br /&gt;
      nav.style.cssText = &#039;display:flex;align-items:center;gap:12px;&#039;;&lt;br /&gt;
      nav.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;🔍 &amp;lt;strong&amp;gt;&#039; + escHtml(query) + &#039;&amp;lt;/strong&amp;gt; — &#039; + count + &#039; match&#039; + (count===1?&#039;&#039;:&#039;es&#039;) + &#039;&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-prev&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;↑ Prev&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-next&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;↓ Next&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-results&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;← Results&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
      bar.appendChild( nav );&lt;br /&gt;
&lt;br /&gt;
      var db = document.createElement( &#039;button&#039; );&lt;br /&gt;
      db.id = &#039;gr-hl-dismiss&#039;; db.textContent = &#039;✕ Close&#039;;&lt;br /&gt;
      db.style.cssText = &#039;background:rgba(255,255,255,0.15);border:none;color:#fff;padding:4px 12px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&#039;;&lt;br /&gt;
      bar.appendChild( db );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    document.body.appendChild( bar );&lt;br /&gt;
&lt;br /&gt;
    var hlEls = Array.from( document.querySelectorAll( &#039;.gr-search-hl&#039; ) );&lt;br /&gt;
    var current = 0;&lt;br /&gt;
&lt;br /&gt;
    function goTo( idx ) {&lt;br /&gt;
      hlEls.forEach( function(el) { el.classList.remove( &#039;gr-search-hl-current&#039; ); } );&lt;br /&gt;
      current = ( ( idx % hlEls.length ) + hlEls.length ) % hlEls.length;&lt;br /&gt;
      hlEls[ current ].classList.add( &#039;gr-search-hl-current&#039; );&lt;br /&gt;
      hlEls[ current ].scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function dismiss() { clearHighlights(); bar.remove(); }&lt;br /&gt;
&lt;br /&gt;
    var nb = document.getElementById( &#039;gr-hl-next&#039; );&lt;br /&gt;
    var pb = document.getElementById( &#039;gr-hl-prev&#039; );&lt;br /&gt;
    var rb = document.getElementById( &#039;gr-hl-results&#039; );&lt;br /&gt;
    var db2 = document.getElementById( &#039;gr-hl-dismiss&#039; );&lt;br /&gt;
    if ( nb ) nb.onclick = function() { goTo( current + 1 ); };&lt;br /&gt;
    if ( pb ) pb.onclick = function() { goTo( current - 1 ); };&lt;br /&gt;
    if ( db2 ) db2.onclick = dismiss;&lt;br /&gt;
    if ( rb ) rb.onclick = function() {&lt;br /&gt;
      bar.remove(); clearHighlights();&lt;br /&gt;
      if ( window.showSearchDialog ) window.showSearchDialog( query );&lt;br /&gt;
    };&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function clearHighlights() {&lt;br /&gt;
    document.querySelectorAll( &#039;.gr-search-hl&#039; ).forEach( function( span ) {&lt;br /&gt;
      var p = span.parentNode; if ( !p ) return;&lt;br /&gt;
      while ( span.firstChild ) p.insertBefore( span.firstChild, span );&lt;br /&gt;
      p.removeChild( span );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function escHtml( s ) {&lt;br /&gt;
    return String(s).replace(/&amp;amp;/g,&#039;&amp;amp;amp;&#039;).replace(/&amp;lt;/g,&#039;&amp;amp;lt;&#039;).replace(/&amp;gt;/g,&#039;&amp;amp;gt;&#039;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function injectHighlightCSS() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-hl-css&#039; ) ) return;&lt;br /&gt;
    var s = document.createElement( &#039;style&#039; );&lt;br /&gt;
    s.id = &#039;gr-hl-css&#039;;&lt;br /&gt;
    s.textContent = [&lt;br /&gt;
      &#039;.gr-search-hl{background:#fff176;color:#1a1a1a;border-radius:2px;padding:0 1px;box-shadow:0 0 0 1px rgba(181,69,27,0.25);}&#039;,&lt;br /&gt;
      &#039;.gr-search-hl-current{background:#ffb300!important;box-shadow:0 0 0 2px #b5451b!important;}&#039;,&lt;br /&gt;
      &#039;@keyframes gr-hl-pulse{0%{background:#ffb300;}50%{background:#fff176;}100%{background:#fff176;}}&#039;,&lt;br /&gt;
      &#039;.gr-search-hl-pulse{animation:gr-hl-pulse 1.2s ease 2;}&#039;,&lt;br /&gt;
    ].join(&#039;&#039;);&lt;br /&gt;
    document.head.appendChild( s );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  injectHighlightCSS();&lt;br /&gt;
&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) {&lt;br /&gt;
    document.addEventListener( &#039;DOMContentLoaded&#039;, applyHighlight );&lt;br /&gt;
  } else {&lt;br /&gt;
    applyHighlight();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ( window.mw ) {&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function() {&lt;br /&gt;
      setTimeout( applyHighlight, 100 );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  window.grStoreSearchHL = storeQueryForLink;&lt;br /&gt;
&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
/* ═══════════════════════════════════════════════════════════════&lt;br /&gt;
   Mobile addon — only runs on Minerva (mobile) skin&lt;br /&gt;
   ═══════════════════════════════════════════════════════════════ */&lt;br /&gt;
( function () {&lt;br /&gt;
  if ( !document.body.classList.contains( &#039;skin-minerva&#039; ) ) return;&lt;br /&gt;
  function injectCSS() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-mob-css&#039; ) ) return;&lt;br /&gt;
    var s = document.createElement( &#039;style&#039; );&lt;br /&gt;
    s.id = &#039;gr-mob-css&#039;;&lt;br /&gt;
    s.textContent =&lt;br /&gt;
      &#039;body,#mw-mf-viewport,#mw-mf-page-center{padding-top:0!important;margin-top:0!important;}&#039; +&lt;br /&gt;
      &#039;html,body,#mw-mf-viewport,#mw-mf-page-center{overflow-x:hidden!important;max-width:100vw!important;}&#039; +&lt;br /&gt;
      &#039;header.header-container{background:#b5451b!important;position:sticky!important;top:0!important;z-index:300!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header{background:#b5451b!important;min-height:54px!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header .search-toggle,.minerva-header .minerva-user-notifications{display:none!important;}&#039; +&lt;br /&gt;
      &#039;.branding-box a{display:flex!important;align-items:center!important;text-decoration:none!important;max-width:calc(100vw - 80px)!important;}&#039; +&lt;br /&gt;
      &#039;.branding-box a::before{content:&amp;quot;&amp;quot;;display:block;width:30px;height:30px;flex-shrink:0;background:url(&amp;quot;/favicon.png&amp;quot;) center/contain no-repeat;margin-right:8px;}&#039; +&lt;br /&gt;
      &#039;.branding-box a span{color:#fff!important;font-size:16px!important;font-weight:700!important;font-family:system-ui,sans-serif!important;line-height:1.2!important;flex:1 1 auto!important;min-width:0!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header svg path,.minerva-header svg rect,.minerva-header svg circle{fill:#fff!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header label{color:#fff!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-tabs,.mw-portlet-associated-pages,.page-actions-menu,#page-secondary-actions,.last-modified-bar,.minerva-anon-talk-link{display:none!important;}&#039; +&lt;br /&gt;
      &#039;#gr-mob-menu-items{display:block!important;}&#039; +&lt;br /&gt;
      &#039;.mw-footer.minerva-footer,.footer-places,.footer-info,.minerva-footer-logo,#footer-places-about,#footer-places-disclaimers,#footer-places-privacy{display:none!important;}&#039; +&lt;br /&gt;
      &#039;#gr-static-bar{position:sticky!important;top:54px!important;z-index:200!important;}&#039; +&lt;br /&gt;
      &#039;.mf-section-0,.mf-section-1,.mf-section-2,.mf-section-3,.mf-section-4,.mf-section-5,.mf-section-6,.mf-section-7,.mf-section-8,.mf-section-9,.mf-section-10{display:block!important;visibility:visible!important;}&#039; +&lt;br /&gt;
      &#039;.collapsible-block{display:block!important;}&#039; +&lt;br /&gt;
      &#039;.section-heading .indicator,.collapsible-heading .indicator{display:none!important;}&#039; +&lt;br /&gt;
      &#039;.section-heading,.collapsible-heading{pointer-events:none!important;}&#039; +&lt;br /&gt;
      &#039;.gr-home-grid{flex-direction:column!important;flex-wrap:nowrap!important;gap:12px!important;width:100%!important;}&#039; +&lt;br /&gt;
      &#039;.gr-home-card{width:100%!important;max-width:100%!important;min-width:unset!important;box-sizing:border-box!important;flex:none!important;}&#039; +&lt;br /&gt;
      &#039;.gr-home-toggle{flex-wrap:wrap!important;}&#039; +&lt;br /&gt;
      &#039;.mw-parser-output{font-size:18px!important;line-height:1.8!important;}&#039; +&lt;br /&gt;
      &#039;.mw-parser-output h2,.mw-parser-output h3{width:100%!important;}&#039; +&lt;br /&gt;
      &#039;.bhashyam-block{margin-left:8px!important;}&#039; +&lt;br /&gt;
      &#039;#footer,.mw-footer,.catlinks,#catlinks{display:none!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-panel{position:fixed!important;top:0!important;left:0!important;bottom:0!important;width:82vw!important;max-width:340px!important;background:#fff!important;z-index:10400!important;box-shadow:4px 0 28px rgba(0,0,0,0.22)!important;overflow-y:auto!important;padding:0 0 40px!important;transform:translateX(-110%)!important;transition:transform 0.26s cubic-bezier(0.4,0,0.2,1)!important;display:block!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-panel.open{transform:translateX(0)!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-backdrop{display:none!important;position:fixed!important;inset:0!important;background:rgba(0,0,0,0.4)!important;z-index:10399!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-backdrop.open{display:block!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-header{position:sticky!important;top:0!important;background:#fff!important;display:flex!important;align-items:center!important;justify-content:space-between!important;padding:16px 16px 12px!important;border-bottom:1px solid #f0ebe6!important;z-index:1!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-title{font-size:13px!important;font-weight:700!important;text-transform:uppercase!important;letter-spacing:0.08em!important;color:#b5451b!important;font-family:system-ui,sans-serif!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-close{background:none!important;border:none!important;font-size:22px!important;color:#999!important;cursor:pointer!important;padding:4px 8px!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-body{padding:12px 16px!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-body a{display:block!important;font-size:16px!important;line-height:1.6!important;color:#2c1810!important;text-decoration:none!important;padding:8px 0!important;border-bottom:1px solid #f5f0ed!important;}&#039;;&lt;br /&gt;
    document.head.appendChild( s );&lt;br /&gt;
  }&lt;br /&gt;
  function expandSections() {&lt;br /&gt;
    document.querySelectorAll( &#039;[class*=&amp;quot;mf-section-&amp;quot;], .collapsible-block&#039; ).forEach( function ( el ) { el.removeAttribute( &#039;hidden&#039; ); el.style.setProperty( &#039;display&#039;, &#039;block&#039;, &#039;important&#039; ); el.style.setProperty( &#039;visibility&#039;, &#039;visible&#039;, &#039;important&#039; ); el.removeAttribute( &#039;aria-hidden&#039; ); } );&lt;br /&gt;
    document.querySelectorAll( &#039;.section-heading, .collapsible-heading&#039; ).forEach( function ( el ) { el.setAttribute( &#039;aria-expanded&#039;, &#039;true&#039; ); el.style.setProperty( &#039;pointer-events&#039;, &#039;none&#039;, &#039;important&#039; ); } );&lt;br /&gt;
  }&lt;br /&gt;
  function watchSections() {&lt;br /&gt;
    var t = null;&lt;br /&gt;
    var obs = new MutationObserver( function ( ms ) { if ( ms.some( function(m){ return m.attributeName === &#039;hidden&#039;; } ) ) { clearTimeout(t); t = setTimeout( expandSections, 30 ); } } );&lt;br /&gt;
    obs.observe( document.querySelector( &#039;#mw-content-text&#039; ) || document.body, { subtree:true, attributes:true, attributeFilter:[&#039;hidden&#039;,&#039;aria-hidden&#039;] } );&lt;br /&gt;
  }&lt;br /&gt;
  function watchBodyPadding() {&lt;br /&gt;
    new MutationObserver( function () { if ( document.body.style.paddingTop &amp;amp;&amp;amp; document.body.style.paddingTop !== &#039;0px&#039; ) document.body.style.paddingTop = &#039;&#039;; } ).observe( document.body, { attributes:true, attributeFilter:[&#039;style&#039;] } );&lt;br /&gt;
  }&lt;br /&gt;
  function injectMenuLinks() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-mob-menu-items&#039; ) ) return;&lt;br /&gt;
    var navDrawer = document.querySelector( &#039;.navigation-drawer&#039; );&lt;br /&gt;
    if ( !navDrawer ) return;&lt;br /&gt;
    var wrap = document.createElement( &#039;div&#039; ); wrap.id = &#039;gr-mob-menu-items&#039;; wrap.style.cssText = &#039;width:100%;background:#fff;margin-top:8px;&#039;;&lt;br /&gt;
    var itemStyle = &#039;display:flex;align-items:center;gap:14px;padding:15px 20px;font-size:16px;color:#2c1810;text-decoration:none;font-family:system-ui,sans-serif;border-bottom:1px solid #f0ebe6;background:#fff;&#039;;&lt;br /&gt;
    function makeItem( href, label ) { var a = document.createElement( &#039;a&#039; ); a.href = href; a.style.cssText = itemStyle; a.innerHTML = &#039;&amp;lt;span&amp;gt;&#039; + label + &#039;&amp;lt;/span&amp;gt;&#039;; return a; }&lt;br /&gt;
    wrap.appendChild( makeItem( &#039;/Main_Page&#039;, &#039;Home&#039; ) );&lt;br /&gt;
    wrap.appendChild( makeItem( &#039;/My_wiki:Help&#039;, &#039;Help&#039; ) );&lt;br /&gt;
    wrap.appendChild( makeItem( &#039;/My_wiki:About&#039;, &#039;About&#039; ) );&lt;br /&gt;
    var userName = window.mw ? mw.config.get( &#039;wgUserName&#039; ) : null;&lt;br /&gt;
    if ( userName ) {&lt;br /&gt;
      wrap.appendChild( makeItem( ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) ? mw.util.getUrl( &#039;Special:Profile&#039; ) : &#039;/Special:Profile&#039;, &#039;Profile&#039; ) );&lt;br /&gt;
      var la = document.querySelector( &#039;a[href*=&amp;quot;action=logout&amp;quot;]&#039; );&lt;br /&gt;
      wrap.appendChild( makeItem( la ? la.href : &#039;/index.php?title=Special:UserLogout&#039;, &#039;Log out&#039; ) );&lt;br /&gt;
    }&lt;br /&gt;
    else wrap.appendChild( makeItem( &#039;/index.php?title=Special:UserLogin&#039;, &#039;Log in&#039; ) );&lt;br /&gt;
    var pageLeft = document.getElementById( &#039;mw-mf-page-left&#039; );&lt;br /&gt;
    if ( pageLeft ) { while ( pageLeft.firstChild ) pageLeft.removeChild( pageLeft.firstChild ); pageLeft.style.removeProperty( &#039;display&#039; ); pageLeft.appendChild( wrap ); }&lt;br /&gt;
    else navDrawer.appendChild( wrap );&lt;br /&gt;
  }&lt;br /&gt;
  var _tocDone = false;&lt;br /&gt;
  function initToc() {&lt;br /&gt;
    if ( _tocDone ) return;&lt;br /&gt;
    var tocList = document.querySelector( &#039;.vector-toc-contents, .vector-toc .vector-toc-list&#039; );&lt;br /&gt;
    if ( !tocList || !tocList.querySelector( &#039;li&#039; ) ) return;&lt;br /&gt;
    _tocDone = true;&lt;br /&gt;
    var bd = document.createElement( &#039;div&#039; ); bd.className = &#039;gr-mob-toc-backdrop&#039;; document.body.appendChild( bd );&lt;br /&gt;
    var panel = document.createElement( &#039;div&#039; ); panel.className = &#039;gr-mob-toc-panel&#039;;&lt;br /&gt;
    var hdr = document.createElement( &#039;div&#039; ); hdr.className = &#039;gr-mob-toc-header&#039;;&lt;br /&gt;
    var ttl = document.createElement( &#039;div&#039; ); ttl.className = &#039;gr-mob-toc-title&#039;; ttl.textContent = &#039;विषयसूची&#039;;&lt;br /&gt;
    var cls = document.createElement( &#039;button&#039; ); cls.className = &#039;gr-mob-toc-close&#039;; cls.textContent = &#039;✕&#039;;&lt;br /&gt;
    hdr.appendChild( ttl ); hdr.appendChild( cls ); panel.appendChild( hdr );&lt;br /&gt;
    var body = document.createElement( &#039;div&#039; ); body.className = &#039;gr-mob-toc-body&#039;; body.appendChild( tocList.cloneNode( true ) ); panel.appendChild( body ); document.body.appendChild( panel );&lt;br /&gt;
    var btn = document.createElement( &#039;button&#039; ); btn.id = &#039;gr-mob-toc-btn&#039;; btn.innerHTML = &#039;☰ &amp;amp;nbsp;Contents&#039;;&lt;br /&gt;
    btn.style.cssText = &#039;position:fixed;bottom:148px;left:16px;z-index:9100;background:#fff;border:1.5px solid #b5451b;border-radius:24px;padding:10px 16px;font-size:15px;font-family:system-ui,sans-serif;color:#b5451b;font-weight:600;box-shadow:0 3px 14px rgba(0,0,0,0.15);cursor:pointer;&#039;;&lt;br /&gt;
    document.body.appendChild( btn );&lt;br /&gt;
    function open()  { panel.classList.add(&#039;open&#039;); bd.classList.add(&#039;open&#039;); document.body.style.overflow=&#039;hidden&#039;; }&lt;br /&gt;
    function close() { panel.classList.remove(&#039;open&#039;); bd.classList.remove(&#039;open&#039;); document.body.style.overflow=&#039;&#039;; }&lt;br /&gt;
    btn.onclick = open; cls.onclick = close; bd.onclick = close;&lt;br /&gt;
    body.querySelectorAll(&#039;a&#039;).forEach(function(a){ a.onclick = close; });&lt;br /&gt;
  }&lt;br /&gt;
  function injectMoolaUllekhaLinks() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-mob-doc-nav&#039; ) ) return;&lt;br /&gt;
    var pageName = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039; ) ) || &#039;&#039;;&lt;br /&gt;
    if ( pageName === &#039;Main_Page&#039; || !pageName ) return;&lt;br /&gt;
    function wikiUrl( slug ) { if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( slug ); return ( ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039; ).replace( &#039;$1&#039;, encodeURIComponent( slug ).replace( /%2F/g, &#039;/&#039; ) ); }&lt;br /&gt;
    var teekaPage = document.querySelector( &#039;.gr-teeka-page&#039; );&lt;br /&gt;
    var primarySlug = teekaPage ? ( teekaPage.getAttribute( &#039;data-primary&#039; ) || pageName.split(&#039;/&#039;)[0] ) : pageName.split(&#039;/&#039;)[0];&lt;br /&gt;
    var docTitleEl = document.querySelector( &#039;.gr-doc-title&#039; );&lt;br /&gt;
    var hasMoolaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-moola&#039; ) === &#039;1&#039;;&lt;br /&gt;
    var hasUllekhaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-ullekha&#039; ) === &#039;1&#039;;&lt;br /&gt;
    var showMoolam = !!teekaPage || hasMoolaPage, showUllekha = hasUllekhaPage || !!teekaPage;&lt;br /&gt;
    if ( !showMoolam &amp;amp;&amp;amp; !showUllekha ) return;&lt;br /&gt;
    var nav = document.createElement( &#039;div&#039; ); nav.id = &#039;gr-mob-doc-nav&#039;;&lt;br /&gt;
    nav.style.cssText = &#039;display:flex;gap:10px;padding:10px 16px 8px;background:#fdf8f5;border-bottom:1px solid #f0e0d6;font-family:system-ui,sans-serif;&#039;;&lt;br /&gt;
    function makeLink( href, label ) { var a = document.createElement( &#039;a&#039; ); a.href = href; a.textContent = label; a.style.cssText = &#039;display:inline-flex;align-items:center;padding:5px 16px;border-radius:20px;background:#fff;border:1.5px solid #e8cfc4;color:#b5451b;font-size:14px;font-weight:600;text-decoration:none;&#039;; return a; }&lt;br /&gt;
    if ( teekaPage ) nav.appendChild( makeLink( wikiUrl( primarySlug ), &#039;मूल&#039; ) );&lt;br /&gt;
    else if ( hasMoolaPage ) nav.appendChild( makeLink( wikiUrl( primarySlug + &#039;/Moola&#039; ), &#039;मूलम्&#039; ) );&lt;br /&gt;
    if ( showUllekha ) nav.appendChild( makeLink( wikiUrl( primarySlug + &#039;/Ullekha&#039; ), &#039;उल्लेख&#039; ) );&lt;br /&gt;
    var h1 = document.getElementById( &#039;firstHeading&#039; ) || document.querySelector( &#039;.page-heading, h1.firstHeading, .mw-first-heading&#039; );&lt;br /&gt;
    if ( h1 &amp;amp;&amp;amp; h1.parentNode ) h1.parentNode.insertBefore( nav, h1.nextSibling );&lt;br /&gt;
    else { var ct = document.getElementById( &#039;mw-content-text&#039; ); if ( ct ) ct.insertBefore( nav, ct.firstChild ); }&lt;br /&gt;
  }&lt;br /&gt;
  injectCSS(); watchBodyPadding();&lt;br /&gt;
  function boot() { expandSections(); watchSections(); injectMenuLinks(); injectMoolaUllekhaLinks(); [100,400,900,1800].forEach(function(ms){ setTimeout(expandSections,ms); }); setTimeout(initToc,700); }&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) document.addEventListener( &#039;DOMContentLoaded&#039;, boot );&lt;br /&gt;
  else boot();&lt;br /&gt;
  if ( window.mw ) mw.hook( &#039;wikipage.content&#039; ).add(function(){ setTimeout(function(){ expandSections(); injectMenuLinks(); injectMoolaUllekhaLinks(); initToc(); },300); });&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
  mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
    setTimeout( function () {&lt;br /&gt;
      var blocks = document.querySelectorAll( &#039;.collapsible-block, .toggle-list&#039; );&lt;br /&gt;
      Array.prototype.forEach.call( blocks, function ( el ) { if ( !el.parentNode ) { try { el.remove(); } catch(e) {} } } );&lt;br /&gt;
    }, 0 );&lt;br /&gt;
  } );&lt;br /&gt;
  if ( mw.config.get( &#039;wgPageName&#039; ) !== &#039;Main_Page&#039; ) return;&lt;br /&gt;
  mw.loader.using( &#039;mediawiki.util&#039; ).done( function () {&lt;br /&gt;
    $( function () { applyHomeToggleOffset(); window.addEventListener( &#039;resize&#039;, applyHomeToggleOffset, { passive: true } ); setTimeout( applyHomeToggleOffset, 300 ); setTimeout( applyHomeToggleOffset, 800 ); } );&lt;br /&gt;
  } );&lt;br /&gt;
  function applyHomeToggleOffset() {&lt;br /&gt;
    var bar = document.getElementById( &#039;gr-static-bar&#039; ); if ( !bar ) return;&lt;br /&gt;
    var barBottom = Math.round( bar.getBoundingClientRect().bottom );&lt;br /&gt;
    [ document.getElementById(&#039;gr-home&#039;), document.getElementById(&#039;gr-home-toggle&#039;), document.querySelector(&#039;#mw-content-text .mw-parser-output &amp;gt; .gr-home, #mw-content-text .mw-parser-output &amp;gt; *:first-child&#039;) ].forEach( function(el){ if(el) el.style.scrollMarginTop=(barBottom+4)+&#039;px&#039;; } );&lt;br /&gt;
    var isMob = window.innerWidth &amp;lt; 768 || !!document.getElementById( &#039;mw-mf-viewport&#039; );&lt;br /&gt;
    if ( isMob ) { var toggleEl = document.getElementById(&#039;gr-home-toggle&#039;); if ( toggleEl ) { var tr = toggleEl.getBoundingClientRect(); if ( tr.top &amp;lt; barBottom ) { var cp = parseInt(window.getComputedStyle(document.body).paddingTop,10)||0; document.body.style.paddingTop=(cp+(barBottom-tr.top)+4)+&#039;px&#039;; } } }&lt;br /&gt;
  }&lt;br /&gt;
  $( function () {&lt;br /&gt;
    var $toggle=$(&#039;#gr-home-toggle&#039;),$viewG=$(&#039;#gr-view-grantha&#039;),$viewA=$(&#039;#gr-view-author&#039;),$btnG=$(&#039;#gr-toggle-grantha&#039;),$btnA=$(&#039;#gr-toggle-author&#039;);&lt;br /&gt;
    if(!$toggle.length||!$viewG.length||!$viewA.length)return; if($toggle.data(&#039;gr-wired&#039;))return; $toggle.data(&#039;gr-wired&#039;,true);&lt;br /&gt;
    function showView(which){ if(which===&#039;grantha&#039;){$viewG.show();$viewA.hide();$btnG.addClass(&#039;gr-toggle-active&#039;);$btnA.removeClass(&#039;gr-toggle-active&#039;);}else{$viewA.show();$viewG.hide();$btnA.addClass(&#039;gr-toggle-active&#039;);$btnG.removeClass(&#039;gr-toggle-active&#039;);} try{localStorage.setItem(&#039;grantha_home_tab&#039;,which);}catch(e){} }&lt;br /&gt;
    $btnG.on(&#039;click keydown&#039;,function(e){if(e.type===&#039;keydown&#039;&amp;amp;&amp;amp;e.key!==&#039;Enter&#039;&amp;amp;&amp;amp;e.key!==&#039; &#039;)return;showView(&#039;grantha&#039;);});&lt;br /&gt;
    $btnA.on(&#039;click keydown&#039;,function(e){if(e.type===&#039;keydown&#039;&amp;amp;&amp;amp;e.key!==&#039;Enter&#039;&amp;amp;&amp;amp;e.key!==&#039; &#039;)return;showView(&#039;author&#039;);});&lt;br /&gt;
    try{var saved=localStorage.getItem(&#039;grantha_home_tab&#039;);if(saved===&#039;author&#039;)showView(&#039;author&#039;);else showView(&#039;grantha&#039;);}catch(e){showView(&#039;grantha&#039;);}&lt;br /&gt;
  } );&lt;br /&gt;
}() );&lt;br /&gt;
// ── Replace MediaWiki user links with a single username dropdown (Profile + Logout) ──&lt;br /&gt;
( function () {&lt;br /&gt;
  function wikiHref( title ) {&lt;br /&gt;
    if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( title );&lt;br /&gt;
    var ap = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
    return ap.replace( &#039;$1&#039;, title );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function buildLogoutForm( token ) {&lt;br /&gt;
    token = token || &#039;&#039;;&lt;br /&gt;
    var esc = String( token ).replace( /&amp;quot;/g, &#039;&amp;amp;quot;&#039; );&lt;br /&gt;
    var script = ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.wikiScript ) ? mw.util.wikiScript() : &#039;/index.php&#039;;&lt;br /&gt;
    var form = document.createElement( &#039;form&#039; );&lt;br /&gt;
    form.method = &#039;post&#039;;&lt;br /&gt;
    form.action = script + &#039;?title=Special:UserLogout&#039;;&lt;br /&gt;
    form.style.display = &#039;none&#039;;&lt;br /&gt;
    form.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;wpEditToken&amp;quot; value=&amp;quot;&#039; + esc + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;title&amp;quot; value=&amp;quot;Special:UserLogout&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;returnto&amp;quot; value=&amp;quot;Main Page&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
    document.body.appendChild( form );&lt;br /&gt;
    return form;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function injectUserDropdown() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-user-dropdown&#039; ) ) return;&lt;br /&gt;
&lt;br /&gt;
    var userName = window.mw ? mw.config.get( &#039;wgUserName&#039; ) : null;&lt;br /&gt;
    var isAnon = !userName || ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgUserId&#039; ) === null );&lt;br /&gt;
&lt;br /&gt;
    var container = document.querySelector( &#039;.vector-user-links-main&#039; )&lt;br /&gt;
                 || document.querySelector( &#039;.vector-user-links&#039; );&lt;br /&gt;
    if ( !container ) return;&lt;br /&gt;
&lt;br /&gt;
    // Logged-out: show a single Login/Signup link, nothing else&lt;br /&gt;
    if ( isAnon ) {&lt;br /&gt;
        // Remove MediaWiki&#039;s native account links so only our button shows&lt;br /&gt;
        [ &#039;#pt-createaccount&#039;, &#039;#pt-login&#039;, &#039;#pt-anoncontribs&#039;,&lt;br /&gt;
          &#039;#pt-anontalk&#039;, &#039;#pt-anonuserpage&#039; ].forEach( function ( sel ) {&lt;br /&gt;
            document.querySelectorAll( sel ).forEach( function ( el ) {&lt;br /&gt;
                if ( el &amp;amp;&amp;amp; el.parentNode ) el.parentNode.removeChild( el );&lt;br /&gt;
            } );&lt;br /&gt;
        } );&lt;br /&gt;
        if ( document.getElementById( &#039;gr-login-link&#039; ) ) return;&lt;br /&gt;
        var loginA = document.createElement( &#039;a&#039; );&lt;br /&gt;
        loginA.id = &#039;gr-login-link&#039;;&lt;br /&gt;
        loginA.href = wikiHref( &#039;Special:UserLogin&#039; );&lt;br /&gt;
        loginA.textContent = &#039;Login/Signup&#039;;&lt;br /&gt;
        loginA.style.cssText = &#039;color:#fff;font-size:0.9em;font-weight:500;&#039; +&lt;br /&gt;
            &#039;text-decoration:none;padding:6px 12px;border-radius:6px;&#039; +&lt;br /&gt;
            &#039;background:rgba(255,255,255,0.12);white-space:nowrap;&#039;;&lt;br /&gt;
        loginA.addEventListener( &#039;mouseover&#039;, function(){ this.style.background=&#039;rgba(255,255,255,0.2)&#039;; } );&lt;br /&gt;
        loginA.addEventListener( &#039;mouseout&#039;,  function(){ this.style.background=&#039;rgba(255,255,255,0.12)&#039;; } );&lt;br /&gt;
        container.appendChild( loginA );&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Logout token (csrf token works for logout in modern MW)&lt;br /&gt;
    var token = ( window.mw &amp;amp;&amp;amp; mw.user &amp;amp;&amp;amp; mw.user.tokens )&lt;br /&gt;
      ? mw.user.tokens.get( &#039;csrfToken&#039; ) : &#039;+\\&#039;;&lt;br /&gt;
&lt;br /&gt;
    var wrap = document.createElement( &#039;div&#039; );&lt;br /&gt;
    wrap.id = &#039;gr-user-dropdown&#039;;&lt;br /&gt;
    wrap.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;button id=&amp;quot;gr-user-trigger&amp;quot; type=&amp;quot;button&amp;quot; aria-haspopup=&amp;quot;true&amp;quot; aria-expanded=&amp;quot;false&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;&#039; + (userName.replace(/&amp;lt;/g,&#039;&amp;amp;lt;&#039;)) + &#039;&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span class=&amp;quot;gr-caret&amp;quot;&amp;gt;▾&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;div id=&amp;quot;gr-user-menu&amp;quot; role=&amp;quot;menu&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;&#039; + wikiHref( &#039;Special:Profile&#039; ) + &#039;&amp;quot; role=&amp;quot;menuitem&amp;quot;&amp;gt;Profile&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;#&amp;quot; id=&amp;quot;gr-logout-link&amp;quot; role=&amp;quot;menuitem&amp;quot;&amp;gt;Log out&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
    container.appendChild( wrap );&lt;br /&gt;
&lt;br /&gt;
    var trigger = document.getElementById( &#039;gr-user-trigger&#039; );&lt;br /&gt;
    var menu    = document.getElementById( &#039;gr-user-menu&#039; );&lt;br /&gt;
&lt;br /&gt;
    trigger.addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      e.stopPropagation();&lt;br /&gt;
      var open = menu.classList.toggle( &#039;gr-open&#039; );&lt;br /&gt;
      trigger.setAttribute( &#039;aria-expanded&#039;, open ? &#039;true&#039; : &#039;false&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    document.addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      if ( !wrap.contains( e.target ) ) {&lt;br /&gt;
        menu.classList.remove( &#039;gr-open&#039; );&lt;br /&gt;
        trigger.setAttribute( &#039;aria-expanded&#039;, &#039;false&#039; );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    document.getElementById( &#039;gr-logout-link&#039; ).addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      e.preventDefault();&lt;br /&gt;
      // Fetch a fresh CSRF token at click time (more reliable than at load time)&lt;br /&gt;
      if ( window.mw &amp;amp;&amp;amp; mw.user &amp;amp;&amp;amp; mw.user.tokens ) {&lt;br /&gt;
        var t = mw.user.tokens.get( &#039;csrfToken&#039; );&lt;br /&gt;
        if ( t ) { buildLogoutForm( t ).submit(); return; }&lt;br /&gt;
      }&lt;br /&gt;
      // Fallback: use the API to get a logout token, then submit&lt;br /&gt;
      if ( window.mw &amp;amp;&amp;amp; mw.Api ) {&lt;br /&gt;
        new mw.Api().postWithToken( &#039;csrf&#039;, { action: &#039;logout&#039; } )&lt;br /&gt;
          .done( function () { location.href = &#039;/Main_Page&#039;; } )&lt;br /&gt;
          .fail( function () { location.href = &#039;/index.php?title=Special:UserLogout&#039;; } );&lt;br /&gt;
      } else {&lt;br /&gt;
        location.href = &#039;/index.php?title=Special:UserLogout&#039;;&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) {&lt;br /&gt;
    document.addEventListener( &#039;DOMContentLoaded&#039;, injectUserDropdown );&lt;br /&gt;
  } else {&lt;br /&gt;
    injectUserDropdown();&lt;br /&gt;
  }&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.js&amp;diff=6208</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.js&amp;diff=6208"/>
		<updated>2026-06-12T06:49:33Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* MediaWiki:Common.js — grantha.io  (v7) */&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
  var LS_SCRIPT_KEY = &#039;grantha_reader_script&#039;;&lt;br /&gt;
  var currentScript = &#039;deva&#039;;&lt;br /&gt;
&lt;br /&gt;
  function devanagariToIAST( text ) {&lt;br /&gt;
    var CONSONANTS = {&lt;br /&gt;
      &#039;क&#039;:&#039;k&#039;,&#039;ख&#039;:&#039;kh&#039;,&#039;ग&#039;:&#039;g&#039;,&#039;घ&#039;:&#039;gh&#039;,&#039;ङ&#039;:&#039;ṅ&#039;,&lt;br /&gt;
      &#039;च&#039;:&#039;c&#039;,&#039;छ&#039;:&#039;ch&#039;,&#039;ज&#039;:&#039;j&#039;,&#039;झ&#039;:&#039;jh&#039;,&#039;ञ&#039;:&#039;ñ&#039;,&lt;br /&gt;
      &#039;ट&#039;:&#039;ṭ&#039;,&#039;ठ&#039;:&#039;ṭh&#039;,&#039;ड&#039;:&#039;ḍ&#039;,&#039;ढ&#039;:&#039;ḍh&#039;,&#039;ण&#039;:&#039;ṇ&#039;,&lt;br /&gt;
      &#039;त&#039;:&#039;t&#039;,&#039;थ&#039;:&#039;th&#039;,&#039;द&#039;:&#039;d&#039;,&#039;ध&#039;:&#039;dh&#039;,&#039;न&#039;:&#039;n&#039;,&lt;br /&gt;
      &#039;प&#039;:&#039;p&#039;,&#039;फ&#039;:&#039;ph&#039;,&#039;ब&#039;:&#039;b&#039;,&#039;भ&#039;:&#039;bh&#039;,&#039;म&#039;:&#039;m&#039;,&lt;br /&gt;
      &#039;य&#039;:&#039;y&#039;,&#039;र&#039;:&#039;r&#039;,&#039;ल&#039;:&#039;l&#039;,&#039;ळ&#039;:&#039;ḷ&#039;,&#039;व&#039;:&#039;v&#039;,&lt;br /&gt;
      &#039;श&#039;:&#039;ś&#039;,&#039;ष&#039;:&#039;ṣ&#039;,&#039;स&#039;:&#039;s&#039;,&#039;ह&#039;:&#039;h&#039;&lt;br /&gt;
    };&lt;br /&gt;
    var DIACRITICS = {&lt;br /&gt;
      &#039;ा&#039;:&#039;ā&#039;,&#039;ि&#039;:&#039;i&#039;,&#039;ी&#039;:&#039;ī&#039;,&#039;ु&#039;:&#039;u&#039;,&#039;ू&#039;:&#039;ū&#039;,&lt;br /&gt;
      &#039;ृ&#039;:&#039;ṛ&#039;,&#039;ॄ&#039;:&#039;ṝ&#039;,&#039;े&#039;:&#039;e&#039;,&#039;ै&#039;:&#039;ai&#039;,&#039;ो&#039;:&#039;o&#039;,&#039;ौ&#039;:&#039;au&#039;&lt;br /&gt;
    };&lt;br /&gt;
    var VOWELS = {&lt;br /&gt;
      &#039;अ&#039;:&#039;a&#039;,&#039;आ&#039;:&#039;ā&#039;,&#039;इ&#039;:&#039;i&#039;,&#039;ई&#039;:&#039;ī&#039;,&#039;उ&#039;:&#039;u&#039;,&#039;ऊ&#039;:&#039;ū&#039;,&lt;br /&gt;
      &#039;ऋ&#039;:&#039;ṛ&#039;,&#039;ॠ&#039;:&#039;ṝ&#039;,&#039;ए&#039;:&#039;e&#039;,&#039;ऐ&#039;:&#039;ai&#039;,&#039;ओ&#039;:&#039;o&#039;,&#039;औ&#039;:&#039;au&#039;,&#039;ऽ&#039;:&amp;quot;&#039;&amp;quot;&lt;br /&gt;
    };&lt;br /&gt;
    var MISC = {&lt;br /&gt;
      &#039;ं&#039;:&#039;ṃ&#039;,&#039;ः&#039;:&#039;ḥ&#039;,&#039;ँ&#039;:&#039;m̐&#039;,&#039;ॐ&#039;:&#039;oṃ&#039;,&lt;br /&gt;
      &#039;०&#039;:&#039;0&#039;,&#039;१&#039;:&#039;1&#039;,&#039;२&#039;:&#039;2&#039;,&#039;३&#039;:&#039;3&#039;,&#039;४&#039;:&#039;4&#039;,&lt;br /&gt;
      &#039;५&#039;:&#039;5&#039;,&#039;६&#039;:&#039;6&#039;,&#039;७&#039;:&#039;7&#039;,&#039;८&#039;:&#039;8&#039;,&#039;९&#039;:&#039;9&#039;&lt;br /&gt;
    };&lt;br /&gt;
    var HALANTA = &#039;्&#039;;&lt;br /&gt;
    var chars = Array.from( text );&lt;br /&gt;
    var result = &#039;&#039;;&lt;br /&gt;
    var i = 0;&lt;br /&gt;
    while ( i &amp;lt; chars.length ) {&lt;br /&gt;
      var ch   = chars[ i ];&lt;br /&gt;
      var next = chars[ i + 1 ];&lt;br /&gt;
      if ( CONSONANTS[ ch ] ) {&lt;br /&gt;
        var base = CONSONANTS[ ch ];&lt;br /&gt;
        if ( next === HALANTA )          { result += base;               i += 2; }&lt;br /&gt;
        else if ( DIACRITICS[ next ] )   { result += base + DIACRITICS[ next ]; i += 2; }&lt;br /&gt;
        else if ( next === &#039;ं&#039; || next === &#039;ः&#039; ) { result += base + &#039;a&#039; + MISC[ next ]; i += 2; }&lt;br /&gt;
        else                             { result += base + &#039;a&#039;;         i++;    }&lt;br /&gt;
      } else if ( VOWELS[ ch ] )         { result += VOWELS[ ch ];       i++; }&lt;br /&gt;
      else if ( DIACRITICS[ ch ] )       { result += DIACRITICS[ ch ];   i++; }&lt;br /&gt;
      else if ( MISC[ ch ] )             { result += MISC[ ch ];         i++; }&lt;br /&gt;
      else                               { result += ch;                 i++; }&lt;br /&gt;
    }&lt;br /&gt;
    return result;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var SCRIPT_MAP = {&lt;br /&gt;
    kn: {&lt;br /&gt;
      &#039;अ&#039;:&#039;ಅ&#039;,&#039;आ&#039;:&#039;ಆ&#039;,&#039;इ&#039;:&#039;ಇ&#039;,&#039;ई&#039;:&#039;ಈ&#039;,&#039;उ&#039;:&#039;ಉ&#039;,&#039;ऊ&#039;:&#039;ಊ&#039;,&#039;ऋ&#039;:&#039;ಋ&#039;,&lt;br /&gt;
      &#039;ए&#039;:&#039;ಏ&#039;,&#039;ऐ&#039;:&#039;ಐ&#039;,&#039;ओ&#039;:&#039;ಓ&#039;,&#039;औ&#039;:&#039;ಔ&#039;,&#039;ऽ&#039;:&#039;ಽ&#039;,&lt;br /&gt;
      &#039;क&#039;:&#039;ಕ&#039;,&#039;ख&#039;:&#039;ಖ&#039;,&#039;ग&#039;:&#039;ಗ&#039;,&#039;घ&#039;:&#039;ಘ&#039;,&#039;ङ&#039;:&#039;ಙ&#039;,&lt;br /&gt;
      &#039;च&#039;:&#039;ಚ&#039;,&#039;छ&#039;:&#039;ಛ&#039;,&#039;ज&#039;:&#039;ಜ&#039;,&#039;झ&#039;:&#039;ಝ&#039;,&#039;ञ&#039;:&#039;ಞ&#039;,&lt;br /&gt;
      &#039;ट&#039;:&#039;ಟ&#039;,&#039;ठ&#039;:&#039;ಠ&#039;,&#039;ड&#039;:&#039;ಡ&#039;,&#039;ढ&#039;:&#039;ಢ&#039;,&#039;ण&#039;:&#039;ಣ&#039;,&lt;br /&gt;
      &#039;त&#039;:&#039;ತ&#039;,&#039;थ&#039;:&#039;ಥ&#039;,&#039;द&#039;:&#039;ದ&#039;,&#039;ध&#039;:&#039;ಧ&#039;,&#039;न&#039;:&#039;ನ&#039;,&lt;br /&gt;
      &#039;प&#039;:&#039;ಪ&#039;,&#039;फ&#039;:&#039;ಫ&#039;,&#039;ब&#039;:&#039;ಬ&#039;,&#039;भ&#039;:&#039;ಭ&#039;,&#039;म&#039;:&#039;ಮ&#039;,&lt;br /&gt;
      &#039;य&#039;:&#039;ಯ&#039;,&#039;र&#039;:&#039;ರ&#039;,&#039;ल&#039;:&#039;ಲ&#039;,&#039;व&#039;:&#039;ವ&#039;,&lt;br /&gt;
      &#039;श&#039;:&#039;ಶ&#039;,&#039;ष&#039;:&#039;ಷ&#039;,&#039;स&#039;:&#039;ಸ&#039;,&#039;ह&#039;:&#039;ಹ&#039;,&lt;br /&gt;
      &#039;ा&#039;:&#039;ಾ&#039;,&#039;ि&#039;:&#039;ಿ&#039;,&#039;ी&#039;:&#039;ೀ&#039;,&#039;ु&#039;:&#039;ು&#039;,&#039;ू&#039;:&#039;ೂ&#039;,&lt;br /&gt;
      &#039;ृ&#039;:&#039;ೃ&#039;,&#039;े&#039;:&#039;ೇ&#039;,&#039;ै&#039;:&#039;ೈ&#039;,&#039;ो&#039;:&#039;ೋ&#039;,&#039;ौ&#039;:&#039;ೌ&#039;,&lt;br /&gt;
      &#039;ं&#039;:&#039;ಂ&#039;,&#039;ः&#039;:&#039;ಃ&#039;,&#039;्&#039;:&#039;್&#039;,&lt;br /&gt;
      &#039;०&#039;:&#039;೦&#039;,&#039;१&#039;:&#039;೧&#039;,&#039;२&#039;:&#039;೨&#039;,&#039;३&#039;:&#039;೩&#039;,&#039;४&#039;:&#039;೪&#039;,&lt;br /&gt;
      &#039;५&#039;:&#039;೫&#039;,&#039;६&#039;:&#039;೬&#039;,&#039;७&#039;:&#039;೭&#039;,&#039;८&#039;:&#039;೮&#039;,&#039;९&#039;:&#039;೯&#039;&lt;br /&gt;
    },&lt;br /&gt;
    ta: {&lt;br /&gt;
      &#039;अ&#039;:&#039;அ&#039;,&#039;आ&#039;:&#039;ஆ&#039;,&#039;इ&#039;:&#039;இ&#039;,&#039;ई&#039;:&#039;ஈ&#039;,&#039;उ&#039;:&#039;உ&#039;,&#039;ऊ&#039;:&#039;ஊ&#039;,&lt;br /&gt;
      &#039;ऋ&#039;:&#039;ரு&#039;,&#039;ॠ&#039;:&#039;ரூ&#039;,&lt;br /&gt;
      &#039;ए&#039;:&#039;ஏ&#039;,&#039;ऐ&#039;:&#039;ஐ&#039;,&#039;ओ&#039;:&#039;ஓ&#039;,&#039;औ&#039;:&#039;ஔ&#039;,&lt;br /&gt;
      &#039;क&#039;:&#039;க&#039;,&#039;ख&#039;:&#039;க&#039;,&#039;ग&#039;:&#039;க&#039;,&#039;घ&#039;:&#039;க&#039;,&#039;ङ&#039;:&#039;ங&#039;,&lt;br /&gt;
      &#039;च&#039;:&#039;ச&#039;,&#039;छ&#039;:&#039;ச&#039;,&#039;ज&#039;:&#039;ஜ&#039;,&#039;झ&#039;:&#039;ஜ&#039;,&#039;ञ&#039;:&#039;ஞ&#039;,&lt;br /&gt;
      &#039;ட&#039;:&#039;ட&#039;,&#039;ठ&#039;:&#039;ட&#039;,&#039;ड&#039;:&#039;ட&#039;,&#039;ढ&#039;:&#039;ட&#039;,&#039;ண&#039;:&#039;ண&#039;,&lt;br /&gt;
      &#039;त&#039;:&#039;த&#039;,&#039;थ&#039;:&#039;த&#039;,&#039;द&#039;:&#039;த&#039;,&#039;ध&#039;:&#039;த&#039;,&#039;न&#039;:&#039;ந&#039;,&lt;br /&gt;
      &#039;प&#039;:&#039;ப&#039;,&#039;फ&#039;:&#039;ப&#039;,&#039;ब&#039;:&#039;ப&#039;,&#039;भ&#039;:&#039;ப&#039;,&#039;म&#039;:&#039;ம&#039;,&lt;br /&gt;
      &#039;य&#039;:&#039;ய&#039;,&#039;र&#039;:&#039;ர&#039;,&#039;ल&#039;:&#039;ல&#039;,&#039;ळ&#039;:&#039;ழ&#039;,&#039;व&#039;:&#039;வ&#039;,&lt;br /&gt;
      &#039;श&#039;:&#039;ஶ&#039;,&#039;ष&#039;:&#039;ஷ&#039;,&#039;स&#039;:&#039;ஸ&#039;,&#039;ह&#039;:&#039;ஹ&#039;,&lt;br /&gt;
      &#039;ा&#039;:&#039;ா&#039;,&#039;ि&#039;:&#039;ி&#039;,&#039;ी&#039;:&#039;ீ&#039;,&#039;ु&#039;:&#039;ு&#039;,&#039;ू&#039;:&#039;ூ&#039;,&lt;br /&gt;
      &#039;ृ&#039;:&#039;ு&#039;,&#039;ॄ&#039;:&#039;ூ&#039;,&lt;br /&gt;
      &#039;े&#039;:&#039;ே&#039;,&#039;ை&#039;:&#039;ை&#039;,&#039;ो&#039;:&#039;ோ&#039;,&#039;ौ&#039;:&#039;ௌ&#039;,&lt;br /&gt;
      &#039;ं&#039;:&#039;ம்&#039;,&#039;ः&#039;:&#039;:&#039;,&#039;ँ&#039;:&#039;ம்&#039;,&#039;्&#039;:&#039;்&#039;,&#039;ॐ&#039;:&#039;ௐ&#039;,&#039;ऽ&#039;:&#039;ௗ&#039;,&lt;br /&gt;
      &#039;०&#039;:&#039;0&#039;,&#039;१&#039;:&#039;1&#039;,&#039;२&#039;:&#039;2&#039;,&#039;३&#039;:&#039;3&#039;,&#039;४&#039;:&#039;4&#039;,&lt;br /&gt;
      &#039;५&#039;:&#039;5&#039;,&#039;६&#039;:&#039;6&#039;,&#039;७&#039;:&#039;7&#039;,&#039;८&#039;:&#039;8&#039;,&#039;९&#039;:&#039;9&#039;&lt;br /&gt;
    }&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  var PRE = [&lt;br /&gt;
    [ /ङ्क/g, &#039;ंक&#039; ], [ /ङ्ख/g, &#039;ंख&#039; ], [ /ङ्ग/g, &#039;ंग&#039; ], [ /ङ्घ/g, &#039;ंघ&#039; ],&lt;br /&gt;
    [ /ञ्च/g, &#039;ंच&#039; ], [ /ञ्ज/g, &#039;ंज&#039; ], [ /ण्ट/g, &#039;ंट&#039; ], [ /ण्ड/g, &#039;ंड&#039; ],&lt;br /&gt;
    [ /न्त/g, &#039;ंत&#039; ], [ /न्द/g, &#039;ंद&#039; ], [ /म्ब/g, &#039;ंब&#039; ], [ /म्भ/g, &#039;ंभ&#039; ]&lt;br /&gt;
  ];&lt;br /&gt;
&lt;br /&gt;
  function transliterateText( text, script ) {&lt;br /&gt;
    if ( script === &#039;en&#039; ) return devanagariToIAST( text );&lt;br /&gt;
    var map = SCRIPT_MAP[ script ];&lt;br /&gt;
    if ( !map ) return text;&lt;br /&gt;
    var t = text;&lt;br /&gt;
    PRE.forEach( function ( p ) { t = t.replace( p[ 0 ], p[ 1 ] ); } );&lt;br /&gt;
    return Array.from( t ).map( function ( ch ) {&lt;br /&gt;
      return map[ ch ] !== undefined ? map[ ch ] : ch;&lt;br /&gt;
    } ).join( &#039;&#039; );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var translatableSpans = [];&lt;br /&gt;
&lt;br /&gt;
  function tagTextNodes() {&lt;br /&gt;
    var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
    if ( content ) {&lt;br /&gt;
      var walker = document.createTreeWalker( content, NodeFilter.SHOW_TEXT );&lt;br /&gt;
      var nodes  = [];&lt;br /&gt;
      while ( walker.nextNode() ) nodes.push( walker.currentNode );&lt;br /&gt;
      nodes.forEach( function ( node ) {&lt;br /&gt;
        var p = node.parentNode;&lt;br /&gt;
        if ( !p ) return;&lt;br /&gt;
        if ( p.hasAttribute &amp;amp;&amp;amp; p.hasAttribute( &#039;data-deva&#039; ) ) return;&lt;br /&gt;
        if ( p.closest ) {&lt;br /&gt;
          if ( p.closest( &#039;.gr-controls&#039; )    ) return;&lt;br /&gt;
          if ( p.closest( &#039;.mw-editsection&#039; ) ) return;&lt;br /&gt;
        }&lt;br /&gt;
        var orig = node.textContent;&lt;br /&gt;
        if ( !orig.trim() ) return;&lt;br /&gt;
        var span = document.createElement( &#039;span&#039; );&lt;br /&gt;
        span.setAttribute( &#039;data-deva&#039;, orig );&lt;br /&gt;
        span.textContent = orig;&lt;br /&gt;
        p.replaceChild( span, node );&lt;br /&gt;
        translatableSpans.push( span );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
    document.querySelectorAll( &#039;.vector-toc .vector-toc-text&#039; ).forEach( function ( span ) {&lt;br /&gt;
      if ( span.hasAttribute( &#039;data-deva&#039; ) ) return;&lt;br /&gt;
      var orig = span.textContent;&lt;br /&gt;
      if ( !orig.trim() ) return;&lt;br /&gt;
      span.setAttribute( &#039;data-deva&#039;, orig );&lt;br /&gt;
      translatableSpans.push( span );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function applyScript( script ) {&lt;br /&gt;
    currentScript = script;&lt;br /&gt;
    translatableSpans.forEach( function ( span ) {&lt;br /&gt;
      if ( !span.parentNode ) return;&lt;br /&gt;
      var orig = span.getAttribute( &#039;data-deva&#039; );&lt;br /&gt;
      if ( !orig ) return;&lt;br /&gt;
      span.textContent = ( script === &#039;deva&#039; )&lt;br /&gt;
        ? orig&lt;br /&gt;
        : transliterateText( orig, script );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function _isNoTocPage() {&lt;br /&gt;
    var pn = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039; ) ) || &#039;&#039;;&lt;br /&gt;
    return pn === &#039;Main_Page&#039; || /^[A-Za-z0-9_]+:About$/.test( pn );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function renameTocTitle() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    var titleEl = toc.querySelector(&#039;.vector-toc-title&#039;) || toc.querySelector(&#039;.vector-pinnable-header-label&#039;);&lt;br /&gt;
    if ( !titleEl ) return;&lt;br /&gt;
    var LABEL = &#039;विषयसूची&#039;;&lt;br /&gt;
    var span = titleEl.querySelector(&#039;.gr-toc-title&#039;);&lt;br /&gt;
    if ( !span ) {&lt;br /&gt;
      titleEl.innerHTML = &#039;&#039;;&lt;br /&gt;
      span = document.createElement(&#039;span&#039;);&lt;br /&gt;
      span.className = &#039;gr-toc-title&#039;;&lt;br /&gt;
      span.setAttribute(&#039;data-deva&#039;, LABEL);&lt;br /&gt;
      titleEl.appendChild(span);&lt;br /&gt;
      translatableSpans.push(span);&lt;br /&gt;
    }&lt;br /&gt;
    span.textContent = currentScript === &#039;deva&#039; ? LABEL : transliterateText(LABEL, currentScript);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function removeTocBeginning() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    var el = toc.querySelector( &#039;#vector-toc-beginning&#039; );&lt;br /&gt;
    if ( !el ) {&lt;br /&gt;
      var items = toc.querySelectorAll( &#039;.vector-toc-list-item&#039; );&lt;br /&gt;
      for ( var i = 0; i &amp;lt; items.length; i++ ) {&lt;br /&gt;
        var a = items[ i ].querySelector( &#039;a&#039; );&lt;br /&gt;
        if ( a ) {&lt;br /&gt;
          var href = a.getAttribute( &#039;href&#039; ) || &#039;&#039;;&lt;br /&gt;
          if ( href.indexOf( &#039;#&#039; ) === -1 ) { el = items[ i ]; break; }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if ( el &amp;amp;&amp;amp; el.parentNode ) el.parentNode.removeChild( el );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function expandTocSections() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    toc.querySelectorAll( &#039;.vector-toc-list-item-collapsed&#039; ).forEach( function ( li ) {&lt;br /&gt;
      li.classList.remove( &#039;vector-toc-list-item-collapsed&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function injectTocDocNav() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    if ( document.getElementById( &#039;gr-toc-doc-nav&#039; ) ) return;&lt;br /&gt;
    var artPath   = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
    var pageTitle = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039;   ) ) || &#039;&#039;;&lt;br /&gt;
    var teekaPage   = document.querySelector( &#039;.gr-teeka-page&#039; );&lt;br /&gt;
    var primarySlug = teekaPage ? ( teekaPage.getAttribute( &#039;data-primary&#039; ) || &#039;&#039; ) : &#039;&#039;;&lt;br /&gt;
    if ( !primarySlug ) { primarySlug = pageTitle.split( &#039;/&#039; )[ 0 ]; }&lt;br /&gt;
    if ( !primarySlug ) return;&lt;br /&gt;
    function wikiUrl( slug ) {&lt;br /&gt;
      if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( slug );&lt;br /&gt;
      return artPath.replace( &#039;$1&#039;, encodeURIComponent( slug ).replace( /%2F/g, &#039;/&#039; ) );&lt;br /&gt;
    }&lt;br /&gt;
    var docTitleEl     = document.querySelector( &#039;.gr-doc-title&#039; );&lt;br /&gt;
    var hasMoolaPage   = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-moola&#039; )   === &#039;1&#039;;&lt;br /&gt;
    var hasUllekhaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-ullekha&#039; ) === &#039;1&#039;;&lt;br /&gt;
    var showMoolaPage  = !teekaPage &amp;amp;&amp;amp; hasMoolaPage;&lt;br /&gt;
    var showMoolaBack  = !!teekaPage;&lt;br /&gt;
    var showUllekha    = hasUllekhaPage || !!teekaPage;&lt;br /&gt;
    if ( !showMoolaPage &amp;amp;&amp;amp; !showMoolaBack &amp;amp;&amp;amp; !showUllekha ) return;&lt;br /&gt;
    var nav = document.createElement( &#039;div&#039; );&lt;br /&gt;
    nav.id = &#039;gr-toc-doc-nav&#039;;&lt;br /&gt;
    nav.setAttribute( &#039;class&#039;, &#039;toc-main-links&#039; );&lt;br /&gt;
    function makeBtn( href, label ) {&lt;br /&gt;
      var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
      a.href = href;&lt;br /&gt;
      a.setAttribute( &#039;class&#039;, &#039;toc-main-link-item&#039; );&lt;br /&gt;
      var lspan = document.createElement( &#039;span&#039; );&lt;br /&gt;
      lspan.setAttribute( &#039;data-deva&#039;, label );&lt;br /&gt;
      lspan.textContent = ( currentScript &amp;amp;&amp;amp; currentScript !== &#039;deva&#039; ) ? transliterateText( label, currentScript ) : label;&lt;br /&gt;
      translatableSpans.push( lspan );&lt;br /&gt;
      a.appendChild( lspan );&lt;br /&gt;
      a.addEventListener( &#039;mouseover&#039;, function () { this.style.opacity = &#039;0.72&#039;; } );&lt;br /&gt;
      a.addEventListener( &#039;mouseout&#039;,  function () { this.style.opacity = &#039;1&#039;;    } );&lt;br /&gt;
      return a;&lt;br /&gt;
    }&lt;br /&gt;
    if ( showMoolaPage ) nav.appendChild( makeBtn( wikiUrl( primarySlug + &#039;/Moola&#039; ), &#039;मूलम्&#039; ) );&lt;br /&gt;
    if ( showMoolaBack ) nav.appendChild( makeBtn( wikiUrl( primarySlug ),            &#039;मूल&#039;   ) );&lt;br /&gt;
    if ( showUllekha   ) nav.appendChild( makeBtn( wikiUrl( primarySlug + &#039;/Ullekha&#039;), &#039;उल्लेख&#039;) );&lt;br /&gt;
    var tocContents = toc.querySelector( &#039;.vector-toc-contents&#039; );&lt;br /&gt;
    if ( tocContents ) toc.insertBefore( nav, tocContents );&lt;br /&gt;
    else               toc.appendChild( nav );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var _headingObserver = null;&lt;br /&gt;
&lt;br /&gt;
  function attachHeadingObserver() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    if ( _headingObserver ) return;&lt;br /&gt;
    if ( !window.IntersectionObserver ) return;&lt;br /&gt;
    var ACTIVE_COLOR = &#039;#f57c00&#039;;&lt;br /&gt;
    var _activeId    = null;&lt;br /&gt;
    var content  = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
    if ( !content ) return;&lt;br /&gt;
    var headings = Array.from( content.querySelectorAll( &#039;h1[id],h2[id],h3[id],h4[id],h5[id],h6[id]&#039; ) );&lt;br /&gt;
    if ( !headings.length ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    function getTocLink( id ) { return toc.querySelector( &#039;a[href=&amp;quot;#&#039; + CSS.escape( id ) + &#039;&amp;quot;]&#039; ); }&lt;br /&gt;
    function getTocLi( id ) { var a = getTocLink( id ); return a ? a.closest( &#039;.vector-toc-list-item&#039; ) : null; }&lt;br /&gt;
    function clearActive() {&lt;br /&gt;
      toc.querySelectorAll( &#039;.vector-toc-list-item&#039; ).forEach( function ( li ) {&lt;br /&gt;
        li.classList.remove( &#039;vector-toc-list-item-active&#039; );&lt;br /&gt;
        var lnk = li.querySelector( &#039;.vector-toc-link&#039; );&lt;br /&gt;
        if ( !lnk ) return;&lt;br /&gt;
        lnk.style.removeProperty( &#039;color&#039; );&lt;br /&gt;
        lnk.style.setProperty( &#039;font-weight&#039;, &#039;400&#039;, &#039;important&#039; );&lt;br /&gt;
        lnk.querySelectorAll( &#039;*&#039; ).forEach( function ( el ) { el.style.removeProperty( &#039;color&#039; ); el.style.setProperty( &#039;font-weight&#039;, &#039;400&#039;, &#039;important&#039; ); } );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
    function setActive( id ) {&lt;br /&gt;
      if ( _activeId === id ) return;&lt;br /&gt;
      _activeId = id;&lt;br /&gt;
      clearActive();&lt;br /&gt;
      if ( !id ) return;&lt;br /&gt;
      var li = getTocLi( id );&lt;br /&gt;
      if ( !li ) return;&lt;br /&gt;
      li.classList.add( &#039;vector-toc-list-item-active&#039; );&lt;br /&gt;
      var hasActiveChild = !!li.querySelector( &#039;.vector-toc-list-item .vector-toc-list-item-active&#039; );&lt;br /&gt;
      if ( !hasActiveChild ) {&lt;br /&gt;
        var lnk = li.querySelector( &#039;.vector-toc-link&#039; );&lt;br /&gt;
        if ( lnk ) {&lt;br /&gt;
          lnk.style.setProperty( &#039;color&#039;, ACTIVE_COLOR, &#039;important&#039; );&lt;br /&gt;
          lnk.style.setProperty( &#039;font-weight&#039;, &#039;700&#039;, &#039;important&#039; );&lt;br /&gt;
          lnk.querySelectorAll( &#039;*&#039; ).forEach( function ( el ) { el.style.setProperty( &#039;color&#039;, ACTIVE_COLOR, &#039;important&#039; ); el.style.setProperty( &#039;font-weight&#039;, &#039;700&#039;, &#039;important&#039; ); } );&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      var anc = li.parentNode;&lt;br /&gt;
      while ( anc &amp;amp;&amp;amp; anc !== toc ) {&lt;br /&gt;
        if ( anc.classList ) anc.classList.remove( &#039;vector-toc-list-item-collapsed&#039; );&lt;br /&gt;
        if ( anc.tagName === &#039;UL&#039; || anc.tagName === &#039;LI&#039; ) anc.style.removeProperty( &#039;display&#039; );&lt;br /&gt;
        anc = anc.parentNode;&lt;br /&gt;
      }&lt;br /&gt;
      var sticky = document.querySelector( &#039;.vector-sticky-pinned-container&#039; );&lt;br /&gt;
      var scrollEl = sticky || toc;&lt;br /&gt;
      if ( scrollEl.scrollHeight &amp;gt; scrollEl.clientHeight ) {&lt;br /&gt;
        var lr = li.getBoundingClientRect();&lt;br /&gt;
        var cr = scrollEl.getBoundingClientRect();&lt;br /&gt;
        if ( lr.top &amp;lt; cr.top + 8 || lr.bottom &amp;gt; cr.bottom - 8 ) {&lt;br /&gt;
          scrollEl.scrollTop += lr.top - cr.top - scrollEl.clientHeight / 2 + li.offsetHeight / 2;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    var _visible = new Set();&lt;br /&gt;
    _headingObserver = new IntersectionObserver( function ( entries ) {&lt;br /&gt;
      entries.forEach( function ( entry ) {&lt;br /&gt;
        if ( entry.isIntersecting ) _visible.add( entry.target.id );&lt;br /&gt;
        else _visible.delete( entry.target.id );&lt;br /&gt;
      } );&lt;br /&gt;
      var topId = null, topY = Infinity;&lt;br /&gt;
      _visible.forEach( function ( id ) {&lt;br /&gt;
        var el = document.getElementById( id );&lt;br /&gt;
        if ( el ) { var y = el.getBoundingClientRect().top; if ( y &amp;gt;= 0 &amp;amp;&amp;amp; y &amp;lt; topY ) { topY = y; topId = id; } }&lt;br /&gt;
      } );&lt;br /&gt;
      if ( !topId ) {&lt;br /&gt;
        var bestY = -Infinity;&lt;br /&gt;
        headings.forEach( function ( h ) { var y = h.getBoundingClientRect().top; if ( y &amp;lt; 0 &amp;amp;&amp;amp; y &amp;gt; bestY ) { bestY = y; topId = h.id; } } );&lt;br /&gt;
      }&lt;br /&gt;
      setActive( topId || null );&lt;br /&gt;
    }, { rootMargin: &#039;-60px 0px -65% 0px&#039;, threshold: 0 } );&lt;br /&gt;
    headings.forEach( function ( h ) { _headingObserver.observe( h ); } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function setupToc() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    removeTocBeginning();&lt;br /&gt;
    renameTocTitle();&lt;br /&gt;
    expandTocSections();&lt;br /&gt;
    injectTocDocNav();&lt;br /&gt;
    attachHeadingObserver();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function init() {&lt;br /&gt;
    var HIDE_IDS = [ &#039;vector-appearance&#039;, &#039;vector-appearance-pinned-container&#039;, &#039;vector-appearance-unpinned-container&#039; ];&lt;br /&gt;
    function removeHiddenEls() {&lt;br /&gt;
      HIDE_IDS.forEach( function ( id ) { var el = document.getElementById( id ); if ( el &amp;amp;&amp;amp; el.parentNode ) el.parentNode.removeChild( el ); } );&lt;br /&gt;
      var pt = document.getElementById( &#039;vector-page-tools&#039; ) || document.querySelector( &#039;.vector-page-tools-pinned-container&#039; );&lt;br /&gt;
      if ( pt ) pt.querySelectorAll( &#039;[aria-controls=&amp;quot;vector-appearance&amp;quot;]&#039; ).forEach( function ( el ) { if ( el.parentNode ) el.parentNode.removeChild( el ); } );&lt;br /&gt;
    }&lt;br /&gt;
    removeHiddenEls();&lt;br /&gt;
    ( function detectTeekaMode() {&lt;br /&gt;
      var tp = document.querySelector( &#039;.gr-teeka-page&#039; );&lt;br /&gt;
      if ( !tp ) return;&lt;br /&gt;
      var primary = tp.getAttribute( &#039;data-primary&#039; ) || &#039;&#039;;&lt;br /&gt;
      var artPath = ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
      var mainUrl = artPath.replace( &#039;$1&#039;, primary );&lt;br /&gt;
      var refParam = window.location.search.match( /[?&amp;amp;]ref=([01])/ );&lt;br /&gt;
      if ( refParam ) { document.body.classList.add( refParam[1] === &#039;1&#039; ? &#039;gr-ref-mode&#039; : &#039;gr-standalone&#039; ); return; }&lt;br /&gt;
      var ref = document.referrer || &#039;&#039;;&lt;br /&gt;
      document.body.classList.add( ( ref &amp;amp;&amp;amp; primary &amp;amp;&amp;amp; ref.indexOf( mainUrl ) !== -1 ) ? &#039;gr-ref-mode&#039; : &#039;gr-standalone&#039; );&lt;br /&gt;
    }() );&lt;br /&gt;
    if ( window.MutationObserver ) {&lt;br /&gt;
      var hideObs = new MutationObserver( function ( mutations ) {&lt;br /&gt;
        var dirty = false;&lt;br /&gt;
        mutations.forEach( function ( m ) { if ( m.addedNodes.length ) dirty = true; } );&lt;br /&gt;
        if ( dirty ) removeHiddenEls();&lt;br /&gt;
      } );&lt;br /&gt;
      hideObs.observe( document.body, { childList: true, subtree: false } );&lt;br /&gt;
      setTimeout( function () { hideObs.disconnect(); }, 6000 );&lt;br /&gt;
    }&lt;br /&gt;
    var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
    var alreadyTagged = content &amp;amp;&amp;amp; content.querySelector( &#039;[data-deva]&#039; );&lt;br /&gt;
    if ( !alreadyTagged ) { translatableSpans = []; tagTextNodes(); }&lt;br /&gt;
    else {&lt;br /&gt;
      document.querySelectorAll( &#039;.vector-toc .vector-toc-text:not([data-deva])&#039; ).forEach( function ( span ) {&lt;br /&gt;
        var orig = span.textContent; if ( !orig.trim() ) return;&lt;br /&gt;
        span.setAttribute( &#039;data-deva&#039;, orig ); translatableSpans.push( span );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
    var saved = ( function () { try { return localStorage.getItem( LS_SCRIPT_KEY ); } catch ( e ) { return null; } }() );&lt;br /&gt;
    if ( saved &amp;amp;&amp;amp; saved !== &#039;deva&#039; ) { applyScript( saved ); } else { currentScript = &#039;deva&#039;; }&lt;br /&gt;
    setTimeout( setupToc, 200 );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  window.addEventListener( &#039;gr-script-change&#039;, function ( e ) {&lt;br /&gt;
    var script = e &amp;amp;&amp;amp; e.detail &amp;amp;&amp;amp; e.detail.script;&lt;br /&gt;
    if ( script ) applyScript( script );&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
  window.addEventListener( &#039;gr-new-content&#039;, function ( e ) {&lt;br /&gt;
    var container = e &amp;amp;&amp;amp; e.detail &amp;amp;&amp;amp; e.detail.container;&lt;br /&gt;
    if ( !container ) return;&lt;br /&gt;
    var walker = document.createTreeWalker( container, NodeFilter.SHOW_TEXT );&lt;br /&gt;
    var nodes = [];&lt;br /&gt;
    while ( walker.nextNode() ) nodes.push( walker.currentNode );&lt;br /&gt;
    nodes.forEach( function ( node ) {&lt;br /&gt;
      var p = node.parentNode;&lt;br /&gt;
      if ( !p || ( p.hasAttribute &amp;amp;&amp;amp; p.hasAttribute( &#039;data-deva&#039; ) ) ) return;&lt;br /&gt;
      var orig = node.textContent;&lt;br /&gt;
      if ( !orig.trim() ) return;&lt;br /&gt;
      var span = document.createElement( &#039;span&#039; );&lt;br /&gt;
      span.setAttribute( &#039;data-deva&#039;, orig );&lt;br /&gt;
      span.textContent = currentScript !== &#039;deva&#039; ? transliterateText( orig, currentScript ) : orig;&lt;br /&gt;
      p.replaceChild( span, node );&lt;br /&gt;
      translatableSpans.push( span );&lt;br /&gt;
    } );&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
  try {&lt;br /&gt;
    var _grBC = new BroadcastChannel( &#039;gr-script&#039; );&lt;br /&gt;
    _grBC.onmessage = function ( e ) {&lt;br /&gt;
      var script = e &amp;amp;&amp;amp; e.data &amp;amp;&amp;amp; e.data.script;&lt;br /&gt;
      if ( script ) { currentScript = script; var sel = document.querySelector( &#039;.gr-script-sel&#039; ); if ( sel ) sel.value = script; applyScript( script ); }&lt;br /&gt;
    };&lt;br /&gt;
  } catch ( e ) {}&lt;br /&gt;
&lt;br /&gt;
  if ( window.mw ) {&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
      setTimeout( function () {&lt;br /&gt;
        var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
        var alreadyTagged = content &amp;amp;&amp;amp; content.querySelector( &#039;[data-deva]&#039; );&lt;br /&gt;
        if ( !alreadyTagged ) { translatableSpans = []; tagTextNodes(); }&lt;br /&gt;
        else {&lt;br /&gt;
          document.querySelectorAll( &#039;.vector-toc .vector-toc-text:not([data-deva])&#039; ).forEach( function ( span ) {&lt;br /&gt;
            var orig = span.textContent; if ( !orig.trim() ) return;&lt;br /&gt;
            span.setAttribute( &#039;data-deva&#039;, orig ); translatableSpans.push( span );&lt;br /&gt;
          } );&lt;br /&gt;
        }&lt;br /&gt;
        if ( currentScript !== &#039;deva&#039; ) applyScript( currentScript );&lt;br /&gt;
        setupToc();&lt;br /&gt;
      }, 150 );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) { document.addEventListener( &#039;DOMContentLoaded&#039;, init ); }&lt;br /&gt;
  else { init(); }&lt;br /&gt;
&lt;br /&gt;
}() );   /* ← end of main IIFE */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Inject &amp;quot;Help&amp;quot; and &amp;quot;About&amp;quot; links into the header ─────────────────&lt;br /&gt;
( function () {&lt;br /&gt;
  function wikiHref( title ) {&lt;br /&gt;
    if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( title );&lt;br /&gt;
    var ap = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
    return ap.replace( &#039;$1&#039;, title );&lt;br /&gt;
  }&lt;br /&gt;
  var linkStyle = [ &#039;color:rgba(255,255,255,0.88)&#039;,&#039;font-size:0.88em&#039;,&#039;font-family:system-ui,sans-serif&#039;,&#039;font-weight:500&#039;,&#039;text-decoration:none&#039;,&#039;padding:4px 10px&#039;,&#039;border-radius:4px&#039;,&#039;margin-right:4px&#039;,&#039;transition:color 0.15s,background 0.15s&#039;,&#039;white-space:nowrap&#039; ].join( &#039;;&#039; );&lt;br /&gt;
  function makeHeaderLink( id, href, label ) {&lt;br /&gt;
    var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
    a.id = id; a.href = href; a.textContent = label; a.style.cssText = linkStyle;&lt;br /&gt;
    a.addEventListener( &#039;mouseover&#039;, function () { this.style.color = &#039;#fff&#039;; this.style.background = &#039;rgba(255,255,255,0.12)&#039;; } );&lt;br /&gt;
    a.addEventListener( &#039;mouseout&#039;,  function () { this.style.color = &#039;rgba(255,255,255,0.88)&#039;; this.style.background = &#039;transparent&#039;; } );&lt;br /&gt;
    return a;&lt;br /&gt;
  }&lt;br /&gt;
  function injectHeaderLinks() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-about-link&#039; ) ) return;&lt;br /&gt;
    var headerEnd = document.querySelector( &#039;.vector-header-end&#039; ) || document.querySelector( &#039;#vector-user-links&#039; ) || document.querySelector( &#039;.mw-header&#039; );&lt;br /&gt;
    if ( !headerEnd ) return;&lt;br /&gt;
    var helpLink  = makeHeaderLink( &#039;gr-help-link&#039;,  wikiHref( &#039;My_wiki:Help&#039;  ), &#039;Help&#039;  );&lt;br /&gt;
    var aboutLink = makeHeaderLink( &#039;gr-about-link&#039;, wikiHref( &#039;My_wiki:About&#039; ), &#039;About&#039; );&lt;br /&gt;
    var ul = document.querySelector( &#039;.vector-user-links&#039; ) || document.querySelector( &#039;#pt-userpage&#039; );&lt;br /&gt;
    if ( ul &amp;amp;&amp;amp; ul.parentNode === headerEnd ) { headerEnd.insertBefore( aboutLink, ul ); headerEnd.insertBefore( helpLink, aboutLink ); }&lt;br /&gt;
    else { headerEnd.appendChild( helpLink ); headerEnd.appendChild( aboutLink ); }&lt;br /&gt;
  }&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) document.addEventListener( &#039;DOMContentLoaded&#039;, injectHeaderLinks );&lt;br /&gt;
  else injectHeaderLinks();&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Main page: by-Grantha / by-Author toggle ──────────────────────&lt;br /&gt;
( function () {&lt;br /&gt;
  function grHomeView( v ) {&lt;br /&gt;
    var gView = document.getElementById( &#039;gr-view-grantha&#039; );&lt;br /&gt;
    var aView = document.getElementById( &#039;gr-view-author&#039; );&lt;br /&gt;
    var gBtn  = document.getElementById( &#039;gr-toggle-grantha&#039; );&lt;br /&gt;
    var aBtn  = document.getElementById( &#039;gr-toggle-author&#039; );&lt;br /&gt;
    if ( !gView || !aView || !gBtn || !aBtn ) return;&lt;br /&gt;
    gView.style.display = ( v === &#039;grantha&#039; ) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
    aView.style.display = ( v === &#039;author&#039;  ) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
    gBtn.className = &#039;gr-toggle-btn&#039; + ( v === &#039;grantha&#039; ? &#039; gr-toggle-active&#039; : &#039;&#039; );&lt;br /&gt;
    aBtn.className = &#039;gr-toggle-btn&#039; + ( v === &#039;author&#039;  ? &#039; gr-toggle-active&#039; : &#039;&#039; );&lt;br /&gt;
    try { localStorage.setItem( &#039;gr_home_view&#039;, v ); } catch ( e ) {}&lt;br /&gt;
  }&lt;br /&gt;
  function initHomeToggle() {&lt;br /&gt;
    var gBtn = document.getElementById( &#039;gr-toggle-grantha&#039; );&lt;br /&gt;
    var aBtn = document.getElementById( &#039;gr-toggle-author&#039; );&lt;br /&gt;
    if ( !gBtn || !aBtn ) return;&lt;br /&gt;
    gBtn.addEventListener( &#039;click&#039;, function () { grHomeView( &#039;grantha&#039; ); } );&lt;br /&gt;
    aBtn.addEventListener( &#039;click&#039;, function () { grHomeView( &#039;author&#039; );  } );&lt;br /&gt;
    [ gBtn, aBtn ].forEach( function ( btn ) { btn.addEventListener( &#039;keydown&#039;, function ( e ) { if ( e.key === &#039;Enter&#039; || e.key === &#039; &#039; ) btn.click(); } ); } );&lt;br /&gt;
    var saved; try { saved = localStorage.getItem( &#039;gr_home_view&#039; ); } catch ( e ) {}&lt;br /&gt;
    if ( saved === &#039;author&#039; ) grHomeView( &#039;author&#039; );&lt;br /&gt;
  }&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) document.addEventListener( &#039;DOMContentLoaded&#039;, initHomeToggle );&lt;br /&gt;
  else initHomeToggle();&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Ullekha reference link handler ─────────────────────────────────&lt;br /&gt;
( function () {&lt;br /&gt;
  function highlightOnArrival() {&lt;br /&gt;
    var search = window.location.search;&lt;br /&gt;
    if ( !search ) return;&lt;br /&gt;
    var m = search.match( /[?&amp;amp;]hlUllekha=([^&amp;amp;]+)/ );&lt;br /&gt;
    if ( !m ) return;&lt;br /&gt;
    var needle;&lt;br /&gt;
    try { needle = decodeURIComponent( m[ 1 ] ); } catch ( e ) { return; }&lt;br /&gt;
    if ( !needle || needle.length &amp;lt; 4 ) return;&lt;br /&gt;
    function doHighlight() {&lt;br /&gt;
      var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
      if ( !content ) return;&lt;br /&gt;
      var snippet = needle.slice( 0, 40 );&lt;br /&gt;
      var found   = false;&lt;br /&gt;
      var spans = content.querySelectorAll( &#039;[data-deva]&#039; );&lt;br /&gt;
      for ( var i = 0; i &amp;lt; spans.length &amp;amp;&amp;amp; !found; i++ ) {&lt;br /&gt;
        var spanEl = spans[ i ];&lt;br /&gt;
        var orig   = spanEl.getAttribute( &#039;data-deva&#039; ) || &#039;&#039;;&lt;br /&gt;
        if ( orig.indexOf( snippet ) === -1 ) continue;&lt;br /&gt;
        var idx    = orig.indexOf( snippet );&lt;br /&gt;
        var hlText = orig.slice( idx, Math.min( idx + needle.length, orig.length ) );&lt;br /&gt;
        var mark   = document.createElement( &#039;mark&#039; );&lt;br /&gt;
        mark.className = &#039;gr-ullekha-highlight&#039;;&lt;br /&gt;
        mark.style.cssText = &#039;background:#fff176;border-radius:2px;padding:0 2px;&#039;;&lt;br /&gt;
        mark.textContent = hlText;&lt;br /&gt;
        var parent = spanEl.parentNode;&lt;br /&gt;
        if ( !parent ) continue;&lt;br /&gt;
        var before = document.createTextNode( orig.slice( 0, idx ) );&lt;br /&gt;
        var after  = document.createTextNode( orig.slice( idx + hlText.length ) );&lt;br /&gt;
        parent.insertBefore( before, spanEl ); parent.insertBefore( mark, spanEl ); parent.insertBefore( after, spanEl ); parent.removeChild( spanEl );&lt;br /&gt;
        setTimeout( function () { mark.scrollIntoView( { behavior: &#039;smooth&#039;, block: &#039;center&#039; } ); }, 100 );&lt;br /&gt;
        found = true;&lt;br /&gt;
      }&lt;br /&gt;
      if ( !found ) {&lt;br /&gt;
        var walker = document.createTreeWalker( content, NodeFilter.SHOW_TEXT );&lt;br /&gt;
        while ( walker.nextNode() &amp;amp;&amp;amp; !found ) {&lt;br /&gt;
          var node = walker.currentNode;&lt;br /&gt;
          var txt  = node.textContent || &#039;&#039;;&lt;br /&gt;
          if ( txt.indexOf( snippet ) === -1 ) continue;&lt;br /&gt;
          var idx2  = txt.indexOf( snippet );&lt;br /&gt;
          var mark2 = document.createElement( &#039;mark&#039; );&lt;br /&gt;
          mark2.className = &#039;gr-ullekha-highlight&#039;;&lt;br /&gt;
          mark2.style.cssText = &#039;background:#fff176;border-radius:2px;padding:0 2px;&#039;;&lt;br /&gt;
          mark2.textContent = txt.slice( idx2, Math.min( idx2 + needle.length, txt.length ) );&lt;br /&gt;
          var p = node.parentNode;&lt;br /&gt;
          p.insertBefore( document.createTextNode( txt.slice( 0, idx2 ) ), node );&lt;br /&gt;
          p.insertBefore( mark2, node );&lt;br /&gt;
          p.insertBefore( document.createTextNode( txt.slice( idx2 + mark2.textContent.length ) ), node );&lt;br /&gt;
          p.removeChild( node );&lt;br /&gt;
          setTimeout( function () { mark2.scrollIntoView( { behavior: &#039;smooth&#039;, block: &#039;center&#039; } ); }, 100 );&lt;br /&gt;
          found = true;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    doHighlight();&lt;br /&gt;
  }&lt;br /&gt;
  function wireUllekhaLinks() {&lt;br /&gt;
    document.querySelectorAll( &#039;.gr-ullekha-ref-link&#039; ).forEach( function ( wrap ) {&lt;br /&gt;
      var anchor = wrap.getAttribute( &#039;data-anchor&#039; ) || &#039;&#039;;&lt;br /&gt;
      var hl     = wrap.getAttribute( &#039;data-hl&#039; )     || &#039;&#039;;&lt;br /&gt;
      var a = wrap.querySelector( &#039;a&#039; );&lt;br /&gt;
      if ( !a ) return;&lt;br /&gt;
      var base = a.href.split( &#039;#&#039; )[ 0 ];&lt;br /&gt;
      var encoded = encodeURIComponent( hl );&lt;br /&gt;
      a.href = base + ( hl ? &#039;?hlUllekha=&#039; + encoded : &#039;&#039; ) + ( anchor ? &#039;#&#039; + anchor : &#039;&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) { document.addEventListener( &#039;DOMContentLoaded&#039;, function () { highlightOnArrival(); wireUllekhaLinks(); } ); }&lt;br /&gt;
  else { highlightOnArrival(); wireUllekhaLinks(); }&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
/* ── Search result highlight ──────────────────────────────────── */&lt;br /&gt;
/* EXACT REPLACEMENT for the search highlight IIFE in MediaWiki:Common.js.&lt;br /&gt;
 * Only changes from the original working version:&lt;br /&gt;
 *  - Mobile bar: full-width terracotta bottom bar instead of floating pill&lt;br /&gt;
 *  - showDismissBar: guard added (if !count return) to prevent empty bar&lt;br /&gt;
 * Everything else (storeQueryForLink, applyHighlight, wrapMatches) is&lt;br /&gt;
 * identical to the version that was working.&lt;br /&gt;
 */&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
  function storeQueryForLink( url, query ) {&lt;br /&gt;
    try {&lt;br /&gt;
      var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
      a.href = url;&lt;br /&gt;
      sessionStorage.setItem( &#039;gr_search_hl&#039;, JSON.stringify({&lt;br /&gt;
        query:    query,&lt;br /&gt;
        pathname: a.pathname&lt;br /&gt;
      }) );&lt;br /&gt;
    } catch(e) {}&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function applyHighlight() {&lt;br /&gt;
    var stored;&lt;br /&gt;
    try {&lt;br /&gt;
      stored = JSON.parse( sessionStorage.getItem( &#039;gr_search_hl&#039; ) || &#039;null&#039; );&lt;br /&gt;
    } catch(e) { return; }&lt;br /&gt;
    if ( !stored || !stored.query ) return;&lt;br /&gt;
&lt;br /&gt;
    var currentPath = window.location.pathname;&lt;br /&gt;
    var storedPath  = stored.pathname || &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
    function normPath(p) { return decodeURIComponent(p).replace(/\/+$/, &#039;&#039;); }&lt;br /&gt;
    if ( storedPath &amp;amp;&amp;amp; normPath(storedPath) !== normPath(currentPath) ) {&lt;br /&gt;
      try { sessionStorage.removeItem( &#039;gr_search_hl&#039; ); } catch(e) {}&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var query = stored.query.trim();&lt;br /&gt;
    if ( !query ) return;&lt;br /&gt;
&lt;br /&gt;
    try { sessionStorage.removeItem( &#039;gr_search_hl&#039; ); } catch(e) {}&lt;br /&gt;
&lt;br /&gt;
    var delays = [ 0, 200, 600 ];&lt;br /&gt;
    delays.forEach( function(ms) {&lt;br /&gt;
      setTimeout( function() {&lt;br /&gt;
        if ( document.querySelector( &#039;.gr-search-hl&#039; ) ) return;&lt;br /&gt;
        highlightText( query );&lt;br /&gt;
      }, ms );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function highlightText( query ) {&lt;br /&gt;
    var content = document.querySelector( &#039;#mw-content-text .mw-parser-output&#039; );&lt;br /&gt;
    if ( !content ) return;&lt;br /&gt;
&lt;br /&gt;
    var raw = query.replace( /^&amp;quot;|&amp;quot;$/g, &#039;&#039; ).trim();&lt;br /&gt;
    if ( !raw ) return;&lt;br /&gt;
&lt;br /&gt;
    var patterns = [];&lt;br /&gt;
    patterns.push( escapeRegex( raw ) );&lt;br /&gt;
    raw.split( /\s+/ ).forEach( function(w) {&lt;br /&gt;
      if ( w.length &amp;gt;= 2 ) patterns.push( escapeRegex( w ) );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    var matched = false;&lt;br /&gt;
    for ( var pi = 0; pi &amp;lt; patterns.length; pi++ ) {&lt;br /&gt;
      var re;&lt;br /&gt;
      try { re = new RegExp( &#039;(&#039; + patterns[pi] + &#039;)&#039;, &#039;gi&#039; ); }&lt;br /&gt;
      catch(e) { continue; }&lt;br /&gt;
      var count = wrapMatches( content, re );&lt;br /&gt;
      if ( count &amp;gt; 0 ) { matched = true; break; }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ( !matched ) return;&lt;br /&gt;
&lt;br /&gt;
    var first = document.querySelector( &#039;.gr-search-hl&#039; );&lt;br /&gt;
    if ( first ) {&lt;br /&gt;
      first.scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; });&lt;br /&gt;
      first.classList.add( &#039;gr-search-hl-pulse&#039; );&lt;br /&gt;
      setTimeout( function() { first.classList.remove( &#039;gr-search-hl-pulse&#039; ); }, 2000 );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    showDismissBar( query );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function escapeRegex( s ) {&lt;br /&gt;
    return s.replace( /[.*+?^${}()|[\]\\]/g, &#039;\\$&amp;amp;&#039; );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function wrapMatches( root, re ) {&lt;br /&gt;
    var count = 0;&lt;br /&gt;
    var walker = document.createTreeWalker(&lt;br /&gt;
      root, NodeFilter.SHOW_TEXT, {&lt;br /&gt;
        acceptNode: function( node ) {&lt;br /&gt;
          var p = node.parentElement;&lt;br /&gt;
          if ( !p ) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
          var tag = p.tagName.toUpperCase();&lt;br /&gt;
          if ( tag === &#039;SCRIPT&#039; || tag === &#039;STYLE&#039; || tag === &#039;NOSCRIPT&#039; ) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
          if ( p.classList.contains( &#039;gr-search-hl&#039; ) ) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
          return NodeFilter.FILTER_ACCEPT;&lt;br /&gt;
        }&lt;br /&gt;
      }, false&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    var nodes = [];&lt;br /&gt;
    var node;&lt;br /&gt;
    while ( ( node = walker.nextNode() ) ) nodes.push( node );&lt;br /&gt;
&lt;br /&gt;
    nodes.forEach( function( textNode ) {&lt;br /&gt;
      var val = textNode.nodeValue;&lt;br /&gt;
      if ( !re.test( val ) ) return;&lt;br /&gt;
      re.lastIndex = 0;&lt;br /&gt;
&lt;br /&gt;
      var frag = document.createDocumentFragment();&lt;br /&gt;
      var last = 0;&lt;br /&gt;
      var m;&lt;br /&gt;
      while ( ( m = re.exec( val ) ) !== null ) {&lt;br /&gt;
        if ( m.index &amp;gt; last ) {&lt;br /&gt;
          frag.appendChild( document.createTextNode( val.slice( last, m.index ) ) );&lt;br /&gt;
        }&lt;br /&gt;
        var span = document.createElement( &#039;span&#039; );&lt;br /&gt;
        span.className = &#039;gr-search-hl&#039;;&lt;br /&gt;
        span.textContent = m[0];&lt;br /&gt;
        frag.appendChild( span );&lt;br /&gt;
        last = m.index + m[0].length;&lt;br /&gt;
        count++;&lt;br /&gt;
      }&lt;br /&gt;
      if ( last &amp;lt; val.length ) {&lt;br /&gt;
        frag.appendChild( document.createTextNode( val.slice( last ) ) );&lt;br /&gt;
      }&lt;br /&gt;
      textNode.parentNode.replaceChild( frag, textNode );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    return count;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function showDismissBar( query ) {&lt;br /&gt;
    var existing = document.getElementById( &#039;gr-hl-bar&#039; );&lt;br /&gt;
    if ( existing ) existing.remove();&lt;br /&gt;
&lt;br /&gt;
    var count = document.querySelectorAll( &#039;.gr-search-hl&#039; ).length;&lt;br /&gt;
    if ( !count ) return;&lt;br /&gt;
&lt;br /&gt;
    var isMob = window.innerWidth &amp;lt; 768 || !!document.getElementById( &#039;mw-mf-viewport&#039; );&lt;br /&gt;
    var bar = document.createElement( &#039;div&#039; );&lt;br /&gt;
    bar.id = &#039;gr-hl-bar&#039;;&lt;br /&gt;
&lt;br /&gt;
    if ( isMob ) {&lt;br /&gt;
      bar.style.cssText = [&lt;br /&gt;
        &#039;position:fixed&#039;, &#039;bottom:0&#039;, &#039;left:0&#039;, &#039;right:0&#039;,&lt;br /&gt;
        &#039;z-index:10200&#039;, &#039;background:#b5451b&#039;, &#039;color:#fff&#039;,&lt;br /&gt;
        &#039;padding:0&#039;, &#039;display:flex&#039;, &#039;align-items:stretch&#039;,&lt;br /&gt;
        &#039;font-family:system-ui,sans-serif&#039;,&lt;br /&gt;
        &#039;box-shadow:0 -2px 12px rgba(0,0,0,0.25)&#039;, &#039;height:56px&#039;&lt;br /&gt;
      ].join(&#039;;&#039;);&lt;br /&gt;
&lt;br /&gt;
      var mbs = &#039;flex:1;display:flex;flex-direction:column;align-items:center;&#039; +&lt;br /&gt;
        &#039;justify-content:center;background:none;border:none;color:#fff;cursor:pointer;&#039; +&lt;br /&gt;
        &#039;padding:6px 4px;font-family:system-ui,sans-serif;font-size:11px;font-weight:500;&#039; +&lt;br /&gt;
        &#039;gap:3px;-webkit-tap-highlight-color:rgba(0,0,0,0.12);&#039;;&lt;br /&gt;
&lt;br /&gt;
      bar.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-prev&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;polyline points=&amp;quot;15 18 9 12 15 6&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;Prev&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-next&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;polyline points=&amp;quot;9 18 15 12 9 6&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;Next&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-results&amp;quot; style=&amp;quot;&#039; + mbs + &#039;flex:1.6;border-left:1px solid rgba(255,255,255,0.2);border-right:1px solid rgba(255,255,255,0.2);&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;circle cx=&amp;quot;11&amp;quot; cy=&amp;quot;11&amp;quot; r=&amp;quot;7&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;16.5&amp;quot; y1=&amp;quot;16.5&amp;quot; x2=&amp;quot;22&amp;quot; y2=&amp;quot;22&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;&#039; + count + &#039; match&#039; + (count===1?&#039;&#039;:&#039;es&#039;) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-dismiss&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;line x1=&amp;quot;18&amp;quot; y1=&amp;quot;6&amp;quot; x2=&amp;quot;6&amp;quot; y2=&amp;quot;18&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;6&amp;quot; y1=&amp;quot;6&amp;quot; x2=&amp;quot;18&amp;quot; y2=&amp;quot;18&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;Close&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
    } else {&lt;br /&gt;
      bar.style.cssText = [&lt;br /&gt;
        &#039;position:fixed&#039;, &#039;bottom:0&#039;, &#039;left:0&#039;, &#039;right:0&#039;, &#039;z-index:10200&#039;,&lt;br /&gt;
        &#039;background:#b5451b&#039;, &#039;color:#fff&#039;, &#039;padding:10px 16px&#039;,&lt;br /&gt;
        &#039;display:flex&#039;, &#039;align-items:center&#039;, &#039;justify-content:space-between&#039;,&lt;br /&gt;
        &#039;font-family:system-ui,sans-serif&#039;, &#039;font-size:14px&#039;,&lt;br /&gt;
        &#039;box-shadow:0 -2px 8px rgba(0,0,0,0.2)&#039;&lt;br /&gt;
      ].join(&#039;;&#039;);&lt;br /&gt;
&lt;br /&gt;
      var nav = document.createElement( &#039;div&#039; );&lt;br /&gt;
      nav.style.cssText = &#039;display:flex;align-items:center;gap:12px;&#039;;&lt;br /&gt;
      nav.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;🔍 &amp;lt;strong&amp;gt;&#039; + escHtml(query) + &#039;&amp;lt;/strong&amp;gt; — &#039; + count + &#039; match&#039; + (count===1?&#039;&#039;:&#039;es&#039;) + &#039;&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-prev&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;↑ Prev&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-next&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;↓ Next&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-results&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;← Results&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
      bar.appendChild( nav );&lt;br /&gt;
&lt;br /&gt;
      var db = document.createElement( &#039;button&#039; );&lt;br /&gt;
      db.id = &#039;gr-hl-dismiss&#039;; db.textContent = &#039;✕ Close&#039;;&lt;br /&gt;
      db.style.cssText = &#039;background:rgba(255,255,255,0.15);border:none;color:#fff;padding:4px 12px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&#039;;&lt;br /&gt;
      bar.appendChild( db );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    document.body.appendChild( bar );&lt;br /&gt;
&lt;br /&gt;
    var hlEls = Array.from( document.querySelectorAll( &#039;.gr-search-hl&#039; ) );&lt;br /&gt;
    var current = 0;&lt;br /&gt;
&lt;br /&gt;
    function goTo( idx ) {&lt;br /&gt;
      hlEls.forEach( function(el) { el.classList.remove( &#039;gr-search-hl-current&#039; ); } );&lt;br /&gt;
      current = ( ( idx % hlEls.length ) + hlEls.length ) % hlEls.length;&lt;br /&gt;
      hlEls[ current ].classList.add( &#039;gr-search-hl-current&#039; );&lt;br /&gt;
      hlEls[ current ].scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function dismiss() { clearHighlights(); bar.remove(); }&lt;br /&gt;
&lt;br /&gt;
    var nb = document.getElementById( &#039;gr-hl-next&#039; );&lt;br /&gt;
    var pb = document.getElementById( &#039;gr-hl-prev&#039; );&lt;br /&gt;
    var rb = document.getElementById( &#039;gr-hl-results&#039; );&lt;br /&gt;
    var db2 = document.getElementById( &#039;gr-hl-dismiss&#039; );&lt;br /&gt;
    if ( nb ) nb.onclick = function() { goTo( current + 1 ); };&lt;br /&gt;
    if ( pb ) pb.onclick = function() { goTo( current - 1 ); };&lt;br /&gt;
    if ( db2 ) db2.onclick = dismiss;&lt;br /&gt;
    if ( rb ) rb.onclick = function() {&lt;br /&gt;
      bar.remove(); clearHighlights();&lt;br /&gt;
      if ( window.showSearchDialog ) window.showSearchDialog( query );&lt;br /&gt;
    };&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function clearHighlights() {&lt;br /&gt;
    document.querySelectorAll( &#039;.gr-search-hl&#039; ).forEach( function( span ) {&lt;br /&gt;
      var p = span.parentNode; if ( !p ) return;&lt;br /&gt;
      while ( span.firstChild ) p.insertBefore( span.firstChild, span );&lt;br /&gt;
      p.removeChild( span );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function escHtml( s ) {&lt;br /&gt;
    return String(s).replace(/&amp;amp;/g,&#039;&amp;amp;amp;&#039;).replace(/&amp;lt;/g,&#039;&amp;amp;lt;&#039;).replace(/&amp;gt;/g,&#039;&amp;amp;gt;&#039;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function injectHighlightCSS() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-hl-css&#039; ) ) return;&lt;br /&gt;
    var s = document.createElement( &#039;style&#039; );&lt;br /&gt;
    s.id = &#039;gr-hl-css&#039;;&lt;br /&gt;
    s.textContent = [&lt;br /&gt;
      &#039;.gr-search-hl{background:#fff176;color:#1a1a1a;border-radius:2px;padding:0 1px;box-shadow:0 0 0 1px rgba(181,69,27,0.25);}&#039;,&lt;br /&gt;
      &#039;.gr-search-hl-current{background:#ffb300!important;box-shadow:0 0 0 2px #b5451b!important;}&#039;,&lt;br /&gt;
      &#039;@keyframes gr-hl-pulse{0%{background:#ffb300;}50%{background:#fff176;}100%{background:#fff176;}}&#039;,&lt;br /&gt;
      &#039;.gr-search-hl-pulse{animation:gr-hl-pulse 1.2s ease 2;}&#039;,&lt;br /&gt;
    ].join(&#039;&#039;);&lt;br /&gt;
    document.head.appendChild( s );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  injectHighlightCSS();&lt;br /&gt;
&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) {&lt;br /&gt;
    document.addEventListener( &#039;DOMContentLoaded&#039;, applyHighlight );&lt;br /&gt;
  } else {&lt;br /&gt;
    applyHighlight();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ( window.mw ) {&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function() {&lt;br /&gt;
      setTimeout( applyHighlight, 100 );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  window.grStoreSearchHL = storeQueryForLink;&lt;br /&gt;
&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
/* ═══════════════════════════════════════════════════════════════&lt;br /&gt;
   Mobile addon — only runs on Minerva (mobile) skin&lt;br /&gt;
   ═══════════════════════════════════════════════════════════════ */&lt;br /&gt;
( function () {&lt;br /&gt;
  if ( !document.body.classList.contains( &#039;skin-minerva&#039; ) ) return;&lt;br /&gt;
  function injectCSS() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-mob-css&#039; ) ) return;&lt;br /&gt;
    var s = document.createElement( &#039;style&#039; );&lt;br /&gt;
    s.id = &#039;gr-mob-css&#039;;&lt;br /&gt;
    s.textContent =&lt;br /&gt;
      &#039;body,#mw-mf-viewport,#mw-mf-page-center{padding-top:0!important;margin-top:0!important;}&#039; +&lt;br /&gt;
      &#039;html,body,#mw-mf-viewport,#mw-mf-page-center{overflow-x:hidden!important;max-width:100vw!important;}&#039; +&lt;br /&gt;
      &#039;header.header-container{background:#b5451b!important;position:sticky!important;top:0!important;z-index:300!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header{background:#b5451b!important;min-height:54px!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header .search-toggle,.minerva-header .minerva-user-notifications{display:none!important;}&#039; +&lt;br /&gt;
      &#039;.branding-box a{display:flex!important;align-items:center!important;text-decoration:none!important;max-width:calc(100vw - 80px)!important;}&#039; +&lt;br /&gt;
      &#039;.branding-box a::before{content:&amp;quot;&amp;quot;;display:block;width:30px;height:30px;flex-shrink:0;background:url(&amp;quot;/favicon.png&amp;quot;) center/contain no-repeat;margin-right:8px;}&#039; +&lt;br /&gt;
      &#039;.branding-box a span{color:#fff!important;font-size:16px!important;font-weight:700!important;font-family:system-ui,sans-serif!important;line-height:1.2!important;flex:1 1 auto!important;min-width:0!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header svg path,.minerva-header svg rect,.minerva-header svg circle{fill:#fff!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header label{color:#fff!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-tabs,.mw-portlet-associated-pages,.page-actions-menu,#page-secondary-actions,.last-modified-bar,.minerva-anon-talk-link{display:none!important;}&#039; +&lt;br /&gt;
      &#039;#gr-mob-menu-items{display:block!important;}&#039; +&lt;br /&gt;
      &#039;.mw-footer.minerva-footer,.footer-places,.footer-info,.minerva-footer-logo,#footer-places-about,#footer-places-disclaimers,#footer-places-privacy{display:none!important;}&#039; +&lt;br /&gt;
      &#039;#gr-static-bar{position:sticky!important;top:54px!important;z-index:200!important;}&#039; +&lt;br /&gt;
      &#039;.mf-section-0,.mf-section-1,.mf-section-2,.mf-section-3,.mf-section-4,.mf-section-5,.mf-section-6,.mf-section-7,.mf-section-8,.mf-section-9,.mf-section-10{display:block!important;visibility:visible!important;}&#039; +&lt;br /&gt;
      &#039;.collapsible-block{display:block!important;}&#039; +&lt;br /&gt;
      &#039;.section-heading .indicator,.collapsible-heading .indicator{display:none!important;}&#039; +&lt;br /&gt;
      &#039;.section-heading,.collapsible-heading{pointer-events:none!important;}&#039; +&lt;br /&gt;
      &#039;.gr-home-grid{flex-direction:column!important;flex-wrap:nowrap!important;gap:12px!important;width:100%!important;}&#039; +&lt;br /&gt;
      &#039;.gr-home-card{width:100%!important;max-width:100%!important;min-width:unset!important;box-sizing:border-box!important;flex:none!important;}&#039; +&lt;br /&gt;
      &#039;.gr-home-toggle{flex-wrap:wrap!important;}&#039; +&lt;br /&gt;
      &#039;.mw-parser-output{font-size:18px!important;line-height:1.8!important;}&#039; +&lt;br /&gt;
      &#039;.mw-parser-output h2,.mw-parser-output h3{width:100%!important;}&#039; +&lt;br /&gt;
      &#039;.bhashyam-block{margin-left:8px!important;}&#039; +&lt;br /&gt;
      &#039;#footer,.mw-footer,.catlinks,#catlinks{display:none!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-panel{position:fixed!important;top:0!important;left:0!important;bottom:0!important;width:82vw!important;max-width:340px!important;background:#fff!important;z-index:10400!important;box-shadow:4px 0 28px rgba(0,0,0,0.22)!important;overflow-y:auto!important;padding:0 0 40px!important;transform:translateX(-110%)!important;transition:transform 0.26s cubic-bezier(0.4,0,0.2,1)!important;display:block!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-panel.open{transform:translateX(0)!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-backdrop{display:none!important;position:fixed!important;inset:0!important;background:rgba(0,0,0,0.4)!important;z-index:10399!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-backdrop.open{display:block!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-header{position:sticky!important;top:0!important;background:#fff!important;display:flex!important;align-items:center!important;justify-content:space-between!important;padding:16px 16px 12px!important;border-bottom:1px solid #f0ebe6!important;z-index:1!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-title{font-size:13px!important;font-weight:700!important;text-transform:uppercase!important;letter-spacing:0.08em!important;color:#b5451b!important;font-family:system-ui,sans-serif!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-close{background:none!important;border:none!important;font-size:22px!important;color:#999!important;cursor:pointer!important;padding:4px 8px!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-body{padding:12px 16px!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-body a{display:block!important;font-size:16px!important;line-height:1.6!important;color:#2c1810!important;text-decoration:none!important;padding:8px 0!important;border-bottom:1px solid #f5f0ed!important;}&#039;;&lt;br /&gt;
    document.head.appendChild( s );&lt;br /&gt;
  }&lt;br /&gt;
  function expandSections() {&lt;br /&gt;
    document.querySelectorAll( &#039;[class*=&amp;quot;mf-section-&amp;quot;], .collapsible-block&#039; ).forEach( function ( el ) { el.removeAttribute( &#039;hidden&#039; ); el.style.setProperty( &#039;display&#039;, &#039;block&#039;, &#039;important&#039; ); el.style.setProperty( &#039;visibility&#039;, &#039;visible&#039;, &#039;important&#039; ); el.removeAttribute( &#039;aria-hidden&#039; ); } );&lt;br /&gt;
    document.querySelectorAll( &#039;.section-heading, .collapsible-heading&#039; ).forEach( function ( el ) { el.setAttribute( &#039;aria-expanded&#039;, &#039;true&#039; ); el.style.setProperty( &#039;pointer-events&#039;, &#039;none&#039;, &#039;important&#039; ); } );&lt;br /&gt;
  }&lt;br /&gt;
  function watchSections() {&lt;br /&gt;
    var t = null;&lt;br /&gt;
    var obs = new MutationObserver( function ( ms ) { if ( ms.some( function(m){ return m.attributeName === &#039;hidden&#039;; } ) ) { clearTimeout(t); t = setTimeout( expandSections, 30 ); } } );&lt;br /&gt;
    obs.observe( document.querySelector( &#039;#mw-content-text&#039; ) || document.body, { subtree:true, attributes:true, attributeFilter:[&#039;hidden&#039;,&#039;aria-hidden&#039;] } );&lt;br /&gt;
  }&lt;br /&gt;
  function watchBodyPadding() {&lt;br /&gt;
    new MutationObserver( function () { if ( document.body.style.paddingTop &amp;amp;&amp;amp; document.body.style.paddingTop !== &#039;0px&#039; ) document.body.style.paddingTop = &#039;&#039;; } ).observe( document.body, { attributes:true, attributeFilter:[&#039;style&#039;] } );&lt;br /&gt;
  }&lt;br /&gt;
 function injectMenuLinks() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-mob-menu-items&#039; ) ) return;&lt;br /&gt;
    var navDrawer = document.querySelector( &#039;.navigation-drawer&#039; );&lt;br /&gt;
    if ( !navDrawer ) return;&lt;br /&gt;
    var wrap = document.createElement( &#039;div&#039; ); wrap.id = &#039;gr-mob-menu-items&#039;; wrap.style.cssText = &#039;width:100%;background:#fff;margin-top:8px;&#039;;&lt;br /&gt;
    var itemStyle = &#039;display:flex;align-items:center;gap:14px;padding:15px 20px;font-size:16px;color:#2c1810;text-decoration:none;font-family:system-ui,sans-serif;border-bottom:1px solid #f0ebe6;background:#fff;&#039;;&lt;br /&gt;
    function makeItem( href, label ) { var a = document.createElement( &#039;a&#039; ); a.href = href; a.style.cssText = itemStyle; a.innerHTML = &#039;&amp;lt;span&amp;gt;&#039; + label + &#039;&amp;lt;/span&amp;gt;&#039;; return a; }&lt;br /&gt;
    function wikiUrl( title ) { return ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) ? mw.util.getUrl( title ) : &#039;/&#039; + title; }&lt;br /&gt;
    wrap.appendChild( makeItem( &#039;/Main_Page&#039;, &#039;Home&#039; ) );&lt;br /&gt;
    wrap.appendChild( makeItem( &#039;/My_wiki:Help&#039;, &#039;Help&#039; ) );&lt;br /&gt;
    wrap.appendChild( makeItem( &#039;/My_wiki:About&#039;, &#039;About&#039; ) );&lt;br /&gt;
    var userName = window.mw ? mw.config.get( &#039;wgUserName&#039; ) : null;&lt;br /&gt;
    if ( userName ) {&lt;br /&gt;
      // Username button that toggles a dropdown with Profile + Log out&lt;br /&gt;
      var userWrap = document.createElement( &#039;div&#039; );&lt;br /&gt;
      userWrap.id = &#039;gr-mob-user&#039;; userWrap.style.cssText = &#039;width:100%;&#039;;&lt;br /&gt;
&lt;br /&gt;
      var trigger = document.createElement( &#039;button&#039; );&lt;br /&gt;
      trigger.type = &#039;button&#039;;&lt;br /&gt;
      trigger.id = &#039;gr-mob-user-trigger&#039;;&lt;br /&gt;
      trigger.setAttribute( &#039;aria-expanded&#039;, &#039;false&#039; );&lt;br /&gt;
      trigger.style.cssText = itemStyle + &#039;width:100%;justify-content:space-between;border:none;cursor:pointer;text-align:left;&#039;;&lt;br /&gt;
      trigger.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;&#039; + userName.replace( /&amp;lt;/g, &#039;&amp;amp;lt;&#039; ) + &#039;&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span id=&amp;quot;gr-mob-user-caret&amp;quot; style=&amp;quot;transition:transform 0.2s;&amp;quot;&amp;gt;\u25be&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
      var menu = document.createElement( &#039;div&#039; );&lt;br /&gt;
      menu.id = &#039;gr-mob-user-menu&#039;;&lt;br /&gt;
      menu.style.cssText = &#039;display:none;background:#faf6f3;&#039;;&lt;br /&gt;
&lt;br /&gt;
      var subItemStyle = itemStyle + &#039;padding-left:40px;background:#faf6f3;&#039;;&lt;br /&gt;
      function makeSubItem( href, label, isLogout ) {&lt;br /&gt;
        var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
        a.href = href; a.style.cssText = subItemStyle;&lt;br /&gt;
        a.innerHTML = &#039;&amp;lt;span&amp;gt;&#039; + label + &#039;&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
        if ( isLogout ) a.id = &#039;gr-mob-logout-link&#039;;&lt;br /&gt;
        return a;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      menu.appendChild( makeSubItem( wikiUrl( &#039;Special:Profile&#039; ), &#039;Profile&#039;, false ) );&lt;br /&gt;
      var la = document.querySelector( &#039;a[href*=&amp;quot;action=logout&amp;quot;]&#039; );&lt;br /&gt;
      menu.appendChild( makeSubItem( la ? la.href : &#039;/index.php?title=Special:UserLogout&#039;, &#039;Log out&#039;, true ) );&lt;br /&gt;
&lt;br /&gt;
      trigger.addEventListener( &#039;click&#039;, function () {&lt;br /&gt;
        var open = menu.style.display === &#039;none&#039;;&lt;br /&gt;
        menu.style.display = open ? &#039;block&#039; : &#039;none&#039;;&lt;br /&gt;
        trigger.setAttribute( &#039;aria-expanded&#039;, open ? &#039;true&#039; : &#039;false&#039; );&lt;br /&gt;
        var caret = document.getElementById( &#039;gr-mob-user-caret&#039; );&lt;br /&gt;
        if ( caret ) caret.style.transform = open ? &#039;rotate(180deg)&#039; : &#039;&#039;;&lt;br /&gt;
      } );&lt;br /&gt;
&lt;br /&gt;
      userWrap.appendChild( trigger );&lt;br /&gt;
      userWrap.appendChild( menu );&lt;br /&gt;
      wrap.appendChild( userWrap );&lt;br /&gt;
    }&lt;br /&gt;
    else wrap.appendChild( makeItem( &#039;/index.php?title=Special:UserLogin&#039;, &#039;Log in&#039; ) );&lt;br /&gt;
    var pageLeft = document.getElementById( &#039;mw-mf-page-left&#039; );&lt;br /&gt;
    if ( pageLeft ) { while ( pageLeft.firstChild ) pageLeft.removeChild( pageLeft.firstChild ); pageLeft.style.removeProperty( &#039;display&#039; ); pageLeft.appendChild( wrap ); }&lt;br /&gt;
    else navDrawer.appendChild( wrap );&lt;br /&gt;
  }&lt;br /&gt;
  var _tocDone = false;&lt;br /&gt;
  function initToc() {&lt;br /&gt;
    if ( _tocDone ) return;&lt;br /&gt;
    var tocList = document.querySelector( &#039;.vector-toc-contents, .vector-toc .vector-toc-list&#039; );&lt;br /&gt;
    if ( !tocList || !tocList.querySelector( &#039;li&#039; ) ) return;&lt;br /&gt;
    _tocDone = true;&lt;br /&gt;
    var bd = document.createElement( &#039;div&#039; ); bd.className = &#039;gr-mob-toc-backdrop&#039;; document.body.appendChild( bd );&lt;br /&gt;
    var panel = document.createElement( &#039;div&#039; ); panel.className = &#039;gr-mob-toc-panel&#039;;&lt;br /&gt;
    var hdr = document.createElement( &#039;div&#039; ); hdr.className = &#039;gr-mob-toc-header&#039;;&lt;br /&gt;
    var ttl = document.createElement( &#039;div&#039; ); ttl.className = &#039;gr-mob-toc-title&#039;; ttl.textContent = &#039;विषयसूची&#039;;&lt;br /&gt;
    var cls = document.createElement( &#039;button&#039; ); cls.className = &#039;gr-mob-toc-close&#039;; cls.textContent = &#039;✕&#039;;&lt;br /&gt;
    hdr.appendChild( ttl ); hdr.appendChild( cls ); panel.appendChild( hdr );&lt;br /&gt;
    var body = document.createElement( &#039;div&#039; ); body.className = &#039;gr-mob-toc-body&#039;; body.appendChild( tocList.cloneNode( true ) ); panel.appendChild( body ); document.body.appendChild( panel );&lt;br /&gt;
    var btn = document.createElement( &#039;button&#039; ); btn.id = &#039;gr-mob-toc-btn&#039;; btn.innerHTML = &#039;☰ &amp;amp;nbsp;Contents&#039;;&lt;br /&gt;
    btn.style.cssText = &#039;position:fixed;bottom:148px;left:16px;z-index:9100;background:#fff;border:1.5px solid #b5451b;border-radius:24px;padding:10px 16px;font-size:15px;font-family:system-ui,sans-serif;color:#b5451b;font-weight:600;box-shadow:0 3px 14px rgba(0,0,0,0.15);cursor:pointer;&#039;;&lt;br /&gt;
    document.body.appendChild( btn );&lt;br /&gt;
    function open()  { panel.classList.add(&#039;open&#039;); bd.classList.add(&#039;open&#039;); document.body.style.overflow=&#039;hidden&#039;; }&lt;br /&gt;
    function close() { panel.classList.remove(&#039;open&#039;); bd.classList.remove(&#039;open&#039;); document.body.style.overflow=&#039;&#039;; }&lt;br /&gt;
    btn.onclick = open; cls.onclick = close; bd.onclick = close;&lt;br /&gt;
    body.querySelectorAll(&#039;a&#039;).forEach(function(a){ a.onclick = close; });&lt;br /&gt;
  }&lt;br /&gt;
  function injectMoolaUllekhaLinks() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-mob-doc-nav&#039; ) ) return;&lt;br /&gt;
    var pageName = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039; ) ) || &#039;&#039;;&lt;br /&gt;
    if ( pageName === &#039;Main_Page&#039; || !pageName ) return;&lt;br /&gt;
    function wikiUrl( slug ) { if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( slug ); return ( ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039; ).replace( &#039;$1&#039;, encodeURIComponent( slug ).replace( /%2F/g, &#039;/&#039; ) ); }&lt;br /&gt;
    var teekaPage = document.querySelector( &#039;.gr-teeka-page&#039; );&lt;br /&gt;
    var primarySlug = teekaPage ? ( teekaPage.getAttribute( &#039;data-primary&#039; ) || pageName.split(&#039;/&#039;)[0] ) : pageName.split(&#039;/&#039;)[0];&lt;br /&gt;
    var docTitleEl = document.querySelector( &#039;.gr-doc-title&#039; );&lt;br /&gt;
    var hasMoolaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-moola&#039; ) === &#039;1&#039;;&lt;br /&gt;
    var hasUllekhaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-ullekha&#039; ) === &#039;1&#039;;&lt;br /&gt;
    var showMoolam = !!teekaPage || hasMoolaPage, showUllekha = hasUllekhaPage || !!teekaPage;&lt;br /&gt;
    if ( !showMoolam &amp;amp;&amp;amp; !showUllekha ) return;&lt;br /&gt;
    var nav = document.createElement( &#039;div&#039; ); nav.id = &#039;gr-mob-doc-nav&#039;;&lt;br /&gt;
    nav.style.cssText = &#039;display:flex;gap:10px;padding:10px 16px 8px;background:#fdf8f5;border-bottom:1px solid #f0e0d6;font-family:system-ui,sans-serif;&#039;;&lt;br /&gt;
    function makeLink( href, label ) { var a = document.createElement( &#039;a&#039; ); a.href = href; a.textContent = label; a.style.cssText = &#039;display:inline-flex;align-items:center;padding:5px 16px;border-radius:20px;background:#fff;border:1.5px solid #e8cfc4;color:#b5451b;font-size:14px;font-weight:600;text-decoration:none;&#039;; return a; }&lt;br /&gt;
    if ( teekaPage ) nav.appendChild( makeLink( wikiUrl( primarySlug ), &#039;मूल&#039; ) );&lt;br /&gt;
    else if ( hasMoolaPage ) nav.appendChild( makeLink( wikiUrl( primarySlug + &#039;/Moola&#039; ), &#039;मूलम्&#039; ) );&lt;br /&gt;
    if ( showUllekha ) nav.appendChild( makeLink( wikiUrl( primarySlug + &#039;/Ullekha&#039; ), &#039;उल्लेख&#039; ) );&lt;br /&gt;
    var h1 = document.getElementById( &#039;firstHeading&#039; ) || document.querySelector( &#039;.page-heading, h1.firstHeading, .mw-first-heading&#039; );&lt;br /&gt;
    if ( h1 &amp;amp;&amp;amp; h1.parentNode ) h1.parentNode.insertBefore( nav, h1.nextSibling );&lt;br /&gt;
    else { var ct = document.getElementById( &#039;mw-content-text&#039; ); if ( ct ) ct.insertBefore( nav, ct.firstChild ); }&lt;br /&gt;
  }&lt;br /&gt;
  injectCSS(); watchBodyPadding();&lt;br /&gt;
  function boot() { expandSections(); watchSections(); injectMenuLinks(); injectMoolaUllekhaLinks(); [100,400,900,1800].forEach(function(ms){ setTimeout(expandSections,ms); }); setTimeout(initToc,700); }&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) document.addEventListener( &#039;DOMContentLoaded&#039;, boot );&lt;br /&gt;
  else boot();&lt;br /&gt;
  if ( window.mw ) mw.hook( &#039;wikipage.content&#039; ).add(function(){ setTimeout(function(){ expandSections(); injectMenuLinks(); injectMoolaUllekhaLinks(); initToc(); },300); });&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
  mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
    setTimeout( function () {&lt;br /&gt;
      var blocks = document.querySelectorAll( &#039;.collapsible-block, .toggle-list&#039; );&lt;br /&gt;
      Array.prototype.forEach.call( blocks, function ( el ) { if ( !el.parentNode ) { try { el.remove(); } catch(e) {} } } );&lt;br /&gt;
    }, 0 );&lt;br /&gt;
  } );&lt;br /&gt;
  if ( mw.config.get( &#039;wgPageName&#039; ) !== &#039;Main_Page&#039; ) return;&lt;br /&gt;
  mw.loader.using( &#039;mediawiki.util&#039; ).done( function () {&lt;br /&gt;
    $( function () { applyHomeToggleOffset(); window.addEventListener( &#039;resize&#039;, applyHomeToggleOffset, { passive: true } ); setTimeout( applyHomeToggleOffset, 300 ); setTimeout( applyHomeToggleOffset, 800 ); } );&lt;br /&gt;
  } );&lt;br /&gt;
  function applyHomeToggleOffset() {&lt;br /&gt;
    var bar = document.getElementById( &#039;gr-static-bar&#039; ); if ( !bar ) return;&lt;br /&gt;
    var barBottom = Math.round( bar.getBoundingClientRect().bottom );&lt;br /&gt;
    [ document.getElementById(&#039;gr-home&#039;), document.getElementById(&#039;gr-home-toggle&#039;), document.querySelector(&#039;#mw-content-text .mw-parser-output &amp;gt; .gr-home, #mw-content-text .mw-parser-output &amp;gt; *:first-child&#039;) ].forEach( function(el){ if(el) el.style.scrollMarginTop=(barBottom+4)+&#039;px&#039;; } );&lt;br /&gt;
    var isMob = window.innerWidth &amp;lt; 768 || !!document.getElementById( &#039;mw-mf-viewport&#039; );&lt;br /&gt;
    if ( isMob ) { var toggleEl = document.getElementById(&#039;gr-home-toggle&#039;); if ( toggleEl ) { var tr = toggleEl.getBoundingClientRect(); if ( tr.top &amp;lt; barBottom ) { var cp = parseInt(window.getComputedStyle(document.body).paddingTop,10)||0; document.body.style.paddingTop=(cp+(barBottom-tr.top)+4)+&#039;px&#039;; } } }&lt;br /&gt;
  }&lt;br /&gt;
  $( function () {&lt;br /&gt;
    var $toggle=$(&#039;#gr-home-toggle&#039;),$viewG=$(&#039;#gr-view-grantha&#039;),$viewA=$(&#039;#gr-view-author&#039;),$btnG=$(&#039;#gr-toggle-grantha&#039;),$btnA=$(&#039;#gr-toggle-author&#039;);&lt;br /&gt;
    if(!$toggle.length||!$viewG.length||!$viewA.length)return; if($toggle.data(&#039;gr-wired&#039;))return; $toggle.data(&#039;gr-wired&#039;,true);&lt;br /&gt;
    function showView(which){ if(which===&#039;grantha&#039;){$viewG.show();$viewA.hide();$btnG.addClass(&#039;gr-toggle-active&#039;);$btnA.removeClass(&#039;gr-toggle-active&#039;);}else{$viewA.show();$viewG.hide();$btnA.addClass(&#039;gr-toggle-active&#039;);$btnG.removeClass(&#039;gr-toggle-active&#039;);} try{localStorage.setItem(&#039;grantha_home_tab&#039;,which);}catch(e){} }&lt;br /&gt;
    $btnG.on(&#039;click keydown&#039;,function(e){if(e.type===&#039;keydown&#039;&amp;amp;&amp;amp;e.key!==&#039;Enter&#039;&amp;amp;&amp;amp;e.key!==&#039; &#039;)return;showView(&#039;grantha&#039;);});&lt;br /&gt;
    $btnA.on(&#039;click keydown&#039;,function(e){if(e.type===&#039;keydown&#039;&amp;amp;&amp;amp;e.key!==&#039;Enter&#039;&amp;amp;&amp;amp;e.key!==&#039; &#039;)return;showView(&#039;author&#039;);});&lt;br /&gt;
    try{var saved=localStorage.getItem(&#039;grantha_home_tab&#039;);if(saved===&#039;author&#039;)showView(&#039;author&#039;);else showView(&#039;grantha&#039;);}catch(e){showView(&#039;grantha&#039;);}&lt;br /&gt;
  } );&lt;br /&gt;
}() );&lt;br /&gt;
// ── Replace MediaWiki user links with a single username dropdown (Profile + Logout) ──&lt;br /&gt;
( function () {&lt;br /&gt;
  function wikiHref( title ) {&lt;br /&gt;
    if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( title );&lt;br /&gt;
    var ap = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
    return ap.replace( &#039;$1&#039;, title );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function buildLogoutForm( token ) {&lt;br /&gt;
    token = token || &#039;&#039;;&lt;br /&gt;
    var esc = String( token ).replace( /&amp;quot;/g, &#039;&amp;amp;quot;&#039; );&lt;br /&gt;
    var script = ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.wikiScript ) ? mw.util.wikiScript() : &#039;/index.php&#039;;&lt;br /&gt;
    var form = document.createElement( &#039;form&#039; );&lt;br /&gt;
    form.method = &#039;post&#039;;&lt;br /&gt;
    form.action = script + &#039;?title=Special:UserLogout&#039;;&lt;br /&gt;
    form.style.display = &#039;none&#039;;&lt;br /&gt;
    form.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;wpEditToken&amp;quot; value=&amp;quot;&#039; + esc + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;title&amp;quot; value=&amp;quot;Special:UserLogout&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;returnto&amp;quot; value=&amp;quot;Main Page&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
    document.body.appendChild( form );&lt;br /&gt;
    return form;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function injectUserDropdown() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-user-dropdown&#039; ) ) return;&lt;br /&gt;
&lt;br /&gt;
    var userName = window.mw ? mw.config.get( &#039;wgUserName&#039; ) : null;&lt;br /&gt;
    var isAnon = !userName || ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgUserId&#039; ) === null );&lt;br /&gt;
&lt;br /&gt;
    var container = document.querySelector( &#039;.vector-user-links-main&#039; )&lt;br /&gt;
                 || document.querySelector( &#039;.vector-user-links&#039; );&lt;br /&gt;
    if ( !container ) return;&lt;br /&gt;
&lt;br /&gt;
    // Logged-out: show a single Login/Signup link, nothing else&lt;br /&gt;
    if ( isAnon ) {&lt;br /&gt;
        // Remove MediaWiki&#039;s native account links so only our button shows&lt;br /&gt;
        [ &#039;#pt-createaccount&#039;, &#039;#pt-login&#039;, &#039;#pt-anoncontribs&#039;,&lt;br /&gt;
          &#039;#pt-anontalk&#039;, &#039;#pt-anonuserpage&#039; ].forEach( function ( sel ) {&lt;br /&gt;
            document.querySelectorAll( sel ).forEach( function ( el ) {&lt;br /&gt;
                if ( el &amp;amp;&amp;amp; el.parentNode ) el.parentNode.removeChild( el );&lt;br /&gt;
            } );&lt;br /&gt;
        } );&lt;br /&gt;
        if ( document.getElementById( &#039;gr-login-link&#039; ) ) return;&lt;br /&gt;
        var loginA = document.createElement( &#039;a&#039; );&lt;br /&gt;
        loginA.id = &#039;gr-login-link&#039;;&lt;br /&gt;
        loginA.href = wikiHref( &#039;Special:UserLogin&#039; );&lt;br /&gt;
        loginA.textContent = &#039;Login/Signup&#039;;&lt;br /&gt;
        loginA.style.cssText = &#039;color:#fff;font-size:0.9em;font-weight:500;&#039; +&lt;br /&gt;
            &#039;text-decoration:none;padding:6px 12px;border-radius:6px;&#039; +&lt;br /&gt;
            &#039;background:rgba(255,255,255,0.12);white-space:nowrap;&#039;;&lt;br /&gt;
        loginA.addEventListener( &#039;mouseover&#039;, function(){ this.style.background=&#039;rgba(255,255,255,0.2)&#039;; } );&lt;br /&gt;
        loginA.addEventListener( &#039;mouseout&#039;,  function(){ this.style.background=&#039;rgba(255,255,255,0.12)&#039;; } );&lt;br /&gt;
        container.appendChild( loginA );&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Logout token (csrf token works for logout in modern MW)&lt;br /&gt;
    var token = ( window.mw &amp;amp;&amp;amp; mw.user &amp;amp;&amp;amp; mw.user.tokens )&lt;br /&gt;
      ? mw.user.tokens.get( &#039;csrfToken&#039; ) : &#039;+\\&#039;;&lt;br /&gt;
&lt;br /&gt;
    var wrap = document.createElement( &#039;div&#039; );&lt;br /&gt;
    wrap.id = &#039;gr-user-dropdown&#039;;&lt;br /&gt;
    wrap.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;button id=&amp;quot;gr-user-trigger&amp;quot; type=&amp;quot;button&amp;quot; aria-haspopup=&amp;quot;true&amp;quot; aria-expanded=&amp;quot;false&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;&#039; + (userName.replace(/&amp;lt;/g,&#039;&amp;amp;lt;&#039;)) + &#039;&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span class=&amp;quot;gr-caret&amp;quot;&amp;gt;▾&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;div id=&amp;quot;gr-user-menu&amp;quot; role=&amp;quot;menu&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;&#039; + wikiHref( &#039;Special:Profile&#039; ) + &#039;&amp;quot; role=&amp;quot;menuitem&amp;quot;&amp;gt;Profile&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;#&amp;quot; id=&amp;quot;gr-logout-link&amp;quot; role=&amp;quot;menuitem&amp;quot;&amp;gt;Log out&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
    container.appendChild( wrap );&lt;br /&gt;
&lt;br /&gt;
    var trigger = document.getElementById( &#039;gr-user-trigger&#039; );&lt;br /&gt;
    var menu    = document.getElementById( &#039;gr-user-menu&#039; );&lt;br /&gt;
&lt;br /&gt;
    trigger.addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      e.stopPropagation();&lt;br /&gt;
      var open = menu.classList.toggle( &#039;gr-open&#039; );&lt;br /&gt;
      trigger.setAttribute( &#039;aria-expanded&#039;, open ? &#039;true&#039; : &#039;false&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    document.addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      if ( !wrap.contains( e.target ) ) {&lt;br /&gt;
        menu.classList.remove( &#039;gr-open&#039; );&lt;br /&gt;
        trigger.setAttribute( &#039;aria-expanded&#039;, &#039;false&#039; );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    document.getElementById( &#039;gr-logout-link&#039; ).addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      e.preventDefault();&lt;br /&gt;
      // Fetch a fresh CSRF token at click time (more reliable than at load time)&lt;br /&gt;
      if ( window.mw &amp;amp;&amp;amp; mw.user &amp;amp;&amp;amp; mw.user.tokens ) {&lt;br /&gt;
        var t = mw.user.tokens.get( &#039;csrfToken&#039; );&lt;br /&gt;
        if ( t ) { buildLogoutForm( t ).submit(); return; }&lt;br /&gt;
      }&lt;br /&gt;
      // Fallback: use the API to get a logout token, then submit&lt;br /&gt;
      if ( window.mw &amp;amp;&amp;amp; mw.Api ) {&lt;br /&gt;
        new mw.Api().postWithToken( &#039;csrf&#039;, { action: &#039;logout&#039; } )&lt;br /&gt;
          .done( function () { location.href = &#039;/Main_Page&#039;; } )&lt;br /&gt;
          .fail( function () { location.href = &#039;/index.php?title=Special:UserLogout&#039;; } );&lt;br /&gt;
      } else {&lt;br /&gt;
        location.href = &#039;/index.php?title=Special:UserLogout&#039;;&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) {&lt;br /&gt;
    document.addEventListener( &#039;DOMContentLoaded&#039;, injectUserDropdown );&lt;br /&gt;
  } else {&lt;br /&gt;
    injectUserDropdown();&lt;br /&gt;
  }&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.css&amp;diff=6207</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.css&amp;diff=6207"/>
		<updated>2026-06-12T06:37:55Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ═══════════════════════════════════════════════════════════════════&lt;br /&gt;
   MediaWiki:Common.css — Anandamakaranda&lt;br /&gt;
   Clean rebuild — works on Vector (desktop) + Minerva (mobile)&lt;br /&gt;
   ═══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
&lt;br /&gt;
/* ── 1. CSS VARIABLES ──────────────────────────────────────────── */&lt;br /&gt;
:root {&lt;br /&gt;
  --maroon:       #be100e;&lt;br /&gt;
  --orange:       #e65100;&lt;br /&gt;
  --light-orange: #f57c00;&lt;br /&gt;
  --dark-gray:    #555;&lt;br /&gt;
  --light-gray:   #eee;&lt;br /&gt;
  --muted-gray:   #888;&lt;br /&gt;
  --text:         #1a1a1a;&lt;br /&gt;
  --brown:        #a07040;&lt;br /&gt;
  --light-brown:  #e8d4a0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 2. FONTS ──────────────────────────────────────────────────── */&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;Adishila&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/adishila/Adishila.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: normal; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;Adishila&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/adishila/AdishilaBold.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: bold; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;AdishilaDev&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/AdishilaDev.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: normal; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;AdishilaDev&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/AdishilaDeBv.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: bold; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;AdishilaDevGuru&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/AdishilaDevGuru.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: bold; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;Noto Sans Devanagari&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/Noto_Sans_Devanagari/NotoSansDevanagari.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: normal; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-content-text {&lt;br /&gt;
  font-family: &#039;Adishila&#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output {&lt;br /&gt;
  font-size: 22px;&lt;br /&gt;
  line-height: 1.7;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  max-width: 100%;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  margin: 0; padding: 0;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Danda marks wrap issue&lt;br /&gt;
.mw-parser-output { overflow-wrap: anywhere; }&lt;br /&gt;
&lt;br /&gt;
/* ── 4. HIDE ELEMENTS (both skins) ────────────────────────────── */&lt;br /&gt;
/* Page title */&lt;br /&gt;
h1.firstHeading, #firstHeading, .mw-page-title-main { display: none !important; }&lt;br /&gt;
/* Footer */&lt;br /&gt;
#footer, .mw-footer, .vector-footer, .vector-footer-container,&lt;br /&gt;
footer, .minerva-footer { display: none !important; }&lt;br /&gt;
/* Categories */&lt;br /&gt;
.catlinks, #catlinks, .mw-normal-catlinks, .mw-hidden-catlinks { display: none !important; }&lt;br /&gt;
/* Edit section links */&lt;br /&gt;
.mw-editsection, .mw-editsection-bracket { display: none !important; }&lt;br /&gt;
/* Site notice */&lt;br /&gt;
#siteNotice { display: none !important; }&lt;br /&gt;
/* Watchlist */&lt;br /&gt;
li#pt-watchlist, li#pt-watchlist-kbd { display: none !important; }&lt;br /&gt;
/* Appearance panel */&lt;br /&gt;
#vector-appearance, #vector-appearance-pinned-container,&lt;br /&gt;
#vector-appearance-unpinned-container, .mw-portlet-appearance,&lt;br /&gt;
#p-appearance, [aria-controls=&amp;quot;vector-appearance&amp;quot;] { display: none !important; }&lt;br /&gt;
/* Vector hamburger + sidebar */&lt;br /&gt;
#mw-sidebar-button, .vector-main-menu, .vector-main-menu-container,&lt;br /&gt;
.vector-main-menu-landmark, #vector-main-menu-dropdown { display: none !important; }&lt;br /&gt;
/* Vector search box (we use our own) */&lt;br /&gt;
#p-search, .vector-search-box, .vector-search-box-vue,&lt;br /&gt;
.vector-search-box-collapses { display: none !important; }&lt;br /&gt;
/* Vector page toolbar */&lt;br /&gt;
.vector-page-toolbar, .vector-page-toolbar-container { display: none !important; }&lt;br /&gt;
/* Vector page tools */&lt;br /&gt;
.vector-page-tools { display: none !important; }&lt;br /&gt;
/* Empty paragraphs */&lt;br /&gt;
.mw-parser-output p:empty,&lt;br /&gt;
.mw-parser-output &amp;gt; div &amp;gt; p:empty,&lt;br /&gt;
.mw-heading + p:empty,&lt;br /&gt;
.adhyaya-block + p:empty,&lt;br /&gt;
.verse-block + p:empty { display: none !important; margin: 0 !important; }&lt;br /&gt;
/* Empty divs */&lt;br /&gt;
.adhyaya-block:empty, .mw-parser-output div:empty { display: none !important; }&lt;br /&gt;
/* Cargo hidden */&lt;br /&gt;
.cargo-store-only { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 5. VECTOR HEADER (desktop only) ──────────────────────────── */&lt;br /&gt;
.vector-header-container {&lt;br /&gt;
  background: #b5451b !important;&lt;br /&gt;
  border-bottom: 1px solid rgba(255,255,255,0.12);&lt;br /&gt;
}&lt;br /&gt;
.vector-header {&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  justify-content: space-between !important;&lt;br /&gt;
  padding-left: 20px !important;&lt;br /&gt;
  padding-right: 20px !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-header-start {&lt;br /&gt;
  flex: 0 0 auto !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  gap: 12px;&lt;br /&gt;
}&lt;br /&gt;
.vector-header-end {&lt;br /&gt;
  flex: 0 0 auto !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  margin-left: auto;&lt;br /&gt;
}&lt;br /&gt;
.mw-logo { display: flex !important; align-items: center; opacity: 1 !important; }&lt;br /&gt;
.mw-logo-icon { width: 24px; height: 24px; }&lt;br /&gt;
&lt;br /&gt;
/* Site name */&lt;br /&gt;
.mw-logo-wordmark {&lt;br /&gt;
  font-size: 0 !important;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  flex-direction: column !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-logo-wordmark::before {&lt;br /&gt;
  content: &#039;Anandamakaranda&#039;;&lt;br /&gt;
  font-size: 17px;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-family: system-ui, -apple-system, sans-serif;&lt;br /&gt;
  letter-spacing: -0.01em;&lt;br /&gt;
}&lt;br /&gt;
.mw-logo-wordmark::after {&lt;br /&gt;
  content: &amp;quot;A Digital Archive of Dvaita Vedanta Literature&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  font-weight: 400;&lt;br /&gt;
  color: rgba(255,255,255,0.85);&lt;br /&gt;
  letter-spacing: 0.3px;&lt;br /&gt;
  margin-top: 1px;&lt;br /&gt;
  font-family: sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Header right links */&lt;br /&gt;
.vector-header-end &amp;gt; *:not(#p-search) { color: rgba(255,255,255,0.9) !important; }&lt;br /&gt;
.vector-user-links a { color: rgba(255,255,255,0.9) !important; }&lt;br /&gt;
&lt;br /&gt;
/* User icon white */&lt;br /&gt;
.vector-user-menu-container .vector-icon svg,&lt;br /&gt;
.vector-user-menu-container .vector-icon svg path,&lt;br /&gt;
.vector-user-menu-container .vector-icon svg circle {&lt;br /&gt;
  fill: #fff !important; stroke: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-user-links .vector-user-menu-chevron .vector-icon svg,&lt;br /&gt;
.vector-user-links .vector-user-menu-chevron .vector-icon svg path {&lt;br /&gt;
  fill: rgba(255,255,255,0.9) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* User dropdown — dark text on white card */&lt;br /&gt;
.vector-user-menu .mw-list-item a,&lt;br /&gt;
.vector-user-menu .vector-menu-content-list a,&lt;br /&gt;
#p-personal .vector-menu-content a,&lt;br /&gt;
.mw-portlet-personal .vector-menu-content a { color: #202122 !important; }&lt;br /&gt;
.vector-user-menu .mw-list-item a:hover { color: var(--light-orange) !important; }&lt;br /&gt;
&lt;br /&gt;
/* Suppress Vector sticky header clone */&lt;br /&gt;
.vector-sticky-header { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* Suppress body top padding that Vector adds */&lt;br /&gt;
.mw-body { margin-top: 0 !important; padding-top: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 6. VECTOR TOC (desktop sidebar) ──────────────────────────── */&lt;br /&gt;
.vector-toc .vector-toc-numb { display: none !important; }&lt;br /&gt;
.vector-toc .vector-toc-title {&lt;br /&gt;
  font-size: 0.72em !important; font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase; letter-spacing: 0.08em;&lt;br /&gt;
  color: var(--text) !important;&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, system-ui, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-toc .vector-toc-text {&lt;br /&gt;
  white-space: normal !important; word-break: break-word !important;&lt;br /&gt;
  overflow-wrap: anywhere !important; display: inline !important;&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, system-ui, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-toc a, .vector-toc .vector-toc-link {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, system-ui, sans-serif !important;&lt;br /&gt;
  color: var(--text) !important; text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-toc a:hover { color: var(--light-orange) !important; }&lt;br /&gt;
.vector-toc .vector-toc-list-item-active .vector-toc-link,&lt;br /&gt;
.vector-toc .vector-toc-list-item-active .vector-toc-link * {&lt;br /&gt;
  color: var(--light-orange) !important; font-weight: 700 !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-toc .cdx-button.vector-toc-toggle {&lt;br /&gt;
  background: none !important; border: none !important;&lt;br /&gt;
  box-shadow: none !important; color: var(--text) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 7. HEADINGS ───────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output h1, .mw-parser-output h2, .mw-parser-output h3, .mw-parser-output h4,&lt;br /&gt;
.mw-parser-output .mw-heading h1, .mw-parser-output .mw-heading h2,&lt;br /&gt;
.mw-parser-output .mw-heading h3 {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  border: none !important; padding: 0 !important; background: none !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output .mw-heading { border: none !important; margin: 0; padding: 0; }&lt;br /&gt;
&lt;br /&gt;
.mw-heading, .mw-heading2, .mw-heading3 { text-align:center; }&lt;br /&gt;
.mw-parser-output h2, .mw-parser-output .mw-heading2 h2 {&lt;br /&gt;
  font-size: 1.2em !important; font-weight: 500 !important;&lt;br /&gt;
  color: var(--maroon) !important; line-height: 1.8;&lt;br /&gt;
  margin: 24px 0 4px !important;&lt;br /&gt;
  border-bottom: 2px dotted var(--maroon) !important;&lt;br /&gt;
  width: 75%; font-family: &#039;AdishilaDev&#039;; text-align: center;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output h3, .mw-parser-output .mw-heading3 h3 {&lt;br /&gt;
  font-size: 1em !important; font-weight: 500 !important;&lt;br /&gt;
  color: var(--orange) !important; line-height: 1.5;&lt;br /&gt;
  margin: 24px 0 8px !important;&lt;br /&gt;
  border-bottom: 1px dotted var(--orange) !important;&lt;br /&gt;
  width: 55%; font-family: &#039;AdishilaDev&#039;; text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 8. PARAGRAPHS ─────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output p { margin: 0 0 0.35rem !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 9. DOCUMENT TITLE ─────────────────────────────────────────── */&lt;br /&gt;
.gr-doc-title {&lt;br /&gt;
  font-size: 2em; font-weight: 500; color: var(--maroon);&lt;br /&gt;
  line-height: 1.4; margin: 0 0 16px; border: none !important;&lt;br /&gt;
  text-align:center; font-family: &#039;AdishilaDev&#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 10. VERSE BLOCKS ──────────────────────────────────────────── */&lt;br /&gt;
.shloka-block { display: block; text-align: left; margin: 3px 0 0; padding-bottom: 0.5em; }&lt;br /&gt;
.shloka-line { display: block; font-style: normal; color: #333; line-height: 1.35; margin: 0; }&lt;br /&gt;
.verse-block { display: block; margin: 6px 0 0; text-align: left; }&lt;br /&gt;
.verse-block .shloka-block { text-align: left; margin: 0; }&lt;br /&gt;
.verse-block .shloka-line {&lt;br /&gt;
  display: block; font-style: italic; color: #c65;&lt;br /&gt;
  font-weight: 500; line-height: 1.35; margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.verse-block + p { display: none !important; margin: 0 !important; }&lt;br /&gt;
.mw-parser-output .verse-block,&lt;br /&gt;
.mw-parser-output .shloka-block { margin-top: 2px !important; margin-bottom: 2px !important; }&lt;br /&gt;
&lt;br /&gt;
.gr-verse-text, .verse-line, .verse-text {&lt;br /&gt;
  color: #b5451b; font-style: italic; line-height: 1.5; display: block; margin: 0.1em 0;&lt;br /&gt;
}&lt;br /&gt;
.gr-verse-type-sutra .gr-verse-text,&lt;br /&gt;
.verse-block[data-type=&amp;quot;sutra&amp;quot;] .verse-line { font-style: normal; font-weight: 600; color: #b5451b; }&lt;br /&gt;
&lt;br /&gt;
/* ── 11. UVACHA ────────────────────────────────────────────────── */&lt;br /&gt;
.uvacha-block {&lt;br /&gt;
  display: block; font-weight: bold; color: #c65;&lt;br /&gt;
  margin: 0.5rem 0 0; padding: 2px 0 2px 12px;&lt;br /&gt;
  border-left: 3px solid #c65; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
.uvacha-block + .verse-block { margin-top: 2px; }&lt;br /&gt;
.gr-uvaaca, .uvaaca {&lt;br /&gt;
  color: #b5451b; font-weight: 600; font-size: 0.92em; margin: 0.5em 0 0.2em 0; display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 12. BHASHYAM ──────────────────────────────────────────────── */&lt;br /&gt;
.bhashyam-block {&lt;br /&gt;
  display: block; font-size: 1em; line-height: 1.6; color: #555;&lt;br /&gt;
  margin: 0.25em 0 0.35em 48px; padding: 0; border: none; background: transparent;&lt;br /&gt;
}&lt;br /&gt;
.gr-bhashyam, .commentary-bhashyam {&lt;br /&gt;
  color: #222; font-style: normal; line-height: 1.75; margin: 0.3em 0 0.5em 0;&lt;br /&gt;
}&lt;br /&gt;
.gr-leading-bhashya { font-style: italic; color: #555; margin: 0.4em 0 0.5em 0; }&lt;br /&gt;
&lt;br /&gt;
/* ── 13. PADYA ─────────────────────────────────────────────────── */&lt;br /&gt;
.padya-block {&lt;br /&gt;
  display: block; font-size: 1em; line-height: 1.75; color: #c65 !important;&lt;br /&gt;
  font-style: italic; font-weight: 500; margin: 0.4em 0 0.6em 60px;&lt;br /&gt;
}&lt;br /&gt;
.gr-padapatha { font-size: 0.9em; color: #555; margin: 0.2em 0 0.3em 0.8em; }&lt;br /&gt;
&lt;br /&gt;
/* ── 14. TEEKA ─────────────────────────────────────────────────── */&lt;br /&gt;
.teeka-block {&lt;br /&gt;
  padding: 6px 10px 8px; margin: 0.3em 0; line-height: 1.6; color: #555;&lt;br /&gt;
}&lt;br /&gt;
.teeka-title {&lt;br /&gt;
  font-family: &#039;AdishilaDev&#039;;, sans-serif !important;&lt;br /&gt;
  font-size: 1.75em; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase;&lt;br /&gt;
  margin-bottom: 4px; padding-bottom: 3px;&lt;br /&gt;
}&lt;br /&gt;
.teeka-body .shloka-block {&lt;br /&gt;
  margin: 0.4em 0; padding: 0.3em 0.6em; font-family: &#039;AdishilaDev&#039;;&lt;br /&gt;
}&lt;br /&gt;
.teeka-body .shloka-line { font-style: italic; font-size: 0.97em; font-family: &#039;AdishilaDev&#039;; }&lt;br /&gt;
&lt;br /&gt;
/* ── 15. PRATEEKA / MOOLA ──────────────────────────────────────── */&lt;br /&gt;
.gr-prateeka { font-weight: bold; font-style: normal; color: #333; }&lt;br /&gt;
.gr-mulaprateeka-block {&lt;br /&gt;
  display: block; font-weight: bold; font-style: normal;&lt;br /&gt;
  text-align: center; color: #333; margin: 0.7em 0 0.3em; line-height: 1.5;&lt;br /&gt;
}&lt;br /&gt;
.gr-moola { font-weight: bold; font-style: italic; color: #c65; }&lt;br /&gt;
&lt;br /&gt;
/* ── 16. ADHYAYA ───────────────────────────────────────────────── */&lt;br /&gt;
.adhyaya-block { margin: 0 0 4px; }&lt;br /&gt;
.adhyaya-trans { font-size: 0.9em; color: #666; margin: 2px 0 0; }&lt;br /&gt;
.adhyaya-intro { margin-top: 8px; line-height: 1.75; color: #555; }&lt;br /&gt;
.introduction p { color: var(--dark-gray); font-weight: 400; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.introduction { padding-bottom: 0.5em; text-align: justify; }&lt;br /&gt;
&lt;br /&gt;
/* ── 17. NYAYA / PRASNA ────────────────────────────────────────── */&lt;br /&gt;
.nyaya-block { margin: 32px 0; padding-top: 12px; border-top: 1px solid #eee; }&lt;br /&gt;
.nyaya-title {&lt;br /&gt;
  font-size: 1em; font-weight: 500; color: var(--orange);&lt;br /&gt;
  margin-bottom: 0.4rem; border-bottom: 1px dotted var(--orange); width: 50%;&lt;br /&gt;
}&lt;br /&gt;
.nyaya-body { color: #555; line-height: 1.75; margin-top: 0.5rem; }&lt;br /&gt;
.prasna-block { margin: 32px 0; padding-top: 12px; border-top: 1px solid #eee; }&lt;br /&gt;
.prasna-title {&lt;br /&gt;
  font-size: 1em; font-weight: 500; color: var(--orange);&lt;br /&gt;
  margin-bottom: 0.4rem; border-bottom: 1px dotted var(--orange); width: 50%;&lt;br /&gt;
}&lt;br /&gt;
.prasna-question, .prasna-answer { color: #555; line-height: 1.75; margin-top: 0.5rem; }&lt;br /&gt;
.prasna-answer { margin-left: 60px; }&lt;br /&gt;
&lt;br /&gt;
/* ── 18. VYAKHYA ELEMENTS ──────────────────────────────────────── */&lt;br /&gt;
.gr-vyakhya-head, .gr-section-head {&lt;br /&gt;
  font-size: 0.9em; font-weight: 700; color: #6a3e00;&lt;br /&gt;
  margin: 0.35em 0 0.15em; font-family: inherit; border: none; padding: 0;&lt;br /&gt;
}&lt;br /&gt;
.gr-avataranika {&lt;br /&gt;
  font-style: italic; color: #444; margin: 0.2em 0 0.5em 0.5em;&lt;br /&gt;
  padding-left: 0.6em; border-left: 2px solid #c9a96e; line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
.gr-vyakhya-pada {&lt;br /&gt;
  font-size: 0.88em; color: #555; background: #fafafa;&lt;br /&gt;
  border: 1px solid #e8e0d0; border-radius: 4px; padding: 0.5em 0.8em;&lt;br /&gt;
  margin: 0.5em 0; line-height: 1.5; white-space: pre-wrap;&lt;br /&gt;
}&lt;br /&gt;
.gr-vyakhya-gadya {&lt;br /&gt;
  font-weight: bold; font-size: 0.95em; text-align: center;&lt;br /&gt;
  color: #8b1a1a; margin: 0.2em 0; line-height: 1.6; letter-spacing: 0.03em;&lt;br /&gt;
}&lt;br /&gt;
.gr-vyakhya-para { margin: 0 0 0.5em 0; line-height: 1.65; color: #444; }&lt;br /&gt;
.gr-embedded-bhashya { margin: 0.2em 0 0.2em 1em; line-height: 1.6; }&lt;br /&gt;
.gr-gadya {&lt;br /&gt;
  display: block !important; font-size: 0.96em !important; font-weight: 600 !important;&lt;br /&gt;
  font-style: normal !important; color: #555 !important; margin: 16px 0 4px !important;&lt;br /&gt;
  border-bottom: 1px solid #ddd !important; width: 60%; line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
.gr-author-note {&lt;br /&gt;
  font-style: italic; color: var(--maroon); text-align: center; font-size: 0.9em;&lt;br /&gt;
  margin: 0.8em 0 0.4em 0; border-top: 1px solid #ddd; padding-top: 0.4em; font-family: &#039;AdishilaDev&#039;&lt;br /&gt;
}&lt;br /&gt;
.gr-devatachandas { font-size: 0.82em; color: #777; margin: 0.4em 0 0.2em 0; }&lt;br /&gt;
.gr-vargikarana   { font-size: 0.82em; color: #888; margin: 0.5em 0 0.1em 0; }&lt;br /&gt;
&lt;br /&gt;
/* ── 20. BHASHYA COLLECTION ────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output .bhashya-collection { margin: 0; padding: 0; }&lt;br /&gt;
.mw-parser-output .bhashya + p:empty,&lt;br /&gt;
.mw-parser-output .verse + p:empty,&lt;br /&gt;
.mw-parser-output .bhashya-collection + p:empty,&lt;br /&gt;
.mw-parser-output .pramana + p:empty,&lt;br /&gt;
.mw-parser-output .author-note + p:empty { display: none !important; margin: 0 !important; height: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 21. VERSE ACTIONS ─────────────────────────────────────────── */&lt;br /&gt;
.verse-actions {&lt;br /&gt;
  display: flex; flex-direction: row; align-items: center;&lt;br /&gt;
  gap: 6px; margin-top: 4px; justify-content: center;&lt;br /&gt;
}&lt;br /&gt;
.verse-action-btn {&lt;br /&gt;
  display: inline-flex; align-items: center; justify-content: center;&lt;br /&gt;
  padding: 4px; border-radius: 6px; cursor: pointer; opacity: 0.75; transition: all 0.2s;&lt;br /&gt;
}&lt;br /&gt;
.verse-action-btn:hover { opacity: 1; background-color: rgba(0,0,0,0.05); }&lt;br /&gt;
.icon { display: inline-block; width: 18px; height: 18px; background-repeat: no-repeat; background-position: center; background-size: contain; }&lt;br /&gt;
.icon-copy       { background-image: url(&#039;/images/copy.svg&#039;); }&lt;br /&gt;
.icon-commentary { background-image: url(&#039;/images/commentary.svg&#039;); }&lt;br /&gt;
.copy-tooltip {&lt;br /&gt;
  position: absolute; bottom: calc(100% + 8px); left: 50%;&lt;br /&gt;
  transform: translateX(-50%) translateY(4px);&lt;br /&gt;
  white-space: nowrap; pointer-events: none; z-index: 9999;&lt;br /&gt;
  display: inline-flex; align-items: center; padding: 2px 8px; border-radius: 999px;&lt;br /&gt;
  font-size: 0.75rem; font-weight: 500; background: rgba(30,30,30,0.82); color: #fff;&lt;br /&gt;
  opacity: 0; transition: opacity 0.2s, transform 0.2s;&lt;br /&gt;
}&lt;br /&gt;
.copy-tooltip.copy-tooltip-visible { opacity: 1; transform: translateX(-50%) translateY(0); }&lt;br /&gt;
&lt;br /&gt;
/* ── 22. CODE / PRE ────────────────────────────────────────────── */&lt;br /&gt;
pre, code, .mw-code, tt, kbd {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif ;&lt;br /&gt;
  background-color: transparent !important; border: none !important; padding: 0.3em 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-collapsible, .mw-collapsible-content, blockquote, .quotebox {&lt;br /&gt;
  background-color: transparent !important; border: none !important;&lt;br /&gt;
  font-style: normal !important; padding: 0 !important; margin-left: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 23. INLINE TOC BOX (wikitext __TOC__) ─────────────────────── */&lt;br /&gt;
.toc {&lt;br /&gt;
  display: block !important; background: #fffdf5; border: 1px solid #e8c88a;&lt;br /&gt;
  border-radius: 8px; padding: 12px 16px; margin: 0 0 24px 0;&lt;br /&gt;
  width: fit-content; min-width: 220px; max-width: 420px;&lt;br /&gt;
  font-size: 0.9em; line-height: 2;&lt;br /&gt;
}&lt;br /&gt;
.toc h2, .toc .toctitle {&lt;br /&gt;
  font-size: 0.85em !important; font-weight: 600 !important; color: var(--text) !important;&lt;br /&gt;
  border: none !important; margin: 0 0 6px !important; text-transform: uppercase; letter-spacing: 0.05em;&lt;br /&gt;
}&lt;br /&gt;
.toc ul { margin: 0 !important; padding-left: 1.2em !important; list-style: none !important; }&lt;br /&gt;
.toc li { margin: 0; padding: 0; }&lt;br /&gt;
.toc a { color: var(--text) !important; text-decoration: none !important; }&lt;br /&gt;
.toc a:hover { color: var(--light-orange) !important; }&lt;br /&gt;
.toc .toclevel-1 &amp;gt; a { font-weight: 600; }&lt;br /&gt;
.tocnumber { display: none; }&lt;br /&gt;
&lt;br /&gt;
/* ── 24. DOC TEEKAS + TOC NAV ──────────────────────────────────── */&lt;br /&gt;
.gr-doc-teekas { margin-bottom: 1em; }&lt;br /&gt;
.gr-doc-teekas + p:empty { display: none !important; margin: 0 !important; height: 0 !important; }&lt;br /&gt;
.toc-main-links { display: flex; gap: 6px; padding: 5px; align-items: center; margin-bottom: 4px; }&lt;br /&gt;
.toc-main-link-item {&lt;br /&gt;
  font-size: 0.9em; color: var(--text); text-decoration: none; padding: 4px 8px;&lt;br /&gt;
  border-radius: 6px; background: rgba(0,0,0,0.05); transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.toc-main-link-item:hover { background: rgba(0,0,0,0.10) !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 25. MAIN PAGE ─────────────────────────────────────────────── */&lt;br /&gt;
body.page-Main_Page #mw-panel,&lt;br /&gt;
body.page-Main_Page .vector-sidebar-container { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
.gr-home { max-width: 1080px; margin: 0 auto; padding: 0; }&lt;br /&gt;
.gr-home-page-title {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif !important;&lt;br /&gt;
  text-align: center; font-size: 1.8em; font-weight: 500; color: #1a2e40; margin: 24px 0 32px;&lt;br /&gt;
}&lt;br /&gt;
.gr-home-grid { display: flex; flex-wrap: wrap; gap: 20px; margin-bottom: 32px; }&lt;br /&gt;
.gr-home-card {&lt;br /&gt;
  background: #fff; border: 1px solid #e8e4df; border-radius: 10px;&lt;br /&gt;
  box-shadow: 0 2px 8px rgba(0,0,0,0.07);&lt;br /&gt;
  padding: 18px 20px 20px; flex: 1 1 280px; min-width: 240px; max-width: 360px;&lt;br /&gt;
}&lt;br /&gt;
.gr-home-card-title {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif !important;&lt;br /&gt;
  font-size: 1em; font-weight: 600; color: #1a2e40; text-align: center;&lt;br /&gt;
  padding-bottom: 10px; margin-bottom: 12px; border-bottom: 1.5px solid #c0392b;&lt;br /&gt;
}&lt;br /&gt;
.gr-home-card ol { margin: 0; padding-left: 1.4em; list-style: decimal; }&lt;br /&gt;
.gr-home-card li { font-size: 0.95em; line-height: 1.85; color: #333; }&lt;br /&gt;
.gr-home-card li a { color: #c0392b; text-decoration: none; }&lt;br /&gt;
.gr-home-card li a:hover { text-decoration: underline; }&lt;br /&gt;
.gr-home-card li a.new { color: #c08080; }&lt;br /&gt;
.gr-home-note { font-size: 0.82em; color: #888; }&lt;br /&gt;
.gr-home-group-label {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif !important;&lt;br /&gt;
  font-size: 1.1em; font-weight: 600; color: #1a2e40; text-align: center;&lt;br /&gt;
  margin: 36px 0 16px; padding-bottom: 8px; border-bottom: 2px solid #c0392b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 26. TOGGLE BUTTONS ────────────────────────────────────────── */&lt;br /&gt;
.gr-home-toggle { display: flex; gap: 8px; margin: 0 0 24px; justify-content: center; }&lt;br /&gt;
.gr-toggle-btn {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  font-size: 0.88em; padding: 6px 20px; border: 1.5px solid #c0392b; border-radius: 20px;&lt;br /&gt;
  background: transparent; color: #c0392b; cursor: pointer; user-select: none; transition: background 0.15s, color 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gr-toggle-btn:hover { background: #fdf0ed; }&lt;br /&gt;
.gr-toggle-btn.gr-toggle-active { background: #c0392b; color: #fff; }&lt;br /&gt;
&lt;br /&gt;
/* ── 27. SCRIPT BAR ────────────────────────────────────────────── */&lt;br /&gt;
.gr-script-bar { margin: 0 0 20px; font-size: 0.8em; color: #888; display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }&lt;br /&gt;
.gr-script-label { font-family: system-ui, sans-serif; color: #aaa; }&lt;br /&gt;
.gr-script-btn { font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif; color: #c0392b !important; text-decoration: underline dotted !important; cursor: pointer; }&lt;br /&gt;
.gr-script-btn.active { color: #888 !important; text-decoration: none !important; cursor: default; }&lt;br /&gt;
&lt;br /&gt;
/* ── 28. MODALS ────────────────────────────────────────────────── */&lt;br /&gt;
.grantha-modal { position: fixed; inset: 0; background: rgba(0,0,0,0.35); display: flex; align-items: center; justify-content: center; z-index: 10000; }&lt;br /&gt;
.grantha-modal-box { background: white; padding: 20px; border-radius: 10px; width: 300px; }&lt;br /&gt;
.gm-title { font-weight: bold; margin-bottom: 10px; }&lt;br /&gt;
.gm-actions { display: flex; justify-content: flex-end; gap: 10px; margin-top: 12px; }&lt;br /&gt;
&lt;br /&gt;
/* ── 29. LOGIN PAGE ────────────────────────────────────────────── */&lt;br /&gt;
body.page-Special_UserLogin .vector-search-box,&lt;br /&gt;
body.page-Special_UserLogin #p-search { display: none !important; }&lt;br /&gt;
body.page-Special_UserLogin #content { max-width: 420px; margin: 40px auto !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 30. SPECIAL PAGES ─────────────────────────────────────────── */&lt;br /&gt;
body.ns-special #footer, body.ns-special .mw-footer,&lt;br /&gt;
body.ns-special .vector-footer { display: none !important; }&lt;br /&gt;
body.ns-special .vector-page-tools { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 31. MINERVA (mobile) ──────────────────────────────────────── */&lt;br /&gt;
.skin-minerva .mw-parser-output {&lt;br /&gt;
  font-size: 18px !important;&lt;br /&gt;
  line-height: 1.8 !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .mw-parser-output h2,&lt;br /&gt;
.skin-minerva .mw-parser-output .mw-heading2 h2 {&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .mw-parser-output h3,&lt;br /&gt;
.skin-minerva .mw-parser-output .mw-heading3 h3 {&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .bhashyam-block { margin-left: 16px !important; }&lt;br /&gt;
.skin-minerva .prasna-answer  { margin-left: 16px !important; }&lt;br /&gt;
.skin-minerva .padya-block    { margin-left: 16px !important; }&lt;br /&gt;
/* Home grid single column on Minerva */&lt;br /&gt;
.skin-minerva .gr-home-grid {&lt;br /&gt;
  flex-direction: column !important;&lt;br /&gt;
  flex-wrap: nowrap !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .gr-home-card {&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
  min-width: unset !important;&lt;br /&gt;
  flex: 0 0 auto !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
/* Hide things that should be hidden on mobile too */&lt;br /&gt;
.skin-minerva .catlinks,&lt;br /&gt;
.skin-minerva #catlinks { display: none !important; }&lt;br /&gt;
.skin-minerva .mw-editsection { display: none !important; }&lt;br /&gt;
/* Minerva already has its own TOC — hide our inline .toc */&lt;br /&gt;
.skin-minerva .toc { display: none !important; }&lt;br /&gt;
/* ReaderToolbar on Minerva */&lt;br /&gt;
.skin-minerva #gr-static-bar {&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  min-height: 52px !important;&lt;br /&gt;
  overflow-x: auto !important;&lt;br /&gt;
  overflow-y: hidden !important;&lt;br /&gt;
  scrollbar-width: none !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva #gr-static-bar::-webkit-scrollbar { display: none !important; }&lt;br /&gt;
.skin-minerva .gr-controls .gr-btn {&lt;br /&gt;
  height: 44px !important;&lt;br /&gt;
  min-width: 44px !important;&lt;br /&gt;
  font-size: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .gr-btn-staging { display: none !important; }&lt;br /&gt;
.skin-minerva .gr-controls .gr-sep { display: none !important; }&lt;br /&gt;
/* Minerva already shows page title — don&#039;t double-hide */&lt;br /&gt;
.skin-minerva h1.firstHeading { display: block !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 32. PRINT ─────────────────────────────────────────────────── */&lt;br /&gt;
@media print {&lt;br /&gt;
  #gr-static-bar, .gr-controls, .vector-header-container { display: none !important; }&lt;br /&gt;
  .mw-parser-output { font-size: 11pt !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 33. TYPOGRAPHY CLASSES ────────────────────────────────────── */&lt;br /&gt;
&lt;br /&gt;
/* Heading — center, maroon, AdishilaDevGuru */&lt;br /&gt;
.gr-heading {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  font-size: 1.09em;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  color: #be100e;&lt;br /&gt;
  font-family: &#039;AdishilaDevGuru&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  line-height: 1.4;&lt;br /&gt;
  margin: 0.45em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Sub-heading — center, orange, AdishilaDevGuru */&lt;br /&gt;
.gr-sub-heading {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  font-size: 0.73em;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  color: #e65100;&lt;br /&gt;
  font-family: &#039;AdishilaDevGuru&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
  margin: 0.5em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Chapter Heading — center, maroon, AdishilaDevGuru */&lt;br /&gt;
.gr-chapter-heading {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  font-size: 0.82em;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  color: #be100e;&lt;br /&gt;
  font-family: &#039;AdishilaDevGuru&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
  margin: 0.5em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* M.Veda Shloka — left, bold, maroon, AdishilaVed, 5mm indent */&lt;br /&gt;
.gr-mv-shloka {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: left;&lt;br /&gt;
  font-size: 0.82em;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  color: #be100e;&lt;br /&gt;
  font-family: &#039;AdishilaVed&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  padding-left: 0.86em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.75;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* M.Veda Gadya — justify, bold, maroon, AdishilaVed */&lt;br /&gt;
.gr-mv-gadya {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: justify;&lt;br /&gt;
  font-size: 0.82em;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  color: #be100e;&lt;br /&gt;
  font-family: &#039;AdishilaVed&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  text-indent: 1.18em;&lt;br /&gt;
  padding-left: 0.36em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.75;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* M.Shloka — left, bold, orange, AdishilaDev, 5mm indent */&lt;br /&gt;
.gr-m-shloka {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: left;&lt;br /&gt;
  font-size: 0.82em;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  color: #e65100;&lt;br /&gt;
  font-family: &#039;AdishilaDev&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  padding-left: 0.86em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.75;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* B.Shloka / TK.Shloka / TP.Shloka — left, black, AdishilaDev, 10mm indent */&lt;br /&gt;
.gr-b-shloka,&lt;br /&gt;
.gr-tp-shloka {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: left;&lt;br /&gt;
  font-size: 0.73em;&lt;br /&gt;
  font-weight: normal;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  font-family: &#039;AdishilaDev&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  padding-left: 1.73em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.75;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Reference — orange, AdishilaDev */&lt;br /&gt;
.gr-reference {&lt;br /&gt;
  color: #e65100;&lt;br /&gt;
  font-family: &#039;AdishilaDev&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Custom tag span — subtle dashed underline only */&lt;br /&gt;
.gr-custom {&lt;br /&gt;
  border-bottom: 1px dashed #b5451b;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 34. MINERVA HEADER — orange theme + sticky ────────────────── */&lt;br /&gt;
&lt;br /&gt;
/* Kill space above header */&lt;br /&gt;
.skin-minerva body { margin-top: 0 !important; padding-top: 0 !important; }&lt;br /&gt;
.skin-minerva #mw-mf-viewport,&lt;br /&gt;
.skin-minerva #mw-mf-page-center { margin-top: 0 !important; padding-top: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* Header — orange, sticky */&lt;br /&gt;
.skin-minerva header.header-container {&lt;br /&gt;
  background: #b5451b !important;&lt;br /&gt;
  position: sticky !important;&lt;br /&gt;
  top: 0 !important;&lt;br /&gt;
  z-index: 200 !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  color: #ffffff;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .minerva-header {&lt;br /&gt;
  background: #b5451b !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  min-height: 54px !important;&lt;br /&gt;
  padding: 0 12px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.minerva-icon {&lt;br /&gt;
 &lt;br /&gt;
 filter: brightness(0) saturate(100%) invert(100%) sepia(4%) saturate(1%) hue-rotate(296deg) brightness(104%) contrast(100%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Site name text */&lt;br /&gt;
.skin-minerva .branding-box { background: transparent !important; }&lt;br /&gt;
.skin-minerva .branding-box a {&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .branding-box a span {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-size: 18px !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  font-family: system-ui, -apple-system, sans-serif !important;&lt;br /&gt;
  white-space: nowrap !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hamburger + search icons — white */&lt;br /&gt;
.skin-minerva .minerva-header label,&lt;br /&gt;
.skin-minerva .minerva-header .search-toggle {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .minerva-header svg path,&lt;br /&gt;
.skin-minerva .minerva-header svg rect,&lt;br /&gt;
.skin-minerva .minerva-header svg circle {&lt;br /&gt;
  fill: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .minerva-header .mw-ui-icon:before {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  filter: brightness(10) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Reader toolbar below Minerva header */&lt;br /&gt;
.skin-minerva #gr-static-bar {&lt;br /&gt;
  position: sticky !important;&lt;br /&gt;
  top: 54px !important;&lt;br /&gt;
  z-index: 100 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 35. MINERVA — auto-expand sections ────────────────────────── */&lt;br /&gt;
.skin-minerva .collapsible-block,&lt;br /&gt;
.skin-minerva .collapsible-heading + .collapsible-block {&lt;br /&gt;
  display: block !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .mf-section-0,&lt;br /&gt;
.skin-minerva .mf-section-1,&lt;br /&gt;
.skin-minerva .mf-section-2,&lt;br /&gt;
.skin-minerva .mf-section-3,&lt;br /&gt;
.skin-minerva .mf-section-4,&lt;br /&gt;
.skin-minerva .mf-section-5,&lt;br /&gt;
.skin-minerva .mf-section-6,&lt;br /&gt;
.skin-minerva .mf-section-7,&lt;br /&gt;
.skin-minerva .mf-section-8,&lt;br /&gt;
.skin-minerva .mf-section-9 {&lt;br /&gt;
  display: block !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .section-heading {&lt;br /&gt;
  pointer-events: none !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .section-heading .indicator {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* ── Hide MediaWiki default header user/account controls (desktop) ── */&lt;br /&gt;
#pt-userpage-2,&lt;br /&gt;
#p-vector-user-menu-userpage,&lt;br /&gt;
/* Hide the right-side person-icon dropdown */&lt;br /&gt;
#vector-user-links-dropdown,&lt;br /&gt;
.vector-user-links-dropdown,&lt;br /&gt;
#p-personal-more,&lt;br /&gt;
.vector-user-menu,&lt;br /&gt;
.mw-portlet-vector-user-menu-overflow,&lt;br /&gt;
#pt-watchlist-2, #pt-watchlist {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Hide original userpage text link */&lt;br /&gt;
#p-vector-user-menu-userpage { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* Hide the right-side person-icon user menu dropdown */&lt;br /&gt;
#vector-user-links-dropdown { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Custom username dropdown ── */&lt;br /&gt;
#gr-user-dropdown {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    font-family: system-ui, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
#gr-user-trigger {&lt;br /&gt;
    display: inline-flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    gap: 6px;&lt;br /&gt;
    background: rgba(255,255,255,0.12);&lt;br /&gt;
    border: none;&lt;br /&gt;
    color: #fff;&lt;br /&gt;
    font-size: 0.9em;&lt;br /&gt;
    font-weight: 500;&lt;br /&gt;
    padding: 6px 12px;&lt;br /&gt;
    border-radius: 6px;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
#gr-user-trigger:hover { background: rgba(255,255,255,0.2); }&lt;br /&gt;
#gr-user-trigger .gr-caret { font-size: 0.7em; opacity: 0.8; }&lt;br /&gt;
&lt;br /&gt;
#gr-user-menu {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: calc(100% + 6px);&lt;br /&gt;
    right: 0;&lt;br /&gt;
    min-width: 180px;&lt;br /&gt;
    background: #fff;&lt;br /&gt;
    border: 1px solid #e0d8d2;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
    box-shadow: 0 6px 24px rgba(0,0,0,0.14);&lt;br /&gt;
    padding: 6px;&lt;br /&gt;
    z-index: 1000;&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
#gr-user-menu.gr-open { display: block; }&lt;br /&gt;
#gr-user-menu a {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    gap: 10px;&lt;br /&gt;
    padding: 10px 12px;&lt;br /&gt;
    color: #2c1810;&lt;br /&gt;
    text-decoration: none;&lt;br /&gt;
    font-size: 0.92em;&lt;br /&gt;
    border-radius: 6px;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
#gr-user-menu a:hover { background: #f7f1ed; }&lt;br /&gt;
.vector-user-links a {&lt;br /&gt;
    color: #1C1A17 !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-user-links-main  {&lt;br /&gt;
 display: none !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.js&amp;diff=6206</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.js&amp;diff=6206"/>
		<updated>2026-06-12T06:34:57Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* MediaWiki:Common.js — grantha.io  (v7) */&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
  var LS_SCRIPT_KEY = &#039;grantha_reader_script&#039;;&lt;br /&gt;
  var currentScript = &#039;deva&#039;;&lt;br /&gt;
&lt;br /&gt;
  function devanagariToIAST( text ) {&lt;br /&gt;
    var CONSONANTS = {&lt;br /&gt;
      &#039;क&#039;:&#039;k&#039;,&#039;ख&#039;:&#039;kh&#039;,&#039;ग&#039;:&#039;g&#039;,&#039;घ&#039;:&#039;gh&#039;,&#039;ङ&#039;:&#039;ṅ&#039;,&lt;br /&gt;
      &#039;च&#039;:&#039;c&#039;,&#039;छ&#039;:&#039;ch&#039;,&#039;ज&#039;:&#039;j&#039;,&#039;झ&#039;:&#039;jh&#039;,&#039;ञ&#039;:&#039;ñ&#039;,&lt;br /&gt;
      &#039;ट&#039;:&#039;ṭ&#039;,&#039;ठ&#039;:&#039;ṭh&#039;,&#039;ड&#039;:&#039;ḍ&#039;,&#039;ढ&#039;:&#039;ḍh&#039;,&#039;ण&#039;:&#039;ṇ&#039;,&lt;br /&gt;
      &#039;त&#039;:&#039;t&#039;,&#039;थ&#039;:&#039;th&#039;,&#039;द&#039;:&#039;d&#039;,&#039;ध&#039;:&#039;dh&#039;,&#039;न&#039;:&#039;n&#039;,&lt;br /&gt;
      &#039;प&#039;:&#039;p&#039;,&#039;फ&#039;:&#039;ph&#039;,&#039;ब&#039;:&#039;b&#039;,&#039;भ&#039;:&#039;bh&#039;,&#039;म&#039;:&#039;m&#039;,&lt;br /&gt;
      &#039;य&#039;:&#039;y&#039;,&#039;र&#039;:&#039;r&#039;,&#039;ल&#039;:&#039;l&#039;,&#039;ळ&#039;:&#039;ḷ&#039;,&#039;व&#039;:&#039;v&#039;,&lt;br /&gt;
      &#039;श&#039;:&#039;ś&#039;,&#039;ष&#039;:&#039;ṣ&#039;,&#039;स&#039;:&#039;s&#039;,&#039;ह&#039;:&#039;h&#039;&lt;br /&gt;
    };&lt;br /&gt;
    var DIACRITICS = {&lt;br /&gt;
      &#039;ा&#039;:&#039;ā&#039;,&#039;ि&#039;:&#039;i&#039;,&#039;ी&#039;:&#039;ī&#039;,&#039;ु&#039;:&#039;u&#039;,&#039;ू&#039;:&#039;ū&#039;,&lt;br /&gt;
      &#039;ृ&#039;:&#039;ṛ&#039;,&#039;ॄ&#039;:&#039;ṝ&#039;,&#039;े&#039;:&#039;e&#039;,&#039;ै&#039;:&#039;ai&#039;,&#039;ो&#039;:&#039;o&#039;,&#039;ौ&#039;:&#039;au&#039;&lt;br /&gt;
    };&lt;br /&gt;
    var VOWELS = {&lt;br /&gt;
      &#039;अ&#039;:&#039;a&#039;,&#039;आ&#039;:&#039;ā&#039;,&#039;इ&#039;:&#039;i&#039;,&#039;ई&#039;:&#039;ī&#039;,&#039;उ&#039;:&#039;u&#039;,&#039;ऊ&#039;:&#039;ū&#039;,&lt;br /&gt;
      &#039;ऋ&#039;:&#039;ṛ&#039;,&#039;ॠ&#039;:&#039;ṝ&#039;,&#039;ए&#039;:&#039;e&#039;,&#039;ऐ&#039;:&#039;ai&#039;,&#039;ओ&#039;:&#039;o&#039;,&#039;औ&#039;:&#039;au&#039;,&#039;ऽ&#039;:&amp;quot;&#039;&amp;quot;&lt;br /&gt;
    };&lt;br /&gt;
    var MISC = {&lt;br /&gt;
      &#039;ं&#039;:&#039;ṃ&#039;,&#039;ः&#039;:&#039;ḥ&#039;,&#039;ँ&#039;:&#039;m̐&#039;,&#039;ॐ&#039;:&#039;oṃ&#039;,&lt;br /&gt;
      &#039;०&#039;:&#039;0&#039;,&#039;१&#039;:&#039;1&#039;,&#039;२&#039;:&#039;2&#039;,&#039;३&#039;:&#039;3&#039;,&#039;४&#039;:&#039;4&#039;,&lt;br /&gt;
      &#039;५&#039;:&#039;5&#039;,&#039;६&#039;:&#039;6&#039;,&#039;७&#039;:&#039;7&#039;,&#039;८&#039;:&#039;8&#039;,&#039;९&#039;:&#039;9&#039;&lt;br /&gt;
    };&lt;br /&gt;
    var HALANTA = &#039;्&#039;;&lt;br /&gt;
    var chars = Array.from( text );&lt;br /&gt;
    var result = &#039;&#039;;&lt;br /&gt;
    var i = 0;&lt;br /&gt;
    while ( i &amp;lt; chars.length ) {&lt;br /&gt;
      var ch   = chars[ i ];&lt;br /&gt;
      var next = chars[ i + 1 ];&lt;br /&gt;
      if ( CONSONANTS[ ch ] ) {&lt;br /&gt;
        var base = CONSONANTS[ ch ];&lt;br /&gt;
        if ( next === HALANTA )          { result += base;               i += 2; }&lt;br /&gt;
        else if ( DIACRITICS[ next ] )   { result += base + DIACRITICS[ next ]; i += 2; }&lt;br /&gt;
        else if ( next === &#039;ं&#039; || next === &#039;ः&#039; ) { result += base + &#039;a&#039; + MISC[ next ]; i += 2; }&lt;br /&gt;
        else                             { result += base + &#039;a&#039;;         i++;    }&lt;br /&gt;
      } else if ( VOWELS[ ch ] )         { result += VOWELS[ ch ];       i++; }&lt;br /&gt;
      else if ( DIACRITICS[ ch ] )       { result += DIACRITICS[ ch ];   i++; }&lt;br /&gt;
      else if ( MISC[ ch ] )             { result += MISC[ ch ];         i++; }&lt;br /&gt;
      else                               { result += ch;                 i++; }&lt;br /&gt;
    }&lt;br /&gt;
    return result;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var SCRIPT_MAP = {&lt;br /&gt;
    kn: {&lt;br /&gt;
      &#039;अ&#039;:&#039;ಅ&#039;,&#039;आ&#039;:&#039;ಆ&#039;,&#039;इ&#039;:&#039;ಇ&#039;,&#039;ई&#039;:&#039;ಈ&#039;,&#039;उ&#039;:&#039;ಉ&#039;,&#039;ऊ&#039;:&#039;ಊ&#039;,&#039;ऋ&#039;:&#039;ಋ&#039;,&lt;br /&gt;
      &#039;ए&#039;:&#039;ಏ&#039;,&#039;ऐ&#039;:&#039;ಐ&#039;,&#039;ओ&#039;:&#039;ಓ&#039;,&#039;औ&#039;:&#039;ಔ&#039;,&#039;ऽ&#039;:&#039;ಽ&#039;,&lt;br /&gt;
      &#039;क&#039;:&#039;ಕ&#039;,&#039;ख&#039;:&#039;ಖ&#039;,&#039;ग&#039;:&#039;ಗ&#039;,&#039;घ&#039;:&#039;ಘ&#039;,&#039;ङ&#039;:&#039;ಙ&#039;,&lt;br /&gt;
      &#039;च&#039;:&#039;ಚ&#039;,&#039;छ&#039;:&#039;ಛ&#039;,&#039;ज&#039;:&#039;ಜ&#039;,&#039;झ&#039;:&#039;ಝ&#039;,&#039;ञ&#039;:&#039;ಞ&#039;,&lt;br /&gt;
      &#039;ट&#039;:&#039;ಟ&#039;,&#039;ठ&#039;:&#039;ಠ&#039;,&#039;ड&#039;:&#039;ಡ&#039;,&#039;ढ&#039;:&#039;ಢ&#039;,&#039;ण&#039;:&#039;ಣ&#039;,&lt;br /&gt;
      &#039;त&#039;:&#039;ತ&#039;,&#039;थ&#039;:&#039;ಥ&#039;,&#039;द&#039;:&#039;ದ&#039;,&#039;ध&#039;:&#039;ಧ&#039;,&#039;न&#039;:&#039;ನ&#039;,&lt;br /&gt;
      &#039;प&#039;:&#039;ಪ&#039;,&#039;फ&#039;:&#039;ಫ&#039;,&#039;ब&#039;:&#039;ಬ&#039;,&#039;भ&#039;:&#039;ಭ&#039;,&#039;म&#039;:&#039;ಮ&#039;,&lt;br /&gt;
      &#039;य&#039;:&#039;ಯ&#039;,&#039;र&#039;:&#039;ರ&#039;,&#039;ल&#039;:&#039;ಲ&#039;,&#039;व&#039;:&#039;ವ&#039;,&lt;br /&gt;
      &#039;श&#039;:&#039;ಶ&#039;,&#039;ष&#039;:&#039;ಷ&#039;,&#039;स&#039;:&#039;ಸ&#039;,&#039;ह&#039;:&#039;ಹ&#039;,&lt;br /&gt;
      &#039;ा&#039;:&#039;ಾ&#039;,&#039;ि&#039;:&#039;ಿ&#039;,&#039;ी&#039;:&#039;ೀ&#039;,&#039;ु&#039;:&#039;ು&#039;,&#039;ू&#039;:&#039;ೂ&#039;,&lt;br /&gt;
      &#039;ृ&#039;:&#039;ೃ&#039;,&#039;े&#039;:&#039;ೇ&#039;,&#039;ै&#039;:&#039;ೈ&#039;,&#039;ो&#039;:&#039;ೋ&#039;,&#039;ौ&#039;:&#039;ೌ&#039;,&lt;br /&gt;
      &#039;ं&#039;:&#039;ಂ&#039;,&#039;ः&#039;:&#039;ಃ&#039;,&#039;्&#039;:&#039;್&#039;,&lt;br /&gt;
      &#039;०&#039;:&#039;೦&#039;,&#039;१&#039;:&#039;೧&#039;,&#039;२&#039;:&#039;೨&#039;,&#039;३&#039;:&#039;೩&#039;,&#039;४&#039;:&#039;೪&#039;,&lt;br /&gt;
      &#039;५&#039;:&#039;೫&#039;,&#039;६&#039;:&#039;೬&#039;,&#039;७&#039;:&#039;೭&#039;,&#039;८&#039;:&#039;೮&#039;,&#039;९&#039;:&#039;೯&#039;&lt;br /&gt;
    },&lt;br /&gt;
    ta: {&lt;br /&gt;
      &#039;अ&#039;:&#039;அ&#039;,&#039;आ&#039;:&#039;ஆ&#039;,&#039;इ&#039;:&#039;இ&#039;,&#039;ई&#039;:&#039;ஈ&#039;,&#039;उ&#039;:&#039;உ&#039;,&#039;ऊ&#039;:&#039;ஊ&#039;,&lt;br /&gt;
      &#039;ऋ&#039;:&#039;ரு&#039;,&#039;ॠ&#039;:&#039;ரூ&#039;,&lt;br /&gt;
      &#039;ए&#039;:&#039;ஏ&#039;,&#039;ऐ&#039;:&#039;ஐ&#039;,&#039;ओ&#039;:&#039;ஓ&#039;,&#039;औ&#039;:&#039;ஔ&#039;,&lt;br /&gt;
      &#039;क&#039;:&#039;க&#039;,&#039;ख&#039;:&#039;க&#039;,&#039;ग&#039;:&#039;க&#039;,&#039;घ&#039;:&#039;க&#039;,&#039;ङ&#039;:&#039;ங&#039;,&lt;br /&gt;
      &#039;च&#039;:&#039;ச&#039;,&#039;छ&#039;:&#039;ச&#039;,&#039;ज&#039;:&#039;ஜ&#039;,&#039;झ&#039;:&#039;ஜ&#039;,&#039;ञ&#039;:&#039;ஞ&#039;,&lt;br /&gt;
      &#039;ட&#039;:&#039;ட&#039;,&#039;ठ&#039;:&#039;ட&#039;,&#039;ड&#039;:&#039;ட&#039;,&#039;ढ&#039;:&#039;ட&#039;,&#039;ண&#039;:&#039;ண&#039;,&lt;br /&gt;
      &#039;त&#039;:&#039;த&#039;,&#039;थ&#039;:&#039;த&#039;,&#039;द&#039;:&#039;த&#039;,&#039;ध&#039;:&#039;த&#039;,&#039;न&#039;:&#039;ந&#039;,&lt;br /&gt;
      &#039;प&#039;:&#039;ப&#039;,&#039;फ&#039;:&#039;ப&#039;,&#039;ब&#039;:&#039;ப&#039;,&#039;भ&#039;:&#039;ப&#039;,&#039;म&#039;:&#039;ம&#039;,&lt;br /&gt;
      &#039;य&#039;:&#039;ய&#039;,&#039;र&#039;:&#039;ர&#039;,&#039;ल&#039;:&#039;ல&#039;,&#039;ळ&#039;:&#039;ழ&#039;,&#039;व&#039;:&#039;வ&#039;,&lt;br /&gt;
      &#039;श&#039;:&#039;ஶ&#039;,&#039;ष&#039;:&#039;ஷ&#039;,&#039;स&#039;:&#039;ஸ&#039;,&#039;ह&#039;:&#039;ஹ&#039;,&lt;br /&gt;
      &#039;ा&#039;:&#039;ா&#039;,&#039;ि&#039;:&#039;ி&#039;,&#039;ी&#039;:&#039;ீ&#039;,&#039;ु&#039;:&#039;ு&#039;,&#039;ू&#039;:&#039;ூ&#039;,&lt;br /&gt;
      &#039;ृ&#039;:&#039;ு&#039;,&#039;ॄ&#039;:&#039;ூ&#039;,&lt;br /&gt;
      &#039;े&#039;:&#039;ே&#039;,&#039;ை&#039;:&#039;ை&#039;,&#039;ो&#039;:&#039;ோ&#039;,&#039;ौ&#039;:&#039;ௌ&#039;,&lt;br /&gt;
      &#039;ं&#039;:&#039;ம்&#039;,&#039;ः&#039;:&#039;:&#039;,&#039;ँ&#039;:&#039;ம்&#039;,&#039;्&#039;:&#039;்&#039;,&#039;ॐ&#039;:&#039;ௐ&#039;,&#039;ऽ&#039;:&#039;ௗ&#039;,&lt;br /&gt;
      &#039;०&#039;:&#039;0&#039;,&#039;१&#039;:&#039;1&#039;,&#039;२&#039;:&#039;2&#039;,&#039;३&#039;:&#039;3&#039;,&#039;४&#039;:&#039;4&#039;,&lt;br /&gt;
      &#039;५&#039;:&#039;5&#039;,&#039;६&#039;:&#039;6&#039;,&#039;७&#039;:&#039;7&#039;,&#039;८&#039;:&#039;8&#039;,&#039;९&#039;:&#039;9&#039;&lt;br /&gt;
    }&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  var PRE = [&lt;br /&gt;
    [ /ङ्क/g, &#039;ंक&#039; ], [ /ङ्ख/g, &#039;ंख&#039; ], [ /ङ्ग/g, &#039;ंग&#039; ], [ /ङ्घ/g, &#039;ंघ&#039; ],&lt;br /&gt;
    [ /ञ्च/g, &#039;ंच&#039; ], [ /ञ्ज/g, &#039;ंज&#039; ], [ /ण्ट/g, &#039;ंट&#039; ], [ /ण्ड/g, &#039;ंड&#039; ],&lt;br /&gt;
    [ /न्त/g, &#039;ंत&#039; ], [ /न्द/g, &#039;ंद&#039; ], [ /म्ब/g, &#039;ंब&#039; ], [ /म्भ/g, &#039;ंभ&#039; ]&lt;br /&gt;
  ];&lt;br /&gt;
&lt;br /&gt;
  function transliterateText( text, script ) {&lt;br /&gt;
    if ( script === &#039;en&#039; ) return devanagariToIAST( text );&lt;br /&gt;
    var map = SCRIPT_MAP[ script ];&lt;br /&gt;
    if ( !map ) return text;&lt;br /&gt;
    var t = text;&lt;br /&gt;
    PRE.forEach( function ( p ) { t = t.replace( p[ 0 ], p[ 1 ] ); } );&lt;br /&gt;
    return Array.from( t ).map( function ( ch ) {&lt;br /&gt;
      return map[ ch ] !== undefined ? map[ ch ] : ch;&lt;br /&gt;
    } ).join( &#039;&#039; );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var translatableSpans = [];&lt;br /&gt;
&lt;br /&gt;
  function tagTextNodes() {&lt;br /&gt;
    var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
    if ( content ) {&lt;br /&gt;
      var walker = document.createTreeWalker( content, NodeFilter.SHOW_TEXT );&lt;br /&gt;
      var nodes  = [];&lt;br /&gt;
      while ( walker.nextNode() ) nodes.push( walker.currentNode );&lt;br /&gt;
      nodes.forEach( function ( node ) {&lt;br /&gt;
        var p = node.parentNode;&lt;br /&gt;
        if ( !p ) return;&lt;br /&gt;
        if ( p.hasAttribute &amp;amp;&amp;amp; p.hasAttribute( &#039;data-deva&#039; ) ) return;&lt;br /&gt;
        if ( p.closest ) {&lt;br /&gt;
          if ( p.closest( &#039;.gr-controls&#039; )    ) return;&lt;br /&gt;
          if ( p.closest( &#039;.mw-editsection&#039; ) ) return;&lt;br /&gt;
        }&lt;br /&gt;
        var orig = node.textContent;&lt;br /&gt;
        if ( !orig.trim() ) return;&lt;br /&gt;
        var span = document.createElement( &#039;span&#039; );&lt;br /&gt;
        span.setAttribute( &#039;data-deva&#039;, orig );&lt;br /&gt;
        span.textContent = orig;&lt;br /&gt;
        p.replaceChild( span, node );&lt;br /&gt;
        translatableSpans.push( span );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
    document.querySelectorAll( &#039;.vector-toc .vector-toc-text&#039; ).forEach( function ( span ) {&lt;br /&gt;
      if ( span.hasAttribute( &#039;data-deva&#039; ) ) return;&lt;br /&gt;
      var orig = span.textContent;&lt;br /&gt;
      if ( !orig.trim() ) return;&lt;br /&gt;
      span.setAttribute( &#039;data-deva&#039;, orig );&lt;br /&gt;
      translatableSpans.push( span );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function applyScript( script ) {&lt;br /&gt;
    currentScript = script;&lt;br /&gt;
    translatableSpans.forEach( function ( span ) {&lt;br /&gt;
      if ( !span.parentNode ) return;&lt;br /&gt;
      var orig = span.getAttribute( &#039;data-deva&#039; );&lt;br /&gt;
      if ( !orig ) return;&lt;br /&gt;
      span.textContent = ( script === &#039;deva&#039; )&lt;br /&gt;
        ? orig&lt;br /&gt;
        : transliterateText( orig, script );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function _isNoTocPage() {&lt;br /&gt;
    var pn = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039; ) ) || &#039;&#039;;&lt;br /&gt;
    return pn === &#039;Main_Page&#039; || /^[A-Za-z0-9_]+:About$/.test( pn );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function renameTocTitle() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    var titleEl = toc.querySelector(&#039;.vector-toc-title&#039;) || toc.querySelector(&#039;.vector-pinnable-header-label&#039;);&lt;br /&gt;
    if ( !titleEl ) return;&lt;br /&gt;
    var LABEL = &#039;विषयसूची&#039;;&lt;br /&gt;
    var span = titleEl.querySelector(&#039;.gr-toc-title&#039;);&lt;br /&gt;
    if ( !span ) {&lt;br /&gt;
      titleEl.innerHTML = &#039;&#039;;&lt;br /&gt;
      span = document.createElement(&#039;span&#039;);&lt;br /&gt;
      span.className = &#039;gr-toc-title&#039;;&lt;br /&gt;
      span.setAttribute(&#039;data-deva&#039;, LABEL);&lt;br /&gt;
      titleEl.appendChild(span);&lt;br /&gt;
      translatableSpans.push(span);&lt;br /&gt;
    }&lt;br /&gt;
    span.textContent = currentScript === &#039;deva&#039; ? LABEL : transliterateText(LABEL, currentScript);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function removeTocBeginning() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    var el = toc.querySelector( &#039;#vector-toc-beginning&#039; );&lt;br /&gt;
    if ( !el ) {&lt;br /&gt;
      var items = toc.querySelectorAll( &#039;.vector-toc-list-item&#039; );&lt;br /&gt;
      for ( var i = 0; i &amp;lt; items.length; i++ ) {&lt;br /&gt;
        var a = items[ i ].querySelector( &#039;a&#039; );&lt;br /&gt;
        if ( a ) {&lt;br /&gt;
          var href = a.getAttribute( &#039;href&#039; ) || &#039;&#039;;&lt;br /&gt;
          if ( href.indexOf( &#039;#&#039; ) === -1 ) { el = items[ i ]; break; }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if ( el &amp;amp;&amp;amp; el.parentNode ) el.parentNode.removeChild( el );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function expandTocSections() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    toc.querySelectorAll( &#039;.vector-toc-list-item-collapsed&#039; ).forEach( function ( li ) {&lt;br /&gt;
      li.classList.remove( &#039;vector-toc-list-item-collapsed&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function injectTocDocNav() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    if ( document.getElementById( &#039;gr-toc-doc-nav&#039; ) ) return;&lt;br /&gt;
    var artPath   = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
    var pageTitle = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039;   ) ) || &#039;&#039;;&lt;br /&gt;
    var teekaPage   = document.querySelector( &#039;.gr-teeka-page&#039; );&lt;br /&gt;
    var primarySlug = teekaPage ? ( teekaPage.getAttribute( &#039;data-primary&#039; ) || &#039;&#039; ) : &#039;&#039;;&lt;br /&gt;
    if ( !primarySlug ) { primarySlug = pageTitle.split( &#039;/&#039; )[ 0 ]; }&lt;br /&gt;
    if ( !primarySlug ) return;&lt;br /&gt;
    function wikiUrl( slug ) {&lt;br /&gt;
      if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( slug );&lt;br /&gt;
      return artPath.replace( &#039;$1&#039;, encodeURIComponent( slug ).replace( /%2F/g, &#039;/&#039; ) );&lt;br /&gt;
    }&lt;br /&gt;
    var docTitleEl     = document.querySelector( &#039;.gr-doc-title&#039; );&lt;br /&gt;
    var hasMoolaPage   = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-moola&#039; )   === &#039;1&#039;;&lt;br /&gt;
    var hasUllekhaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-ullekha&#039; ) === &#039;1&#039;;&lt;br /&gt;
    var showMoolaPage  = !teekaPage &amp;amp;&amp;amp; hasMoolaPage;&lt;br /&gt;
    var showMoolaBack  = !!teekaPage;&lt;br /&gt;
    var showUllekha    = hasUllekhaPage || !!teekaPage;&lt;br /&gt;
    if ( !showMoolaPage &amp;amp;&amp;amp; !showMoolaBack &amp;amp;&amp;amp; !showUllekha ) return;&lt;br /&gt;
    var nav = document.createElement( &#039;div&#039; );&lt;br /&gt;
    nav.id = &#039;gr-toc-doc-nav&#039;;&lt;br /&gt;
    nav.setAttribute( &#039;class&#039;, &#039;toc-main-links&#039; );&lt;br /&gt;
    function makeBtn( href, label ) {&lt;br /&gt;
      var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
      a.href = href;&lt;br /&gt;
      a.setAttribute( &#039;class&#039;, &#039;toc-main-link-item&#039; );&lt;br /&gt;
      var lspan = document.createElement( &#039;span&#039; );&lt;br /&gt;
      lspan.setAttribute( &#039;data-deva&#039;, label );&lt;br /&gt;
      lspan.textContent = ( currentScript &amp;amp;&amp;amp; currentScript !== &#039;deva&#039; ) ? transliterateText( label, currentScript ) : label;&lt;br /&gt;
      translatableSpans.push( lspan );&lt;br /&gt;
      a.appendChild( lspan );&lt;br /&gt;
      a.addEventListener( &#039;mouseover&#039;, function () { this.style.opacity = &#039;0.72&#039;; } );&lt;br /&gt;
      a.addEventListener( &#039;mouseout&#039;,  function () { this.style.opacity = &#039;1&#039;;    } );&lt;br /&gt;
      return a;&lt;br /&gt;
    }&lt;br /&gt;
    if ( showMoolaPage ) nav.appendChild( makeBtn( wikiUrl( primarySlug + &#039;/Moola&#039; ), &#039;मूलम्&#039; ) );&lt;br /&gt;
    if ( showMoolaBack ) nav.appendChild( makeBtn( wikiUrl( primarySlug ),            &#039;मूल&#039;   ) );&lt;br /&gt;
    if ( showUllekha   ) nav.appendChild( makeBtn( wikiUrl( primarySlug + &#039;/Ullekha&#039;), &#039;उल्लेख&#039;) );&lt;br /&gt;
    var tocContents = toc.querySelector( &#039;.vector-toc-contents&#039; );&lt;br /&gt;
    if ( tocContents ) toc.insertBefore( nav, tocContents );&lt;br /&gt;
    else               toc.appendChild( nav );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var _headingObserver = null;&lt;br /&gt;
&lt;br /&gt;
  function attachHeadingObserver() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    if ( _headingObserver ) return;&lt;br /&gt;
    if ( !window.IntersectionObserver ) return;&lt;br /&gt;
    var ACTIVE_COLOR = &#039;#f57c00&#039;;&lt;br /&gt;
    var _activeId    = null;&lt;br /&gt;
    var content  = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
    if ( !content ) return;&lt;br /&gt;
    var headings = Array.from( content.querySelectorAll( &#039;h1[id],h2[id],h3[id],h4[id],h5[id],h6[id]&#039; ) );&lt;br /&gt;
    if ( !headings.length ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    function getTocLink( id ) { return toc.querySelector( &#039;a[href=&amp;quot;#&#039; + CSS.escape( id ) + &#039;&amp;quot;]&#039; ); }&lt;br /&gt;
    function getTocLi( id ) { var a = getTocLink( id ); return a ? a.closest( &#039;.vector-toc-list-item&#039; ) : null; }&lt;br /&gt;
    function clearActive() {&lt;br /&gt;
      toc.querySelectorAll( &#039;.vector-toc-list-item&#039; ).forEach( function ( li ) {&lt;br /&gt;
        li.classList.remove( &#039;vector-toc-list-item-active&#039; );&lt;br /&gt;
        var lnk = li.querySelector( &#039;.vector-toc-link&#039; );&lt;br /&gt;
        if ( !lnk ) return;&lt;br /&gt;
        lnk.style.removeProperty( &#039;color&#039; );&lt;br /&gt;
        lnk.style.setProperty( &#039;font-weight&#039;, &#039;400&#039;, &#039;important&#039; );&lt;br /&gt;
        lnk.querySelectorAll( &#039;*&#039; ).forEach( function ( el ) { el.style.removeProperty( &#039;color&#039; ); el.style.setProperty( &#039;font-weight&#039;, &#039;400&#039;, &#039;important&#039; ); } );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
    function setActive( id ) {&lt;br /&gt;
      if ( _activeId === id ) return;&lt;br /&gt;
      _activeId = id;&lt;br /&gt;
      clearActive();&lt;br /&gt;
      if ( !id ) return;&lt;br /&gt;
      var li = getTocLi( id );&lt;br /&gt;
      if ( !li ) return;&lt;br /&gt;
      li.classList.add( &#039;vector-toc-list-item-active&#039; );&lt;br /&gt;
      var hasActiveChild = !!li.querySelector( &#039;.vector-toc-list-item .vector-toc-list-item-active&#039; );&lt;br /&gt;
      if ( !hasActiveChild ) {&lt;br /&gt;
        var lnk = li.querySelector( &#039;.vector-toc-link&#039; );&lt;br /&gt;
        if ( lnk ) {&lt;br /&gt;
          lnk.style.setProperty( &#039;color&#039;, ACTIVE_COLOR, &#039;important&#039; );&lt;br /&gt;
          lnk.style.setProperty( &#039;font-weight&#039;, &#039;700&#039;, &#039;important&#039; );&lt;br /&gt;
          lnk.querySelectorAll( &#039;*&#039; ).forEach( function ( el ) { el.style.setProperty( &#039;color&#039;, ACTIVE_COLOR, &#039;important&#039; ); el.style.setProperty( &#039;font-weight&#039;, &#039;700&#039;, &#039;important&#039; ); } );&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      var anc = li.parentNode;&lt;br /&gt;
      while ( anc &amp;amp;&amp;amp; anc !== toc ) {&lt;br /&gt;
        if ( anc.classList ) anc.classList.remove( &#039;vector-toc-list-item-collapsed&#039; );&lt;br /&gt;
        if ( anc.tagName === &#039;UL&#039; || anc.tagName === &#039;LI&#039; ) anc.style.removeProperty( &#039;display&#039; );&lt;br /&gt;
        anc = anc.parentNode;&lt;br /&gt;
      }&lt;br /&gt;
      var sticky = document.querySelector( &#039;.vector-sticky-pinned-container&#039; );&lt;br /&gt;
      var scrollEl = sticky || toc;&lt;br /&gt;
      if ( scrollEl.scrollHeight &amp;gt; scrollEl.clientHeight ) {&lt;br /&gt;
        var lr = li.getBoundingClientRect();&lt;br /&gt;
        var cr = scrollEl.getBoundingClientRect();&lt;br /&gt;
        if ( lr.top &amp;lt; cr.top + 8 || lr.bottom &amp;gt; cr.bottom - 8 ) {&lt;br /&gt;
          scrollEl.scrollTop += lr.top - cr.top - scrollEl.clientHeight / 2 + li.offsetHeight / 2;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    var _visible = new Set();&lt;br /&gt;
    _headingObserver = new IntersectionObserver( function ( entries ) {&lt;br /&gt;
      entries.forEach( function ( entry ) {&lt;br /&gt;
        if ( entry.isIntersecting ) _visible.add( entry.target.id );&lt;br /&gt;
        else _visible.delete( entry.target.id );&lt;br /&gt;
      } );&lt;br /&gt;
      var topId = null, topY = Infinity;&lt;br /&gt;
      _visible.forEach( function ( id ) {&lt;br /&gt;
        var el = document.getElementById( id );&lt;br /&gt;
        if ( el ) { var y = el.getBoundingClientRect().top; if ( y &amp;gt;= 0 &amp;amp;&amp;amp; y &amp;lt; topY ) { topY = y; topId = id; } }&lt;br /&gt;
      } );&lt;br /&gt;
      if ( !topId ) {&lt;br /&gt;
        var bestY = -Infinity;&lt;br /&gt;
        headings.forEach( function ( h ) { var y = h.getBoundingClientRect().top; if ( y &amp;lt; 0 &amp;amp;&amp;amp; y &amp;gt; bestY ) { bestY = y; topId = h.id; } } );&lt;br /&gt;
      }&lt;br /&gt;
      setActive( topId || null );&lt;br /&gt;
    }, { rootMargin: &#039;-60px 0px -65% 0px&#039;, threshold: 0 } );&lt;br /&gt;
    headings.forEach( function ( h ) { _headingObserver.observe( h ); } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function setupToc() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    removeTocBeginning();&lt;br /&gt;
    renameTocTitle();&lt;br /&gt;
    expandTocSections();&lt;br /&gt;
    injectTocDocNav();&lt;br /&gt;
    attachHeadingObserver();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function init() {&lt;br /&gt;
    var HIDE_IDS = [ &#039;vector-appearance&#039;, &#039;vector-appearance-pinned-container&#039;, &#039;vector-appearance-unpinned-container&#039; ];&lt;br /&gt;
    function removeHiddenEls() {&lt;br /&gt;
      HIDE_IDS.forEach( function ( id ) { var el = document.getElementById( id ); if ( el &amp;amp;&amp;amp; el.parentNode ) el.parentNode.removeChild( el ); } );&lt;br /&gt;
      var pt = document.getElementById( &#039;vector-page-tools&#039; ) || document.querySelector( &#039;.vector-page-tools-pinned-container&#039; );&lt;br /&gt;
      if ( pt ) pt.querySelectorAll( &#039;[aria-controls=&amp;quot;vector-appearance&amp;quot;]&#039; ).forEach( function ( el ) { if ( el.parentNode ) el.parentNode.removeChild( el ); } );&lt;br /&gt;
    }&lt;br /&gt;
    removeHiddenEls();&lt;br /&gt;
    ( function detectTeekaMode() {&lt;br /&gt;
      var tp = document.querySelector( &#039;.gr-teeka-page&#039; );&lt;br /&gt;
      if ( !tp ) return;&lt;br /&gt;
      var primary = tp.getAttribute( &#039;data-primary&#039; ) || &#039;&#039;;&lt;br /&gt;
      var artPath = ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
      var mainUrl = artPath.replace( &#039;$1&#039;, primary );&lt;br /&gt;
      var refParam = window.location.search.match( /[?&amp;amp;]ref=([01])/ );&lt;br /&gt;
      if ( refParam ) { document.body.classList.add( refParam[1] === &#039;1&#039; ? &#039;gr-ref-mode&#039; : &#039;gr-standalone&#039; ); return; }&lt;br /&gt;
      var ref = document.referrer || &#039;&#039;;&lt;br /&gt;
      document.body.classList.add( ( ref &amp;amp;&amp;amp; primary &amp;amp;&amp;amp; ref.indexOf( mainUrl ) !== -1 ) ? &#039;gr-ref-mode&#039; : &#039;gr-standalone&#039; );&lt;br /&gt;
    }() );&lt;br /&gt;
    if ( window.MutationObserver ) {&lt;br /&gt;
      var hideObs = new MutationObserver( function ( mutations ) {&lt;br /&gt;
        var dirty = false;&lt;br /&gt;
        mutations.forEach( function ( m ) { if ( m.addedNodes.length ) dirty = true; } );&lt;br /&gt;
        if ( dirty ) removeHiddenEls();&lt;br /&gt;
      } );&lt;br /&gt;
      hideObs.observe( document.body, { childList: true, subtree: false } );&lt;br /&gt;
      setTimeout( function () { hideObs.disconnect(); }, 6000 );&lt;br /&gt;
    }&lt;br /&gt;
    var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
    var alreadyTagged = content &amp;amp;&amp;amp; content.querySelector( &#039;[data-deva]&#039; );&lt;br /&gt;
    if ( !alreadyTagged ) { translatableSpans = []; tagTextNodes(); }&lt;br /&gt;
    else {&lt;br /&gt;
      document.querySelectorAll( &#039;.vector-toc .vector-toc-text:not([data-deva])&#039; ).forEach( function ( span ) {&lt;br /&gt;
        var orig = span.textContent; if ( !orig.trim() ) return;&lt;br /&gt;
        span.setAttribute( &#039;data-deva&#039;, orig ); translatableSpans.push( span );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
    var saved = ( function () { try { return localStorage.getItem( LS_SCRIPT_KEY ); } catch ( e ) { return null; } }() );&lt;br /&gt;
    if ( saved &amp;amp;&amp;amp; saved !== &#039;deva&#039; ) { applyScript( saved ); } else { currentScript = &#039;deva&#039;; }&lt;br /&gt;
    setTimeout( setupToc, 200 );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  window.addEventListener( &#039;gr-script-change&#039;, function ( e ) {&lt;br /&gt;
    var script = e &amp;amp;&amp;amp; e.detail &amp;amp;&amp;amp; e.detail.script;&lt;br /&gt;
    if ( script ) applyScript( script );&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
  window.addEventListener( &#039;gr-new-content&#039;, function ( e ) {&lt;br /&gt;
    var container = e &amp;amp;&amp;amp; e.detail &amp;amp;&amp;amp; e.detail.container;&lt;br /&gt;
    if ( !container ) return;&lt;br /&gt;
    var walker = document.createTreeWalker( container, NodeFilter.SHOW_TEXT );&lt;br /&gt;
    var nodes = [];&lt;br /&gt;
    while ( walker.nextNode() ) nodes.push( walker.currentNode );&lt;br /&gt;
    nodes.forEach( function ( node ) {&lt;br /&gt;
      var p = node.parentNode;&lt;br /&gt;
      if ( !p || ( p.hasAttribute &amp;amp;&amp;amp; p.hasAttribute( &#039;data-deva&#039; ) ) ) return;&lt;br /&gt;
      var orig = node.textContent;&lt;br /&gt;
      if ( !orig.trim() ) return;&lt;br /&gt;
      var span = document.createElement( &#039;span&#039; );&lt;br /&gt;
      span.setAttribute( &#039;data-deva&#039;, orig );&lt;br /&gt;
      span.textContent = currentScript !== &#039;deva&#039; ? transliterateText( orig, currentScript ) : orig;&lt;br /&gt;
      p.replaceChild( span, node );&lt;br /&gt;
      translatableSpans.push( span );&lt;br /&gt;
    } );&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
  try {&lt;br /&gt;
    var _grBC = new BroadcastChannel( &#039;gr-script&#039; );&lt;br /&gt;
    _grBC.onmessage = function ( e ) {&lt;br /&gt;
      var script = e &amp;amp;&amp;amp; e.data &amp;amp;&amp;amp; e.data.script;&lt;br /&gt;
      if ( script ) { currentScript = script; var sel = document.querySelector( &#039;.gr-script-sel&#039; ); if ( sel ) sel.value = script; applyScript( script ); }&lt;br /&gt;
    };&lt;br /&gt;
  } catch ( e ) {}&lt;br /&gt;
&lt;br /&gt;
  if ( window.mw ) {&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
      setTimeout( function () {&lt;br /&gt;
        var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
        var alreadyTagged = content &amp;amp;&amp;amp; content.querySelector( &#039;[data-deva]&#039; );&lt;br /&gt;
        if ( !alreadyTagged ) { translatableSpans = []; tagTextNodes(); }&lt;br /&gt;
        else {&lt;br /&gt;
          document.querySelectorAll( &#039;.vector-toc .vector-toc-text:not([data-deva])&#039; ).forEach( function ( span ) {&lt;br /&gt;
            var orig = span.textContent; if ( !orig.trim() ) return;&lt;br /&gt;
            span.setAttribute( &#039;data-deva&#039;, orig ); translatableSpans.push( span );&lt;br /&gt;
          } );&lt;br /&gt;
        }&lt;br /&gt;
        if ( currentScript !== &#039;deva&#039; ) applyScript( currentScript );&lt;br /&gt;
        setupToc();&lt;br /&gt;
      }, 150 );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) { document.addEventListener( &#039;DOMContentLoaded&#039;, init ); }&lt;br /&gt;
  else { init(); }&lt;br /&gt;
&lt;br /&gt;
}() );   /* ← end of main IIFE */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Inject &amp;quot;Help&amp;quot; and &amp;quot;About&amp;quot; links into the header ─────────────────&lt;br /&gt;
( function () {&lt;br /&gt;
  function wikiHref( title ) {&lt;br /&gt;
    if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( title );&lt;br /&gt;
    var ap = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
    return ap.replace( &#039;$1&#039;, title );&lt;br /&gt;
  }&lt;br /&gt;
  var linkStyle = [ &#039;color:rgba(255,255,255,0.88)&#039;,&#039;font-size:0.88em&#039;,&#039;font-family:system-ui,sans-serif&#039;,&#039;font-weight:500&#039;,&#039;text-decoration:none&#039;,&#039;padding:4px 10px&#039;,&#039;border-radius:4px&#039;,&#039;margin-right:4px&#039;,&#039;transition:color 0.15s,background 0.15s&#039;,&#039;white-space:nowrap&#039; ].join( &#039;;&#039; );&lt;br /&gt;
  function makeHeaderLink( id, href, label ) {&lt;br /&gt;
    var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
    a.id = id; a.href = href; a.textContent = label; a.style.cssText = linkStyle;&lt;br /&gt;
    a.addEventListener( &#039;mouseover&#039;, function () { this.style.color = &#039;#fff&#039;; this.style.background = &#039;rgba(255,255,255,0.12)&#039;; } );&lt;br /&gt;
    a.addEventListener( &#039;mouseout&#039;,  function () { this.style.color = &#039;rgba(255,255,255,0.88)&#039;; this.style.background = &#039;transparent&#039;; } );&lt;br /&gt;
    return a;&lt;br /&gt;
  }&lt;br /&gt;
  function injectHeaderLinks() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-about-link&#039; ) ) return;&lt;br /&gt;
    var headerEnd = document.querySelector( &#039;.vector-header-end&#039; ) || document.querySelector( &#039;#vector-user-links&#039; ) || document.querySelector( &#039;.mw-header&#039; );&lt;br /&gt;
    if ( !headerEnd ) return;&lt;br /&gt;
    var helpLink  = makeHeaderLink( &#039;gr-help-link&#039;,  wikiHref( &#039;My_wiki:Help&#039;  ), &#039;Help&#039;  );&lt;br /&gt;
    var aboutLink = makeHeaderLink( &#039;gr-about-link&#039;, wikiHref( &#039;My_wiki:About&#039; ), &#039;About&#039; );&lt;br /&gt;
    var ul = document.querySelector( &#039;.vector-user-links&#039; ) || document.querySelector( &#039;#pt-userpage&#039; );&lt;br /&gt;
    if ( ul &amp;amp;&amp;amp; ul.parentNode === headerEnd ) { headerEnd.insertBefore( aboutLink, ul ); headerEnd.insertBefore( helpLink, aboutLink ); }&lt;br /&gt;
    else { headerEnd.appendChild( helpLink ); headerEnd.appendChild( aboutLink ); }&lt;br /&gt;
  }&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) document.addEventListener( &#039;DOMContentLoaded&#039;, injectHeaderLinks );&lt;br /&gt;
  else injectHeaderLinks();&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Main page: by-Grantha / by-Author toggle ──────────────────────&lt;br /&gt;
( function () {&lt;br /&gt;
  function grHomeView( v ) {&lt;br /&gt;
    var gView = document.getElementById( &#039;gr-view-grantha&#039; );&lt;br /&gt;
    var aView = document.getElementById( &#039;gr-view-author&#039; );&lt;br /&gt;
    var gBtn  = document.getElementById( &#039;gr-toggle-grantha&#039; );&lt;br /&gt;
    var aBtn  = document.getElementById( &#039;gr-toggle-author&#039; );&lt;br /&gt;
    if ( !gView || !aView || !gBtn || !aBtn ) return;&lt;br /&gt;
    gView.style.display = ( v === &#039;grantha&#039; ) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
    aView.style.display = ( v === &#039;author&#039;  ) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
    gBtn.className = &#039;gr-toggle-btn&#039; + ( v === &#039;grantha&#039; ? &#039; gr-toggle-active&#039; : &#039;&#039; );&lt;br /&gt;
    aBtn.className = &#039;gr-toggle-btn&#039; + ( v === &#039;author&#039;  ? &#039; gr-toggle-active&#039; : &#039;&#039; );&lt;br /&gt;
    try { localStorage.setItem( &#039;gr_home_view&#039;, v ); } catch ( e ) {}&lt;br /&gt;
  }&lt;br /&gt;
  function initHomeToggle() {&lt;br /&gt;
    var gBtn = document.getElementById( &#039;gr-toggle-grantha&#039; );&lt;br /&gt;
    var aBtn = document.getElementById( &#039;gr-toggle-author&#039; );&lt;br /&gt;
    if ( !gBtn || !aBtn ) return;&lt;br /&gt;
    gBtn.addEventListener( &#039;click&#039;, function () { grHomeView( &#039;grantha&#039; ); } );&lt;br /&gt;
    aBtn.addEventListener( &#039;click&#039;, function () { grHomeView( &#039;author&#039; );  } );&lt;br /&gt;
    [ gBtn, aBtn ].forEach( function ( btn ) { btn.addEventListener( &#039;keydown&#039;, function ( e ) { if ( e.key === &#039;Enter&#039; || e.key === &#039; &#039; ) btn.click(); } ); } );&lt;br /&gt;
    var saved; try { saved = localStorage.getItem( &#039;gr_home_view&#039; ); } catch ( e ) {}&lt;br /&gt;
    if ( saved === &#039;author&#039; ) grHomeView( &#039;author&#039; );&lt;br /&gt;
  }&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) document.addEventListener( &#039;DOMContentLoaded&#039;, initHomeToggle );&lt;br /&gt;
  else initHomeToggle();&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Ullekha reference link handler ─────────────────────────────────&lt;br /&gt;
( function () {&lt;br /&gt;
  function highlightOnArrival() {&lt;br /&gt;
    var search = window.location.search;&lt;br /&gt;
    if ( !search ) return;&lt;br /&gt;
    var m = search.match( /[?&amp;amp;]hlUllekha=([^&amp;amp;]+)/ );&lt;br /&gt;
    if ( !m ) return;&lt;br /&gt;
    var needle;&lt;br /&gt;
    try { needle = decodeURIComponent( m[ 1 ] ); } catch ( e ) { return; }&lt;br /&gt;
    if ( !needle || needle.length &amp;lt; 4 ) return;&lt;br /&gt;
    function doHighlight() {&lt;br /&gt;
      var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
      if ( !content ) return;&lt;br /&gt;
      var snippet = needle.slice( 0, 40 );&lt;br /&gt;
      var found   = false;&lt;br /&gt;
      var spans = content.querySelectorAll( &#039;[data-deva]&#039; );&lt;br /&gt;
      for ( var i = 0; i &amp;lt; spans.length &amp;amp;&amp;amp; !found; i++ ) {&lt;br /&gt;
        var spanEl = spans[ i ];&lt;br /&gt;
        var orig   = spanEl.getAttribute( &#039;data-deva&#039; ) || &#039;&#039;;&lt;br /&gt;
        if ( orig.indexOf( snippet ) === -1 ) continue;&lt;br /&gt;
        var idx    = orig.indexOf( snippet );&lt;br /&gt;
        var hlText = orig.slice( idx, Math.min( idx + needle.length, orig.length ) );&lt;br /&gt;
        var mark   = document.createElement( &#039;mark&#039; );&lt;br /&gt;
        mark.className = &#039;gr-ullekha-highlight&#039;;&lt;br /&gt;
        mark.style.cssText = &#039;background:#fff176;border-radius:2px;padding:0 2px;&#039;;&lt;br /&gt;
        mark.textContent = hlText;&lt;br /&gt;
        var parent = spanEl.parentNode;&lt;br /&gt;
        if ( !parent ) continue;&lt;br /&gt;
        var before = document.createTextNode( orig.slice( 0, idx ) );&lt;br /&gt;
        var after  = document.createTextNode( orig.slice( idx + hlText.length ) );&lt;br /&gt;
        parent.insertBefore( before, spanEl ); parent.insertBefore( mark, spanEl ); parent.insertBefore( after, spanEl ); parent.removeChild( spanEl );&lt;br /&gt;
        setTimeout( function () { mark.scrollIntoView( { behavior: &#039;smooth&#039;, block: &#039;center&#039; } ); }, 100 );&lt;br /&gt;
        found = true;&lt;br /&gt;
      }&lt;br /&gt;
      if ( !found ) {&lt;br /&gt;
        var walker = document.createTreeWalker( content, NodeFilter.SHOW_TEXT );&lt;br /&gt;
        while ( walker.nextNode() &amp;amp;&amp;amp; !found ) {&lt;br /&gt;
          var node = walker.currentNode;&lt;br /&gt;
          var txt  = node.textContent || &#039;&#039;;&lt;br /&gt;
          if ( txt.indexOf( snippet ) === -1 ) continue;&lt;br /&gt;
          var idx2  = txt.indexOf( snippet );&lt;br /&gt;
          var mark2 = document.createElement( &#039;mark&#039; );&lt;br /&gt;
          mark2.className = &#039;gr-ullekha-highlight&#039;;&lt;br /&gt;
          mark2.style.cssText = &#039;background:#fff176;border-radius:2px;padding:0 2px;&#039;;&lt;br /&gt;
          mark2.textContent = txt.slice( idx2, Math.min( idx2 + needle.length, txt.length ) );&lt;br /&gt;
          var p = node.parentNode;&lt;br /&gt;
          p.insertBefore( document.createTextNode( txt.slice( 0, idx2 ) ), node );&lt;br /&gt;
          p.insertBefore( mark2, node );&lt;br /&gt;
          p.insertBefore( document.createTextNode( txt.slice( idx2 + mark2.textContent.length ) ), node );&lt;br /&gt;
          p.removeChild( node );&lt;br /&gt;
          setTimeout( function () { mark2.scrollIntoView( { behavior: &#039;smooth&#039;, block: &#039;center&#039; } ); }, 100 );&lt;br /&gt;
          found = true;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    doHighlight();&lt;br /&gt;
  }&lt;br /&gt;
  function wireUllekhaLinks() {&lt;br /&gt;
    document.querySelectorAll( &#039;.gr-ullekha-ref-link&#039; ).forEach( function ( wrap ) {&lt;br /&gt;
      var anchor = wrap.getAttribute( &#039;data-anchor&#039; ) || &#039;&#039;;&lt;br /&gt;
      var hl     = wrap.getAttribute( &#039;data-hl&#039; )     || &#039;&#039;;&lt;br /&gt;
      var a = wrap.querySelector( &#039;a&#039; );&lt;br /&gt;
      if ( !a ) return;&lt;br /&gt;
      var base = a.href.split( &#039;#&#039; )[ 0 ];&lt;br /&gt;
      var encoded = encodeURIComponent( hl );&lt;br /&gt;
      a.href = base + ( hl ? &#039;?hlUllekha=&#039; + encoded : &#039;&#039; ) + ( anchor ? &#039;#&#039; + anchor : &#039;&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) { document.addEventListener( &#039;DOMContentLoaded&#039;, function () { highlightOnArrival(); wireUllekhaLinks(); } ); }&lt;br /&gt;
  else { highlightOnArrival(); wireUllekhaLinks(); }&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
/* ── Search result highlight ──────────────────────────────────── */&lt;br /&gt;
/* EXACT REPLACEMENT for the search highlight IIFE in MediaWiki:Common.js.&lt;br /&gt;
 * Only changes from the original working version:&lt;br /&gt;
 *  - Mobile bar: full-width terracotta bottom bar instead of floating pill&lt;br /&gt;
 *  - showDismissBar: guard added (if !count return) to prevent empty bar&lt;br /&gt;
 * Everything else (storeQueryForLink, applyHighlight, wrapMatches) is&lt;br /&gt;
 * identical to the version that was working.&lt;br /&gt;
 */&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
  function storeQueryForLink( url, query ) {&lt;br /&gt;
    try {&lt;br /&gt;
      var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
      a.href = url;&lt;br /&gt;
      sessionStorage.setItem( &#039;gr_search_hl&#039;, JSON.stringify({&lt;br /&gt;
        query:    query,&lt;br /&gt;
        pathname: a.pathname&lt;br /&gt;
      }) );&lt;br /&gt;
    } catch(e) {}&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function applyHighlight() {&lt;br /&gt;
    var stored;&lt;br /&gt;
    try {&lt;br /&gt;
      stored = JSON.parse( sessionStorage.getItem( &#039;gr_search_hl&#039; ) || &#039;null&#039; );&lt;br /&gt;
    } catch(e) { return; }&lt;br /&gt;
    if ( !stored || !stored.query ) return;&lt;br /&gt;
&lt;br /&gt;
    var currentPath = window.location.pathname;&lt;br /&gt;
    var storedPath  = stored.pathname || &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
    function normPath(p) { return decodeURIComponent(p).replace(/\/+$/, &#039;&#039;); }&lt;br /&gt;
    if ( storedPath &amp;amp;&amp;amp; normPath(storedPath) !== normPath(currentPath) ) {&lt;br /&gt;
      try { sessionStorage.removeItem( &#039;gr_search_hl&#039; ); } catch(e) {}&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var query = stored.query.trim();&lt;br /&gt;
    if ( !query ) return;&lt;br /&gt;
&lt;br /&gt;
    try { sessionStorage.removeItem( &#039;gr_search_hl&#039; ); } catch(e) {}&lt;br /&gt;
&lt;br /&gt;
    var delays = [ 0, 200, 600 ];&lt;br /&gt;
    delays.forEach( function(ms) {&lt;br /&gt;
      setTimeout( function() {&lt;br /&gt;
        if ( document.querySelector( &#039;.gr-search-hl&#039; ) ) return;&lt;br /&gt;
        highlightText( query );&lt;br /&gt;
      }, ms );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function highlightText( query ) {&lt;br /&gt;
    var content = document.querySelector( &#039;#mw-content-text .mw-parser-output&#039; );&lt;br /&gt;
    if ( !content ) return;&lt;br /&gt;
&lt;br /&gt;
    var raw = query.replace( /^&amp;quot;|&amp;quot;$/g, &#039;&#039; ).trim();&lt;br /&gt;
    if ( !raw ) return;&lt;br /&gt;
&lt;br /&gt;
    var patterns = [];&lt;br /&gt;
    patterns.push( escapeRegex( raw ) );&lt;br /&gt;
    raw.split( /\s+/ ).forEach( function(w) {&lt;br /&gt;
      if ( w.length &amp;gt;= 2 ) patterns.push( escapeRegex( w ) );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    var matched = false;&lt;br /&gt;
    for ( var pi = 0; pi &amp;lt; patterns.length; pi++ ) {&lt;br /&gt;
      var re;&lt;br /&gt;
      try { re = new RegExp( &#039;(&#039; + patterns[pi] + &#039;)&#039;, &#039;gi&#039; ); }&lt;br /&gt;
      catch(e) { continue; }&lt;br /&gt;
      var count = wrapMatches( content, re );&lt;br /&gt;
      if ( count &amp;gt; 0 ) { matched = true; break; }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ( !matched ) return;&lt;br /&gt;
&lt;br /&gt;
    var first = document.querySelector( &#039;.gr-search-hl&#039; );&lt;br /&gt;
    if ( first ) {&lt;br /&gt;
      first.scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; });&lt;br /&gt;
      first.classList.add( &#039;gr-search-hl-pulse&#039; );&lt;br /&gt;
      setTimeout( function() { first.classList.remove( &#039;gr-search-hl-pulse&#039; ); }, 2000 );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    showDismissBar( query );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function escapeRegex( s ) {&lt;br /&gt;
    return s.replace( /[.*+?^${}()|[\]\\]/g, &#039;\\$&amp;amp;&#039; );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function wrapMatches( root, re ) {&lt;br /&gt;
    var count = 0;&lt;br /&gt;
    var walker = document.createTreeWalker(&lt;br /&gt;
      root, NodeFilter.SHOW_TEXT, {&lt;br /&gt;
        acceptNode: function( node ) {&lt;br /&gt;
          var p = node.parentElement;&lt;br /&gt;
          if ( !p ) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
          var tag = p.tagName.toUpperCase();&lt;br /&gt;
          if ( tag === &#039;SCRIPT&#039; || tag === &#039;STYLE&#039; || tag === &#039;NOSCRIPT&#039; ) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
          if ( p.classList.contains( &#039;gr-search-hl&#039; ) ) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
          return NodeFilter.FILTER_ACCEPT;&lt;br /&gt;
        }&lt;br /&gt;
      }, false&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    var nodes = [];&lt;br /&gt;
    var node;&lt;br /&gt;
    while ( ( node = walker.nextNode() ) ) nodes.push( node );&lt;br /&gt;
&lt;br /&gt;
    nodes.forEach( function( textNode ) {&lt;br /&gt;
      var val = textNode.nodeValue;&lt;br /&gt;
      if ( !re.test( val ) ) return;&lt;br /&gt;
      re.lastIndex = 0;&lt;br /&gt;
&lt;br /&gt;
      var frag = document.createDocumentFragment();&lt;br /&gt;
      var last = 0;&lt;br /&gt;
      var m;&lt;br /&gt;
      while ( ( m = re.exec( val ) ) !== null ) {&lt;br /&gt;
        if ( m.index &amp;gt; last ) {&lt;br /&gt;
          frag.appendChild( document.createTextNode( val.slice( last, m.index ) ) );&lt;br /&gt;
        }&lt;br /&gt;
        var span = document.createElement( &#039;span&#039; );&lt;br /&gt;
        span.className = &#039;gr-search-hl&#039;;&lt;br /&gt;
        span.textContent = m[0];&lt;br /&gt;
        frag.appendChild( span );&lt;br /&gt;
        last = m.index + m[0].length;&lt;br /&gt;
        count++;&lt;br /&gt;
      }&lt;br /&gt;
      if ( last &amp;lt; val.length ) {&lt;br /&gt;
        frag.appendChild( document.createTextNode( val.slice( last ) ) );&lt;br /&gt;
      }&lt;br /&gt;
      textNode.parentNode.replaceChild( frag, textNode );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    return count;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function showDismissBar( query ) {&lt;br /&gt;
    var existing = document.getElementById( &#039;gr-hl-bar&#039; );&lt;br /&gt;
    if ( existing ) existing.remove();&lt;br /&gt;
&lt;br /&gt;
    var count = document.querySelectorAll( &#039;.gr-search-hl&#039; ).length;&lt;br /&gt;
    if ( !count ) return;&lt;br /&gt;
&lt;br /&gt;
    var isMob = window.innerWidth &amp;lt; 768 || !!document.getElementById( &#039;mw-mf-viewport&#039; );&lt;br /&gt;
    var bar = document.createElement( &#039;div&#039; );&lt;br /&gt;
    bar.id = &#039;gr-hl-bar&#039;;&lt;br /&gt;
&lt;br /&gt;
    if ( isMob ) {&lt;br /&gt;
      bar.style.cssText = [&lt;br /&gt;
        &#039;position:fixed&#039;, &#039;bottom:0&#039;, &#039;left:0&#039;, &#039;right:0&#039;,&lt;br /&gt;
        &#039;z-index:10200&#039;, &#039;background:#b5451b&#039;, &#039;color:#fff&#039;,&lt;br /&gt;
        &#039;padding:0&#039;, &#039;display:flex&#039;, &#039;align-items:stretch&#039;,&lt;br /&gt;
        &#039;font-family:system-ui,sans-serif&#039;,&lt;br /&gt;
        &#039;box-shadow:0 -2px 12px rgba(0,0,0,0.25)&#039;, &#039;height:56px&#039;&lt;br /&gt;
      ].join(&#039;;&#039;);&lt;br /&gt;
&lt;br /&gt;
      var mbs = &#039;flex:1;display:flex;flex-direction:column;align-items:center;&#039; +&lt;br /&gt;
        &#039;justify-content:center;background:none;border:none;color:#fff;cursor:pointer;&#039; +&lt;br /&gt;
        &#039;padding:6px 4px;font-family:system-ui,sans-serif;font-size:11px;font-weight:500;&#039; +&lt;br /&gt;
        &#039;gap:3px;-webkit-tap-highlight-color:rgba(0,0,0,0.12);&#039;;&lt;br /&gt;
&lt;br /&gt;
      bar.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-prev&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;polyline points=&amp;quot;15 18 9 12 15 6&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;Prev&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-next&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;polyline points=&amp;quot;9 18 15 12 9 6&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;Next&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-results&amp;quot; style=&amp;quot;&#039; + mbs + &#039;flex:1.6;border-left:1px solid rgba(255,255,255,0.2);border-right:1px solid rgba(255,255,255,0.2);&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;circle cx=&amp;quot;11&amp;quot; cy=&amp;quot;11&amp;quot; r=&amp;quot;7&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;16.5&amp;quot; y1=&amp;quot;16.5&amp;quot; x2=&amp;quot;22&amp;quot; y2=&amp;quot;22&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;&#039; + count + &#039; match&#039; + (count===1?&#039;&#039;:&#039;es&#039;) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-dismiss&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;line x1=&amp;quot;18&amp;quot; y1=&amp;quot;6&amp;quot; x2=&amp;quot;6&amp;quot; y2=&amp;quot;18&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;6&amp;quot; y1=&amp;quot;6&amp;quot; x2=&amp;quot;18&amp;quot; y2=&amp;quot;18&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;Close&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
    } else {&lt;br /&gt;
      bar.style.cssText = [&lt;br /&gt;
        &#039;position:fixed&#039;, &#039;bottom:0&#039;, &#039;left:0&#039;, &#039;right:0&#039;, &#039;z-index:10200&#039;,&lt;br /&gt;
        &#039;background:#b5451b&#039;, &#039;color:#fff&#039;, &#039;padding:10px 16px&#039;,&lt;br /&gt;
        &#039;display:flex&#039;, &#039;align-items:center&#039;, &#039;justify-content:space-between&#039;,&lt;br /&gt;
        &#039;font-family:system-ui,sans-serif&#039;, &#039;font-size:14px&#039;,&lt;br /&gt;
        &#039;box-shadow:0 -2px 8px rgba(0,0,0,0.2)&#039;&lt;br /&gt;
      ].join(&#039;;&#039;);&lt;br /&gt;
&lt;br /&gt;
      var nav = document.createElement( &#039;div&#039; );&lt;br /&gt;
      nav.style.cssText = &#039;display:flex;align-items:center;gap:12px;&#039;;&lt;br /&gt;
      nav.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;🔍 &amp;lt;strong&amp;gt;&#039; + escHtml(query) + &#039;&amp;lt;/strong&amp;gt; — &#039; + count + &#039; match&#039; + (count===1?&#039;&#039;:&#039;es&#039;) + &#039;&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-prev&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;↑ Prev&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-next&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;↓ Next&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-results&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;← Results&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
      bar.appendChild( nav );&lt;br /&gt;
&lt;br /&gt;
      var db = document.createElement( &#039;button&#039; );&lt;br /&gt;
      db.id = &#039;gr-hl-dismiss&#039;; db.textContent = &#039;✕ Close&#039;;&lt;br /&gt;
      db.style.cssText = &#039;background:rgba(255,255,255,0.15);border:none;color:#fff;padding:4px 12px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&#039;;&lt;br /&gt;
      bar.appendChild( db );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    document.body.appendChild( bar );&lt;br /&gt;
&lt;br /&gt;
    var hlEls = Array.from( document.querySelectorAll( &#039;.gr-search-hl&#039; ) );&lt;br /&gt;
    var current = 0;&lt;br /&gt;
&lt;br /&gt;
    function goTo( idx ) {&lt;br /&gt;
      hlEls.forEach( function(el) { el.classList.remove( &#039;gr-search-hl-current&#039; ); } );&lt;br /&gt;
      current = ( ( idx % hlEls.length ) + hlEls.length ) % hlEls.length;&lt;br /&gt;
      hlEls[ current ].classList.add( &#039;gr-search-hl-current&#039; );&lt;br /&gt;
      hlEls[ current ].scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function dismiss() { clearHighlights(); bar.remove(); }&lt;br /&gt;
&lt;br /&gt;
    var nb = document.getElementById( &#039;gr-hl-next&#039; );&lt;br /&gt;
    var pb = document.getElementById( &#039;gr-hl-prev&#039; );&lt;br /&gt;
    var rb = document.getElementById( &#039;gr-hl-results&#039; );&lt;br /&gt;
    var db2 = document.getElementById( &#039;gr-hl-dismiss&#039; );&lt;br /&gt;
    if ( nb ) nb.onclick = function() { goTo( current + 1 ); };&lt;br /&gt;
    if ( pb ) pb.onclick = function() { goTo( current - 1 ); };&lt;br /&gt;
    if ( db2 ) db2.onclick = dismiss;&lt;br /&gt;
    if ( rb ) rb.onclick = function() {&lt;br /&gt;
      bar.remove(); clearHighlights();&lt;br /&gt;
      if ( window.showSearchDialog ) window.showSearchDialog( query );&lt;br /&gt;
    };&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function clearHighlights() {&lt;br /&gt;
    document.querySelectorAll( &#039;.gr-search-hl&#039; ).forEach( function( span ) {&lt;br /&gt;
      var p = span.parentNode; if ( !p ) return;&lt;br /&gt;
      while ( span.firstChild ) p.insertBefore( span.firstChild, span );&lt;br /&gt;
      p.removeChild( span );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function escHtml( s ) {&lt;br /&gt;
    return String(s).replace(/&amp;amp;/g,&#039;&amp;amp;amp;&#039;).replace(/&amp;lt;/g,&#039;&amp;amp;lt;&#039;).replace(/&amp;gt;/g,&#039;&amp;amp;gt;&#039;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function injectHighlightCSS() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-hl-css&#039; ) ) return;&lt;br /&gt;
    var s = document.createElement( &#039;style&#039; );&lt;br /&gt;
    s.id = &#039;gr-hl-css&#039;;&lt;br /&gt;
    s.textContent = [&lt;br /&gt;
      &#039;.gr-search-hl{background:#fff176;color:#1a1a1a;border-radius:2px;padding:0 1px;box-shadow:0 0 0 1px rgba(181,69,27,0.25);}&#039;,&lt;br /&gt;
      &#039;.gr-search-hl-current{background:#ffb300!important;box-shadow:0 0 0 2px #b5451b!important;}&#039;,&lt;br /&gt;
      &#039;@keyframes gr-hl-pulse{0%{background:#ffb300;}50%{background:#fff176;}100%{background:#fff176;}}&#039;,&lt;br /&gt;
      &#039;.gr-search-hl-pulse{animation:gr-hl-pulse 1.2s ease 2;}&#039;,&lt;br /&gt;
    ].join(&#039;&#039;);&lt;br /&gt;
    document.head.appendChild( s );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  injectHighlightCSS();&lt;br /&gt;
&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) {&lt;br /&gt;
    document.addEventListener( &#039;DOMContentLoaded&#039;, applyHighlight );&lt;br /&gt;
  } else {&lt;br /&gt;
    applyHighlight();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ( window.mw ) {&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function() {&lt;br /&gt;
      setTimeout( applyHighlight, 100 );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  window.grStoreSearchHL = storeQueryForLink;&lt;br /&gt;
&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
/* ═══════════════════════════════════════════════════════════════&lt;br /&gt;
   Mobile addon — only runs on Minerva (mobile) skin&lt;br /&gt;
   ═══════════════════════════════════════════════════════════════ */&lt;br /&gt;
( function () {&lt;br /&gt;
  if ( !document.body.classList.contains( &#039;skin-minerva&#039; ) ) return;&lt;br /&gt;
  function injectCSS() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-mob-css&#039; ) ) return;&lt;br /&gt;
    var s = document.createElement( &#039;style&#039; );&lt;br /&gt;
    s.id = &#039;gr-mob-css&#039;;&lt;br /&gt;
    s.textContent =&lt;br /&gt;
      &#039;body,#mw-mf-viewport,#mw-mf-page-center{padding-top:0!important;margin-top:0!important;}&#039; +&lt;br /&gt;
      &#039;html,body,#mw-mf-viewport,#mw-mf-page-center{overflow-x:hidden!important;max-width:100vw!important;}&#039; +&lt;br /&gt;
      &#039;header.header-container{background:#b5451b!important;position:sticky!important;top:0!important;z-index:300!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header{background:#b5451b!important;min-height:54px!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header .search-toggle,.minerva-header .minerva-user-notifications{display:none!important;}&#039; +&lt;br /&gt;
      &#039;.branding-box a{display:flex!important;align-items:center!important;text-decoration:none!important;max-width:calc(100vw - 80px)!important;}&#039; +&lt;br /&gt;
      &#039;.branding-box a::before{content:&amp;quot;&amp;quot;;display:block;width:30px;height:30px;flex-shrink:0;background:url(&amp;quot;/favicon.png&amp;quot;) center/contain no-repeat;margin-right:8px;}&#039; +&lt;br /&gt;
      &#039;.branding-box a span{color:#fff!important;font-size:16px!important;font-weight:700!important;font-family:system-ui,sans-serif!important;line-height:1.2!important;flex:1 1 auto!important;min-width:0!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header svg path,.minerva-header svg rect,.minerva-header svg circle{fill:#fff!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header label{color:#fff!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-tabs,.mw-portlet-associated-pages,.page-actions-menu,#page-secondary-actions,.last-modified-bar,.minerva-anon-talk-link{display:none!important;}&#039; +&lt;br /&gt;
      &#039;#gr-mob-menu-items{display:block!important;}&#039; +&lt;br /&gt;
      &#039;.mw-footer.minerva-footer,.footer-places,.footer-info,.minerva-footer-logo,#footer-places-about,#footer-places-disclaimers,#footer-places-privacy{display:none!important;}&#039; +&lt;br /&gt;
      &#039;#gr-static-bar{position:sticky!important;top:54px!important;z-index:200!important;}&#039; +&lt;br /&gt;
      &#039;.mf-section-0,.mf-section-1,.mf-section-2,.mf-section-3,.mf-section-4,.mf-section-5,.mf-section-6,.mf-section-7,.mf-section-8,.mf-section-9,.mf-section-10{display:block!important;visibility:visible!important;}&#039; +&lt;br /&gt;
      &#039;.collapsible-block{display:block!important;}&#039; +&lt;br /&gt;
      &#039;.section-heading .indicator,.collapsible-heading .indicator{display:none!important;}&#039; +&lt;br /&gt;
      &#039;.section-heading,.collapsible-heading{pointer-events:none!important;}&#039; +&lt;br /&gt;
      &#039;.gr-home-grid{flex-direction:column!important;flex-wrap:nowrap!important;gap:12px!important;width:100%!important;}&#039; +&lt;br /&gt;
      &#039;.gr-home-card{width:100%!important;max-width:100%!important;min-width:unset!important;box-sizing:border-box!important;flex:none!important;}&#039; +&lt;br /&gt;
      &#039;.gr-home-toggle{flex-wrap:wrap!important;}&#039; +&lt;br /&gt;
      &#039;.mw-parser-output{font-size:18px!important;line-height:1.8!important;}&#039; +&lt;br /&gt;
      &#039;.mw-parser-output h2,.mw-parser-output h3{width:100%!important;}&#039; +&lt;br /&gt;
      &#039;.bhashyam-block{margin-left:8px!important;}&#039; +&lt;br /&gt;
      &#039;#footer,.mw-footer,.catlinks,#catlinks{display:none!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-panel{position:fixed!important;top:0!important;left:0!important;bottom:0!important;width:82vw!important;max-width:340px!important;background:#fff!important;z-index:10400!important;box-shadow:4px 0 28px rgba(0,0,0,0.22)!important;overflow-y:auto!important;padding:0 0 40px!important;transform:translateX(-110%)!important;transition:transform 0.26s cubic-bezier(0.4,0,0.2,1)!important;display:block!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-panel.open{transform:translateX(0)!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-backdrop{display:none!important;position:fixed!important;inset:0!important;background:rgba(0,0,0,0.4)!important;z-index:10399!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-backdrop.open{display:block!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-header{position:sticky!important;top:0!important;background:#fff!important;display:flex!important;align-items:center!important;justify-content:space-between!important;padding:16px 16px 12px!important;border-bottom:1px solid #f0ebe6!important;z-index:1!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-title{font-size:13px!important;font-weight:700!important;text-transform:uppercase!important;letter-spacing:0.08em!important;color:#b5451b!important;font-family:system-ui,sans-serif!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-close{background:none!important;border:none!important;font-size:22px!important;color:#999!important;cursor:pointer!important;padding:4px 8px!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-body{padding:12px 16px!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-body a{display:block!important;font-size:16px!important;line-height:1.6!important;color:#2c1810!important;text-decoration:none!important;padding:8px 0!important;border-bottom:1px solid #f5f0ed!important;}&#039;;&lt;br /&gt;
    document.head.appendChild( s );&lt;br /&gt;
  }&lt;br /&gt;
  function expandSections() {&lt;br /&gt;
    document.querySelectorAll( &#039;[class*=&amp;quot;mf-section-&amp;quot;], .collapsible-block&#039; ).forEach( function ( el ) { el.removeAttribute( &#039;hidden&#039; ); el.style.setProperty( &#039;display&#039;, &#039;block&#039;, &#039;important&#039; ); el.style.setProperty( &#039;visibility&#039;, &#039;visible&#039;, &#039;important&#039; ); el.removeAttribute( &#039;aria-hidden&#039; ); } );&lt;br /&gt;
    document.querySelectorAll( &#039;.section-heading, .collapsible-heading&#039; ).forEach( function ( el ) { el.setAttribute( &#039;aria-expanded&#039;, &#039;true&#039; ); el.style.setProperty( &#039;pointer-events&#039;, &#039;none&#039;, &#039;important&#039; ); } );&lt;br /&gt;
  }&lt;br /&gt;
  function watchSections() {&lt;br /&gt;
    var t = null;&lt;br /&gt;
    var obs = new MutationObserver( function ( ms ) { if ( ms.some( function(m){ return m.attributeName === &#039;hidden&#039;; } ) ) { clearTimeout(t); t = setTimeout( expandSections, 30 ); } } );&lt;br /&gt;
    obs.observe( document.querySelector( &#039;#mw-content-text&#039; ) || document.body, { subtree:true, attributes:true, attributeFilter:[&#039;hidden&#039;,&#039;aria-hidden&#039;] } );&lt;br /&gt;
  }&lt;br /&gt;
  function watchBodyPadding() {&lt;br /&gt;
    new MutationObserver( function () { if ( document.body.style.paddingTop &amp;amp;&amp;amp; document.body.style.paddingTop !== &#039;0px&#039; ) document.body.style.paddingTop = &#039;&#039;; } ).observe( document.body, { attributes:true, attributeFilter:[&#039;style&#039;] } );&lt;br /&gt;
  }&lt;br /&gt;
  function injectMenuLinks() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-mob-menu-items&#039; ) ) return;&lt;br /&gt;
    var navDrawer = document.querySelector( &#039;.navigation-drawer&#039; );&lt;br /&gt;
    if ( !navDrawer ) return;&lt;br /&gt;
    var wrap = document.createElement( &#039;div&#039; ); wrap.id = &#039;gr-mob-menu-items&#039;; wrap.style.cssText = &#039;width:100%;background:#fff;margin-top:8px;&#039;;&lt;br /&gt;
    var itemStyle = &#039;display:flex;align-items:center;gap:14px;padding:15px 20px;font-size:16px;color:#2c1810;text-decoration:none;font-family:system-ui,sans-serif;border-bottom:1px solid #f0ebe6;background:#fff;&#039;;&lt;br /&gt;
    function makeItem( href, label ) { var a = document.createElement( &#039;a&#039; ); a.href = href; a.style.cssText = itemStyle; a.innerHTML = &#039;&amp;lt;span&amp;gt;&#039; + label + &#039;&amp;lt;/span&amp;gt;&#039;; return a; }&lt;br /&gt;
    wrap.appendChild( makeItem( &#039;/Main_Page&#039;, &#039;Home&#039; ) );&lt;br /&gt;
    wrap.appendChild( makeItem( &#039;/My_wiki:Help&#039;, &#039;Help&#039; ) );&lt;br /&gt;
    wrap.appendChild( makeItem( &#039;/My_wiki:About&#039;, &#039;About&#039; ) );&lt;br /&gt;
    var userName = window.mw ? mw.config.get( &#039;wgUserName&#039; ) : null;&lt;br /&gt;
    if ( userName ) {&lt;br /&gt;
      wrap.appendChild( makeItem( ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) ? mw.util.getUrl( &#039;Special:Profile&#039; ) : &#039;/Special:Profile&#039;, &#039;Profile&#039; ) );&lt;br /&gt;
      var la = document.querySelector( &#039;a[href*=&amp;quot;action=logout&amp;quot;]&#039; );&lt;br /&gt;
      wrap.appendChild( makeItem( la ? la.href : &#039;/index.php?title=Special:UserLogout&#039;, &#039;Log out&#039; ) );&lt;br /&gt;
    }&lt;br /&gt;
    else wrap.appendChild( makeItem( &#039;/index.php?title=Special:UserLogin&#039;, &#039;Log in&#039; ) );&lt;br /&gt;
    var pageLeft = document.getElementById( &#039;mw-mf-page-left&#039; );&lt;br /&gt;
    if ( pageLeft ) { while ( pageLeft.firstChild ) pageLeft.removeChild( pageLeft.firstChild ); pageLeft.style.removeProperty( &#039;display&#039; ); pageLeft.appendChild( wrap ); }&lt;br /&gt;
    else navDrawer.appendChild( wrap );&lt;br /&gt;
  }&lt;br /&gt;
  var _tocDone = false;&lt;br /&gt;
  function initToc() {&lt;br /&gt;
    if ( _tocDone ) return;&lt;br /&gt;
    var tocList = document.querySelector( &#039;.vector-toc-contents, .vector-toc .vector-toc-list&#039; );&lt;br /&gt;
    if ( !tocList || !tocList.querySelector( &#039;li&#039; ) ) return;&lt;br /&gt;
    _tocDone = true;&lt;br /&gt;
    var bd = document.createElement( &#039;div&#039; ); bd.className = &#039;gr-mob-toc-backdrop&#039;; document.body.appendChild( bd );&lt;br /&gt;
    var panel = document.createElement( &#039;div&#039; ); panel.className = &#039;gr-mob-toc-panel&#039;;&lt;br /&gt;
    var hdr = document.createElement( &#039;div&#039; ); hdr.className = &#039;gr-mob-toc-header&#039;;&lt;br /&gt;
    var ttl = document.createElement( &#039;div&#039; ); ttl.className = &#039;gr-mob-toc-title&#039;; ttl.textContent = &#039;विषयसूची&#039;;&lt;br /&gt;
    var cls = document.createElement( &#039;button&#039; ); cls.className = &#039;gr-mob-toc-close&#039;; cls.textContent = &#039;✕&#039;;&lt;br /&gt;
    hdr.appendChild( ttl ); hdr.appendChild( cls ); panel.appendChild( hdr );&lt;br /&gt;
    var body = document.createElement( &#039;div&#039; ); body.className = &#039;gr-mob-toc-body&#039;; body.appendChild( tocList.cloneNode( true ) ); panel.appendChild( body ); document.body.appendChild( panel );&lt;br /&gt;
    var btn = document.createElement( &#039;button&#039; ); btn.id = &#039;gr-mob-toc-btn&#039;; btn.innerHTML = &#039;☰ &amp;amp;nbsp;Contents&#039;;&lt;br /&gt;
    btn.style.cssText = &#039;position:fixed;bottom:148px;left:16px;z-index:9100;background:#fff;border:1.5px solid #b5451b;border-radius:24px;padding:10px 16px;font-size:15px;font-family:system-ui,sans-serif;color:#b5451b;font-weight:600;box-shadow:0 3px 14px rgba(0,0,0,0.15);cursor:pointer;&#039;;&lt;br /&gt;
    document.body.appendChild( btn );&lt;br /&gt;
    function open()  { panel.classList.add(&#039;open&#039;); bd.classList.add(&#039;open&#039;); document.body.style.overflow=&#039;hidden&#039;; }&lt;br /&gt;
    function close() { panel.classList.remove(&#039;open&#039;); bd.classList.remove(&#039;open&#039;); document.body.style.overflow=&#039;&#039;; }&lt;br /&gt;
    btn.onclick = open; cls.onclick = close; bd.onclick = close;&lt;br /&gt;
    body.querySelectorAll(&#039;a&#039;).forEach(function(a){ a.onclick = close; });&lt;br /&gt;
  }&lt;br /&gt;
  function injectMoolaUllekhaLinks() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-mob-doc-nav&#039; ) ) return;&lt;br /&gt;
    var pageName = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039; ) ) || &#039;&#039;;&lt;br /&gt;
    if ( pageName === &#039;Main_Page&#039; || !pageName ) return;&lt;br /&gt;
    function wikiUrl( slug ) { if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( slug ); return ( ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039; ).replace( &#039;$1&#039;, encodeURIComponent( slug ).replace( /%2F/g, &#039;/&#039; ) ); }&lt;br /&gt;
    var teekaPage = document.querySelector( &#039;.gr-teeka-page&#039; );&lt;br /&gt;
    var primarySlug = teekaPage ? ( teekaPage.getAttribute( &#039;data-primary&#039; ) || pageName.split(&#039;/&#039;)[0] ) : pageName.split(&#039;/&#039;)[0];&lt;br /&gt;
    var docTitleEl = document.querySelector( &#039;.gr-doc-title&#039; );&lt;br /&gt;
    var hasMoolaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-moola&#039; ) === &#039;1&#039;;&lt;br /&gt;
    var hasUllekhaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-ullekha&#039; ) === &#039;1&#039;;&lt;br /&gt;
    var showMoolam = !!teekaPage || hasMoolaPage, showUllekha = hasUllekhaPage || !!teekaPage;&lt;br /&gt;
    if ( !showMoolam &amp;amp;&amp;amp; !showUllekha ) return;&lt;br /&gt;
    var nav = document.createElement( &#039;div&#039; ); nav.id = &#039;gr-mob-doc-nav&#039;;&lt;br /&gt;
    nav.style.cssText = &#039;display:flex;gap:10px;padding:10px 16px 8px;background:#fdf8f5;border-bottom:1px solid #f0e0d6;font-family:system-ui,sans-serif;&#039;;&lt;br /&gt;
    function makeLink( href, label ) { var a = document.createElement( &#039;a&#039; ); a.href = href; a.textContent = label; a.style.cssText = &#039;display:inline-flex;align-items:center;padding:5px 16px;border-radius:20px;background:#fff;border:1.5px solid #e8cfc4;color:#b5451b;font-size:14px;font-weight:600;text-decoration:none;&#039;; return a; }&lt;br /&gt;
    if ( teekaPage ) nav.appendChild( makeLink( wikiUrl( primarySlug ), &#039;मूल&#039; ) );&lt;br /&gt;
    else if ( hasMoolaPage ) nav.appendChild( makeLink( wikiUrl( primarySlug + &#039;/Moola&#039; ), &#039;मूलम्&#039; ) );&lt;br /&gt;
    if ( showUllekha ) nav.appendChild( makeLink( wikiUrl( primarySlug + &#039;/Ullekha&#039; ), &#039;उल्लेख&#039; ) );&lt;br /&gt;
    var h1 = document.getElementById( &#039;firstHeading&#039; ) || document.querySelector( &#039;.page-heading, h1.firstHeading, .mw-first-heading&#039; );&lt;br /&gt;
    if ( h1 &amp;amp;&amp;amp; h1.parentNode ) h1.parentNode.insertBefore( nav, h1.nextSibling );&lt;br /&gt;
    else { var ct = document.getElementById( &#039;mw-content-text&#039; ); if ( ct ) ct.insertBefore( nav, ct.firstChild ); }&lt;br /&gt;
  }&lt;br /&gt;
  injectCSS(); watchBodyPadding();&lt;br /&gt;
  function boot() { expandSections(); watchSections(); injectMenuLinks(); injectMoolaUllekhaLinks(); [100,400,900,1800].forEach(function(ms){ setTimeout(expandSections,ms); }); setTimeout(initToc,700); }&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) document.addEventListener( &#039;DOMContentLoaded&#039;, boot );&lt;br /&gt;
  else boot();&lt;br /&gt;
  if ( window.mw ) mw.hook( &#039;wikipage.content&#039; ).add(function(){ setTimeout(function(){ expandSections(); injectMenuLinks(); injectMoolaUllekhaLinks(); initToc(); },300); });&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
  mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
    setTimeout( function () {&lt;br /&gt;
      var blocks = document.querySelectorAll( &#039;.collapsible-block, .toggle-list&#039; );&lt;br /&gt;
      Array.prototype.forEach.call( blocks, function ( el ) { if ( !el.parentNode ) { try { el.remove(); } catch(e) {} } } );&lt;br /&gt;
    }, 0 );&lt;br /&gt;
  } );&lt;br /&gt;
  if ( mw.config.get( &#039;wgPageName&#039; ) !== &#039;Main_Page&#039; ) return;&lt;br /&gt;
  mw.loader.using( &#039;mediawiki.util&#039; ).done( function () {&lt;br /&gt;
    $( function () { applyHomeToggleOffset(); window.addEventListener( &#039;resize&#039;, applyHomeToggleOffset, { passive: true } ); setTimeout( applyHomeToggleOffset, 300 ); setTimeout( applyHomeToggleOffset, 800 ); } );&lt;br /&gt;
  } );&lt;br /&gt;
  function applyHomeToggleOffset() {&lt;br /&gt;
    var bar = document.getElementById( &#039;gr-static-bar&#039; ); if ( !bar ) return;&lt;br /&gt;
    var barBottom = Math.round( bar.getBoundingClientRect().bottom );&lt;br /&gt;
    [ document.getElementById(&#039;gr-home&#039;), document.getElementById(&#039;gr-home-toggle&#039;), document.querySelector(&#039;#mw-content-text .mw-parser-output &amp;gt; .gr-home, #mw-content-text .mw-parser-output &amp;gt; *:first-child&#039;) ].forEach( function(el){ if(el) el.style.scrollMarginTop=(barBottom+4)+&#039;px&#039;; } );&lt;br /&gt;
    var isMob = window.innerWidth &amp;lt; 768 || !!document.getElementById( &#039;mw-mf-viewport&#039; );&lt;br /&gt;
    if ( isMob ) { var toggleEl = document.getElementById(&#039;gr-home-toggle&#039;); if ( toggleEl ) { var tr = toggleEl.getBoundingClientRect(); if ( tr.top &amp;lt; barBottom ) { var cp = parseInt(window.getComputedStyle(document.body).paddingTop,10)||0; document.body.style.paddingTop=(cp+(barBottom-tr.top)+4)+&#039;px&#039;; } } }&lt;br /&gt;
  }&lt;br /&gt;
  $( function () {&lt;br /&gt;
    var $toggle=$(&#039;#gr-home-toggle&#039;),$viewG=$(&#039;#gr-view-grantha&#039;),$viewA=$(&#039;#gr-view-author&#039;),$btnG=$(&#039;#gr-toggle-grantha&#039;),$btnA=$(&#039;#gr-toggle-author&#039;);&lt;br /&gt;
    if(!$toggle.length||!$viewG.length||!$viewA.length)return; if($toggle.data(&#039;gr-wired&#039;))return; $toggle.data(&#039;gr-wired&#039;,true);&lt;br /&gt;
    function showView(which){ if(which===&#039;grantha&#039;){$viewG.show();$viewA.hide();$btnG.addClass(&#039;gr-toggle-active&#039;);$btnA.removeClass(&#039;gr-toggle-active&#039;);}else{$viewA.show();$viewG.hide();$btnA.addClass(&#039;gr-toggle-active&#039;);$btnG.removeClass(&#039;gr-toggle-active&#039;);} try{localStorage.setItem(&#039;grantha_home_tab&#039;,which);}catch(e){} }&lt;br /&gt;
    $btnG.on(&#039;click keydown&#039;,function(e){if(e.type===&#039;keydown&#039;&amp;amp;&amp;amp;e.key!==&#039;Enter&#039;&amp;amp;&amp;amp;e.key!==&#039; &#039;)return;showView(&#039;grantha&#039;);});&lt;br /&gt;
    $btnA.on(&#039;click keydown&#039;,function(e){if(e.type===&#039;keydown&#039;&amp;amp;&amp;amp;e.key!==&#039;Enter&#039;&amp;amp;&amp;amp;e.key!==&#039; &#039;)return;showView(&#039;author&#039;);});&lt;br /&gt;
    try{var saved=localStorage.getItem(&#039;grantha_home_tab&#039;);if(saved===&#039;author&#039;)showView(&#039;author&#039;);else showView(&#039;grantha&#039;);}catch(e){showView(&#039;grantha&#039;);}&lt;br /&gt;
  } );&lt;br /&gt;
}() );&lt;br /&gt;
// ── Replace MediaWiki user links with a single username dropdown (Profile + Logout) ──&lt;br /&gt;
( function () {&lt;br /&gt;
  function wikiHref( title ) {&lt;br /&gt;
    if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( title );&lt;br /&gt;
    var ap = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
    return ap.replace( &#039;$1&#039;, title );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function buildLogoutForm( token ) {&lt;br /&gt;
    token = token || &#039;&#039;;&lt;br /&gt;
    var esc = String( token ).replace( /&amp;quot;/g, &#039;&amp;amp;quot;&#039; );&lt;br /&gt;
    var script = ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.wikiScript ) ? mw.util.wikiScript() : &#039;/index.php&#039;;&lt;br /&gt;
    var form = document.createElement( &#039;form&#039; );&lt;br /&gt;
    form.method = &#039;post&#039;;&lt;br /&gt;
    form.action = script + &#039;?title=Special:UserLogout&#039;;&lt;br /&gt;
    form.style.display = &#039;none&#039;;&lt;br /&gt;
    form.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;wpEditToken&amp;quot; value=&amp;quot;&#039; + esc + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;title&amp;quot; value=&amp;quot;Special:UserLogout&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;returnto&amp;quot; value=&amp;quot;Main Page&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
    document.body.appendChild( form );&lt;br /&gt;
    return form;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function injectUserDropdown() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-user-dropdown&#039; ) ) return;&lt;br /&gt;
&lt;br /&gt;
    var userName = window.mw ? mw.config.get( &#039;wgUserName&#039; ) : null;&lt;br /&gt;
    var isAnon = !userName || ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgUserId&#039; ) === null );&lt;br /&gt;
&lt;br /&gt;
    var container = document.querySelector( &#039;.vector-user-links-main&#039; )&lt;br /&gt;
                 || document.querySelector( &#039;.vector-user-links&#039; );&lt;br /&gt;
    if ( !container ) return;&lt;br /&gt;
&lt;br /&gt;
    // Logged-out: show a single Login/Signup link, nothing else&lt;br /&gt;
    if ( isAnon ) {&lt;br /&gt;
        // Remove MediaWiki&#039;s native account links so only our button shows&lt;br /&gt;
        [ &#039;#pt-createaccount&#039;, &#039;#pt-login&#039;, &#039;#pt-anoncontribs&#039;,&lt;br /&gt;
          &#039;#pt-anontalk&#039;, &#039;#pt-anonuserpage&#039; ].forEach( function ( sel ) {&lt;br /&gt;
            document.querySelectorAll( sel ).forEach( function ( el ) {&lt;br /&gt;
                if ( el &amp;amp;&amp;amp; el.parentNode ) el.parentNode.removeChild( el );&lt;br /&gt;
            } );&lt;br /&gt;
        } );&lt;br /&gt;
        if ( document.getElementById( &#039;gr-login-link&#039; ) ) return;&lt;br /&gt;
        var loginA = document.createElement( &#039;a&#039; );&lt;br /&gt;
        loginA.id = &#039;gr-login-link&#039;;&lt;br /&gt;
        loginA.href = wikiHref( &#039;Special:UserLogin&#039; );&lt;br /&gt;
        loginA.textContent = &#039;Login/Signup&#039;;&lt;br /&gt;
        loginA.style.cssText = &#039;color:#fff;font-size:0.9em;font-weight:500;&#039; +&lt;br /&gt;
            &#039;text-decoration:none;padding:6px 12px;border-radius:6px;&#039; +&lt;br /&gt;
            &#039;background:rgba(255,255,255,0.12);white-space:nowrap;&#039;;&lt;br /&gt;
        loginA.addEventListener( &#039;mouseover&#039;, function(){ this.style.background=&#039;rgba(255,255,255,0.2)&#039;; } );&lt;br /&gt;
        loginA.addEventListener( &#039;mouseout&#039;,  function(){ this.style.background=&#039;rgba(255,255,255,0.12)&#039;; } );&lt;br /&gt;
        container.appendChild( loginA );&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Logout token (csrf token works for logout in modern MW)&lt;br /&gt;
    var token = ( window.mw &amp;amp;&amp;amp; mw.user &amp;amp;&amp;amp; mw.user.tokens )&lt;br /&gt;
      ? mw.user.tokens.get( &#039;csrfToken&#039; ) : &#039;+\\&#039;;&lt;br /&gt;
&lt;br /&gt;
    var wrap = document.createElement( &#039;div&#039; );&lt;br /&gt;
    wrap.id = &#039;gr-user-dropdown&#039;;&lt;br /&gt;
    wrap.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;button id=&amp;quot;gr-user-trigger&amp;quot; type=&amp;quot;button&amp;quot; aria-haspopup=&amp;quot;true&amp;quot; aria-expanded=&amp;quot;false&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;&#039; + (userName.replace(/&amp;lt;/g,&#039;&amp;amp;lt;&#039;)) + &#039;&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span class=&amp;quot;gr-caret&amp;quot;&amp;gt;▾&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;div id=&amp;quot;gr-user-menu&amp;quot; role=&amp;quot;menu&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;&#039; + wikiHref( &#039;Special:Profile&#039; ) + &#039;&amp;quot; role=&amp;quot;menuitem&amp;quot;&amp;gt;Profile&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;#&amp;quot; id=&amp;quot;gr-logout-link&amp;quot; role=&amp;quot;menuitem&amp;quot;&amp;gt;Log out&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
    container.appendChild( wrap );&lt;br /&gt;
&lt;br /&gt;
    var trigger = document.getElementById( &#039;gr-user-trigger&#039; );&lt;br /&gt;
    var menu    = document.getElementById( &#039;gr-user-menu&#039; );&lt;br /&gt;
&lt;br /&gt;
    trigger.addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      e.stopPropagation();&lt;br /&gt;
      var open = menu.classList.toggle( &#039;gr-open&#039; );&lt;br /&gt;
      trigger.setAttribute( &#039;aria-expanded&#039;, open ? &#039;true&#039; : &#039;false&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    document.addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      if ( !wrap.contains( e.target ) ) {&lt;br /&gt;
        menu.classList.remove( &#039;gr-open&#039; );&lt;br /&gt;
        trigger.setAttribute( &#039;aria-expanded&#039;, &#039;false&#039; );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    document.getElementById( &#039;gr-logout-link&#039; ).addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      e.preventDefault();&lt;br /&gt;
      // Fetch a fresh CSRF token at click time (more reliable than at load time)&lt;br /&gt;
      if ( window.mw &amp;amp;&amp;amp; mw.user &amp;amp;&amp;amp; mw.user.tokens ) {&lt;br /&gt;
        var t = mw.user.tokens.get( &#039;csrfToken&#039; );&lt;br /&gt;
        if ( t ) { buildLogoutForm( t ).submit(); return; }&lt;br /&gt;
      }&lt;br /&gt;
      // Fallback: use the API to get a logout token, then submit&lt;br /&gt;
      if ( window.mw &amp;amp;&amp;amp; mw.Api ) {&lt;br /&gt;
        new mw.Api().postWithToken( &#039;csrf&#039;, { action: &#039;logout&#039; } )&lt;br /&gt;
          .done( function () { location.href = &#039;/Main_Page&#039;; } )&lt;br /&gt;
          .fail( function () { location.href = &#039;/index.php?title=Special:UserLogout&#039;; } );&lt;br /&gt;
      } else {&lt;br /&gt;
        location.href = &#039;/index.php?title=Special:UserLogout&#039;;&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) {&lt;br /&gt;
    document.addEventListener( &#039;DOMContentLoaded&#039;, injectUserDropdown );&lt;br /&gt;
  } else {&lt;br /&gt;
    injectUserDropdown();&lt;br /&gt;
  }&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=My_wiki:About&amp;diff=6205</id>
		<title>My wiki:About</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=My_wiki:About&amp;diff=6205"/>
		<updated>2026-06-11T18:44:22Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
Anandamakaranda is intended as a comprehensive, searchable, extensively hyperlinked and structured repository of the available literature on Dvaita Siddhanta, also known as Tattvavāda. We hope this would provide a platform for study and research in this branch of Vedanta. In the first phase, we present the fountainhead of Tattvavāda, the &#039;&#039;Sarvamula Granthas&#039;&#039; composed by Srimadanandatirtha – also known as Sri Madhvacharya and Sri Pūrna Prajña – the chief proponent of the &#039;&#039;Dvaita school of Vedanta&#039;&#039;. This consists of a total of thirty-eight works divided into nine categories. In future, we intend to continue by providing commentaries, sub-commentaries and independent prakarana granthas. It is also envisaged to leverage the available technology to provide audio / video artefacts to enrich the user experience.&lt;br /&gt;
&lt;br /&gt;
== Acknowledgements ==&lt;br /&gt;
&lt;br /&gt;
We sincerely thank everyone who has helped in bringing this project to fruition. We want to specifically acknowledge the support of:&lt;br /&gt;
&lt;br /&gt;
* Parama pujya Sri VidyaSreesha Tirtharu of &#039;&#039;Sri Sosale Vyasaraja Matha&#039;&#039; who has been a guiding spirit for this project.&lt;br /&gt;
* &#039;&#039;Sri Sri Vyasatirtha Samshodhana Pratishtanam&#039;&#039;, Mysuru, has helped in proof reading text and helping us improve continuously.&lt;br /&gt;
* &#039;&#039;Poornaprajna Samshodhana Mandiram&#039;&#039;, Bengaluru.&lt;br /&gt;
* Dr Pratosh A P, Asst Professor IISc and Co-founder [https://www.latentforce.ai/ Latentforce.ai], Bengaluru&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.js&amp;diff=6204</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.js&amp;diff=6204"/>
		<updated>2026-06-11T10:16:13Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* MediaWiki:Common.js — grantha.io  (v7) */&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
  var LS_SCRIPT_KEY = &#039;grantha_reader_script&#039;;&lt;br /&gt;
  var currentScript = &#039;deva&#039;;&lt;br /&gt;
&lt;br /&gt;
  function devanagariToIAST( text ) {&lt;br /&gt;
    var CONSONANTS = {&lt;br /&gt;
      &#039;क&#039;:&#039;k&#039;,&#039;ख&#039;:&#039;kh&#039;,&#039;ग&#039;:&#039;g&#039;,&#039;घ&#039;:&#039;gh&#039;,&#039;ङ&#039;:&#039;ṅ&#039;,&lt;br /&gt;
      &#039;च&#039;:&#039;c&#039;,&#039;छ&#039;:&#039;ch&#039;,&#039;ज&#039;:&#039;j&#039;,&#039;झ&#039;:&#039;jh&#039;,&#039;ञ&#039;:&#039;ñ&#039;,&lt;br /&gt;
      &#039;ट&#039;:&#039;ṭ&#039;,&#039;ठ&#039;:&#039;ṭh&#039;,&#039;ड&#039;:&#039;ḍ&#039;,&#039;ढ&#039;:&#039;ḍh&#039;,&#039;ण&#039;:&#039;ṇ&#039;,&lt;br /&gt;
      &#039;त&#039;:&#039;t&#039;,&#039;थ&#039;:&#039;th&#039;,&#039;द&#039;:&#039;d&#039;,&#039;ध&#039;:&#039;dh&#039;,&#039;न&#039;:&#039;n&#039;,&lt;br /&gt;
      &#039;प&#039;:&#039;p&#039;,&#039;फ&#039;:&#039;ph&#039;,&#039;ब&#039;:&#039;b&#039;,&#039;भ&#039;:&#039;bh&#039;,&#039;म&#039;:&#039;m&#039;,&lt;br /&gt;
      &#039;य&#039;:&#039;y&#039;,&#039;र&#039;:&#039;r&#039;,&#039;ल&#039;:&#039;l&#039;,&#039;ळ&#039;:&#039;ḷ&#039;,&#039;व&#039;:&#039;v&#039;,&lt;br /&gt;
      &#039;श&#039;:&#039;ś&#039;,&#039;ष&#039;:&#039;ṣ&#039;,&#039;स&#039;:&#039;s&#039;,&#039;ह&#039;:&#039;h&#039;&lt;br /&gt;
    };&lt;br /&gt;
    var DIACRITICS = {&lt;br /&gt;
      &#039;ा&#039;:&#039;ā&#039;,&#039;ि&#039;:&#039;i&#039;,&#039;ी&#039;:&#039;ī&#039;,&#039;ु&#039;:&#039;u&#039;,&#039;ू&#039;:&#039;ū&#039;,&lt;br /&gt;
      &#039;ृ&#039;:&#039;ṛ&#039;,&#039;ॄ&#039;:&#039;ṝ&#039;,&#039;े&#039;:&#039;e&#039;,&#039;ै&#039;:&#039;ai&#039;,&#039;ो&#039;:&#039;o&#039;,&#039;ौ&#039;:&#039;au&#039;&lt;br /&gt;
    };&lt;br /&gt;
    var VOWELS = {&lt;br /&gt;
      &#039;अ&#039;:&#039;a&#039;,&#039;आ&#039;:&#039;ā&#039;,&#039;इ&#039;:&#039;i&#039;,&#039;ई&#039;:&#039;ī&#039;,&#039;उ&#039;:&#039;u&#039;,&#039;ऊ&#039;:&#039;ū&#039;,&lt;br /&gt;
      &#039;ऋ&#039;:&#039;ṛ&#039;,&#039;ॠ&#039;:&#039;ṝ&#039;,&#039;ए&#039;:&#039;e&#039;,&#039;ऐ&#039;:&#039;ai&#039;,&#039;ओ&#039;:&#039;o&#039;,&#039;औ&#039;:&#039;au&#039;,&#039;ऽ&#039;:&amp;quot;&#039;&amp;quot;&lt;br /&gt;
    };&lt;br /&gt;
    var MISC = {&lt;br /&gt;
      &#039;ं&#039;:&#039;ṃ&#039;,&#039;ः&#039;:&#039;ḥ&#039;,&#039;ँ&#039;:&#039;m̐&#039;,&#039;ॐ&#039;:&#039;oṃ&#039;,&lt;br /&gt;
      &#039;०&#039;:&#039;0&#039;,&#039;१&#039;:&#039;1&#039;,&#039;२&#039;:&#039;2&#039;,&#039;३&#039;:&#039;3&#039;,&#039;४&#039;:&#039;4&#039;,&lt;br /&gt;
      &#039;५&#039;:&#039;5&#039;,&#039;६&#039;:&#039;6&#039;,&#039;७&#039;:&#039;7&#039;,&#039;८&#039;:&#039;8&#039;,&#039;९&#039;:&#039;9&#039;&lt;br /&gt;
    };&lt;br /&gt;
    var HALANTA = &#039;्&#039;;&lt;br /&gt;
    var chars = Array.from( text );&lt;br /&gt;
    var result = &#039;&#039;;&lt;br /&gt;
    var i = 0;&lt;br /&gt;
    while ( i &amp;lt; chars.length ) {&lt;br /&gt;
      var ch   = chars[ i ];&lt;br /&gt;
      var next = chars[ i + 1 ];&lt;br /&gt;
      if ( CONSONANTS[ ch ] ) {&lt;br /&gt;
        var base = CONSONANTS[ ch ];&lt;br /&gt;
        if ( next === HALANTA )          { result += base;               i += 2; }&lt;br /&gt;
        else if ( DIACRITICS[ next ] )   { result += base + DIACRITICS[ next ]; i += 2; }&lt;br /&gt;
        else if ( next === &#039;ं&#039; || next === &#039;ः&#039; ) { result += base + &#039;a&#039; + MISC[ next ]; i += 2; }&lt;br /&gt;
        else                             { result += base + &#039;a&#039;;         i++;    }&lt;br /&gt;
      } else if ( VOWELS[ ch ] )         { result += VOWELS[ ch ];       i++; }&lt;br /&gt;
      else if ( DIACRITICS[ ch ] )       { result += DIACRITICS[ ch ];   i++; }&lt;br /&gt;
      else if ( MISC[ ch ] )             { result += MISC[ ch ];         i++; }&lt;br /&gt;
      else                               { result += ch;                 i++; }&lt;br /&gt;
    }&lt;br /&gt;
    return result;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var SCRIPT_MAP = {&lt;br /&gt;
    kn: {&lt;br /&gt;
      &#039;अ&#039;:&#039;ಅ&#039;,&#039;आ&#039;:&#039;ಆ&#039;,&#039;इ&#039;:&#039;ಇ&#039;,&#039;ई&#039;:&#039;ಈ&#039;,&#039;उ&#039;:&#039;ಉ&#039;,&#039;ऊ&#039;:&#039;ಊ&#039;,&#039;ऋ&#039;:&#039;ಋ&#039;,&lt;br /&gt;
      &#039;ए&#039;:&#039;ಏ&#039;,&#039;ऐ&#039;:&#039;ಐ&#039;,&#039;ओ&#039;:&#039;ಓ&#039;,&#039;औ&#039;:&#039;ಔ&#039;,&#039;ऽ&#039;:&#039;ಽ&#039;,&lt;br /&gt;
      &#039;क&#039;:&#039;ಕ&#039;,&#039;ख&#039;:&#039;ಖ&#039;,&#039;ग&#039;:&#039;ಗ&#039;,&#039;घ&#039;:&#039;ಘ&#039;,&#039;ङ&#039;:&#039;ಙ&#039;,&lt;br /&gt;
      &#039;च&#039;:&#039;ಚ&#039;,&#039;छ&#039;:&#039;ಛ&#039;,&#039;ज&#039;:&#039;ಜ&#039;,&#039;झ&#039;:&#039;ಝ&#039;,&#039;ञ&#039;:&#039;ಞ&#039;,&lt;br /&gt;
      &#039;ट&#039;:&#039;ಟ&#039;,&#039;ठ&#039;:&#039;ಠ&#039;,&#039;ड&#039;:&#039;ಡ&#039;,&#039;ढ&#039;:&#039;ಢ&#039;,&#039;ण&#039;:&#039;ಣ&#039;,&lt;br /&gt;
      &#039;त&#039;:&#039;ತ&#039;,&#039;थ&#039;:&#039;ಥ&#039;,&#039;द&#039;:&#039;ದ&#039;,&#039;ध&#039;:&#039;ಧ&#039;,&#039;न&#039;:&#039;ನ&#039;,&lt;br /&gt;
      &#039;प&#039;:&#039;ಪ&#039;,&#039;फ&#039;:&#039;ಫ&#039;,&#039;ब&#039;:&#039;ಬ&#039;,&#039;भ&#039;:&#039;ಭ&#039;,&#039;म&#039;:&#039;ಮ&#039;,&lt;br /&gt;
      &#039;य&#039;:&#039;ಯ&#039;,&#039;र&#039;:&#039;ರ&#039;,&#039;ल&#039;:&#039;ಲ&#039;,&#039;व&#039;:&#039;ವ&#039;,&lt;br /&gt;
      &#039;श&#039;:&#039;ಶ&#039;,&#039;ष&#039;:&#039;ಷ&#039;,&#039;स&#039;:&#039;ಸ&#039;,&#039;ह&#039;:&#039;ಹ&#039;,&lt;br /&gt;
      &#039;ा&#039;:&#039;ಾ&#039;,&#039;ि&#039;:&#039;ಿ&#039;,&#039;ी&#039;:&#039;ೀ&#039;,&#039;ु&#039;:&#039;ು&#039;,&#039;ू&#039;:&#039;ೂ&#039;,&lt;br /&gt;
      &#039;ृ&#039;:&#039;ೃ&#039;,&#039;े&#039;:&#039;ೇ&#039;,&#039;ै&#039;:&#039;ೈ&#039;,&#039;ो&#039;:&#039;ೋ&#039;,&#039;ौ&#039;:&#039;ೌ&#039;,&lt;br /&gt;
      &#039;ं&#039;:&#039;ಂ&#039;,&#039;ः&#039;:&#039;ಃ&#039;,&#039;्&#039;:&#039;್&#039;,&lt;br /&gt;
      &#039;०&#039;:&#039;೦&#039;,&#039;१&#039;:&#039;೧&#039;,&#039;२&#039;:&#039;೨&#039;,&#039;३&#039;:&#039;೩&#039;,&#039;४&#039;:&#039;೪&#039;,&lt;br /&gt;
      &#039;५&#039;:&#039;೫&#039;,&#039;६&#039;:&#039;೬&#039;,&#039;७&#039;:&#039;೭&#039;,&#039;८&#039;:&#039;೮&#039;,&#039;९&#039;:&#039;೯&#039;&lt;br /&gt;
    },&lt;br /&gt;
    ta: {&lt;br /&gt;
      &#039;अ&#039;:&#039;அ&#039;,&#039;आ&#039;:&#039;ஆ&#039;,&#039;इ&#039;:&#039;இ&#039;,&#039;ई&#039;:&#039;ஈ&#039;,&#039;उ&#039;:&#039;உ&#039;,&#039;ऊ&#039;:&#039;ஊ&#039;,&lt;br /&gt;
      &#039;ऋ&#039;:&#039;ரு&#039;,&#039;ॠ&#039;:&#039;ரூ&#039;,&lt;br /&gt;
      &#039;ए&#039;:&#039;ஏ&#039;,&#039;ऐ&#039;:&#039;ஐ&#039;,&#039;ओ&#039;:&#039;ஓ&#039;,&#039;औ&#039;:&#039;ஔ&#039;,&lt;br /&gt;
      &#039;क&#039;:&#039;க&#039;,&#039;ख&#039;:&#039;க&#039;,&#039;ग&#039;:&#039;க&#039;,&#039;घ&#039;:&#039;க&#039;,&#039;ङ&#039;:&#039;ங&#039;,&lt;br /&gt;
      &#039;च&#039;:&#039;ச&#039;,&#039;छ&#039;:&#039;ச&#039;,&#039;ज&#039;:&#039;ஜ&#039;,&#039;झ&#039;:&#039;ஜ&#039;,&#039;ञ&#039;:&#039;ஞ&#039;,&lt;br /&gt;
      &#039;ட&#039;:&#039;ட&#039;,&#039;ठ&#039;:&#039;ட&#039;,&#039;ड&#039;:&#039;ட&#039;,&#039;ढ&#039;:&#039;ட&#039;,&#039;ண&#039;:&#039;ண&#039;,&lt;br /&gt;
      &#039;त&#039;:&#039;த&#039;,&#039;थ&#039;:&#039;த&#039;,&#039;द&#039;:&#039;த&#039;,&#039;ध&#039;:&#039;த&#039;,&#039;न&#039;:&#039;ந&#039;,&lt;br /&gt;
      &#039;प&#039;:&#039;ப&#039;,&#039;फ&#039;:&#039;ப&#039;,&#039;ब&#039;:&#039;ப&#039;,&#039;भ&#039;:&#039;ப&#039;,&#039;म&#039;:&#039;ம&#039;,&lt;br /&gt;
      &#039;य&#039;:&#039;ய&#039;,&#039;र&#039;:&#039;ர&#039;,&#039;ल&#039;:&#039;ல&#039;,&#039;ळ&#039;:&#039;ழ&#039;,&#039;व&#039;:&#039;வ&#039;,&lt;br /&gt;
      &#039;श&#039;:&#039;ஶ&#039;,&#039;ष&#039;:&#039;ஷ&#039;,&#039;स&#039;:&#039;ஸ&#039;,&#039;ह&#039;:&#039;ஹ&#039;,&lt;br /&gt;
      &#039;ा&#039;:&#039;ா&#039;,&#039;ि&#039;:&#039;ி&#039;,&#039;ी&#039;:&#039;ீ&#039;,&#039;ु&#039;:&#039;ு&#039;,&#039;ू&#039;:&#039;ூ&#039;,&lt;br /&gt;
      &#039;ृ&#039;:&#039;ு&#039;,&#039;ॄ&#039;:&#039;ூ&#039;,&lt;br /&gt;
      &#039;े&#039;:&#039;ே&#039;,&#039;ை&#039;:&#039;ை&#039;,&#039;ो&#039;:&#039;ோ&#039;,&#039;ौ&#039;:&#039;ௌ&#039;,&lt;br /&gt;
      &#039;ं&#039;:&#039;ம்&#039;,&#039;ः&#039;:&#039;:&#039;,&#039;ँ&#039;:&#039;ம்&#039;,&#039;्&#039;:&#039;்&#039;,&#039;ॐ&#039;:&#039;ௐ&#039;,&#039;ऽ&#039;:&#039;ௗ&#039;,&lt;br /&gt;
      &#039;०&#039;:&#039;0&#039;,&#039;१&#039;:&#039;1&#039;,&#039;२&#039;:&#039;2&#039;,&#039;३&#039;:&#039;3&#039;,&#039;४&#039;:&#039;4&#039;,&lt;br /&gt;
      &#039;५&#039;:&#039;5&#039;,&#039;६&#039;:&#039;6&#039;,&#039;७&#039;:&#039;7&#039;,&#039;८&#039;:&#039;8&#039;,&#039;९&#039;:&#039;9&#039;&lt;br /&gt;
    }&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  var PRE = [&lt;br /&gt;
    [ /ङ्क/g, &#039;ंक&#039; ], [ /ङ्ख/g, &#039;ंख&#039; ], [ /ङ्ग/g, &#039;ंग&#039; ], [ /ङ्घ/g, &#039;ंघ&#039; ],&lt;br /&gt;
    [ /ञ्च/g, &#039;ंच&#039; ], [ /ञ्ज/g, &#039;ंज&#039; ], [ /ण्ट/g, &#039;ंट&#039; ], [ /ण्ड/g, &#039;ंड&#039; ],&lt;br /&gt;
    [ /न्त/g, &#039;ंत&#039; ], [ /न्द/g, &#039;ंद&#039; ], [ /म्ब/g, &#039;ंब&#039; ], [ /म्भ/g, &#039;ंभ&#039; ]&lt;br /&gt;
  ];&lt;br /&gt;
&lt;br /&gt;
  function transliterateText( text, script ) {&lt;br /&gt;
    if ( script === &#039;en&#039; ) return devanagariToIAST( text );&lt;br /&gt;
    var map = SCRIPT_MAP[ script ];&lt;br /&gt;
    if ( !map ) return text;&lt;br /&gt;
    var t = text;&lt;br /&gt;
    PRE.forEach( function ( p ) { t = t.replace( p[ 0 ], p[ 1 ] ); } );&lt;br /&gt;
    return Array.from( t ).map( function ( ch ) {&lt;br /&gt;
      return map[ ch ] !== undefined ? map[ ch ] : ch;&lt;br /&gt;
    } ).join( &#039;&#039; );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var translatableSpans = [];&lt;br /&gt;
&lt;br /&gt;
  function tagTextNodes() {&lt;br /&gt;
    var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
    if ( content ) {&lt;br /&gt;
      var walker = document.createTreeWalker( content, NodeFilter.SHOW_TEXT );&lt;br /&gt;
      var nodes  = [];&lt;br /&gt;
      while ( walker.nextNode() ) nodes.push( walker.currentNode );&lt;br /&gt;
      nodes.forEach( function ( node ) {&lt;br /&gt;
        var p = node.parentNode;&lt;br /&gt;
        if ( !p ) return;&lt;br /&gt;
        if ( p.hasAttribute &amp;amp;&amp;amp; p.hasAttribute( &#039;data-deva&#039; ) ) return;&lt;br /&gt;
        if ( p.closest ) {&lt;br /&gt;
          if ( p.closest( &#039;.gr-controls&#039; )    ) return;&lt;br /&gt;
          if ( p.closest( &#039;.mw-editsection&#039; ) ) return;&lt;br /&gt;
        }&lt;br /&gt;
        var orig = node.textContent;&lt;br /&gt;
        if ( !orig.trim() ) return;&lt;br /&gt;
        var span = document.createElement( &#039;span&#039; );&lt;br /&gt;
        span.setAttribute( &#039;data-deva&#039;, orig );&lt;br /&gt;
        span.textContent = orig;&lt;br /&gt;
        p.replaceChild( span, node );&lt;br /&gt;
        translatableSpans.push( span );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
    document.querySelectorAll( &#039;.vector-toc .vector-toc-text&#039; ).forEach( function ( span ) {&lt;br /&gt;
      if ( span.hasAttribute( &#039;data-deva&#039; ) ) return;&lt;br /&gt;
      var orig = span.textContent;&lt;br /&gt;
      if ( !orig.trim() ) return;&lt;br /&gt;
      span.setAttribute( &#039;data-deva&#039;, orig );&lt;br /&gt;
      translatableSpans.push( span );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function applyScript( script ) {&lt;br /&gt;
    currentScript = script;&lt;br /&gt;
    translatableSpans.forEach( function ( span ) {&lt;br /&gt;
      if ( !span.parentNode ) return;&lt;br /&gt;
      var orig = span.getAttribute( &#039;data-deva&#039; );&lt;br /&gt;
      if ( !orig ) return;&lt;br /&gt;
      span.textContent = ( script === &#039;deva&#039; )&lt;br /&gt;
        ? orig&lt;br /&gt;
        : transliterateText( orig, script );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function _isNoTocPage() {&lt;br /&gt;
    var pn = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039; ) ) || &#039;&#039;;&lt;br /&gt;
    return pn === &#039;Main_Page&#039; || /^[A-Za-z0-9_]+:About$/.test( pn );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function renameTocTitle() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    var titleEl = toc.querySelector(&#039;.vector-toc-title&#039;) || toc.querySelector(&#039;.vector-pinnable-header-label&#039;);&lt;br /&gt;
    if ( !titleEl ) return;&lt;br /&gt;
    var LABEL = &#039;विषयसूची&#039;;&lt;br /&gt;
    var span = titleEl.querySelector(&#039;.gr-toc-title&#039;);&lt;br /&gt;
    if ( !span ) {&lt;br /&gt;
      titleEl.innerHTML = &#039;&#039;;&lt;br /&gt;
      span = document.createElement(&#039;span&#039;);&lt;br /&gt;
      span.className = &#039;gr-toc-title&#039;;&lt;br /&gt;
      span.setAttribute(&#039;data-deva&#039;, LABEL);&lt;br /&gt;
      titleEl.appendChild(span);&lt;br /&gt;
      translatableSpans.push(span);&lt;br /&gt;
    }&lt;br /&gt;
    span.textContent = currentScript === &#039;deva&#039; ? LABEL : transliterateText(LABEL, currentScript);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function removeTocBeginning() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    var el = toc.querySelector( &#039;#vector-toc-beginning&#039; );&lt;br /&gt;
    if ( !el ) {&lt;br /&gt;
      var items = toc.querySelectorAll( &#039;.vector-toc-list-item&#039; );&lt;br /&gt;
      for ( var i = 0; i &amp;lt; items.length; i++ ) {&lt;br /&gt;
        var a = items[ i ].querySelector( &#039;a&#039; );&lt;br /&gt;
        if ( a ) {&lt;br /&gt;
          var href = a.getAttribute( &#039;href&#039; ) || &#039;&#039;;&lt;br /&gt;
          if ( href.indexOf( &#039;#&#039; ) === -1 ) { el = items[ i ]; break; }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if ( el &amp;amp;&amp;amp; el.parentNode ) el.parentNode.removeChild( el );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function expandTocSections() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    toc.querySelectorAll( &#039;.vector-toc-list-item-collapsed&#039; ).forEach( function ( li ) {&lt;br /&gt;
      li.classList.remove( &#039;vector-toc-list-item-collapsed&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function injectTocDocNav() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    if ( document.getElementById( &#039;gr-toc-doc-nav&#039; ) ) return;&lt;br /&gt;
    var artPath   = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
    var pageTitle = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039;   ) ) || &#039;&#039;;&lt;br /&gt;
    var teekaPage   = document.querySelector( &#039;.gr-teeka-page&#039; );&lt;br /&gt;
    var primarySlug = teekaPage ? ( teekaPage.getAttribute( &#039;data-primary&#039; ) || &#039;&#039; ) : &#039;&#039;;&lt;br /&gt;
    if ( !primarySlug ) { primarySlug = pageTitle.split( &#039;/&#039; )[ 0 ]; }&lt;br /&gt;
    if ( !primarySlug ) return;&lt;br /&gt;
    function wikiUrl( slug ) {&lt;br /&gt;
      if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( slug );&lt;br /&gt;
      return artPath.replace( &#039;$1&#039;, encodeURIComponent( slug ).replace( /%2F/g, &#039;/&#039; ) );&lt;br /&gt;
    }&lt;br /&gt;
    var docTitleEl     = document.querySelector( &#039;.gr-doc-title&#039; );&lt;br /&gt;
    var hasMoolaPage   = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-moola&#039; )   === &#039;1&#039;;&lt;br /&gt;
    var hasUllekhaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-ullekha&#039; ) === &#039;1&#039;;&lt;br /&gt;
    var showMoolaPage  = !teekaPage &amp;amp;&amp;amp; hasMoolaPage;&lt;br /&gt;
    var showMoolaBack  = !!teekaPage;&lt;br /&gt;
    var showUllekha    = hasUllekhaPage || !!teekaPage;&lt;br /&gt;
    if ( !showMoolaPage &amp;amp;&amp;amp; !showMoolaBack &amp;amp;&amp;amp; !showUllekha ) return;&lt;br /&gt;
    var nav = document.createElement( &#039;div&#039; );&lt;br /&gt;
    nav.id = &#039;gr-toc-doc-nav&#039;;&lt;br /&gt;
    nav.setAttribute( &#039;class&#039;, &#039;toc-main-links&#039; );&lt;br /&gt;
    function makeBtn( href, label ) {&lt;br /&gt;
      var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
      a.href = href;&lt;br /&gt;
      a.setAttribute( &#039;class&#039;, &#039;toc-main-link-item&#039; );&lt;br /&gt;
      var lspan = document.createElement( &#039;span&#039; );&lt;br /&gt;
      lspan.setAttribute( &#039;data-deva&#039;, label );&lt;br /&gt;
      lspan.textContent = ( currentScript &amp;amp;&amp;amp; currentScript !== &#039;deva&#039; ) ? transliterateText( label, currentScript ) : label;&lt;br /&gt;
      translatableSpans.push( lspan );&lt;br /&gt;
      a.appendChild( lspan );&lt;br /&gt;
      a.addEventListener( &#039;mouseover&#039;, function () { this.style.opacity = &#039;0.72&#039;; } );&lt;br /&gt;
      a.addEventListener( &#039;mouseout&#039;,  function () { this.style.opacity = &#039;1&#039;;    } );&lt;br /&gt;
      return a;&lt;br /&gt;
    }&lt;br /&gt;
    if ( showMoolaPage ) nav.appendChild( makeBtn( wikiUrl( primarySlug + &#039;/Moola&#039; ), &#039;मूलम्&#039; ) );&lt;br /&gt;
    if ( showMoolaBack ) nav.appendChild( makeBtn( wikiUrl( primarySlug ),            &#039;मूल&#039;   ) );&lt;br /&gt;
    if ( showUllekha   ) nav.appendChild( makeBtn( wikiUrl( primarySlug + &#039;/Ullekha&#039;), &#039;उल्लेख&#039;) );&lt;br /&gt;
    var tocContents = toc.querySelector( &#039;.vector-toc-contents&#039; );&lt;br /&gt;
    if ( tocContents ) toc.insertBefore( nav, tocContents );&lt;br /&gt;
    else               toc.appendChild( nav );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var _headingObserver = null;&lt;br /&gt;
&lt;br /&gt;
  function attachHeadingObserver() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    if ( _headingObserver ) return;&lt;br /&gt;
    if ( !window.IntersectionObserver ) return;&lt;br /&gt;
    var ACTIVE_COLOR = &#039;#f57c00&#039;;&lt;br /&gt;
    var _activeId    = null;&lt;br /&gt;
    var content  = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
    if ( !content ) return;&lt;br /&gt;
    var headings = Array.from( content.querySelectorAll( &#039;h1[id],h2[id],h3[id],h4[id],h5[id],h6[id]&#039; ) );&lt;br /&gt;
    if ( !headings.length ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    function getTocLink( id ) { return toc.querySelector( &#039;a[href=&amp;quot;#&#039; + CSS.escape( id ) + &#039;&amp;quot;]&#039; ); }&lt;br /&gt;
    function getTocLi( id ) { var a = getTocLink( id ); return a ? a.closest( &#039;.vector-toc-list-item&#039; ) : null; }&lt;br /&gt;
    function clearActive() {&lt;br /&gt;
      toc.querySelectorAll( &#039;.vector-toc-list-item&#039; ).forEach( function ( li ) {&lt;br /&gt;
        li.classList.remove( &#039;vector-toc-list-item-active&#039; );&lt;br /&gt;
        var lnk = li.querySelector( &#039;.vector-toc-link&#039; );&lt;br /&gt;
        if ( !lnk ) return;&lt;br /&gt;
        lnk.style.removeProperty( &#039;color&#039; );&lt;br /&gt;
        lnk.style.setProperty( &#039;font-weight&#039;, &#039;400&#039;, &#039;important&#039; );&lt;br /&gt;
        lnk.querySelectorAll( &#039;*&#039; ).forEach( function ( el ) { el.style.removeProperty( &#039;color&#039; ); el.style.setProperty( &#039;font-weight&#039;, &#039;400&#039;, &#039;important&#039; ); } );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
    function setActive( id ) {&lt;br /&gt;
      if ( _activeId === id ) return;&lt;br /&gt;
      _activeId = id;&lt;br /&gt;
      clearActive();&lt;br /&gt;
      if ( !id ) return;&lt;br /&gt;
      var li = getTocLi( id );&lt;br /&gt;
      if ( !li ) return;&lt;br /&gt;
      li.classList.add( &#039;vector-toc-list-item-active&#039; );&lt;br /&gt;
      var hasActiveChild = !!li.querySelector( &#039;.vector-toc-list-item .vector-toc-list-item-active&#039; );&lt;br /&gt;
      if ( !hasActiveChild ) {&lt;br /&gt;
        var lnk = li.querySelector( &#039;.vector-toc-link&#039; );&lt;br /&gt;
        if ( lnk ) {&lt;br /&gt;
          lnk.style.setProperty( &#039;color&#039;, ACTIVE_COLOR, &#039;important&#039; );&lt;br /&gt;
          lnk.style.setProperty( &#039;font-weight&#039;, &#039;700&#039;, &#039;important&#039; );&lt;br /&gt;
          lnk.querySelectorAll( &#039;*&#039; ).forEach( function ( el ) { el.style.setProperty( &#039;color&#039;, ACTIVE_COLOR, &#039;important&#039; ); el.style.setProperty( &#039;font-weight&#039;, &#039;700&#039;, &#039;important&#039; ); } );&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      var anc = li.parentNode;&lt;br /&gt;
      while ( anc &amp;amp;&amp;amp; anc !== toc ) {&lt;br /&gt;
        if ( anc.classList ) anc.classList.remove( &#039;vector-toc-list-item-collapsed&#039; );&lt;br /&gt;
        if ( anc.tagName === &#039;UL&#039; || anc.tagName === &#039;LI&#039; ) anc.style.removeProperty( &#039;display&#039; );&lt;br /&gt;
        anc = anc.parentNode;&lt;br /&gt;
      }&lt;br /&gt;
      var sticky = document.querySelector( &#039;.vector-sticky-pinned-container&#039; );&lt;br /&gt;
      var scrollEl = sticky || toc;&lt;br /&gt;
      if ( scrollEl.scrollHeight &amp;gt; scrollEl.clientHeight ) {&lt;br /&gt;
        var lr = li.getBoundingClientRect();&lt;br /&gt;
        var cr = scrollEl.getBoundingClientRect();&lt;br /&gt;
        if ( lr.top &amp;lt; cr.top + 8 || lr.bottom &amp;gt; cr.bottom - 8 ) {&lt;br /&gt;
          scrollEl.scrollTop += lr.top - cr.top - scrollEl.clientHeight / 2 + li.offsetHeight / 2;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    var _visible = new Set();&lt;br /&gt;
    _headingObserver = new IntersectionObserver( function ( entries ) {&lt;br /&gt;
      entries.forEach( function ( entry ) {&lt;br /&gt;
        if ( entry.isIntersecting ) _visible.add( entry.target.id );&lt;br /&gt;
        else _visible.delete( entry.target.id );&lt;br /&gt;
      } );&lt;br /&gt;
      var topId = null, topY = Infinity;&lt;br /&gt;
      _visible.forEach( function ( id ) {&lt;br /&gt;
        var el = document.getElementById( id );&lt;br /&gt;
        if ( el ) { var y = el.getBoundingClientRect().top; if ( y &amp;gt;= 0 &amp;amp;&amp;amp; y &amp;lt; topY ) { topY = y; topId = id; } }&lt;br /&gt;
      } );&lt;br /&gt;
      if ( !topId ) {&lt;br /&gt;
        var bestY = -Infinity;&lt;br /&gt;
        headings.forEach( function ( h ) { var y = h.getBoundingClientRect().top; if ( y &amp;lt; 0 &amp;amp;&amp;amp; y &amp;gt; bestY ) { bestY = y; topId = h.id; } } );&lt;br /&gt;
      }&lt;br /&gt;
      setActive( topId || null );&lt;br /&gt;
    }, { rootMargin: &#039;-60px 0px -65% 0px&#039;, threshold: 0 } );&lt;br /&gt;
    headings.forEach( function ( h ) { _headingObserver.observe( h ); } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function setupToc() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    removeTocBeginning();&lt;br /&gt;
    renameTocTitle();&lt;br /&gt;
    expandTocSections();&lt;br /&gt;
    injectTocDocNav();&lt;br /&gt;
    attachHeadingObserver();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function init() {&lt;br /&gt;
    var HIDE_IDS = [ &#039;vector-appearance&#039;, &#039;vector-appearance-pinned-container&#039;, &#039;vector-appearance-unpinned-container&#039; ];&lt;br /&gt;
    function removeHiddenEls() {&lt;br /&gt;
      HIDE_IDS.forEach( function ( id ) { var el = document.getElementById( id ); if ( el &amp;amp;&amp;amp; el.parentNode ) el.parentNode.removeChild( el ); } );&lt;br /&gt;
      var pt = document.getElementById( &#039;vector-page-tools&#039; ) || document.querySelector( &#039;.vector-page-tools-pinned-container&#039; );&lt;br /&gt;
      if ( pt ) pt.querySelectorAll( &#039;[aria-controls=&amp;quot;vector-appearance&amp;quot;]&#039; ).forEach( function ( el ) { if ( el.parentNode ) el.parentNode.removeChild( el ); } );&lt;br /&gt;
    }&lt;br /&gt;
    removeHiddenEls();&lt;br /&gt;
    ( function detectTeekaMode() {&lt;br /&gt;
      var tp = document.querySelector( &#039;.gr-teeka-page&#039; );&lt;br /&gt;
      if ( !tp ) return;&lt;br /&gt;
      var primary = tp.getAttribute( &#039;data-primary&#039; ) || &#039;&#039;;&lt;br /&gt;
      var artPath = ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
      var mainUrl = artPath.replace( &#039;$1&#039;, primary );&lt;br /&gt;
      var refParam = window.location.search.match( /[?&amp;amp;]ref=([01])/ );&lt;br /&gt;
      if ( refParam ) { document.body.classList.add( refParam[1] === &#039;1&#039; ? &#039;gr-ref-mode&#039; : &#039;gr-standalone&#039; ); return; }&lt;br /&gt;
      var ref = document.referrer || &#039;&#039;;&lt;br /&gt;
      document.body.classList.add( ( ref &amp;amp;&amp;amp; primary &amp;amp;&amp;amp; ref.indexOf( mainUrl ) !== -1 ) ? &#039;gr-ref-mode&#039; : &#039;gr-standalone&#039; );&lt;br /&gt;
    }() );&lt;br /&gt;
    if ( window.MutationObserver ) {&lt;br /&gt;
      var hideObs = new MutationObserver( function ( mutations ) {&lt;br /&gt;
        var dirty = false;&lt;br /&gt;
        mutations.forEach( function ( m ) { if ( m.addedNodes.length ) dirty = true; } );&lt;br /&gt;
        if ( dirty ) removeHiddenEls();&lt;br /&gt;
      } );&lt;br /&gt;
      hideObs.observe( document.body, { childList: true, subtree: false } );&lt;br /&gt;
      setTimeout( function () { hideObs.disconnect(); }, 6000 );&lt;br /&gt;
    }&lt;br /&gt;
    var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
    var alreadyTagged = content &amp;amp;&amp;amp; content.querySelector( &#039;[data-deva]&#039; );&lt;br /&gt;
    if ( !alreadyTagged ) { translatableSpans = []; tagTextNodes(); }&lt;br /&gt;
    else {&lt;br /&gt;
      document.querySelectorAll( &#039;.vector-toc .vector-toc-text:not([data-deva])&#039; ).forEach( function ( span ) {&lt;br /&gt;
        var orig = span.textContent; if ( !orig.trim() ) return;&lt;br /&gt;
        span.setAttribute( &#039;data-deva&#039;, orig ); translatableSpans.push( span );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
    var saved = ( function () { try { return localStorage.getItem( LS_SCRIPT_KEY ); } catch ( e ) { return null; } }() );&lt;br /&gt;
    if ( saved &amp;amp;&amp;amp; saved !== &#039;deva&#039; ) { applyScript( saved ); } else { currentScript = &#039;deva&#039;; }&lt;br /&gt;
    setTimeout( setupToc, 200 );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  window.addEventListener( &#039;gr-script-change&#039;, function ( e ) {&lt;br /&gt;
    var script = e &amp;amp;&amp;amp; e.detail &amp;amp;&amp;amp; e.detail.script;&lt;br /&gt;
    if ( script ) applyScript( script );&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
  window.addEventListener( &#039;gr-new-content&#039;, function ( e ) {&lt;br /&gt;
    var container = e &amp;amp;&amp;amp; e.detail &amp;amp;&amp;amp; e.detail.container;&lt;br /&gt;
    if ( !container ) return;&lt;br /&gt;
    var walker = document.createTreeWalker( container, NodeFilter.SHOW_TEXT );&lt;br /&gt;
    var nodes = [];&lt;br /&gt;
    while ( walker.nextNode() ) nodes.push( walker.currentNode );&lt;br /&gt;
    nodes.forEach( function ( node ) {&lt;br /&gt;
      var p = node.parentNode;&lt;br /&gt;
      if ( !p || ( p.hasAttribute &amp;amp;&amp;amp; p.hasAttribute( &#039;data-deva&#039; ) ) ) return;&lt;br /&gt;
      var orig = node.textContent;&lt;br /&gt;
      if ( !orig.trim() ) return;&lt;br /&gt;
      var span = document.createElement( &#039;span&#039; );&lt;br /&gt;
      span.setAttribute( &#039;data-deva&#039;, orig );&lt;br /&gt;
      span.textContent = currentScript !== &#039;deva&#039; ? transliterateText( orig, currentScript ) : orig;&lt;br /&gt;
      p.replaceChild( span, node );&lt;br /&gt;
      translatableSpans.push( span );&lt;br /&gt;
    } );&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
  try {&lt;br /&gt;
    var _grBC = new BroadcastChannel( &#039;gr-script&#039; );&lt;br /&gt;
    _grBC.onmessage = function ( e ) {&lt;br /&gt;
      var script = e &amp;amp;&amp;amp; e.data &amp;amp;&amp;amp; e.data.script;&lt;br /&gt;
      if ( script ) { currentScript = script; var sel = document.querySelector( &#039;.gr-script-sel&#039; ); if ( sel ) sel.value = script; applyScript( script ); }&lt;br /&gt;
    };&lt;br /&gt;
  } catch ( e ) {}&lt;br /&gt;
&lt;br /&gt;
  if ( window.mw ) {&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
      setTimeout( function () {&lt;br /&gt;
        var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
        var alreadyTagged = content &amp;amp;&amp;amp; content.querySelector( &#039;[data-deva]&#039; );&lt;br /&gt;
        if ( !alreadyTagged ) { translatableSpans = []; tagTextNodes(); }&lt;br /&gt;
        else {&lt;br /&gt;
          document.querySelectorAll( &#039;.vector-toc .vector-toc-text:not([data-deva])&#039; ).forEach( function ( span ) {&lt;br /&gt;
            var orig = span.textContent; if ( !orig.trim() ) return;&lt;br /&gt;
            span.setAttribute( &#039;data-deva&#039;, orig ); translatableSpans.push( span );&lt;br /&gt;
          } );&lt;br /&gt;
        }&lt;br /&gt;
        if ( currentScript !== &#039;deva&#039; ) applyScript( currentScript );&lt;br /&gt;
        setupToc();&lt;br /&gt;
      }, 150 );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) { document.addEventListener( &#039;DOMContentLoaded&#039;, init ); }&lt;br /&gt;
  else { init(); }&lt;br /&gt;
&lt;br /&gt;
}() );   /* ← end of main IIFE */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Inject &amp;quot;Help&amp;quot; and &amp;quot;About&amp;quot; links into the header ─────────────────&lt;br /&gt;
( function () {&lt;br /&gt;
  function wikiHref( title ) {&lt;br /&gt;
    if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( title );&lt;br /&gt;
    var ap = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
    return ap.replace( &#039;$1&#039;, title );&lt;br /&gt;
  }&lt;br /&gt;
  var linkStyle = [ &#039;color:rgba(255,255,255,0.88)&#039;,&#039;font-size:0.88em&#039;,&#039;font-family:system-ui,sans-serif&#039;,&#039;font-weight:500&#039;,&#039;text-decoration:none&#039;,&#039;padding:4px 10px&#039;,&#039;border-radius:4px&#039;,&#039;margin-right:4px&#039;,&#039;transition:color 0.15s,background 0.15s&#039;,&#039;white-space:nowrap&#039; ].join( &#039;;&#039; );&lt;br /&gt;
  function makeHeaderLink( id, href, label ) {&lt;br /&gt;
    var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
    a.id = id; a.href = href; a.textContent = label; a.style.cssText = linkStyle;&lt;br /&gt;
    a.addEventListener( &#039;mouseover&#039;, function () { this.style.color = &#039;#fff&#039;; this.style.background = &#039;rgba(255,255,255,0.12)&#039;; } );&lt;br /&gt;
    a.addEventListener( &#039;mouseout&#039;,  function () { this.style.color = &#039;rgba(255,255,255,0.88)&#039;; this.style.background = &#039;transparent&#039;; } );&lt;br /&gt;
    return a;&lt;br /&gt;
  }&lt;br /&gt;
  function injectHeaderLinks() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-about-link&#039; ) ) return;&lt;br /&gt;
    var headerEnd = document.querySelector( &#039;.vector-header-end&#039; ) || document.querySelector( &#039;#vector-user-links&#039; ) || document.querySelector( &#039;.mw-header&#039; );&lt;br /&gt;
    if ( !headerEnd ) return;&lt;br /&gt;
    var helpLink  = makeHeaderLink( &#039;gr-help-link&#039;,  wikiHref( &#039;My_wiki:Help&#039;  ), &#039;Help&#039;  );&lt;br /&gt;
    var aboutLink = makeHeaderLink( &#039;gr-about-link&#039;, wikiHref( &#039;My_wiki:About&#039; ), &#039;About&#039; );&lt;br /&gt;
    var ul = document.querySelector( &#039;.vector-user-links&#039; ) || document.querySelector( &#039;#pt-userpage&#039; );&lt;br /&gt;
    if ( ul &amp;amp;&amp;amp; ul.parentNode === headerEnd ) { headerEnd.insertBefore( aboutLink, ul ); headerEnd.insertBefore( helpLink, aboutLink ); }&lt;br /&gt;
    else { headerEnd.appendChild( helpLink ); headerEnd.appendChild( aboutLink ); }&lt;br /&gt;
  }&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) document.addEventListener( &#039;DOMContentLoaded&#039;, injectHeaderLinks );&lt;br /&gt;
  else injectHeaderLinks();&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Main page: by-Grantha / by-Author toggle ──────────────────────&lt;br /&gt;
( function () {&lt;br /&gt;
  function grHomeView( v ) {&lt;br /&gt;
    var gView = document.getElementById( &#039;gr-view-grantha&#039; );&lt;br /&gt;
    var aView = document.getElementById( &#039;gr-view-author&#039; );&lt;br /&gt;
    var gBtn  = document.getElementById( &#039;gr-toggle-grantha&#039; );&lt;br /&gt;
    var aBtn  = document.getElementById( &#039;gr-toggle-author&#039; );&lt;br /&gt;
    if ( !gView || !aView || !gBtn || !aBtn ) return;&lt;br /&gt;
    gView.style.display = ( v === &#039;grantha&#039; ) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
    aView.style.display = ( v === &#039;author&#039;  ) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
    gBtn.className = &#039;gr-toggle-btn&#039; + ( v === &#039;grantha&#039; ? &#039; gr-toggle-active&#039; : &#039;&#039; );&lt;br /&gt;
    aBtn.className = &#039;gr-toggle-btn&#039; + ( v === &#039;author&#039;  ? &#039; gr-toggle-active&#039; : &#039;&#039; );&lt;br /&gt;
    try { localStorage.setItem( &#039;gr_home_view&#039;, v ); } catch ( e ) {}&lt;br /&gt;
  }&lt;br /&gt;
  function initHomeToggle() {&lt;br /&gt;
    var gBtn = document.getElementById( &#039;gr-toggle-grantha&#039; );&lt;br /&gt;
    var aBtn = document.getElementById( &#039;gr-toggle-author&#039; );&lt;br /&gt;
    if ( !gBtn || !aBtn ) return;&lt;br /&gt;
    gBtn.addEventListener( &#039;click&#039;, function () { grHomeView( &#039;grantha&#039; ); } );&lt;br /&gt;
    aBtn.addEventListener( &#039;click&#039;, function () { grHomeView( &#039;author&#039; );  } );&lt;br /&gt;
    [ gBtn, aBtn ].forEach( function ( btn ) { btn.addEventListener( &#039;keydown&#039;, function ( e ) { if ( e.key === &#039;Enter&#039; || e.key === &#039; &#039; ) btn.click(); } ); } );&lt;br /&gt;
    var saved; try { saved = localStorage.getItem( &#039;gr_home_view&#039; ); } catch ( e ) {}&lt;br /&gt;
    if ( saved === &#039;author&#039; ) grHomeView( &#039;author&#039; );&lt;br /&gt;
  }&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) document.addEventListener( &#039;DOMContentLoaded&#039;, initHomeToggle );&lt;br /&gt;
  else initHomeToggle();&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Ullekha reference link handler ─────────────────────────────────&lt;br /&gt;
( function () {&lt;br /&gt;
  function highlightOnArrival() {&lt;br /&gt;
    var search = window.location.search;&lt;br /&gt;
    if ( !search ) return;&lt;br /&gt;
    var m = search.match( /[?&amp;amp;]hlUllekha=([^&amp;amp;]+)/ );&lt;br /&gt;
    if ( !m ) return;&lt;br /&gt;
    var needle;&lt;br /&gt;
    try { needle = decodeURIComponent( m[ 1 ] ); } catch ( e ) { return; }&lt;br /&gt;
    if ( !needle || needle.length &amp;lt; 4 ) return;&lt;br /&gt;
    function doHighlight() {&lt;br /&gt;
      var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
      if ( !content ) return;&lt;br /&gt;
      var snippet = needle.slice( 0, 40 );&lt;br /&gt;
      var found   = false;&lt;br /&gt;
      var spans = content.querySelectorAll( &#039;[data-deva]&#039; );&lt;br /&gt;
      for ( var i = 0; i &amp;lt; spans.length &amp;amp;&amp;amp; !found; i++ ) {&lt;br /&gt;
        var spanEl = spans[ i ];&lt;br /&gt;
        var orig   = spanEl.getAttribute( &#039;data-deva&#039; ) || &#039;&#039;;&lt;br /&gt;
        if ( orig.indexOf( snippet ) === -1 ) continue;&lt;br /&gt;
        var idx    = orig.indexOf( snippet );&lt;br /&gt;
        var hlText = orig.slice( idx, Math.min( idx + needle.length, orig.length ) );&lt;br /&gt;
        var mark   = document.createElement( &#039;mark&#039; );&lt;br /&gt;
        mark.className = &#039;gr-ullekha-highlight&#039;;&lt;br /&gt;
        mark.style.cssText = &#039;background:#fff176;border-radius:2px;padding:0 2px;&#039;;&lt;br /&gt;
        mark.textContent = hlText;&lt;br /&gt;
        var parent = spanEl.parentNode;&lt;br /&gt;
        if ( !parent ) continue;&lt;br /&gt;
        var before = document.createTextNode( orig.slice( 0, idx ) );&lt;br /&gt;
        var after  = document.createTextNode( orig.slice( idx + hlText.length ) );&lt;br /&gt;
        parent.insertBefore( before, spanEl ); parent.insertBefore( mark, spanEl ); parent.insertBefore( after, spanEl ); parent.removeChild( spanEl );&lt;br /&gt;
        setTimeout( function () { mark.scrollIntoView( { behavior: &#039;smooth&#039;, block: &#039;center&#039; } ); }, 100 );&lt;br /&gt;
        found = true;&lt;br /&gt;
      }&lt;br /&gt;
      if ( !found ) {&lt;br /&gt;
        var walker = document.createTreeWalker( content, NodeFilter.SHOW_TEXT );&lt;br /&gt;
        while ( walker.nextNode() &amp;amp;&amp;amp; !found ) {&lt;br /&gt;
          var node = walker.currentNode;&lt;br /&gt;
          var txt  = node.textContent || &#039;&#039;;&lt;br /&gt;
          if ( txt.indexOf( snippet ) === -1 ) continue;&lt;br /&gt;
          var idx2  = txt.indexOf( snippet );&lt;br /&gt;
          var mark2 = document.createElement( &#039;mark&#039; );&lt;br /&gt;
          mark2.className = &#039;gr-ullekha-highlight&#039;;&lt;br /&gt;
          mark2.style.cssText = &#039;background:#fff176;border-radius:2px;padding:0 2px;&#039;;&lt;br /&gt;
          mark2.textContent = txt.slice( idx2, Math.min( idx2 + needle.length, txt.length ) );&lt;br /&gt;
          var p = node.parentNode;&lt;br /&gt;
          p.insertBefore( document.createTextNode( txt.slice( 0, idx2 ) ), node );&lt;br /&gt;
          p.insertBefore( mark2, node );&lt;br /&gt;
          p.insertBefore( document.createTextNode( txt.slice( idx2 + mark2.textContent.length ) ), node );&lt;br /&gt;
          p.removeChild( node );&lt;br /&gt;
          setTimeout( function () { mark2.scrollIntoView( { behavior: &#039;smooth&#039;, block: &#039;center&#039; } ); }, 100 );&lt;br /&gt;
          found = true;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    doHighlight();&lt;br /&gt;
  }&lt;br /&gt;
  function wireUllekhaLinks() {&lt;br /&gt;
    document.querySelectorAll( &#039;.gr-ullekha-ref-link&#039; ).forEach( function ( wrap ) {&lt;br /&gt;
      var anchor = wrap.getAttribute( &#039;data-anchor&#039; ) || &#039;&#039;;&lt;br /&gt;
      var hl     = wrap.getAttribute( &#039;data-hl&#039; )     || &#039;&#039;;&lt;br /&gt;
      var a = wrap.querySelector( &#039;a&#039; );&lt;br /&gt;
      if ( !a ) return;&lt;br /&gt;
      var base = a.href.split( &#039;#&#039; )[ 0 ];&lt;br /&gt;
      var encoded = encodeURIComponent( hl );&lt;br /&gt;
      a.href = base + ( hl ? &#039;?hlUllekha=&#039; + encoded : &#039;&#039; ) + ( anchor ? &#039;#&#039; + anchor : &#039;&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) { document.addEventListener( &#039;DOMContentLoaded&#039;, function () { highlightOnArrival(); wireUllekhaLinks(); } ); }&lt;br /&gt;
  else { highlightOnArrival(); wireUllekhaLinks(); }&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
/* ── Search result highlight ──────────────────────────────────── */&lt;br /&gt;
/* EXACT REPLACEMENT for the search highlight IIFE in MediaWiki:Common.js.&lt;br /&gt;
 * Only changes from the original working version:&lt;br /&gt;
 *  - Mobile bar: full-width terracotta bottom bar instead of floating pill&lt;br /&gt;
 *  - showDismissBar: guard added (if !count return) to prevent empty bar&lt;br /&gt;
 * Everything else (storeQueryForLink, applyHighlight, wrapMatches) is&lt;br /&gt;
 * identical to the version that was working.&lt;br /&gt;
 */&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
  function storeQueryForLink( url, query ) {&lt;br /&gt;
    try {&lt;br /&gt;
      var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
      a.href = url;&lt;br /&gt;
      sessionStorage.setItem( &#039;gr_search_hl&#039;, JSON.stringify({&lt;br /&gt;
        query:    query,&lt;br /&gt;
        pathname: a.pathname&lt;br /&gt;
      }) );&lt;br /&gt;
    } catch(e) {}&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function applyHighlight() {&lt;br /&gt;
    var stored;&lt;br /&gt;
    try {&lt;br /&gt;
      stored = JSON.parse( sessionStorage.getItem( &#039;gr_search_hl&#039; ) || &#039;null&#039; );&lt;br /&gt;
    } catch(e) { return; }&lt;br /&gt;
    if ( !stored || !stored.query ) return;&lt;br /&gt;
&lt;br /&gt;
    var currentPath = window.location.pathname;&lt;br /&gt;
    var storedPath  = stored.pathname || &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
    function normPath(p) { return decodeURIComponent(p).replace(/\/+$/, &#039;&#039;); }&lt;br /&gt;
    if ( storedPath &amp;amp;&amp;amp; normPath(storedPath) !== normPath(currentPath) ) {&lt;br /&gt;
      try { sessionStorage.removeItem( &#039;gr_search_hl&#039; ); } catch(e) {}&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var query = stored.query.trim();&lt;br /&gt;
    if ( !query ) return;&lt;br /&gt;
&lt;br /&gt;
    try { sessionStorage.removeItem( &#039;gr_search_hl&#039; ); } catch(e) {}&lt;br /&gt;
&lt;br /&gt;
    var delays = [ 0, 200, 600 ];&lt;br /&gt;
    delays.forEach( function(ms) {&lt;br /&gt;
      setTimeout( function() {&lt;br /&gt;
        if ( document.querySelector( &#039;.gr-search-hl&#039; ) ) return;&lt;br /&gt;
        highlightText( query );&lt;br /&gt;
      }, ms );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function highlightText( query ) {&lt;br /&gt;
    var content = document.querySelector( &#039;#mw-content-text .mw-parser-output&#039; );&lt;br /&gt;
    if ( !content ) return;&lt;br /&gt;
&lt;br /&gt;
    var raw = query.replace( /^&amp;quot;|&amp;quot;$/g, &#039;&#039; ).trim();&lt;br /&gt;
    if ( !raw ) return;&lt;br /&gt;
&lt;br /&gt;
    var patterns = [];&lt;br /&gt;
    patterns.push( escapeRegex( raw ) );&lt;br /&gt;
    raw.split( /\s+/ ).forEach( function(w) {&lt;br /&gt;
      if ( w.length &amp;gt;= 2 ) patterns.push( escapeRegex( w ) );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    var matched = false;&lt;br /&gt;
    for ( var pi = 0; pi &amp;lt; patterns.length; pi++ ) {&lt;br /&gt;
      var re;&lt;br /&gt;
      try { re = new RegExp( &#039;(&#039; + patterns[pi] + &#039;)&#039;, &#039;gi&#039; ); }&lt;br /&gt;
      catch(e) { continue; }&lt;br /&gt;
      var count = wrapMatches( content, re );&lt;br /&gt;
      if ( count &amp;gt; 0 ) { matched = true; break; }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ( !matched ) return;&lt;br /&gt;
&lt;br /&gt;
    var first = document.querySelector( &#039;.gr-search-hl&#039; );&lt;br /&gt;
    if ( first ) {&lt;br /&gt;
      first.scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; });&lt;br /&gt;
      first.classList.add( &#039;gr-search-hl-pulse&#039; );&lt;br /&gt;
      setTimeout( function() { first.classList.remove( &#039;gr-search-hl-pulse&#039; ); }, 2000 );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    showDismissBar( query );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function escapeRegex( s ) {&lt;br /&gt;
    return s.replace( /[.*+?^${}()|[\]\\]/g, &#039;\\$&amp;amp;&#039; );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function wrapMatches( root, re ) {&lt;br /&gt;
    var count = 0;&lt;br /&gt;
    var walker = document.createTreeWalker(&lt;br /&gt;
      root, NodeFilter.SHOW_TEXT, {&lt;br /&gt;
        acceptNode: function( node ) {&lt;br /&gt;
          var p = node.parentElement;&lt;br /&gt;
          if ( !p ) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
          var tag = p.tagName.toUpperCase();&lt;br /&gt;
          if ( tag === &#039;SCRIPT&#039; || tag === &#039;STYLE&#039; || tag === &#039;NOSCRIPT&#039; ) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
          if ( p.classList.contains( &#039;gr-search-hl&#039; ) ) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
          return NodeFilter.FILTER_ACCEPT;&lt;br /&gt;
        }&lt;br /&gt;
      }, false&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    var nodes = [];&lt;br /&gt;
    var node;&lt;br /&gt;
    while ( ( node = walker.nextNode() ) ) nodes.push( node );&lt;br /&gt;
&lt;br /&gt;
    nodes.forEach( function( textNode ) {&lt;br /&gt;
      var val = textNode.nodeValue;&lt;br /&gt;
      if ( !re.test( val ) ) return;&lt;br /&gt;
      re.lastIndex = 0;&lt;br /&gt;
&lt;br /&gt;
      var frag = document.createDocumentFragment();&lt;br /&gt;
      var last = 0;&lt;br /&gt;
      var m;&lt;br /&gt;
      while ( ( m = re.exec( val ) ) !== null ) {&lt;br /&gt;
        if ( m.index &amp;gt; last ) {&lt;br /&gt;
          frag.appendChild( document.createTextNode( val.slice( last, m.index ) ) );&lt;br /&gt;
        }&lt;br /&gt;
        var span = document.createElement( &#039;span&#039; );&lt;br /&gt;
        span.className = &#039;gr-search-hl&#039;;&lt;br /&gt;
        span.textContent = m[0];&lt;br /&gt;
        frag.appendChild( span );&lt;br /&gt;
        last = m.index + m[0].length;&lt;br /&gt;
        count++;&lt;br /&gt;
      }&lt;br /&gt;
      if ( last &amp;lt; val.length ) {&lt;br /&gt;
        frag.appendChild( document.createTextNode( val.slice( last ) ) );&lt;br /&gt;
      }&lt;br /&gt;
      textNode.parentNode.replaceChild( frag, textNode );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    return count;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function showDismissBar( query ) {&lt;br /&gt;
    var existing = document.getElementById( &#039;gr-hl-bar&#039; );&lt;br /&gt;
    if ( existing ) existing.remove();&lt;br /&gt;
&lt;br /&gt;
    var count = document.querySelectorAll( &#039;.gr-search-hl&#039; ).length;&lt;br /&gt;
    if ( !count ) return;&lt;br /&gt;
&lt;br /&gt;
    var isMob = window.innerWidth &amp;lt; 768 || !!document.getElementById( &#039;mw-mf-viewport&#039; );&lt;br /&gt;
    var bar = document.createElement( &#039;div&#039; );&lt;br /&gt;
    bar.id = &#039;gr-hl-bar&#039;;&lt;br /&gt;
&lt;br /&gt;
    if ( isMob ) {&lt;br /&gt;
      bar.style.cssText = [&lt;br /&gt;
        &#039;position:fixed&#039;, &#039;bottom:0&#039;, &#039;left:0&#039;, &#039;right:0&#039;,&lt;br /&gt;
        &#039;z-index:10200&#039;, &#039;background:#b5451b&#039;, &#039;color:#fff&#039;,&lt;br /&gt;
        &#039;padding:0&#039;, &#039;display:flex&#039;, &#039;align-items:stretch&#039;,&lt;br /&gt;
        &#039;font-family:system-ui,sans-serif&#039;,&lt;br /&gt;
        &#039;box-shadow:0 -2px 12px rgba(0,0,0,0.25)&#039;, &#039;height:56px&#039;&lt;br /&gt;
      ].join(&#039;;&#039;);&lt;br /&gt;
&lt;br /&gt;
      var mbs = &#039;flex:1;display:flex;flex-direction:column;align-items:center;&#039; +&lt;br /&gt;
        &#039;justify-content:center;background:none;border:none;color:#fff;cursor:pointer;&#039; +&lt;br /&gt;
        &#039;padding:6px 4px;font-family:system-ui,sans-serif;font-size:11px;font-weight:500;&#039; +&lt;br /&gt;
        &#039;gap:3px;-webkit-tap-highlight-color:rgba(0,0,0,0.12);&#039;;&lt;br /&gt;
&lt;br /&gt;
      bar.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-prev&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;polyline points=&amp;quot;15 18 9 12 15 6&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;Prev&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-next&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;polyline points=&amp;quot;9 18 15 12 9 6&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;Next&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-results&amp;quot; style=&amp;quot;&#039; + mbs + &#039;flex:1.6;border-left:1px solid rgba(255,255,255,0.2);border-right:1px solid rgba(255,255,255,0.2);&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;circle cx=&amp;quot;11&amp;quot; cy=&amp;quot;11&amp;quot; r=&amp;quot;7&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;16.5&amp;quot; y1=&amp;quot;16.5&amp;quot; x2=&amp;quot;22&amp;quot; y2=&amp;quot;22&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;&#039; + count + &#039; match&#039; + (count===1?&#039;&#039;:&#039;es&#039;) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-dismiss&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;line x1=&amp;quot;18&amp;quot; y1=&amp;quot;6&amp;quot; x2=&amp;quot;6&amp;quot; y2=&amp;quot;18&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;6&amp;quot; y1=&amp;quot;6&amp;quot; x2=&amp;quot;18&amp;quot; y2=&amp;quot;18&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;Close&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
    } else {&lt;br /&gt;
      bar.style.cssText = [&lt;br /&gt;
        &#039;position:fixed&#039;, &#039;bottom:0&#039;, &#039;left:0&#039;, &#039;right:0&#039;, &#039;z-index:10200&#039;,&lt;br /&gt;
        &#039;background:#b5451b&#039;, &#039;color:#fff&#039;, &#039;padding:10px 16px&#039;,&lt;br /&gt;
        &#039;display:flex&#039;, &#039;align-items:center&#039;, &#039;justify-content:space-between&#039;,&lt;br /&gt;
        &#039;font-family:system-ui,sans-serif&#039;, &#039;font-size:14px&#039;,&lt;br /&gt;
        &#039;box-shadow:0 -2px 8px rgba(0,0,0,0.2)&#039;&lt;br /&gt;
      ].join(&#039;;&#039;);&lt;br /&gt;
&lt;br /&gt;
      var nav = document.createElement( &#039;div&#039; );&lt;br /&gt;
      nav.style.cssText = &#039;display:flex;align-items:center;gap:12px;&#039;;&lt;br /&gt;
      nav.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;🔍 &amp;lt;strong&amp;gt;&#039; + escHtml(query) + &#039;&amp;lt;/strong&amp;gt; — &#039; + count + &#039; match&#039; + (count===1?&#039;&#039;:&#039;es&#039;) + &#039;&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-prev&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;↑ Prev&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-next&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;↓ Next&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-results&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;← Results&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
      bar.appendChild( nav );&lt;br /&gt;
&lt;br /&gt;
      var db = document.createElement( &#039;button&#039; );&lt;br /&gt;
      db.id = &#039;gr-hl-dismiss&#039;; db.textContent = &#039;✕ Close&#039;;&lt;br /&gt;
      db.style.cssText = &#039;background:rgba(255,255,255,0.15);border:none;color:#fff;padding:4px 12px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&#039;;&lt;br /&gt;
      bar.appendChild( db );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    document.body.appendChild( bar );&lt;br /&gt;
&lt;br /&gt;
    var hlEls = Array.from( document.querySelectorAll( &#039;.gr-search-hl&#039; ) );&lt;br /&gt;
    var current = 0;&lt;br /&gt;
&lt;br /&gt;
    function goTo( idx ) {&lt;br /&gt;
      hlEls.forEach( function(el) { el.classList.remove( &#039;gr-search-hl-current&#039; ); } );&lt;br /&gt;
      current = ( ( idx % hlEls.length ) + hlEls.length ) % hlEls.length;&lt;br /&gt;
      hlEls[ current ].classList.add( &#039;gr-search-hl-current&#039; );&lt;br /&gt;
      hlEls[ current ].scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function dismiss() { clearHighlights(); bar.remove(); }&lt;br /&gt;
&lt;br /&gt;
    var nb = document.getElementById( &#039;gr-hl-next&#039; );&lt;br /&gt;
    var pb = document.getElementById( &#039;gr-hl-prev&#039; );&lt;br /&gt;
    var rb = document.getElementById( &#039;gr-hl-results&#039; );&lt;br /&gt;
    var db2 = document.getElementById( &#039;gr-hl-dismiss&#039; );&lt;br /&gt;
    if ( nb ) nb.onclick = function() { goTo( current + 1 ); };&lt;br /&gt;
    if ( pb ) pb.onclick = function() { goTo( current - 1 ); };&lt;br /&gt;
    if ( db2 ) db2.onclick = dismiss;&lt;br /&gt;
    if ( rb ) rb.onclick = function() {&lt;br /&gt;
      bar.remove(); clearHighlights();&lt;br /&gt;
      if ( window.showSearchDialog ) window.showSearchDialog( query );&lt;br /&gt;
    };&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function clearHighlights() {&lt;br /&gt;
    document.querySelectorAll( &#039;.gr-search-hl&#039; ).forEach( function( span ) {&lt;br /&gt;
      var p = span.parentNode; if ( !p ) return;&lt;br /&gt;
      while ( span.firstChild ) p.insertBefore( span.firstChild, span );&lt;br /&gt;
      p.removeChild( span );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function escHtml( s ) {&lt;br /&gt;
    return String(s).replace(/&amp;amp;/g,&#039;&amp;amp;amp;&#039;).replace(/&amp;lt;/g,&#039;&amp;amp;lt;&#039;).replace(/&amp;gt;/g,&#039;&amp;amp;gt;&#039;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function injectHighlightCSS() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-hl-css&#039; ) ) return;&lt;br /&gt;
    var s = document.createElement( &#039;style&#039; );&lt;br /&gt;
    s.id = &#039;gr-hl-css&#039;;&lt;br /&gt;
    s.textContent = [&lt;br /&gt;
      &#039;.gr-search-hl{background:#fff176;color:#1a1a1a;border-radius:2px;padding:0 1px;box-shadow:0 0 0 1px rgba(181,69,27,0.25);}&#039;,&lt;br /&gt;
      &#039;.gr-search-hl-current{background:#ffb300!important;box-shadow:0 0 0 2px #b5451b!important;}&#039;,&lt;br /&gt;
      &#039;@keyframes gr-hl-pulse{0%{background:#ffb300;}50%{background:#fff176;}100%{background:#fff176;}}&#039;,&lt;br /&gt;
      &#039;.gr-search-hl-pulse{animation:gr-hl-pulse 1.2s ease 2;}&#039;,&lt;br /&gt;
    ].join(&#039;&#039;);&lt;br /&gt;
    document.head.appendChild( s );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  injectHighlightCSS();&lt;br /&gt;
&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) {&lt;br /&gt;
    document.addEventListener( &#039;DOMContentLoaded&#039;, applyHighlight );&lt;br /&gt;
  } else {&lt;br /&gt;
    applyHighlight();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ( window.mw ) {&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function() {&lt;br /&gt;
      setTimeout( applyHighlight, 100 );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  window.grStoreSearchHL = storeQueryForLink;&lt;br /&gt;
&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
/* ═══════════════════════════════════════════════════════════════&lt;br /&gt;
   Mobile addon — only runs on Minerva (mobile) skin&lt;br /&gt;
   ═══════════════════════════════════════════════════════════════ */&lt;br /&gt;
( function () {&lt;br /&gt;
  if ( !document.body.classList.contains( &#039;skin-minerva&#039; ) ) return;&lt;br /&gt;
  function injectCSS() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-mob-css&#039; ) ) return;&lt;br /&gt;
    var s = document.createElement( &#039;style&#039; );&lt;br /&gt;
    s.id = &#039;gr-mob-css&#039;;&lt;br /&gt;
    s.textContent =&lt;br /&gt;
      &#039;body,#mw-mf-viewport,#mw-mf-page-center{padding-top:0!important;margin-top:0!important;}&#039; +&lt;br /&gt;
      &#039;html,body,#mw-mf-viewport,#mw-mf-page-center{overflow-x:hidden!important;max-width:100vw!important;}&#039; +&lt;br /&gt;
      &#039;header.header-container{background:#b5451b!important;position:sticky!important;top:0!important;z-index:300!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header{background:#b5451b!important;min-height:54px!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header .search-toggle,.minerva-header .minerva-user-notifications{display:none!important;}&#039; +&lt;br /&gt;
      &#039;.branding-box a{display:flex!important;align-items:center!important;text-decoration:none!important;max-width:calc(100vw - 80px)!important;}&#039; +&lt;br /&gt;
      &#039;.branding-box a::before{content:&amp;quot;&amp;quot;;display:block;width:30px;height:30px;flex-shrink:0;background:url(&amp;quot;/favicon.png&amp;quot;) center/contain no-repeat;margin-right:8px;}&#039; +&lt;br /&gt;
      &#039;.branding-box a span{color:#fff!important;font-size:16px!important;font-weight:700!important;font-family:system-ui,sans-serif!important;line-height:1.2!important;flex:1 1 auto!important;min-width:0!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header svg path,.minerva-header svg rect,.minerva-header svg circle{fill:#fff!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header label{color:#fff!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-tabs,.mw-portlet-associated-pages,.page-actions-menu,#page-secondary-actions,.last-modified-bar,.minerva-anon-talk-link{display:none!important;}&#039; +&lt;br /&gt;
      &#039;#gr-mob-menu-items{display:block!important;}&#039; +&lt;br /&gt;
      &#039;.mw-footer.minerva-footer,.footer-places,.footer-info,.minerva-footer-logo,#footer-places-about,#footer-places-disclaimers,#footer-places-privacy{display:none!important;}&#039; +&lt;br /&gt;
      &#039;#gr-static-bar{position:sticky!important;top:54px!important;z-index:200!important;}&#039; +&lt;br /&gt;
      &#039;.mf-section-0,.mf-section-1,.mf-section-2,.mf-section-3,.mf-section-4,.mf-section-5,.mf-section-6,.mf-section-7,.mf-section-8,.mf-section-9,.mf-section-10{display:block!important;visibility:visible!important;}&#039; +&lt;br /&gt;
      &#039;.collapsible-block{display:block!important;}&#039; +&lt;br /&gt;
      &#039;.section-heading .indicator,.collapsible-heading .indicator{display:none!important;}&#039; +&lt;br /&gt;
      &#039;.section-heading,.collapsible-heading{pointer-events:none!important;}&#039; +&lt;br /&gt;
      &#039;.gr-home-grid{flex-direction:column!important;flex-wrap:nowrap!important;gap:12px!important;width:100%!important;}&#039; +&lt;br /&gt;
      &#039;.gr-home-card{width:100%!important;max-width:100%!important;min-width:unset!important;box-sizing:border-box!important;flex:none!important;}&#039; +&lt;br /&gt;
      &#039;.gr-home-toggle{flex-wrap:wrap!important;}&#039; +&lt;br /&gt;
      &#039;.mw-parser-output{font-size:18px!important;line-height:1.8!important;}&#039; +&lt;br /&gt;
      &#039;.mw-parser-output h2,.mw-parser-output h3{width:100%!important;}&#039; +&lt;br /&gt;
      &#039;.bhashyam-block{margin-left:8px!important;}&#039; +&lt;br /&gt;
      &#039;#footer,.mw-footer,.catlinks,#catlinks{display:none!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-panel{position:fixed!important;top:0!important;left:0!important;bottom:0!important;width:82vw!important;max-width:340px!important;background:#fff!important;z-index:10400!important;box-shadow:4px 0 28px rgba(0,0,0,0.22)!important;overflow-y:auto!important;padding:0 0 40px!important;transform:translateX(-110%)!important;transition:transform 0.26s cubic-bezier(0.4,0,0.2,1)!important;display:block!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-panel.open{transform:translateX(0)!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-backdrop{display:none!important;position:fixed!important;inset:0!important;background:rgba(0,0,0,0.4)!important;z-index:10399!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-backdrop.open{display:block!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-header{position:sticky!important;top:0!important;background:#fff!important;display:flex!important;align-items:center!important;justify-content:space-between!important;padding:16px 16px 12px!important;border-bottom:1px solid #f0ebe6!important;z-index:1!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-title{font-size:13px!important;font-weight:700!important;text-transform:uppercase!important;letter-spacing:0.08em!important;color:#b5451b!important;font-family:system-ui,sans-serif!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-close{background:none!important;border:none!important;font-size:22px!important;color:#999!important;cursor:pointer!important;padding:4px 8px!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-body{padding:12px 16px!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-body a{display:block!important;font-size:16px!important;line-height:1.6!important;color:#2c1810!important;text-decoration:none!important;padding:8px 0!important;border-bottom:1px solid #f5f0ed!important;}&#039;;&lt;br /&gt;
    document.head.appendChild( s );&lt;br /&gt;
  }&lt;br /&gt;
  function expandSections() {&lt;br /&gt;
    document.querySelectorAll( &#039;[class*=&amp;quot;mf-section-&amp;quot;], .collapsible-block&#039; ).forEach( function ( el ) { el.removeAttribute( &#039;hidden&#039; ); el.style.setProperty( &#039;display&#039;, &#039;block&#039;, &#039;important&#039; ); el.style.setProperty( &#039;visibility&#039;, &#039;visible&#039;, &#039;important&#039; ); el.removeAttribute( &#039;aria-hidden&#039; ); } );&lt;br /&gt;
    document.querySelectorAll( &#039;.section-heading, .collapsible-heading&#039; ).forEach( function ( el ) { el.setAttribute( &#039;aria-expanded&#039;, &#039;true&#039; ); el.style.setProperty( &#039;pointer-events&#039;, &#039;none&#039;, &#039;important&#039; ); } );&lt;br /&gt;
  }&lt;br /&gt;
  function watchSections() {&lt;br /&gt;
    var t = null;&lt;br /&gt;
    var obs = new MutationObserver( function ( ms ) { if ( ms.some( function(m){ return m.attributeName === &#039;hidden&#039;; } ) ) { clearTimeout(t); t = setTimeout( expandSections, 30 ); } } );&lt;br /&gt;
    obs.observe( document.querySelector( &#039;#mw-content-text&#039; ) || document.body, { subtree:true, attributes:true, attributeFilter:[&#039;hidden&#039;,&#039;aria-hidden&#039;] } );&lt;br /&gt;
  }&lt;br /&gt;
  function watchBodyPadding() {&lt;br /&gt;
    new MutationObserver( function () { if ( document.body.style.paddingTop &amp;amp;&amp;amp; document.body.style.paddingTop !== &#039;0px&#039; ) document.body.style.paddingTop = &#039;&#039;; } ).observe( document.body, { attributes:true, attributeFilter:[&#039;style&#039;] } );&lt;br /&gt;
  }&lt;br /&gt;
  function injectMenuLinks() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-mob-menu-items&#039; ) ) return;&lt;br /&gt;
    var navDrawer = document.querySelector( &#039;.navigation-drawer&#039; );&lt;br /&gt;
    if ( !navDrawer ) return;&lt;br /&gt;
    var wrap = document.createElement( &#039;div&#039; ); wrap.id = &#039;gr-mob-menu-items&#039;; wrap.style.cssText = &#039;width:100%;background:#fff;margin-top:8px;&#039;;&lt;br /&gt;
    var itemStyle = &#039;display:flex;align-items:center;gap:14px;padding:15px 20px;font-size:16px;color:#2c1810;text-decoration:none;font-family:system-ui,sans-serif;border-bottom:1px solid #f0ebe6;background:#fff;&#039;;&lt;br /&gt;
    function makeItem( href, label ) { var a = document.createElement( &#039;a&#039; ); a.href = href; a.style.cssText = itemStyle; a.innerHTML = &#039;&amp;lt;span&amp;gt;&#039; + label + &#039;&amp;lt;/span&amp;gt;&#039;; return a; }&lt;br /&gt;
    wrap.appendChild( makeItem( &#039;/Main_Page&#039;, &#039;Home&#039; ) );&lt;br /&gt;
    wrap.appendChild( makeItem( &#039;/My_wiki:Help&#039;, &#039;Help&#039; ) );&lt;br /&gt;
    wrap.appendChild( makeItem( &#039;/My_wiki:About&#039;, &#039;About&#039; ) );&lt;br /&gt;
    var userName = window.mw ? mw.config.get( &#039;wgUserName&#039; ) : null;&lt;br /&gt;
    if ( userName ) { var la = document.querySelector( &#039;a[href*=&amp;quot;action=logout&amp;quot;]&#039; ); wrap.appendChild( makeItem( la ? la.href : &#039;/index.php?title=Special:UserLogout&#039;, &#039;Log out&#039; ) ); }&lt;br /&gt;
    else wrap.appendChild( makeItem( &#039;/index.php?title=Special:UserLogin&#039;, &#039;Log in&#039; ) );&lt;br /&gt;
    var pageLeft = document.getElementById( &#039;mw-mf-page-left&#039; );&lt;br /&gt;
    if ( pageLeft ) { while ( pageLeft.firstChild ) pageLeft.removeChild( pageLeft.firstChild ); pageLeft.style.removeProperty( &#039;display&#039; ); pageLeft.appendChild( wrap ); }&lt;br /&gt;
    else navDrawer.appendChild( wrap );&lt;br /&gt;
  }&lt;br /&gt;
  var _tocDone = false;&lt;br /&gt;
  function initToc() {&lt;br /&gt;
    if ( _tocDone ) return;&lt;br /&gt;
    var tocList = document.querySelector( &#039;.vector-toc-contents, .vector-toc .vector-toc-list&#039; );&lt;br /&gt;
    if ( !tocList || !tocList.querySelector( &#039;li&#039; ) ) return;&lt;br /&gt;
    _tocDone = true;&lt;br /&gt;
    var bd = document.createElement( &#039;div&#039; ); bd.className = &#039;gr-mob-toc-backdrop&#039;; document.body.appendChild( bd );&lt;br /&gt;
    var panel = document.createElement( &#039;div&#039; ); panel.className = &#039;gr-mob-toc-panel&#039;;&lt;br /&gt;
    var hdr = document.createElement( &#039;div&#039; ); hdr.className = &#039;gr-mob-toc-header&#039;;&lt;br /&gt;
    var ttl = document.createElement( &#039;div&#039; ); ttl.className = &#039;gr-mob-toc-title&#039;; ttl.textContent = &#039;विषयसूची&#039;;&lt;br /&gt;
    var cls = document.createElement( &#039;button&#039; ); cls.className = &#039;gr-mob-toc-close&#039;; cls.textContent = &#039;✕&#039;;&lt;br /&gt;
    hdr.appendChild( ttl ); hdr.appendChild( cls ); panel.appendChild( hdr );&lt;br /&gt;
    var body = document.createElement( &#039;div&#039; ); body.className = &#039;gr-mob-toc-body&#039;; body.appendChild( tocList.cloneNode( true ) ); panel.appendChild( body ); document.body.appendChild( panel );&lt;br /&gt;
    var btn = document.createElement( &#039;button&#039; ); btn.id = &#039;gr-mob-toc-btn&#039;; btn.innerHTML = &#039;☰ &amp;amp;nbsp;Contents&#039;;&lt;br /&gt;
    btn.style.cssText = &#039;position:fixed;bottom:148px;left:16px;z-index:9100;background:#fff;border:1.5px solid #b5451b;border-radius:24px;padding:10px 16px;font-size:15px;font-family:system-ui,sans-serif;color:#b5451b;font-weight:600;box-shadow:0 3px 14px rgba(0,0,0,0.15);cursor:pointer;&#039;;&lt;br /&gt;
    document.body.appendChild( btn );&lt;br /&gt;
    function open()  { panel.classList.add(&#039;open&#039;); bd.classList.add(&#039;open&#039;); document.body.style.overflow=&#039;hidden&#039;; }&lt;br /&gt;
    function close() { panel.classList.remove(&#039;open&#039;); bd.classList.remove(&#039;open&#039;); document.body.style.overflow=&#039;&#039;; }&lt;br /&gt;
    btn.onclick = open; cls.onclick = close; bd.onclick = close;&lt;br /&gt;
    body.querySelectorAll(&#039;a&#039;).forEach(function(a){ a.onclick = close; });&lt;br /&gt;
  }&lt;br /&gt;
  function injectMoolaUllekhaLinks() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-mob-doc-nav&#039; ) ) return;&lt;br /&gt;
    var pageName = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039; ) ) || &#039;&#039;;&lt;br /&gt;
    if ( pageName === &#039;Main_Page&#039; || !pageName ) return;&lt;br /&gt;
    function wikiUrl( slug ) { if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( slug ); return ( ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039; ).replace( &#039;$1&#039;, encodeURIComponent( slug ).replace( /%2F/g, &#039;/&#039; ) ); }&lt;br /&gt;
    var teekaPage = document.querySelector( &#039;.gr-teeka-page&#039; );&lt;br /&gt;
    var primarySlug = teekaPage ? ( teekaPage.getAttribute( &#039;data-primary&#039; ) || pageName.split(&#039;/&#039;)[0] ) : pageName.split(&#039;/&#039;)[0];&lt;br /&gt;
    var docTitleEl = document.querySelector( &#039;.gr-doc-title&#039; );&lt;br /&gt;
    var hasMoolaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-moola&#039; ) === &#039;1&#039;;&lt;br /&gt;
    var hasUllekhaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-ullekha&#039; ) === &#039;1&#039;;&lt;br /&gt;
    var showMoolam = !!teekaPage || hasMoolaPage, showUllekha = hasUllekhaPage || !!teekaPage;&lt;br /&gt;
    if ( !showMoolam &amp;amp;&amp;amp; !showUllekha ) return;&lt;br /&gt;
    var nav = document.createElement( &#039;div&#039; ); nav.id = &#039;gr-mob-doc-nav&#039;;&lt;br /&gt;
    nav.style.cssText = &#039;display:flex;gap:10px;padding:10px 16px 8px;background:#fdf8f5;border-bottom:1px solid #f0e0d6;font-family:system-ui,sans-serif;&#039;;&lt;br /&gt;
    function makeLink( href, label ) { var a = document.createElement( &#039;a&#039; ); a.href = href; a.textContent = label; a.style.cssText = &#039;display:inline-flex;align-items:center;padding:5px 16px;border-radius:20px;background:#fff;border:1.5px solid #e8cfc4;color:#b5451b;font-size:14px;font-weight:600;text-decoration:none;&#039;; return a; }&lt;br /&gt;
    if ( teekaPage ) nav.appendChild( makeLink( wikiUrl( primarySlug ), &#039;मूल&#039; ) );&lt;br /&gt;
    else if ( hasMoolaPage ) nav.appendChild( makeLink( wikiUrl( primarySlug + &#039;/Moola&#039; ), &#039;मूलम्&#039; ) );&lt;br /&gt;
    if ( showUllekha ) nav.appendChild( makeLink( wikiUrl( primarySlug + &#039;/Ullekha&#039; ), &#039;उल्लेख&#039; ) );&lt;br /&gt;
    var h1 = document.getElementById( &#039;firstHeading&#039; ) || document.querySelector( &#039;.page-heading, h1.firstHeading, .mw-first-heading&#039; );&lt;br /&gt;
    if ( h1 &amp;amp;&amp;amp; h1.parentNode ) h1.parentNode.insertBefore( nav, h1.nextSibling );&lt;br /&gt;
    else { var ct = document.getElementById( &#039;mw-content-text&#039; ); if ( ct ) ct.insertBefore( nav, ct.firstChild ); }&lt;br /&gt;
  }&lt;br /&gt;
  injectCSS(); watchBodyPadding();&lt;br /&gt;
  function boot() { expandSections(); watchSections(); injectMenuLinks(); injectMoolaUllekhaLinks(); [100,400,900,1800].forEach(function(ms){ setTimeout(expandSections,ms); }); setTimeout(initToc,700); }&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) document.addEventListener( &#039;DOMContentLoaded&#039;, boot );&lt;br /&gt;
  else boot();&lt;br /&gt;
  if ( window.mw ) mw.hook( &#039;wikipage.content&#039; ).add(function(){ setTimeout(function(){ expandSections(); injectMenuLinks(); injectMoolaUllekhaLinks(); initToc(); },300); });&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
  mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
    setTimeout( function () {&lt;br /&gt;
      var blocks = document.querySelectorAll( &#039;.collapsible-block, .toggle-list&#039; );&lt;br /&gt;
      Array.prototype.forEach.call( blocks, function ( el ) { if ( !el.parentNode ) { try { el.remove(); } catch(e) {} } } );&lt;br /&gt;
    }, 0 );&lt;br /&gt;
  } );&lt;br /&gt;
  if ( mw.config.get( &#039;wgPageName&#039; ) !== &#039;Main_Page&#039; ) return;&lt;br /&gt;
  mw.loader.using( &#039;mediawiki.util&#039; ).done( function () {&lt;br /&gt;
    $( function () { applyHomeToggleOffset(); window.addEventListener( &#039;resize&#039;, applyHomeToggleOffset, { passive: true } ); setTimeout( applyHomeToggleOffset, 300 ); setTimeout( applyHomeToggleOffset, 800 ); } );&lt;br /&gt;
  } );&lt;br /&gt;
  function applyHomeToggleOffset() {&lt;br /&gt;
    var bar = document.getElementById( &#039;gr-static-bar&#039; ); if ( !bar ) return;&lt;br /&gt;
    var barBottom = Math.round( bar.getBoundingClientRect().bottom );&lt;br /&gt;
    [ document.getElementById(&#039;gr-home&#039;), document.getElementById(&#039;gr-home-toggle&#039;), document.querySelector(&#039;#mw-content-text .mw-parser-output &amp;gt; .gr-home, #mw-content-text .mw-parser-output &amp;gt; *:first-child&#039;) ].forEach( function(el){ if(el) el.style.scrollMarginTop=(barBottom+4)+&#039;px&#039;; } );&lt;br /&gt;
    var isMob = window.innerWidth &amp;lt; 768 || !!document.getElementById( &#039;mw-mf-viewport&#039; );&lt;br /&gt;
    if ( isMob ) { var toggleEl = document.getElementById(&#039;gr-home-toggle&#039;); if ( toggleEl ) { var tr = toggleEl.getBoundingClientRect(); if ( tr.top &amp;lt; barBottom ) { var cp = parseInt(window.getComputedStyle(document.body).paddingTop,10)||0; document.body.style.paddingTop=(cp+(barBottom-tr.top)+4)+&#039;px&#039;; } } }&lt;br /&gt;
  }&lt;br /&gt;
  $( function () {&lt;br /&gt;
    var $toggle=$(&#039;#gr-home-toggle&#039;),$viewG=$(&#039;#gr-view-grantha&#039;),$viewA=$(&#039;#gr-view-author&#039;),$btnG=$(&#039;#gr-toggle-grantha&#039;),$btnA=$(&#039;#gr-toggle-author&#039;);&lt;br /&gt;
    if(!$toggle.length||!$viewG.length||!$viewA.length)return; if($toggle.data(&#039;gr-wired&#039;))return; $toggle.data(&#039;gr-wired&#039;,true);&lt;br /&gt;
    function showView(which){ if(which===&#039;grantha&#039;){$viewG.show();$viewA.hide();$btnG.addClass(&#039;gr-toggle-active&#039;);$btnA.removeClass(&#039;gr-toggle-active&#039;);}else{$viewA.show();$viewG.hide();$btnA.addClass(&#039;gr-toggle-active&#039;);$btnG.removeClass(&#039;gr-toggle-active&#039;);} try{localStorage.setItem(&#039;grantha_home_tab&#039;,which);}catch(e){} }&lt;br /&gt;
    $btnG.on(&#039;click keydown&#039;,function(e){if(e.type===&#039;keydown&#039;&amp;amp;&amp;amp;e.key!==&#039;Enter&#039;&amp;amp;&amp;amp;e.key!==&#039; &#039;)return;showView(&#039;grantha&#039;);});&lt;br /&gt;
    $btnA.on(&#039;click keydown&#039;,function(e){if(e.type===&#039;keydown&#039;&amp;amp;&amp;amp;e.key!==&#039;Enter&#039;&amp;amp;&amp;amp;e.key!==&#039; &#039;)return;showView(&#039;author&#039;);});&lt;br /&gt;
    try{var saved=localStorage.getItem(&#039;grantha_home_tab&#039;);if(saved===&#039;author&#039;)showView(&#039;author&#039;);else showView(&#039;grantha&#039;);}catch(e){showView(&#039;grantha&#039;);}&lt;br /&gt;
  } );&lt;br /&gt;
}() );&lt;br /&gt;
// ── Replace MediaWiki user links with a single username dropdown (Profile + Logout) ──&lt;br /&gt;
( function () {&lt;br /&gt;
  function wikiHref( title ) {&lt;br /&gt;
    if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( title );&lt;br /&gt;
    var ap = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
    return ap.replace( &#039;$1&#039;, title );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function buildLogoutForm( token ) {&lt;br /&gt;
    token = token || &#039;&#039;;&lt;br /&gt;
    var esc = String( token ).replace( /&amp;quot;/g, &#039;&amp;amp;quot;&#039; );&lt;br /&gt;
    var script = ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.wikiScript ) ? mw.util.wikiScript() : &#039;/index.php&#039;;&lt;br /&gt;
    var form = document.createElement( &#039;form&#039; );&lt;br /&gt;
    form.method = &#039;post&#039;;&lt;br /&gt;
    form.action = script + &#039;?title=Special:UserLogout&#039;;&lt;br /&gt;
    form.style.display = &#039;none&#039;;&lt;br /&gt;
    form.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;wpEditToken&amp;quot; value=&amp;quot;&#039; + esc + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;title&amp;quot; value=&amp;quot;Special:UserLogout&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;returnto&amp;quot; value=&amp;quot;Main Page&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
    document.body.appendChild( form );&lt;br /&gt;
    return form;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function injectUserDropdown() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-user-dropdown&#039; ) ) return;&lt;br /&gt;
&lt;br /&gt;
    var userName = window.mw ? mw.config.get( &#039;wgUserName&#039; ) : null;&lt;br /&gt;
    var isAnon = !userName || ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgUserId&#039; ) === null );&lt;br /&gt;
&lt;br /&gt;
    var container = document.querySelector( &#039;.vector-user-links-main&#039; )&lt;br /&gt;
                 || document.querySelector( &#039;.vector-user-links&#039; );&lt;br /&gt;
    if ( !container ) return;&lt;br /&gt;
&lt;br /&gt;
    // Logged-out: show a single Login/Signup link, nothing else&lt;br /&gt;
    if ( isAnon ) {&lt;br /&gt;
        if ( document.getElementById( &#039;gr-login-link&#039; ) ) return;&lt;br /&gt;
        var loginA = document.createElement( &#039;a&#039; );&lt;br /&gt;
        loginA.id = &#039;gr-login-link&#039;;&lt;br /&gt;
        loginA.href = wikiHref( &#039;Special:UserLogin&#039; );&lt;br /&gt;
        loginA.textContent = &#039;Login/Signup&#039;;&lt;br /&gt;
        loginA.style.cssText = &#039;color:#fff;font-size:0.9em;font-weight:500;&#039; +&lt;br /&gt;
            &#039;text-decoration:none;padding:6px 12px;border-radius:6px;&#039; +&lt;br /&gt;
            &#039;background:rgba(255,255,255,0.12);white-space:nowrap;&#039;;&lt;br /&gt;
        loginA.addEventListener( &#039;mouseover&#039;, function(){ this.style.background=&#039;rgba(255,255,255,0.2)&#039;; } );&lt;br /&gt;
        loginA.addEventListener( &#039;mouseout&#039;,  function(){ this.style.background=&#039;rgba(255,255,255,0.12)&#039;; } );&lt;br /&gt;
        container.appendChild( loginA );&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Logout token (csrf token works for logout in modern MW)&lt;br /&gt;
    var token = ( window.mw &amp;amp;&amp;amp; mw.user &amp;amp;&amp;amp; mw.user.tokens )&lt;br /&gt;
      ? mw.user.tokens.get( &#039;csrfToken&#039; ) : &#039;+\\&#039;;&lt;br /&gt;
&lt;br /&gt;
    var wrap = document.createElement( &#039;div&#039; );&lt;br /&gt;
    wrap.id = &#039;gr-user-dropdown&#039;;&lt;br /&gt;
    wrap.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;button id=&amp;quot;gr-user-trigger&amp;quot; type=&amp;quot;button&amp;quot; aria-haspopup=&amp;quot;true&amp;quot; aria-expanded=&amp;quot;false&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;&#039; + (userName.replace(/&amp;lt;/g,&#039;&amp;amp;lt;&#039;)) + &#039;&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span class=&amp;quot;gr-caret&amp;quot;&amp;gt;▾&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;div id=&amp;quot;gr-user-menu&amp;quot; role=&amp;quot;menu&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;&#039; + wikiHref( &#039;Special:Profile&#039; ) + &#039;&amp;quot; role=&amp;quot;menuitem&amp;quot;&amp;gt;Profile&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;#&amp;quot; id=&amp;quot;gr-logout-link&amp;quot; role=&amp;quot;menuitem&amp;quot;&amp;gt;Log out&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
    container.appendChild( wrap );&lt;br /&gt;
&lt;br /&gt;
    var trigger = document.getElementById( &#039;gr-user-trigger&#039; );&lt;br /&gt;
    var menu    = document.getElementById( &#039;gr-user-menu&#039; );&lt;br /&gt;
&lt;br /&gt;
    trigger.addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      e.stopPropagation();&lt;br /&gt;
      var open = menu.classList.toggle( &#039;gr-open&#039; );&lt;br /&gt;
      trigger.setAttribute( &#039;aria-expanded&#039;, open ? &#039;true&#039; : &#039;false&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    document.addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      if ( !wrap.contains( e.target ) ) {&lt;br /&gt;
        menu.classList.remove( &#039;gr-open&#039; );&lt;br /&gt;
        trigger.setAttribute( &#039;aria-expanded&#039;, &#039;false&#039; );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    document.getElementById( &#039;gr-logout-link&#039; ).addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      e.preventDefault();&lt;br /&gt;
      // Fetch a fresh CSRF token at click time (more reliable than at load time)&lt;br /&gt;
      if ( window.mw &amp;amp;&amp;amp; mw.user &amp;amp;&amp;amp; mw.user.tokens ) {&lt;br /&gt;
        var t = mw.user.tokens.get( &#039;csrfToken&#039; );&lt;br /&gt;
        if ( t ) { buildLogoutForm( t ).submit(); return; }&lt;br /&gt;
      }&lt;br /&gt;
      // Fallback: use the API to get a logout token, then submit&lt;br /&gt;
      if ( window.mw &amp;amp;&amp;amp; mw.Api ) {&lt;br /&gt;
        new mw.Api().postWithToken( &#039;csrf&#039;, { action: &#039;logout&#039; } )&lt;br /&gt;
          .done( function () { location.href = &#039;/Main_Page&#039;; } )&lt;br /&gt;
          .fail( function () { location.href = &#039;/index.php?title=Special:UserLogout&#039;; } );&lt;br /&gt;
      } else {&lt;br /&gt;
        location.href = &#039;/index.php?title=Special:UserLogout&#039;;&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) {&lt;br /&gt;
    document.addEventListener( &#039;DOMContentLoaded&#039;, injectUserDropdown );&lt;br /&gt;
  } else {&lt;br /&gt;
    injectUserDropdown();&lt;br /&gt;
  }&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.js&amp;diff=6203</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.js&amp;diff=6203"/>
		<updated>2026-06-11T10:14:22Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* MediaWiki:Common.js — grantha.io  (v7) */&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
  var LS_SCRIPT_KEY = &#039;grantha_reader_script&#039;;&lt;br /&gt;
  var currentScript = &#039;deva&#039;;&lt;br /&gt;
&lt;br /&gt;
  function devanagariToIAST( text ) {&lt;br /&gt;
    var CONSONANTS = {&lt;br /&gt;
      &#039;क&#039;:&#039;k&#039;,&#039;ख&#039;:&#039;kh&#039;,&#039;ग&#039;:&#039;g&#039;,&#039;घ&#039;:&#039;gh&#039;,&#039;ङ&#039;:&#039;ṅ&#039;,&lt;br /&gt;
      &#039;च&#039;:&#039;c&#039;,&#039;छ&#039;:&#039;ch&#039;,&#039;ज&#039;:&#039;j&#039;,&#039;झ&#039;:&#039;jh&#039;,&#039;ञ&#039;:&#039;ñ&#039;,&lt;br /&gt;
      &#039;ट&#039;:&#039;ṭ&#039;,&#039;ठ&#039;:&#039;ṭh&#039;,&#039;ड&#039;:&#039;ḍ&#039;,&#039;ढ&#039;:&#039;ḍh&#039;,&#039;ण&#039;:&#039;ṇ&#039;,&lt;br /&gt;
      &#039;त&#039;:&#039;t&#039;,&#039;थ&#039;:&#039;th&#039;,&#039;द&#039;:&#039;d&#039;,&#039;ध&#039;:&#039;dh&#039;,&#039;न&#039;:&#039;n&#039;,&lt;br /&gt;
      &#039;प&#039;:&#039;p&#039;,&#039;फ&#039;:&#039;ph&#039;,&#039;ब&#039;:&#039;b&#039;,&#039;भ&#039;:&#039;bh&#039;,&#039;म&#039;:&#039;m&#039;,&lt;br /&gt;
      &#039;य&#039;:&#039;y&#039;,&#039;र&#039;:&#039;r&#039;,&#039;ल&#039;:&#039;l&#039;,&#039;ळ&#039;:&#039;ḷ&#039;,&#039;व&#039;:&#039;v&#039;,&lt;br /&gt;
      &#039;श&#039;:&#039;ś&#039;,&#039;ष&#039;:&#039;ṣ&#039;,&#039;स&#039;:&#039;s&#039;,&#039;ह&#039;:&#039;h&#039;&lt;br /&gt;
    };&lt;br /&gt;
    var DIACRITICS = {&lt;br /&gt;
      &#039;ा&#039;:&#039;ā&#039;,&#039;ि&#039;:&#039;i&#039;,&#039;ी&#039;:&#039;ī&#039;,&#039;ु&#039;:&#039;u&#039;,&#039;ू&#039;:&#039;ū&#039;,&lt;br /&gt;
      &#039;ृ&#039;:&#039;ṛ&#039;,&#039;ॄ&#039;:&#039;ṝ&#039;,&#039;े&#039;:&#039;e&#039;,&#039;ै&#039;:&#039;ai&#039;,&#039;ो&#039;:&#039;o&#039;,&#039;ौ&#039;:&#039;au&#039;&lt;br /&gt;
    };&lt;br /&gt;
    var VOWELS = {&lt;br /&gt;
      &#039;अ&#039;:&#039;a&#039;,&#039;आ&#039;:&#039;ā&#039;,&#039;इ&#039;:&#039;i&#039;,&#039;ई&#039;:&#039;ī&#039;,&#039;उ&#039;:&#039;u&#039;,&#039;ऊ&#039;:&#039;ū&#039;,&lt;br /&gt;
      &#039;ऋ&#039;:&#039;ṛ&#039;,&#039;ॠ&#039;:&#039;ṝ&#039;,&#039;ए&#039;:&#039;e&#039;,&#039;ऐ&#039;:&#039;ai&#039;,&#039;ओ&#039;:&#039;o&#039;,&#039;औ&#039;:&#039;au&#039;,&#039;ऽ&#039;:&amp;quot;&#039;&amp;quot;&lt;br /&gt;
    };&lt;br /&gt;
    var MISC = {&lt;br /&gt;
      &#039;ं&#039;:&#039;ṃ&#039;,&#039;ः&#039;:&#039;ḥ&#039;,&#039;ँ&#039;:&#039;m̐&#039;,&#039;ॐ&#039;:&#039;oṃ&#039;,&lt;br /&gt;
      &#039;०&#039;:&#039;0&#039;,&#039;१&#039;:&#039;1&#039;,&#039;२&#039;:&#039;2&#039;,&#039;३&#039;:&#039;3&#039;,&#039;४&#039;:&#039;4&#039;,&lt;br /&gt;
      &#039;५&#039;:&#039;5&#039;,&#039;६&#039;:&#039;6&#039;,&#039;७&#039;:&#039;7&#039;,&#039;८&#039;:&#039;8&#039;,&#039;९&#039;:&#039;9&#039;&lt;br /&gt;
    };&lt;br /&gt;
    var HALANTA = &#039;्&#039;;&lt;br /&gt;
    var chars = Array.from( text );&lt;br /&gt;
    var result = &#039;&#039;;&lt;br /&gt;
    var i = 0;&lt;br /&gt;
    while ( i &amp;lt; chars.length ) {&lt;br /&gt;
      var ch   = chars[ i ];&lt;br /&gt;
      var next = chars[ i + 1 ];&lt;br /&gt;
      if ( CONSONANTS[ ch ] ) {&lt;br /&gt;
        var base = CONSONANTS[ ch ];&lt;br /&gt;
        if ( next === HALANTA )          { result += base;               i += 2; }&lt;br /&gt;
        else if ( DIACRITICS[ next ] )   { result += base + DIACRITICS[ next ]; i += 2; }&lt;br /&gt;
        else if ( next === &#039;ं&#039; || next === &#039;ः&#039; ) { result += base + &#039;a&#039; + MISC[ next ]; i += 2; }&lt;br /&gt;
        else                             { result += base + &#039;a&#039;;         i++;    }&lt;br /&gt;
      } else if ( VOWELS[ ch ] )         { result += VOWELS[ ch ];       i++; }&lt;br /&gt;
      else if ( DIACRITICS[ ch ] )       { result += DIACRITICS[ ch ];   i++; }&lt;br /&gt;
      else if ( MISC[ ch ] )             { result += MISC[ ch ];         i++; }&lt;br /&gt;
      else                               { result += ch;                 i++; }&lt;br /&gt;
    }&lt;br /&gt;
    return result;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var SCRIPT_MAP = {&lt;br /&gt;
    kn: {&lt;br /&gt;
      &#039;अ&#039;:&#039;ಅ&#039;,&#039;आ&#039;:&#039;ಆ&#039;,&#039;इ&#039;:&#039;ಇ&#039;,&#039;ई&#039;:&#039;ಈ&#039;,&#039;उ&#039;:&#039;ಉ&#039;,&#039;ऊ&#039;:&#039;ಊ&#039;,&#039;ऋ&#039;:&#039;ಋ&#039;,&lt;br /&gt;
      &#039;ए&#039;:&#039;ಏ&#039;,&#039;ऐ&#039;:&#039;ಐ&#039;,&#039;ओ&#039;:&#039;ಓ&#039;,&#039;औ&#039;:&#039;ಔ&#039;,&#039;ऽ&#039;:&#039;ಽ&#039;,&lt;br /&gt;
      &#039;क&#039;:&#039;ಕ&#039;,&#039;ख&#039;:&#039;ಖ&#039;,&#039;ग&#039;:&#039;ಗ&#039;,&#039;घ&#039;:&#039;ಘ&#039;,&#039;ङ&#039;:&#039;ಙ&#039;,&lt;br /&gt;
      &#039;च&#039;:&#039;ಚ&#039;,&#039;छ&#039;:&#039;ಛ&#039;,&#039;ज&#039;:&#039;ಜ&#039;,&#039;झ&#039;:&#039;ಝ&#039;,&#039;ञ&#039;:&#039;ಞ&#039;,&lt;br /&gt;
      &#039;ट&#039;:&#039;ಟ&#039;,&#039;ठ&#039;:&#039;ಠ&#039;,&#039;ड&#039;:&#039;ಡ&#039;,&#039;ढ&#039;:&#039;ಢ&#039;,&#039;ण&#039;:&#039;ಣ&#039;,&lt;br /&gt;
      &#039;त&#039;:&#039;ತ&#039;,&#039;थ&#039;:&#039;ಥ&#039;,&#039;द&#039;:&#039;ದ&#039;,&#039;ध&#039;:&#039;ಧ&#039;,&#039;न&#039;:&#039;ನ&#039;,&lt;br /&gt;
      &#039;प&#039;:&#039;ಪ&#039;,&#039;फ&#039;:&#039;ಫ&#039;,&#039;ब&#039;:&#039;ಬ&#039;,&#039;भ&#039;:&#039;ಭ&#039;,&#039;म&#039;:&#039;ಮ&#039;,&lt;br /&gt;
      &#039;य&#039;:&#039;ಯ&#039;,&#039;र&#039;:&#039;ರ&#039;,&#039;ल&#039;:&#039;ಲ&#039;,&#039;व&#039;:&#039;ವ&#039;,&lt;br /&gt;
      &#039;श&#039;:&#039;ಶ&#039;,&#039;ष&#039;:&#039;ಷ&#039;,&#039;स&#039;:&#039;ಸ&#039;,&#039;ह&#039;:&#039;ಹ&#039;,&lt;br /&gt;
      &#039;ा&#039;:&#039;ಾ&#039;,&#039;ि&#039;:&#039;ಿ&#039;,&#039;ी&#039;:&#039;ೀ&#039;,&#039;ु&#039;:&#039;ು&#039;,&#039;ू&#039;:&#039;ೂ&#039;,&lt;br /&gt;
      &#039;ृ&#039;:&#039;ೃ&#039;,&#039;े&#039;:&#039;ೇ&#039;,&#039;ै&#039;:&#039;ೈ&#039;,&#039;ो&#039;:&#039;ೋ&#039;,&#039;ौ&#039;:&#039;ೌ&#039;,&lt;br /&gt;
      &#039;ं&#039;:&#039;ಂ&#039;,&#039;ः&#039;:&#039;ಃ&#039;,&#039;्&#039;:&#039;್&#039;,&lt;br /&gt;
      &#039;०&#039;:&#039;೦&#039;,&#039;१&#039;:&#039;೧&#039;,&#039;२&#039;:&#039;೨&#039;,&#039;३&#039;:&#039;೩&#039;,&#039;४&#039;:&#039;೪&#039;,&lt;br /&gt;
      &#039;५&#039;:&#039;೫&#039;,&#039;६&#039;:&#039;೬&#039;,&#039;७&#039;:&#039;೭&#039;,&#039;८&#039;:&#039;೮&#039;,&#039;९&#039;:&#039;೯&#039;&lt;br /&gt;
    },&lt;br /&gt;
    ta: {&lt;br /&gt;
      &#039;अ&#039;:&#039;அ&#039;,&#039;आ&#039;:&#039;ஆ&#039;,&#039;इ&#039;:&#039;இ&#039;,&#039;ई&#039;:&#039;ஈ&#039;,&#039;उ&#039;:&#039;உ&#039;,&#039;ऊ&#039;:&#039;ஊ&#039;,&lt;br /&gt;
      &#039;ऋ&#039;:&#039;ரு&#039;,&#039;ॠ&#039;:&#039;ரூ&#039;,&lt;br /&gt;
      &#039;ए&#039;:&#039;ஏ&#039;,&#039;ऐ&#039;:&#039;ஐ&#039;,&#039;ओ&#039;:&#039;ஓ&#039;,&#039;औ&#039;:&#039;ஔ&#039;,&lt;br /&gt;
      &#039;क&#039;:&#039;க&#039;,&#039;ख&#039;:&#039;க&#039;,&#039;ग&#039;:&#039;க&#039;,&#039;घ&#039;:&#039;க&#039;,&#039;ङ&#039;:&#039;ங&#039;,&lt;br /&gt;
      &#039;च&#039;:&#039;ச&#039;,&#039;छ&#039;:&#039;ச&#039;,&#039;ज&#039;:&#039;ஜ&#039;,&#039;झ&#039;:&#039;ஜ&#039;,&#039;ञ&#039;:&#039;ஞ&#039;,&lt;br /&gt;
      &#039;ட&#039;:&#039;ட&#039;,&#039;ठ&#039;:&#039;ட&#039;,&#039;ड&#039;:&#039;ட&#039;,&#039;ढ&#039;:&#039;ட&#039;,&#039;ண&#039;:&#039;ண&#039;,&lt;br /&gt;
      &#039;त&#039;:&#039;த&#039;,&#039;थ&#039;:&#039;த&#039;,&#039;द&#039;:&#039;த&#039;,&#039;ध&#039;:&#039;த&#039;,&#039;न&#039;:&#039;ந&#039;,&lt;br /&gt;
      &#039;प&#039;:&#039;ப&#039;,&#039;फ&#039;:&#039;ப&#039;,&#039;ब&#039;:&#039;ப&#039;,&#039;भ&#039;:&#039;ப&#039;,&#039;म&#039;:&#039;ம&#039;,&lt;br /&gt;
      &#039;य&#039;:&#039;ய&#039;,&#039;र&#039;:&#039;ர&#039;,&#039;ल&#039;:&#039;ல&#039;,&#039;ळ&#039;:&#039;ழ&#039;,&#039;व&#039;:&#039;வ&#039;,&lt;br /&gt;
      &#039;श&#039;:&#039;ஶ&#039;,&#039;ष&#039;:&#039;ஷ&#039;,&#039;स&#039;:&#039;ஸ&#039;,&#039;ह&#039;:&#039;ஹ&#039;,&lt;br /&gt;
      &#039;ा&#039;:&#039;ா&#039;,&#039;ि&#039;:&#039;ி&#039;,&#039;ी&#039;:&#039;ீ&#039;,&#039;ु&#039;:&#039;ு&#039;,&#039;ू&#039;:&#039;ூ&#039;,&lt;br /&gt;
      &#039;ृ&#039;:&#039;ு&#039;,&#039;ॄ&#039;:&#039;ூ&#039;,&lt;br /&gt;
      &#039;े&#039;:&#039;ே&#039;,&#039;ை&#039;:&#039;ை&#039;,&#039;ो&#039;:&#039;ோ&#039;,&#039;ौ&#039;:&#039;ௌ&#039;,&lt;br /&gt;
      &#039;ं&#039;:&#039;ம்&#039;,&#039;ः&#039;:&#039;:&#039;,&#039;ँ&#039;:&#039;ம்&#039;,&#039;्&#039;:&#039;்&#039;,&#039;ॐ&#039;:&#039;ௐ&#039;,&#039;ऽ&#039;:&#039;ௗ&#039;,&lt;br /&gt;
      &#039;०&#039;:&#039;0&#039;,&#039;१&#039;:&#039;1&#039;,&#039;२&#039;:&#039;2&#039;,&#039;३&#039;:&#039;3&#039;,&#039;४&#039;:&#039;4&#039;,&lt;br /&gt;
      &#039;५&#039;:&#039;5&#039;,&#039;६&#039;:&#039;6&#039;,&#039;७&#039;:&#039;7&#039;,&#039;८&#039;:&#039;8&#039;,&#039;९&#039;:&#039;9&#039;&lt;br /&gt;
    }&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  var PRE = [&lt;br /&gt;
    [ /ङ्क/g, &#039;ंक&#039; ], [ /ङ्ख/g, &#039;ंख&#039; ], [ /ङ्ग/g, &#039;ंग&#039; ], [ /ङ्घ/g, &#039;ंघ&#039; ],&lt;br /&gt;
    [ /ञ्च/g, &#039;ंच&#039; ], [ /ञ्ज/g, &#039;ंज&#039; ], [ /ण्ट/g, &#039;ंट&#039; ], [ /ण्ड/g, &#039;ंड&#039; ],&lt;br /&gt;
    [ /न्त/g, &#039;ंत&#039; ], [ /न्द/g, &#039;ंद&#039; ], [ /म्ब/g, &#039;ंब&#039; ], [ /म्भ/g, &#039;ंभ&#039; ]&lt;br /&gt;
  ];&lt;br /&gt;
&lt;br /&gt;
  function transliterateText( text, script ) {&lt;br /&gt;
    if ( script === &#039;en&#039; ) return devanagariToIAST( text );&lt;br /&gt;
    var map = SCRIPT_MAP[ script ];&lt;br /&gt;
    if ( !map ) return text;&lt;br /&gt;
    var t = text;&lt;br /&gt;
    PRE.forEach( function ( p ) { t = t.replace( p[ 0 ], p[ 1 ] ); } );&lt;br /&gt;
    return Array.from( t ).map( function ( ch ) {&lt;br /&gt;
      return map[ ch ] !== undefined ? map[ ch ] : ch;&lt;br /&gt;
    } ).join( &#039;&#039; );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var translatableSpans = [];&lt;br /&gt;
&lt;br /&gt;
  function tagTextNodes() {&lt;br /&gt;
    var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
    if ( content ) {&lt;br /&gt;
      var walker = document.createTreeWalker( content, NodeFilter.SHOW_TEXT );&lt;br /&gt;
      var nodes  = [];&lt;br /&gt;
      while ( walker.nextNode() ) nodes.push( walker.currentNode );&lt;br /&gt;
      nodes.forEach( function ( node ) {&lt;br /&gt;
        var p = node.parentNode;&lt;br /&gt;
        if ( !p ) return;&lt;br /&gt;
        if ( p.hasAttribute &amp;amp;&amp;amp; p.hasAttribute( &#039;data-deva&#039; ) ) return;&lt;br /&gt;
        if ( p.closest ) {&lt;br /&gt;
          if ( p.closest( &#039;.gr-controls&#039; )    ) return;&lt;br /&gt;
          if ( p.closest( &#039;.mw-editsection&#039; ) ) return;&lt;br /&gt;
        }&lt;br /&gt;
        var orig = node.textContent;&lt;br /&gt;
        if ( !orig.trim() ) return;&lt;br /&gt;
        var span = document.createElement( &#039;span&#039; );&lt;br /&gt;
        span.setAttribute( &#039;data-deva&#039;, orig );&lt;br /&gt;
        span.textContent = orig;&lt;br /&gt;
        p.replaceChild( span, node );&lt;br /&gt;
        translatableSpans.push( span );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
    document.querySelectorAll( &#039;.vector-toc .vector-toc-text&#039; ).forEach( function ( span ) {&lt;br /&gt;
      if ( span.hasAttribute( &#039;data-deva&#039; ) ) return;&lt;br /&gt;
      var orig = span.textContent;&lt;br /&gt;
      if ( !orig.trim() ) return;&lt;br /&gt;
      span.setAttribute( &#039;data-deva&#039;, orig );&lt;br /&gt;
      translatableSpans.push( span );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function applyScript( script ) {&lt;br /&gt;
    currentScript = script;&lt;br /&gt;
    translatableSpans.forEach( function ( span ) {&lt;br /&gt;
      if ( !span.parentNode ) return;&lt;br /&gt;
      var orig = span.getAttribute( &#039;data-deva&#039; );&lt;br /&gt;
      if ( !orig ) return;&lt;br /&gt;
      span.textContent = ( script === &#039;deva&#039; )&lt;br /&gt;
        ? orig&lt;br /&gt;
        : transliterateText( orig, script );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function _isNoTocPage() {&lt;br /&gt;
    var pn = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039; ) ) || &#039;&#039;;&lt;br /&gt;
    return pn === &#039;Main_Page&#039; || /^[A-Za-z0-9_]+:About$/.test( pn );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function renameTocTitle() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    var titleEl = toc.querySelector(&#039;.vector-toc-title&#039;) || toc.querySelector(&#039;.vector-pinnable-header-label&#039;);&lt;br /&gt;
    if ( !titleEl ) return;&lt;br /&gt;
    var LABEL = &#039;विषयसूची&#039;;&lt;br /&gt;
    var span = titleEl.querySelector(&#039;.gr-toc-title&#039;);&lt;br /&gt;
    if ( !span ) {&lt;br /&gt;
      titleEl.innerHTML = &#039;&#039;;&lt;br /&gt;
      span = document.createElement(&#039;span&#039;);&lt;br /&gt;
      span.className = &#039;gr-toc-title&#039;;&lt;br /&gt;
      span.setAttribute(&#039;data-deva&#039;, LABEL);&lt;br /&gt;
      titleEl.appendChild(span);&lt;br /&gt;
      translatableSpans.push(span);&lt;br /&gt;
    }&lt;br /&gt;
    span.textContent = currentScript === &#039;deva&#039; ? LABEL : transliterateText(LABEL, currentScript);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function removeTocBeginning() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    var el = toc.querySelector( &#039;#vector-toc-beginning&#039; );&lt;br /&gt;
    if ( !el ) {&lt;br /&gt;
      var items = toc.querySelectorAll( &#039;.vector-toc-list-item&#039; );&lt;br /&gt;
      for ( var i = 0; i &amp;lt; items.length; i++ ) {&lt;br /&gt;
        var a = items[ i ].querySelector( &#039;a&#039; );&lt;br /&gt;
        if ( a ) {&lt;br /&gt;
          var href = a.getAttribute( &#039;href&#039; ) || &#039;&#039;;&lt;br /&gt;
          if ( href.indexOf( &#039;#&#039; ) === -1 ) { el = items[ i ]; break; }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if ( el &amp;amp;&amp;amp; el.parentNode ) el.parentNode.removeChild( el );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function expandTocSections() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    toc.querySelectorAll( &#039;.vector-toc-list-item-collapsed&#039; ).forEach( function ( li ) {&lt;br /&gt;
      li.classList.remove( &#039;vector-toc-list-item-collapsed&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function injectTocDocNav() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    if ( document.getElementById( &#039;gr-toc-doc-nav&#039; ) ) return;&lt;br /&gt;
    var artPath   = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
    var pageTitle = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039;   ) ) || &#039;&#039;;&lt;br /&gt;
    var teekaPage   = document.querySelector( &#039;.gr-teeka-page&#039; );&lt;br /&gt;
    var primarySlug = teekaPage ? ( teekaPage.getAttribute( &#039;data-primary&#039; ) || &#039;&#039; ) : &#039;&#039;;&lt;br /&gt;
    if ( !primarySlug ) { primarySlug = pageTitle.split( &#039;/&#039; )[ 0 ]; }&lt;br /&gt;
    if ( !primarySlug ) return;&lt;br /&gt;
    function wikiUrl( slug ) {&lt;br /&gt;
      if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( slug );&lt;br /&gt;
      return artPath.replace( &#039;$1&#039;, encodeURIComponent( slug ).replace( /%2F/g, &#039;/&#039; ) );&lt;br /&gt;
    }&lt;br /&gt;
    var docTitleEl     = document.querySelector( &#039;.gr-doc-title&#039; );&lt;br /&gt;
    var hasMoolaPage   = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-moola&#039; )   === &#039;1&#039;;&lt;br /&gt;
    var hasUllekhaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-ullekha&#039; ) === &#039;1&#039;;&lt;br /&gt;
    var showMoolaPage  = !teekaPage &amp;amp;&amp;amp; hasMoolaPage;&lt;br /&gt;
    var showMoolaBack  = !!teekaPage;&lt;br /&gt;
    var showUllekha    = hasUllekhaPage || !!teekaPage;&lt;br /&gt;
    if ( !showMoolaPage &amp;amp;&amp;amp; !showMoolaBack &amp;amp;&amp;amp; !showUllekha ) return;&lt;br /&gt;
    var nav = document.createElement( &#039;div&#039; );&lt;br /&gt;
    nav.id = &#039;gr-toc-doc-nav&#039;;&lt;br /&gt;
    nav.setAttribute( &#039;class&#039;, &#039;toc-main-links&#039; );&lt;br /&gt;
    function makeBtn( href, label ) {&lt;br /&gt;
      var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
      a.href = href;&lt;br /&gt;
      a.setAttribute( &#039;class&#039;, &#039;toc-main-link-item&#039; );&lt;br /&gt;
      var lspan = document.createElement( &#039;span&#039; );&lt;br /&gt;
      lspan.setAttribute( &#039;data-deva&#039;, label );&lt;br /&gt;
      lspan.textContent = ( currentScript &amp;amp;&amp;amp; currentScript !== &#039;deva&#039; ) ? transliterateText( label, currentScript ) : label;&lt;br /&gt;
      translatableSpans.push( lspan );&lt;br /&gt;
      a.appendChild( lspan );&lt;br /&gt;
      a.addEventListener( &#039;mouseover&#039;, function () { this.style.opacity = &#039;0.72&#039;; } );&lt;br /&gt;
      a.addEventListener( &#039;mouseout&#039;,  function () { this.style.opacity = &#039;1&#039;;    } );&lt;br /&gt;
      return a;&lt;br /&gt;
    }&lt;br /&gt;
    if ( showMoolaPage ) nav.appendChild( makeBtn( wikiUrl( primarySlug + &#039;/Moola&#039; ), &#039;मूलम्&#039; ) );&lt;br /&gt;
    if ( showMoolaBack ) nav.appendChild( makeBtn( wikiUrl( primarySlug ),            &#039;मूल&#039;   ) );&lt;br /&gt;
    if ( showUllekha   ) nav.appendChild( makeBtn( wikiUrl( primarySlug + &#039;/Ullekha&#039;), &#039;उल्लेख&#039;) );&lt;br /&gt;
    var tocContents = toc.querySelector( &#039;.vector-toc-contents&#039; );&lt;br /&gt;
    if ( tocContents ) toc.insertBefore( nav, tocContents );&lt;br /&gt;
    else               toc.appendChild( nav );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var _headingObserver = null;&lt;br /&gt;
&lt;br /&gt;
  function attachHeadingObserver() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    if ( _headingObserver ) return;&lt;br /&gt;
    if ( !window.IntersectionObserver ) return;&lt;br /&gt;
    var ACTIVE_COLOR = &#039;#f57c00&#039;;&lt;br /&gt;
    var _activeId    = null;&lt;br /&gt;
    var content  = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
    if ( !content ) return;&lt;br /&gt;
    var headings = Array.from( content.querySelectorAll( &#039;h1[id],h2[id],h3[id],h4[id],h5[id],h6[id]&#039; ) );&lt;br /&gt;
    if ( !headings.length ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    function getTocLink( id ) { return toc.querySelector( &#039;a[href=&amp;quot;#&#039; + CSS.escape( id ) + &#039;&amp;quot;]&#039; ); }&lt;br /&gt;
    function getTocLi( id ) { var a = getTocLink( id ); return a ? a.closest( &#039;.vector-toc-list-item&#039; ) : null; }&lt;br /&gt;
    function clearActive() {&lt;br /&gt;
      toc.querySelectorAll( &#039;.vector-toc-list-item&#039; ).forEach( function ( li ) {&lt;br /&gt;
        li.classList.remove( &#039;vector-toc-list-item-active&#039; );&lt;br /&gt;
        var lnk = li.querySelector( &#039;.vector-toc-link&#039; );&lt;br /&gt;
        if ( !lnk ) return;&lt;br /&gt;
        lnk.style.removeProperty( &#039;color&#039; );&lt;br /&gt;
        lnk.style.setProperty( &#039;font-weight&#039;, &#039;400&#039;, &#039;important&#039; );&lt;br /&gt;
        lnk.querySelectorAll( &#039;*&#039; ).forEach( function ( el ) { el.style.removeProperty( &#039;color&#039; ); el.style.setProperty( &#039;font-weight&#039;, &#039;400&#039;, &#039;important&#039; ); } );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
    function setActive( id ) {&lt;br /&gt;
      if ( _activeId === id ) return;&lt;br /&gt;
      _activeId = id;&lt;br /&gt;
      clearActive();&lt;br /&gt;
      if ( !id ) return;&lt;br /&gt;
      var li = getTocLi( id );&lt;br /&gt;
      if ( !li ) return;&lt;br /&gt;
      li.classList.add( &#039;vector-toc-list-item-active&#039; );&lt;br /&gt;
      var hasActiveChild = !!li.querySelector( &#039;.vector-toc-list-item .vector-toc-list-item-active&#039; );&lt;br /&gt;
      if ( !hasActiveChild ) {&lt;br /&gt;
        var lnk = li.querySelector( &#039;.vector-toc-link&#039; );&lt;br /&gt;
        if ( lnk ) {&lt;br /&gt;
          lnk.style.setProperty( &#039;color&#039;, ACTIVE_COLOR, &#039;important&#039; );&lt;br /&gt;
          lnk.style.setProperty( &#039;font-weight&#039;, &#039;700&#039;, &#039;important&#039; );&lt;br /&gt;
          lnk.querySelectorAll( &#039;*&#039; ).forEach( function ( el ) { el.style.setProperty( &#039;color&#039;, ACTIVE_COLOR, &#039;important&#039; ); el.style.setProperty( &#039;font-weight&#039;, &#039;700&#039;, &#039;important&#039; ); } );&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      var anc = li.parentNode;&lt;br /&gt;
      while ( anc &amp;amp;&amp;amp; anc !== toc ) {&lt;br /&gt;
        if ( anc.classList ) anc.classList.remove( &#039;vector-toc-list-item-collapsed&#039; );&lt;br /&gt;
        if ( anc.tagName === &#039;UL&#039; || anc.tagName === &#039;LI&#039; ) anc.style.removeProperty( &#039;display&#039; );&lt;br /&gt;
        anc = anc.parentNode;&lt;br /&gt;
      }&lt;br /&gt;
      var sticky = document.querySelector( &#039;.vector-sticky-pinned-container&#039; );&lt;br /&gt;
      var scrollEl = sticky || toc;&lt;br /&gt;
      if ( scrollEl.scrollHeight &amp;gt; scrollEl.clientHeight ) {&lt;br /&gt;
        var lr = li.getBoundingClientRect();&lt;br /&gt;
        var cr = scrollEl.getBoundingClientRect();&lt;br /&gt;
        if ( lr.top &amp;lt; cr.top + 8 || lr.bottom &amp;gt; cr.bottom - 8 ) {&lt;br /&gt;
          scrollEl.scrollTop += lr.top - cr.top - scrollEl.clientHeight / 2 + li.offsetHeight / 2;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    var _visible = new Set();&lt;br /&gt;
    _headingObserver = new IntersectionObserver( function ( entries ) {&lt;br /&gt;
      entries.forEach( function ( entry ) {&lt;br /&gt;
        if ( entry.isIntersecting ) _visible.add( entry.target.id );&lt;br /&gt;
        else _visible.delete( entry.target.id );&lt;br /&gt;
      } );&lt;br /&gt;
      var topId = null, topY = Infinity;&lt;br /&gt;
      _visible.forEach( function ( id ) {&lt;br /&gt;
        var el = document.getElementById( id );&lt;br /&gt;
        if ( el ) { var y = el.getBoundingClientRect().top; if ( y &amp;gt;= 0 &amp;amp;&amp;amp; y &amp;lt; topY ) { topY = y; topId = id; } }&lt;br /&gt;
      } );&lt;br /&gt;
      if ( !topId ) {&lt;br /&gt;
        var bestY = -Infinity;&lt;br /&gt;
        headings.forEach( function ( h ) { var y = h.getBoundingClientRect().top; if ( y &amp;lt; 0 &amp;amp;&amp;amp; y &amp;gt; bestY ) { bestY = y; topId = h.id; } } );&lt;br /&gt;
      }&lt;br /&gt;
      setActive( topId || null );&lt;br /&gt;
    }, { rootMargin: &#039;-60px 0px -65% 0px&#039;, threshold: 0 } );&lt;br /&gt;
    headings.forEach( function ( h ) { _headingObserver.observe( h ); } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function setupToc() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    removeTocBeginning();&lt;br /&gt;
    renameTocTitle();&lt;br /&gt;
    expandTocSections();&lt;br /&gt;
    injectTocDocNav();&lt;br /&gt;
    attachHeadingObserver();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function init() {&lt;br /&gt;
    var HIDE_IDS = [ &#039;vector-appearance&#039;, &#039;vector-appearance-pinned-container&#039;, &#039;vector-appearance-unpinned-container&#039; ];&lt;br /&gt;
    function removeHiddenEls() {&lt;br /&gt;
      HIDE_IDS.forEach( function ( id ) { var el = document.getElementById( id ); if ( el &amp;amp;&amp;amp; el.parentNode ) el.parentNode.removeChild( el ); } );&lt;br /&gt;
      var pt = document.getElementById( &#039;vector-page-tools&#039; ) || document.querySelector( &#039;.vector-page-tools-pinned-container&#039; );&lt;br /&gt;
      if ( pt ) pt.querySelectorAll( &#039;[aria-controls=&amp;quot;vector-appearance&amp;quot;]&#039; ).forEach( function ( el ) { if ( el.parentNode ) el.parentNode.removeChild( el ); } );&lt;br /&gt;
    }&lt;br /&gt;
    removeHiddenEls();&lt;br /&gt;
    ( function detectTeekaMode() {&lt;br /&gt;
      var tp = document.querySelector( &#039;.gr-teeka-page&#039; );&lt;br /&gt;
      if ( !tp ) return;&lt;br /&gt;
      var primary = tp.getAttribute( &#039;data-primary&#039; ) || &#039;&#039;;&lt;br /&gt;
      var artPath = ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
      var mainUrl = artPath.replace( &#039;$1&#039;, primary );&lt;br /&gt;
      var refParam = window.location.search.match( /[?&amp;amp;]ref=([01])/ );&lt;br /&gt;
      if ( refParam ) { document.body.classList.add( refParam[1] === &#039;1&#039; ? &#039;gr-ref-mode&#039; : &#039;gr-standalone&#039; ); return; }&lt;br /&gt;
      var ref = document.referrer || &#039;&#039;;&lt;br /&gt;
      document.body.classList.add( ( ref &amp;amp;&amp;amp; primary &amp;amp;&amp;amp; ref.indexOf( mainUrl ) !== -1 ) ? &#039;gr-ref-mode&#039; : &#039;gr-standalone&#039; );&lt;br /&gt;
    }() );&lt;br /&gt;
    if ( window.MutationObserver ) {&lt;br /&gt;
      var hideObs = new MutationObserver( function ( mutations ) {&lt;br /&gt;
        var dirty = false;&lt;br /&gt;
        mutations.forEach( function ( m ) { if ( m.addedNodes.length ) dirty = true; } );&lt;br /&gt;
        if ( dirty ) removeHiddenEls();&lt;br /&gt;
      } );&lt;br /&gt;
      hideObs.observe( document.body, { childList: true, subtree: false } );&lt;br /&gt;
      setTimeout( function () { hideObs.disconnect(); }, 6000 );&lt;br /&gt;
    }&lt;br /&gt;
    var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
    var alreadyTagged = content &amp;amp;&amp;amp; content.querySelector( &#039;[data-deva]&#039; );&lt;br /&gt;
    if ( !alreadyTagged ) { translatableSpans = []; tagTextNodes(); }&lt;br /&gt;
    else {&lt;br /&gt;
      document.querySelectorAll( &#039;.vector-toc .vector-toc-text:not([data-deva])&#039; ).forEach( function ( span ) {&lt;br /&gt;
        var orig = span.textContent; if ( !orig.trim() ) return;&lt;br /&gt;
        span.setAttribute( &#039;data-deva&#039;, orig ); translatableSpans.push( span );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
    var saved = ( function () { try { return localStorage.getItem( LS_SCRIPT_KEY ); } catch ( e ) { return null; } }() );&lt;br /&gt;
    if ( saved &amp;amp;&amp;amp; saved !== &#039;deva&#039; ) { applyScript( saved ); } else { currentScript = &#039;deva&#039;; }&lt;br /&gt;
    setTimeout( setupToc, 200 );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  window.addEventListener( &#039;gr-script-change&#039;, function ( e ) {&lt;br /&gt;
    var script = e &amp;amp;&amp;amp; e.detail &amp;amp;&amp;amp; e.detail.script;&lt;br /&gt;
    if ( script ) applyScript( script );&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
  window.addEventListener( &#039;gr-new-content&#039;, function ( e ) {&lt;br /&gt;
    var container = e &amp;amp;&amp;amp; e.detail &amp;amp;&amp;amp; e.detail.container;&lt;br /&gt;
    if ( !container ) return;&lt;br /&gt;
    var walker = document.createTreeWalker( container, NodeFilter.SHOW_TEXT );&lt;br /&gt;
    var nodes = [];&lt;br /&gt;
    while ( walker.nextNode() ) nodes.push( walker.currentNode );&lt;br /&gt;
    nodes.forEach( function ( node ) {&lt;br /&gt;
      var p = node.parentNode;&lt;br /&gt;
      if ( !p || ( p.hasAttribute &amp;amp;&amp;amp; p.hasAttribute( &#039;data-deva&#039; ) ) ) return;&lt;br /&gt;
      var orig = node.textContent;&lt;br /&gt;
      if ( !orig.trim() ) return;&lt;br /&gt;
      var span = document.createElement( &#039;span&#039; );&lt;br /&gt;
      span.setAttribute( &#039;data-deva&#039;, orig );&lt;br /&gt;
      span.textContent = currentScript !== &#039;deva&#039; ? transliterateText( orig, currentScript ) : orig;&lt;br /&gt;
      p.replaceChild( span, node );&lt;br /&gt;
      translatableSpans.push( span );&lt;br /&gt;
    } );&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
  try {&lt;br /&gt;
    var _grBC = new BroadcastChannel( &#039;gr-script&#039; );&lt;br /&gt;
    _grBC.onmessage = function ( e ) {&lt;br /&gt;
      var script = e &amp;amp;&amp;amp; e.data &amp;amp;&amp;amp; e.data.script;&lt;br /&gt;
      if ( script ) { currentScript = script; var sel = document.querySelector( &#039;.gr-script-sel&#039; ); if ( sel ) sel.value = script; applyScript( script ); }&lt;br /&gt;
    };&lt;br /&gt;
  } catch ( e ) {}&lt;br /&gt;
&lt;br /&gt;
  if ( window.mw ) {&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
      setTimeout( function () {&lt;br /&gt;
        var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
        var alreadyTagged = content &amp;amp;&amp;amp; content.querySelector( &#039;[data-deva]&#039; );&lt;br /&gt;
        if ( !alreadyTagged ) { translatableSpans = []; tagTextNodes(); }&lt;br /&gt;
        else {&lt;br /&gt;
          document.querySelectorAll( &#039;.vector-toc .vector-toc-text:not([data-deva])&#039; ).forEach( function ( span ) {&lt;br /&gt;
            var orig = span.textContent; if ( !orig.trim() ) return;&lt;br /&gt;
            span.setAttribute( &#039;data-deva&#039;, orig ); translatableSpans.push( span );&lt;br /&gt;
          } );&lt;br /&gt;
        }&lt;br /&gt;
        if ( currentScript !== &#039;deva&#039; ) applyScript( currentScript );&lt;br /&gt;
        setupToc();&lt;br /&gt;
      }, 150 );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) { document.addEventListener( &#039;DOMContentLoaded&#039;, init ); }&lt;br /&gt;
  else { init(); }&lt;br /&gt;
&lt;br /&gt;
}() );   /* ← end of main IIFE */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Inject &amp;quot;Help&amp;quot; and &amp;quot;About&amp;quot; links into the header ─────────────────&lt;br /&gt;
( function () {&lt;br /&gt;
  function wikiHref( title ) {&lt;br /&gt;
    if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( title );&lt;br /&gt;
    var ap = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
    return ap.replace( &#039;$1&#039;, title );&lt;br /&gt;
  }&lt;br /&gt;
  var linkStyle = [ &#039;color:rgba(255,255,255,0.88)&#039;,&#039;font-size:0.88em&#039;,&#039;font-family:system-ui,sans-serif&#039;,&#039;font-weight:500&#039;,&#039;text-decoration:none&#039;,&#039;padding:4px 10px&#039;,&#039;border-radius:4px&#039;,&#039;margin-right:4px&#039;,&#039;transition:color 0.15s,background 0.15s&#039;,&#039;white-space:nowrap&#039; ].join( &#039;;&#039; );&lt;br /&gt;
  function makeHeaderLink( id, href, label ) {&lt;br /&gt;
    var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
    a.id = id; a.href = href; a.textContent = label; a.style.cssText = linkStyle;&lt;br /&gt;
    a.addEventListener( &#039;mouseover&#039;, function () { this.style.color = &#039;#fff&#039;; this.style.background = &#039;rgba(255,255,255,0.12)&#039;; } );&lt;br /&gt;
    a.addEventListener( &#039;mouseout&#039;,  function () { this.style.color = &#039;rgba(255,255,255,0.88)&#039;; this.style.background = &#039;transparent&#039;; } );&lt;br /&gt;
    return a;&lt;br /&gt;
  }&lt;br /&gt;
  function injectHeaderLinks() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-about-link&#039; ) ) return;&lt;br /&gt;
    var headerEnd = document.querySelector( &#039;.vector-header-end&#039; ) || document.querySelector( &#039;#vector-user-links&#039; ) || document.querySelector( &#039;.mw-header&#039; );&lt;br /&gt;
    if ( !headerEnd ) return;&lt;br /&gt;
    var helpLink  = makeHeaderLink( &#039;gr-help-link&#039;,  wikiHref( &#039;My_wiki:Help&#039;  ), &#039;Help&#039;  );&lt;br /&gt;
    var aboutLink = makeHeaderLink( &#039;gr-about-link&#039;, wikiHref( &#039;My_wiki:About&#039; ), &#039;About&#039; );&lt;br /&gt;
    var ul = document.querySelector( &#039;.vector-user-links&#039; ) || document.querySelector( &#039;#pt-userpage&#039; );&lt;br /&gt;
    if ( ul &amp;amp;&amp;amp; ul.parentNode === headerEnd ) { headerEnd.insertBefore( aboutLink, ul ); headerEnd.insertBefore( helpLink, aboutLink ); }&lt;br /&gt;
    else { headerEnd.appendChild( helpLink ); headerEnd.appendChild( aboutLink ); }&lt;br /&gt;
  }&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) document.addEventListener( &#039;DOMContentLoaded&#039;, injectHeaderLinks );&lt;br /&gt;
  else injectHeaderLinks();&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Main page: by-Grantha / by-Author toggle ──────────────────────&lt;br /&gt;
( function () {&lt;br /&gt;
  function grHomeView( v ) {&lt;br /&gt;
    var gView = document.getElementById( &#039;gr-view-grantha&#039; );&lt;br /&gt;
    var aView = document.getElementById( &#039;gr-view-author&#039; );&lt;br /&gt;
    var gBtn  = document.getElementById( &#039;gr-toggle-grantha&#039; );&lt;br /&gt;
    var aBtn  = document.getElementById( &#039;gr-toggle-author&#039; );&lt;br /&gt;
    if ( !gView || !aView || !gBtn || !aBtn ) return;&lt;br /&gt;
    gView.style.display = ( v === &#039;grantha&#039; ) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
    aView.style.display = ( v === &#039;author&#039;  ) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
    gBtn.className = &#039;gr-toggle-btn&#039; + ( v === &#039;grantha&#039; ? &#039; gr-toggle-active&#039; : &#039;&#039; );&lt;br /&gt;
    aBtn.className = &#039;gr-toggle-btn&#039; + ( v === &#039;author&#039;  ? &#039; gr-toggle-active&#039; : &#039;&#039; );&lt;br /&gt;
    try { localStorage.setItem( &#039;gr_home_view&#039;, v ); } catch ( e ) {}&lt;br /&gt;
  }&lt;br /&gt;
  function initHomeToggle() {&lt;br /&gt;
    var gBtn = document.getElementById( &#039;gr-toggle-grantha&#039; );&lt;br /&gt;
    var aBtn = document.getElementById( &#039;gr-toggle-author&#039; );&lt;br /&gt;
    if ( !gBtn || !aBtn ) return;&lt;br /&gt;
    gBtn.addEventListener( &#039;click&#039;, function () { grHomeView( &#039;grantha&#039; ); } );&lt;br /&gt;
    aBtn.addEventListener( &#039;click&#039;, function () { grHomeView( &#039;author&#039; );  } );&lt;br /&gt;
    [ gBtn, aBtn ].forEach( function ( btn ) { btn.addEventListener( &#039;keydown&#039;, function ( e ) { if ( e.key === &#039;Enter&#039; || e.key === &#039; &#039; ) btn.click(); } ); } );&lt;br /&gt;
    var saved; try { saved = localStorage.getItem( &#039;gr_home_view&#039; ); } catch ( e ) {}&lt;br /&gt;
    if ( saved === &#039;author&#039; ) grHomeView( &#039;author&#039; );&lt;br /&gt;
  }&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) document.addEventListener( &#039;DOMContentLoaded&#039;, initHomeToggle );&lt;br /&gt;
  else initHomeToggle();&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Ullekha reference link handler ─────────────────────────────────&lt;br /&gt;
( function () {&lt;br /&gt;
  function highlightOnArrival() {&lt;br /&gt;
    var search = window.location.search;&lt;br /&gt;
    if ( !search ) return;&lt;br /&gt;
    var m = search.match( /[?&amp;amp;]hlUllekha=([^&amp;amp;]+)/ );&lt;br /&gt;
    if ( !m ) return;&lt;br /&gt;
    var needle;&lt;br /&gt;
    try { needle = decodeURIComponent( m[ 1 ] ); } catch ( e ) { return; }&lt;br /&gt;
    if ( !needle || needle.length &amp;lt; 4 ) return;&lt;br /&gt;
    function doHighlight() {&lt;br /&gt;
      var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
      if ( !content ) return;&lt;br /&gt;
      var snippet = needle.slice( 0, 40 );&lt;br /&gt;
      var found   = false;&lt;br /&gt;
      var spans = content.querySelectorAll( &#039;[data-deva]&#039; );&lt;br /&gt;
      for ( var i = 0; i &amp;lt; spans.length &amp;amp;&amp;amp; !found; i++ ) {&lt;br /&gt;
        var spanEl = spans[ i ];&lt;br /&gt;
        var orig   = spanEl.getAttribute( &#039;data-deva&#039; ) || &#039;&#039;;&lt;br /&gt;
        if ( orig.indexOf( snippet ) === -1 ) continue;&lt;br /&gt;
        var idx    = orig.indexOf( snippet );&lt;br /&gt;
        var hlText = orig.slice( idx, Math.min( idx + needle.length, orig.length ) );&lt;br /&gt;
        var mark   = document.createElement( &#039;mark&#039; );&lt;br /&gt;
        mark.className = &#039;gr-ullekha-highlight&#039;;&lt;br /&gt;
        mark.style.cssText = &#039;background:#fff176;border-radius:2px;padding:0 2px;&#039;;&lt;br /&gt;
        mark.textContent = hlText;&lt;br /&gt;
        var parent = spanEl.parentNode;&lt;br /&gt;
        if ( !parent ) continue;&lt;br /&gt;
        var before = document.createTextNode( orig.slice( 0, idx ) );&lt;br /&gt;
        var after  = document.createTextNode( orig.slice( idx + hlText.length ) );&lt;br /&gt;
        parent.insertBefore( before, spanEl ); parent.insertBefore( mark, spanEl ); parent.insertBefore( after, spanEl ); parent.removeChild( spanEl );&lt;br /&gt;
        setTimeout( function () { mark.scrollIntoView( { behavior: &#039;smooth&#039;, block: &#039;center&#039; } ); }, 100 );&lt;br /&gt;
        found = true;&lt;br /&gt;
      }&lt;br /&gt;
      if ( !found ) {&lt;br /&gt;
        var walker = document.createTreeWalker( content, NodeFilter.SHOW_TEXT );&lt;br /&gt;
        while ( walker.nextNode() &amp;amp;&amp;amp; !found ) {&lt;br /&gt;
          var node = walker.currentNode;&lt;br /&gt;
          var txt  = node.textContent || &#039;&#039;;&lt;br /&gt;
          if ( txt.indexOf( snippet ) === -1 ) continue;&lt;br /&gt;
          var idx2  = txt.indexOf( snippet );&lt;br /&gt;
          var mark2 = document.createElement( &#039;mark&#039; );&lt;br /&gt;
          mark2.className = &#039;gr-ullekha-highlight&#039;;&lt;br /&gt;
          mark2.style.cssText = &#039;background:#fff176;border-radius:2px;padding:0 2px;&#039;;&lt;br /&gt;
          mark2.textContent = txt.slice( idx2, Math.min( idx2 + needle.length, txt.length ) );&lt;br /&gt;
          var p = node.parentNode;&lt;br /&gt;
          p.insertBefore( document.createTextNode( txt.slice( 0, idx2 ) ), node );&lt;br /&gt;
          p.insertBefore( mark2, node );&lt;br /&gt;
          p.insertBefore( document.createTextNode( txt.slice( idx2 + mark2.textContent.length ) ), node );&lt;br /&gt;
          p.removeChild( node );&lt;br /&gt;
          setTimeout( function () { mark2.scrollIntoView( { behavior: &#039;smooth&#039;, block: &#039;center&#039; } ); }, 100 );&lt;br /&gt;
          found = true;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    doHighlight();&lt;br /&gt;
  }&lt;br /&gt;
  function wireUllekhaLinks() {&lt;br /&gt;
    document.querySelectorAll( &#039;.gr-ullekha-ref-link&#039; ).forEach( function ( wrap ) {&lt;br /&gt;
      var anchor = wrap.getAttribute( &#039;data-anchor&#039; ) || &#039;&#039;;&lt;br /&gt;
      var hl     = wrap.getAttribute( &#039;data-hl&#039; )     || &#039;&#039;;&lt;br /&gt;
      var a = wrap.querySelector( &#039;a&#039; );&lt;br /&gt;
      if ( !a ) return;&lt;br /&gt;
      var base = a.href.split( &#039;#&#039; )[ 0 ];&lt;br /&gt;
      var encoded = encodeURIComponent( hl );&lt;br /&gt;
      a.href = base + ( hl ? &#039;?hlUllekha=&#039; + encoded : &#039;&#039; ) + ( anchor ? &#039;#&#039; + anchor : &#039;&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) { document.addEventListener( &#039;DOMContentLoaded&#039;, function () { highlightOnArrival(); wireUllekhaLinks(); } ); }&lt;br /&gt;
  else { highlightOnArrival(); wireUllekhaLinks(); }&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
/* ── Search result highlight ──────────────────────────────────── */&lt;br /&gt;
/* EXACT REPLACEMENT for the search highlight IIFE in MediaWiki:Common.js.&lt;br /&gt;
 * Only changes from the original working version:&lt;br /&gt;
 *  - Mobile bar: full-width terracotta bottom bar instead of floating pill&lt;br /&gt;
 *  - showDismissBar: guard added (if !count return) to prevent empty bar&lt;br /&gt;
 * Everything else (storeQueryForLink, applyHighlight, wrapMatches) is&lt;br /&gt;
 * identical to the version that was working.&lt;br /&gt;
 */&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
  function storeQueryForLink( url, query ) {&lt;br /&gt;
    try {&lt;br /&gt;
      var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
      a.href = url;&lt;br /&gt;
      sessionStorage.setItem( &#039;gr_search_hl&#039;, JSON.stringify({&lt;br /&gt;
        query:    query,&lt;br /&gt;
        pathname: a.pathname&lt;br /&gt;
      }) );&lt;br /&gt;
    } catch(e) {}&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function applyHighlight() {&lt;br /&gt;
    var stored;&lt;br /&gt;
    try {&lt;br /&gt;
      stored = JSON.parse( sessionStorage.getItem( &#039;gr_search_hl&#039; ) || &#039;null&#039; );&lt;br /&gt;
    } catch(e) { return; }&lt;br /&gt;
    if ( !stored || !stored.query ) return;&lt;br /&gt;
&lt;br /&gt;
    var currentPath = window.location.pathname;&lt;br /&gt;
    var storedPath  = stored.pathname || &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
    function normPath(p) { return decodeURIComponent(p).replace(/\/+$/, &#039;&#039;); }&lt;br /&gt;
    if ( storedPath &amp;amp;&amp;amp; normPath(storedPath) !== normPath(currentPath) ) {&lt;br /&gt;
      try { sessionStorage.removeItem( &#039;gr_search_hl&#039; ); } catch(e) {}&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var query = stored.query.trim();&lt;br /&gt;
    if ( !query ) return;&lt;br /&gt;
&lt;br /&gt;
    try { sessionStorage.removeItem( &#039;gr_search_hl&#039; ); } catch(e) {}&lt;br /&gt;
&lt;br /&gt;
    var delays = [ 0, 200, 600 ];&lt;br /&gt;
    delays.forEach( function(ms) {&lt;br /&gt;
      setTimeout( function() {&lt;br /&gt;
        if ( document.querySelector( &#039;.gr-search-hl&#039; ) ) return;&lt;br /&gt;
        highlightText( query );&lt;br /&gt;
      }, ms );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function highlightText( query ) {&lt;br /&gt;
    var content = document.querySelector( &#039;#mw-content-text .mw-parser-output&#039; );&lt;br /&gt;
    if ( !content ) return;&lt;br /&gt;
&lt;br /&gt;
    var raw = query.replace( /^&amp;quot;|&amp;quot;$/g, &#039;&#039; ).trim();&lt;br /&gt;
    if ( !raw ) return;&lt;br /&gt;
&lt;br /&gt;
    var patterns = [];&lt;br /&gt;
    patterns.push( escapeRegex( raw ) );&lt;br /&gt;
    raw.split( /\s+/ ).forEach( function(w) {&lt;br /&gt;
      if ( w.length &amp;gt;= 2 ) patterns.push( escapeRegex( w ) );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    var matched = false;&lt;br /&gt;
    for ( var pi = 0; pi &amp;lt; patterns.length; pi++ ) {&lt;br /&gt;
      var re;&lt;br /&gt;
      try { re = new RegExp( &#039;(&#039; + patterns[pi] + &#039;)&#039;, &#039;gi&#039; ); }&lt;br /&gt;
      catch(e) { continue; }&lt;br /&gt;
      var count = wrapMatches( content, re );&lt;br /&gt;
      if ( count &amp;gt; 0 ) { matched = true; break; }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ( !matched ) return;&lt;br /&gt;
&lt;br /&gt;
    var first = document.querySelector( &#039;.gr-search-hl&#039; );&lt;br /&gt;
    if ( first ) {&lt;br /&gt;
      first.scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; });&lt;br /&gt;
      first.classList.add( &#039;gr-search-hl-pulse&#039; );&lt;br /&gt;
      setTimeout( function() { first.classList.remove( &#039;gr-search-hl-pulse&#039; ); }, 2000 );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    showDismissBar( query );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function escapeRegex( s ) {&lt;br /&gt;
    return s.replace( /[.*+?^${}()|[\]\\]/g, &#039;\\$&amp;amp;&#039; );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function wrapMatches( root, re ) {&lt;br /&gt;
    var count = 0;&lt;br /&gt;
    var walker = document.createTreeWalker(&lt;br /&gt;
      root, NodeFilter.SHOW_TEXT, {&lt;br /&gt;
        acceptNode: function( node ) {&lt;br /&gt;
          var p = node.parentElement;&lt;br /&gt;
          if ( !p ) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
          var tag = p.tagName.toUpperCase();&lt;br /&gt;
          if ( tag === &#039;SCRIPT&#039; || tag === &#039;STYLE&#039; || tag === &#039;NOSCRIPT&#039; ) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
          if ( p.classList.contains( &#039;gr-search-hl&#039; ) ) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
          return NodeFilter.FILTER_ACCEPT;&lt;br /&gt;
        }&lt;br /&gt;
      }, false&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    var nodes = [];&lt;br /&gt;
    var node;&lt;br /&gt;
    while ( ( node = walker.nextNode() ) ) nodes.push( node );&lt;br /&gt;
&lt;br /&gt;
    nodes.forEach( function( textNode ) {&lt;br /&gt;
      var val = textNode.nodeValue;&lt;br /&gt;
      if ( !re.test( val ) ) return;&lt;br /&gt;
      re.lastIndex = 0;&lt;br /&gt;
&lt;br /&gt;
      var frag = document.createDocumentFragment();&lt;br /&gt;
      var last = 0;&lt;br /&gt;
      var m;&lt;br /&gt;
      while ( ( m = re.exec( val ) ) !== null ) {&lt;br /&gt;
        if ( m.index &amp;gt; last ) {&lt;br /&gt;
          frag.appendChild( document.createTextNode( val.slice( last, m.index ) ) );&lt;br /&gt;
        }&lt;br /&gt;
        var span = document.createElement( &#039;span&#039; );&lt;br /&gt;
        span.className = &#039;gr-search-hl&#039;;&lt;br /&gt;
        span.textContent = m[0];&lt;br /&gt;
        frag.appendChild( span );&lt;br /&gt;
        last = m.index + m[0].length;&lt;br /&gt;
        count++;&lt;br /&gt;
      }&lt;br /&gt;
      if ( last &amp;lt; val.length ) {&lt;br /&gt;
        frag.appendChild( document.createTextNode( val.slice( last ) ) );&lt;br /&gt;
      }&lt;br /&gt;
      textNode.parentNode.replaceChild( frag, textNode );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    return count;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function showDismissBar( query ) {&lt;br /&gt;
    var existing = document.getElementById( &#039;gr-hl-bar&#039; );&lt;br /&gt;
    if ( existing ) existing.remove();&lt;br /&gt;
&lt;br /&gt;
    var count = document.querySelectorAll( &#039;.gr-search-hl&#039; ).length;&lt;br /&gt;
    if ( !count ) return;&lt;br /&gt;
&lt;br /&gt;
    var isMob = window.innerWidth &amp;lt; 768 || !!document.getElementById( &#039;mw-mf-viewport&#039; );&lt;br /&gt;
    var bar = document.createElement( &#039;div&#039; );&lt;br /&gt;
    bar.id = &#039;gr-hl-bar&#039;;&lt;br /&gt;
&lt;br /&gt;
    if ( isMob ) {&lt;br /&gt;
      bar.style.cssText = [&lt;br /&gt;
        &#039;position:fixed&#039;, &#039;bottom:0&#039;, &#039;left:0&#039;, &#039;right:0&#039;,&lt;br /&gt;
        &#039;z-index:10200&#039;, &#039;background:#b5451b&#039;, &#039;color:#fff&#039;,&lt;br /&gt;
        &#039;padding:0&#039;, &#039;display:flex&#039;, &#039;align-items:stretch&#039;,&lt;br /&gt;
        &#039;font-family:system-ui,sans-serif&#039;,&lt;br /&gt;
        &#039;box-shadow:0 -2px 12px rgba(0,0,0,0.25)&#039;, &#039;height:56px&#039;&lt;br /&gt;
      ].join(&#039;;&#039;);&lt;br /&gt;
&lt;br /&gt;
      var mbs = &#039;flex:1;display:flex;flex-direction:column;align-items:center;&#039; +&lt;br /&gt;
        &#039;justify-content:center;background:none;border:none;color:#fff;cursor:pointer;&#039; +&lt;br /&gt;
        &#039;padding:6px 4px;font-family:system-ui,sans-serif;font-size:11px;font-weight:500;&#039; +&lt;br /&gt;
        &#039;gap:3px;-webkit-tap-highlight-color:rgba(0,0,0,0.12);&#039;;&lt;br /&gt;
&lt;br /&gt;
      bar.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-prev&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;polyline points=&amp;quot;15 18 9 12 15 6&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;Prev&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-next&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;polyline points=&amp;quot;9 18 15 12 9 6&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;Next&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-results&amp;quot; style=&amp;quot;&#039; + mbs + &#039;flex:1.6;border-left:1px solid rgba(255,255,255,0.2);border-right:1px solid rgba(255,255,255,0.2);&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;circle cx=&amp;quot;11&amp;quot; cy=&amp;quot;11&amp;quot; r=&amp;quot;7&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;16.5&amp;quot; y1=&amp;quot;16.5&amp;quot; x2=&amp;quot;22&amp;quot; y2=&amp;quot;22&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;&#039; + count + &#039; match&#039; + (count===1?&#039;&#039;:&#039;es&#039;) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-dismiss&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;line x1=&amp;quot;18&amp;quot; y1=&amp;quot;6&amp;quot; x2=&amp;quot;6&amp;quot; y2=&amp;quot;18&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;6&amp;quot; y1=&amp;quot;6&amp;quot; x2=&amp;quot;18&amp;quot; y2=&amp;quot;18&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;Close&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
    } else {&lt;br /&gt;
      bar.style.cssText = [&lt;br /&gt;
        &#039;position:fixed&#039;, &#039;bottom:0&#039;, &#039;left:0&#039;, &#039;right:0&#039;, &#039;z-index:10200&#039;,&lt;br /&gt;
        &#039;background:#b5451b&#039;, &#039;color:#fff&#039;, &#039;padding:10px 16px&#039;,&lt;br /&gt;
        &#039;display:flex&#039;, &#039;align-items:center&#039;, &#039;justify-content:space-between&#039;,&lt;br /&gt;
        &#039;font-family:system-ui,sans-serif&#039;, &#039;font-size:14px&#039;,&lt;br /&gt;
        &#039;box-shadow:0 -2px 8px rgba(0,0,0,0.2)&#039;&lt;br /&gt;
      ].join(&#039;;&#039;);&lt;br /&gt;
&lt;br /&gt;
      var nav = document.createElement( &#039;div&#039; );&lt;br /&gt;
      nav.style.cssText = &#039;display:flex;align-items:center;gap:12px;&#039;;&lt;br /&gt;
      nav.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;🔍 &amp;lt;strong&amp;gt;&#039; + escHtml(query) + &#039;&amp;lt;/strong&amp;gt; — &#039; + count + &#039; match&#039; + (count===1?&#039;&#039;:&#039;es&#039;) + &#039;&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-prev&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;↑ Prev&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-next&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;↓ Next&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-results&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;← Results&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
      bar.appendChild( nav );&lt;br /&gt;
&lt;br /&gt;
      var db = document.createElement( &#039;button&#039; );&lt;br /&gt;
      db.id = &#039;gr-hl-dismiss&#039;; db.textContent = &#039;✕ Close&#039;;&lt;br /&gt;
      db.style.cssText = &#039;background:rgba(255,255,255,0.15);border:none;color:#fff;padding:4px 12px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&#039;;&lt;br /&gt;
      bar.appendChild( db );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    document.body.appendChild( bar );&lt;br /&gt;
&lt;br /&gt;
    var hlEls = Array.from( document.querySelectorAll( &#039;.gr-search-hl&#039; ) );&lt;br /&gt;
    var current = 0;&lt;br /&gt;
&lt;br /&gt;
    function goTo( idx ) {&lt;br /&gt;
      hlEls.forEach( function(el) { el.classList.remove( &#039;gr-search-hl-current&#039; ); } );&lt;br /&gt;
      current = ( ( idx % hlEls.length ) + hlEls.length ) % hlEls.length;&lt;br /&gt;
      hlEls[ current ].classList.add( &#039;gr-search-hl-current&#039; );&lt;br /&gt;
      hlEls[ current ].scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function dismiss() { clearHighlights(); bar.remove(); }&lt;br /&gt;
&lt;br /&gt;
    var nb = document.getElementById( &#039;gr-hl-next&#039; );&lt;br /&gt;
    var pb = document.getElementById( &#039;gr-hl-prev&#039; );&lt;br /&gt;
    var rb = document.getElementById( &#039;gr-hl-results&#039; );&lt;br /&gt;
    var db2 = document.getElementById( &#039;gr-hl-dismiss&#039; );&lt;br /&gt;
    if ( nb ) nb.onclick = function() { goTo( current + 1 ); };&lt;br /&gt;
    if ( pb ) pb.onclick = function() { goTo( current - 1 ); };&lt;br /&gt;
    if ( db2 ) db2.onclick = dismiss;&lt;br /&gt;
    if ( rb ) rb.onclick = function() {&lt;br /&gt;
      bar.remove(); clearHighlights();&lt;br /&gt;
      if ( window.showSearchDialog ) window.showSearchDialog( query );&lt;br /&gt;
    };&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function clearHighlights() {&lt;br /&gt;
    document.querySelectorAll( &#039;.gr-search-hl&#039; ).forEach( function( span ) {&lt;br /&gt;
      var p = span.parentNode; if ( !p ) return;&lt;br /&gt;
      while ( span.firstChild ) p.insertBefore( span.firstChild, span );&lt;br /&gt;
      p.removeChild( span );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function escHtml( s ) {&lt;br /&gt;
    return String(s).replace(/&amp;amp;/g,&#039;&amp;amp;amp;&#039;).replace(/&amp;lt;/g,&#039;&amp;amp;lt;&#039;).replace(/&amp;gt;/g,&#039;&amp;amp;gt;&#039;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function injectHighlightCSS() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-hl-css&#039; ) ) return;&lt;br /&gt;
    var s = document.createElement( &#039;style&#039; );&lt;br /&gt;
    s.id = &#039;gr-hl-css&#039;;&lt;br /&gt;
    s.textContent = [&lt;br /&gt;
      &#039;.gr-search-hl{background:#fff176;color:#1a1a1a;border-radius:2px;padding:0 1px;box-shadow:0 0 0 1px rgba(181,69,27,0.25);}&#039;,&lt;br /&gt;
      &#039;.gr-search-hl-current{background:#ffb300!important;box-shadow:0 0 0 2px #b5451b!important;}&#039;,&lt;br /&gt;
      &#039;@keyframes gr-hl-pulse{0%{background:#ffb300;}50%{background:#fff176;}100%{background:#fff176;}}&#039;,&lt;br /&gt;
      &#039;.gr-search-hl-pulse{animation:gr-hl-pulse 1.2s ease 2;}&#039;,&lt;br /&gt;
    ].join(&#039;&#039;);&lt;br /&gt;
    document.head.appendChild( s );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  injectHighlightCSS();&lt;br /&gt;
&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) {&lt;br /&gt;
    document.addEventListener( &#039;DOMContentLoaded&#039;, applyHighlight );&lt;br /&gt;
  } else {&lt;br /&gt;
    applyHighlight();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ( window.mw ) {&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function() {&lt;br /&gt;
      setTimeout( applyHighlight, 100 );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  window.grStoreSearchHL = storeQueryForLink;&lt;br /&gt;
&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
/* ═══════════════════════════════════════════════════════════════&lt;br /&gt;
   Mobile addon — only runs on Minerva (mobile) skin&lt;br /&gt;
   ═══════════════════════════════════════════════════════════════ */&lt;br /&gt;
( function () {&lt;br /&gt;
  if ( !document.body.classList.contains( &#039;skin-minerva&#039; ) ) return;&lt;br /&gt;
  function injectCSS() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-mob-css&#039; ) ) return;&lt;br /&gt;
    var s = document.createElement( &#039;style&#039; );&lt;br /&gt;
    s.id = &#039;gr-mob-css&#039;;&lt;br /&gt;
    s.textContent =&lt;br /&gt;
      &#039;body,#mw-mf-viewport,#mw-mf-page-center{padding-top:0!important;margin-top:0!important;}&#039; +&lt;br /&gt;
      &#039;html,body,#mw-mf-viewport,#mw-mf-page-center{overflow-x:hidden!important;max-width:100vw!important;}&#039; +&lt;br /&gt;
      &#039;header.header-container{background:#b5451b!important;position:sticky!important;top:0!important;z-index:300!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header{background:#b5451b!important;min-height:54px!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header .search-toggle,.minerva-header .minerva-user-notifications{display:none!important;}&#039; +&lt;br /&gt;
      &#039;.branding-box a{display:flex!important;align-items:center!important;text-decoration:none!important;max-width:calc(100vw - 80px)!important;}&#039; +&lt;br /&gt;
      &#039;.branding-box a::before{content:&amp;quot;&amp;quot;;display:block;width:30px;height:30px;flex-shrink:0;background:url(&amp;quot;/favicon.png&amp;quot;) center/contain no-repeat;margin-right:8px;}&#039; +&lt;br /&gt;
      &#039;.branding-box a span{color:#fff!important;font-size:16px!important;font-weight:700!important;font-family:system-ui,sans-serif!important;line-height:1.2!important;flex:1 1 auto!important;min-width:0!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header svg path,.minerva-header svg rect,.minerva-header svg circle{fill:#fff!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header label{color:#fff!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-tabs,.mw-portlet-associated-pages,.page-actions-menu,#page-secondary-actions,.last-modified-bar,.minerva-anon-talk-link{display:none!important;}&#039; +&lt;br /&gt;
      &#039;#gr-mob-menu-items{display:block!important;}&#039; +&lt;br /&gt;
      &#039;.mw-footer.minerva-footer,.footer-places,.footer-info,.minerva-footer-logo,#footer-places-about,#footer-places-disclaimers,#footer-places-privacy{display:none!important;}&#039; +&lt;br /&gt;
      &#039;#gr-static-bar{position:sticky!important;top:54px!important;z-index:200!important;}&#039; +&lt;br /&gt;
      &#039;.mf-section-0,.mf-section-1,.mf-section-2,.mf-section-3,.mf-section-4,.mf-section-5,.mf-section-6,.mf-section-7,.mf-section-8,.mf-section-9,.mf-section-10{display:block!important;visibility:visible!important;}&#039; +&lt;br /&gt;
      &#039;.collapsible-block{display:block!important;}&#039; +&lt;br /&gt;
      &#039;.section-heading .indicator,.collapsible-heading .indicator{display:none!important;}&#039; +&lt;br /&gt;
      &#039;.section-heading,.collapsible-heading{pointer-events:none!important;}&#039; +&lt;br /&gt;
      &#039;.gr-home-grid{flex-direction:column!important;flex-wrap:nowrap!important;gap:12px!important;width:100%!important;}&#039; +&lt;br /&gt;
      &#039;.gr-home-card{width:100%!important;max-width:100%!important;min-width:unset!important;box-sizing:border-box!important;flex:none!important;}&#039; +&lt;br /&gt;
      &#039;.gr-home-toggle{flex-wrap:wrap!important;}&#039; +&lt;br /&gt;
      &#039;.mw-parser-output{font-size:18px!important;line-height:1.8!important;}&#039; +&lt;br /&gt;
      &#039;.mw-parser-output h2,.mw-parser-output h3{width:100%!important;}&#039; +&lt;br /&gt;
      &#039;.bhashyam-block{margin-left:8px!important;}&#039; +&lt;br /&gt;
      &#039;#footer,.mw-footer,.catlinks,#catlinks{display:none!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-panel{position:fixed!important;top:0!important;left:0!important;bottom:0!important;width:82vw!important;max-width:340px!important;background:#fff!important;z-index:10400!important;box-shadow:4px 0 28px rgba(0,0,0,0.22)!important;overflow-y:auto!important;padding:0 0 40px!important;transform:translateX(-110%)!important;transition:transform 0.26s cubic-bezier(0.4,0,0.2,1)!important;display:block!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-panel.open{transform:translateX(0)!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-backdrop{display:none!important;position:fixed!important;inset:0!important;background:rgba(0,0,0,0.4)!important;z-index:10399!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-backdrop.open{display:block!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-header{position:sticky!important;top:0!important;background:#fff!important;display:flex!important;align-items:center!important;justify-content:space-between!important;padding:16px 16px 12px!important;border-bottom:1px solid #f0ebe6!important;z-index:1!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-title{font-size:13px!important;font-weight:700!important;text-transform:uppercase!important;letter-spacing:0.08em!important;color:#b5451b!important;font-family:system-ui,sans-serif!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-close{background:none!important;border:none!important;font-size:22px!important;color:#999!important;cursor:pointer!important;padding:4px 8px!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-body{padding:12px 16px!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-body a{display:block!important;font-size:16px!important;line-height:1.6!important;color:#2c1810!important;text-decoration:none!important;padding:8px 0!important;border-bottom:1px solid #f5f0ed!important;}&#039;;&lt;br /&gt;
    document.head.appendChild( s );&lt;br /&gt;
  }&lt;br /&gt;
  function expandSections() {&lt;br /&gt;
    document.querySelectorAll( &#039;[class*=&amp;quot;mf-section-&amp;quot;], .collapsible-block&#039; ).forEach( function ( el ) { el.removeAttribute( &#039;hidden&#039; ); el.style.setProperty( &#039;display&#039;, &#039;block&#039;, &#039;important&#039; ); el.style.setProperty( &#039;visibility&#039;, &#039;visible&#039;, &#039;important&#039; ); el.removeAttribute( &#039;aria-hidden&#039; ); } );&lt;br /&gt;
    document.querySelectorAll( &#039;.section-heading, .collapsible-heading&#039; ).forEach( function ( el ) { el.setAttribute( &#039;aria-expanded&#039;, &#039;true&#039; ); el.style.setProperty( &#039;pointer-events&#039;, &#039;none&#039;, &#039;important&#039; ); } );&lt;br /&gt;
  }&lt;br /&gt;
  function watchSections() {&lt;br /&gt;
    var t = null;&lt;br /&gt;
    var obs = new MutationObserver( function ( ms ) { if ( ms.some( function(m){ return m.attributeName === &#039;hidden&#039;; } ) ) { clearTimeout(t); t = setTimeout( expandSections, 30 ); } } );&lt;br /&gt;
    obs.observe( document.querySelector( &#039;#mw-content-text&#039; ) || document.body, { subtree:true, attributes:true, attributeFilter:[&#039;hidden&#039;,&#039;aria-hidden&#039;] } );&lt;br /&gt;
  }&lt;br /&gt;
  function watchBodyPadding() {&lt;br /&gt;
    new MutationObserver( function () { if ( document.body.style.paddingTop &amp;amp;&amp;amp; document.body.style.paddingTop !== &#039;0px&#039; ) document.body.style.paddingTop = &#039;&#039;; } ).observe( document.body, { attributes:true, attributeFilter:[&#039;style&#039;] } );&lt;br /&gt;
  }&lt;br /&gt;
  function injectMenuLinks() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-mob-menu-items&#039; ) ) return;&lt;br /&gt;
    var navDrawer = document.querySelector( &#039;.navigation-drawer&#039; );&lt;br /&gt;
    if ( !navDrawer ) return;&lt;br /&gt;
    var wrap = document.createElement( &#039;div&#039; ); wrap.id = &#039;gr-mob-menu-items&#039;; wrap.style.cssText = &#039;width:100%;background:#fff;margin-top:8px;&#039;;&lt;br /&gt;
    var itemStyle = &#039;display:flex;align-items:center;gap:14px;padding:15px 20px;font-size:16px;color:#2c1810;text-decoration:none;font-family:system-ui,sans-serif;border-bottom:1px solid #f0ebe6;background:#fff;&#039;;&lt;br /&gt;
    function makeItem( href, label ) { var a = document.createElement( &#039;a&#039; ); a.href = href; a.style.cssText = itemStyle; a.innerHTML = &#039;&amp;lt;span&amp;gt;&#039; + label + &#039;&amp;lt;/span&amp;gt;&#039;; return a; }&lt;br /&gt;
    wrap.appendChild( makeItem( &#039;/Main_Page&#039;, &#039;Home&#039; ) );&lt;br /&gt;
    wrap.appendChild( makeItem( &#039;/My_wiki:Help&#039;, &#039;Help&#039; ) );&lt;br /&gt;
    wrap.appendChild( makeItem( &#039;/My_wiki:About&#039;, &#039;About&#039; ) );&lt;br /&gt;
    var userName = window.mw ? mw.config.get( &#039;wgUserName&#039; ) : null;&lt;br /&gt;
    if ( userName ) { var la = document.querySelector( &#039;a[href*=&amp;quot;action=logout&amp;quot;]&#039; ); wrap.appendChild( makeItem( la ? la.href : &#039;/index.php?title=Special:UserLogout&#039;, &#039;Log out&#039; ) ); }&lt;br /&gt;
    else wrap.appendChild( makeItem( &#039;/index.php?title=Special:UserLogin&#039;, &#039;Log in&#039; ) );&lt;br /&gt;
    var pageLeft = document.getElementById( &#039;mw-mf-page-left&#039; );&lt;br /&gt;
    if ( pageLeft ) { while ( pageLeft.firstChild ) pageLeft.removeChild( pageLeft.firstChild ); pageLeft.style.removeProperty( &#039;display&#039; ); pageLeft.appendChild( wrap ); }&lt;br /&gt;
    else navDrawer.appendChild( wrap );&lt;br /&gt;
  }&lt;br /&gt;
  var _tocDone = false;&lt;br /&gt;
  function initToc() {&lt;br /&gt;
    if ( _tocDone ) return;&lt;br /&gt;
    var tocList = document.querySelector( &#039;.vector-toc-contents, .vector-toc .vector-toc-list&#039; );&lt;br /&gt;
    if ( !tocList || !tocList.querySelector( &#039;li&#039; ) ) return;&lt;br /&gt;
    _tocDone = true;&lt;br /&gt;
    var bd = document.createElement( &#039;div&#039; ); bd.className = &#039;gr-mob-toc-backdrop&#039;; document.body.appendChild( bd );&lt;br /&gt;
    var panel = document.createElement( &#039;div&#039; ); panel.className = &#039;gr-mob-toc-panel&#039;;&lt;br /&gt;
    var hdr = document.createElement( &#039;div&#039; ); hdr.className = &#039;gr-mob-toc-header&#039;;&lt;br /&gt;
    var ttl = document.createElement( &#039;div&#039; ); ttl.className = &#039;gr-mob-toc-title&#039;; ttl.textContent = &#039;विषयसूची&#039;;&lt;br /&gt;
    var cls = document.createElement( &#039;button&#039; ); cls.className = &#039;gr-mob-toc-close&#039;; cls.textContent = &#039;✕&#039;;&lt;br /&gt;
    hdr.appendChild( ttl ); hdr.appendChild( cls ); panel.appendChild( hdr );&lt;br /&gt;
    var body = document.createElement( &#039;div&#039; ); body.className = &#039;gr-mob-toc-body&#039;; body.appendChild( tocList.cloneNode( true ) ); panel.appendChild( body ); document.body.appendChild( panel );&lt;br /&gt;
    var btn = document.createElement( &#039;button&#039; ); btn.id = &#039;gr-mob-toc-btn&#039;; btn.innerHTML = &#039;☰ &amp;amp;nbsp;Contents&#039;;&lt;br /&gt;
    btn.style.cssText = &#039;position:fixed;bottom:148px;left:16px;z-index:9100;background:#fff;border:1.5px solid #b5451b;border-radius:24px;padding:10px 16px;font-size:15px;font-family:system-ui,sans-serif;color:#b5451b;font-weight:600;box-shadow:0 3px 14px rgba(0,0,0,0.15);cursor:pointer;&#039;;&lt;br /&gt;
    document.body.appendChild( btn );&lt;br /&gt;
    function open()  { panel.classList.add(&#039;open&#039;); bd.classList.add(&#039;open&#039;); document.body.style.overflow=&#039;hidden&#039;; }&lt;br /&gt;
    function close() { panel.classList.remove(&#039;open&#039;); bd.classList.remove(&#039;open&#039;); document.body.style.overflow=&#039;&#039;; }&lt;br /&gt;
    btn.onclick = open; cls.onclick = close; bd.onclick = close;&lt;br /&gt;
    body.querySelectorAll(&#039;a&#039;).forEach(function(a){ a.onclick = close; });&lt;br /&gt;
  }&lt;br /&gt;
  function injectMoolaUllekhaLinks() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-mob-doc-nav&#039; ) ) return;&lt;br /&gt;
    var pageName = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039; ) ) || &#039;&#039;;&lt;br /&gt;
    if ( pageName === &#039;Main_Page&#039; || !pageName ) return;&lt;br /&gt;
    function wikiUrl( slug ) { if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( slug ); return ( ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039; ).replace( &#039;$1&#039;, encodeURIComponent( slug ).replace( /%2F/g, &#039;/&#039; ) ); }&lt;br /&gt;
    var teekaPage = document.querySelector( &#039;.gr-teeka-page&#039; );&lt;br /&gt;
    var primarySlug = teekaPage ? ( teekaPage.getAttribute( &#039;data-primary&#039; ) || pageName.split(&#039;/&#039;)[0] ) : pageName.split(&#039;/&#039;)[0];&lt;br /&gt;
    var docTitleEl = document.querySelector( &#039;.gr-doc-title&#039; );&lt;br /&gt;
    var hasMoolaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-moola&#039; ) === &#039;1&#039;;&lt;br /&gt;
    var hasUllekhaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-ullekha&#039; ) === &#039;1&#039;;&lt;br /&gt;
    var showMoolam = !!teekaPage || hasMoolaPage, showUllekha = hasUllekhaPage || !!teekaPage;&lt;br /&gt;
    if ( !showMoolam &amp;amp;&amp;amp; !showUllekha ) return;&lt;br /&gt;
    var nav = document.createElement( &#039;div&#039; ); nav.id = &#039;gr-mob-doc-nav&#039;;&lt;br /&gt;
    nav.style.cssText = &#039;display:flex;gap:10px;padding:10px 16px 8px;background:#fdf8f5;border-bottom:1px solid #f0e0d6;font-family:system-ui,sans-serif;&#039;;&lt;br /&gt;
    function makeLink( href, label ) { var a = document.createElement( &#039;a&#039; ); a.href = href; a.textContent = label; a.style.cssText = &#039;display:inline-flex;align-items:center;padding:5px 16px;border-radius:20px;background:#fff;border:1.5px solid #e8cfc4;color:#b5451b;font-size:14px;font-weight:600;text-decoration:none;&#039;; return a; }&lt;br /&gt;
    if ( teekaPage ) nav.appendChild( makeLink( wikiUrl( primarySlug ), &#039;मूल&#039; ) );&lt;br /&gt;
    else if ( hasMoolaPage ) nav.appendChild( makeLink( wikiUrl( primarySlug + &#039;/Moola&#039; ), &#039;मूलम्&#039; ) );&lt;br /&gt;
    if ( showUllekha ) nav.appendChild( makeLink( wikiUrl( primarySlug + &#039;/Ullekha&#039; ), &#039;उल्लेख&#039; ) );&lt;br /&gt;
    var h1 = document.getElementById( &#039;firstHeading&#039; ) || document.querySelector( &#039;.page-heading, h1.firstHeading, .mw-first-heading&#039; );&lt;br /&gt;
    if ( h1 &amp;amp;&amp;amp; h1.parentNode ) h1.parentNode.insertBefore( nav, h1.nextSibling );&lt;br /&gt;
    else { var ct = document.getElementById( &#039;mw-content-text&#039; ); if ( ct ) ct.insertBefore( nav, ct.firstChild ); }&lt;br /&gt;
  }&lt;br /&gt;
  injectCSS(); watchBodyPadding();&lt;br /&gt;
  function boot() { expandSections(); watchSections(); injectMenuLinks(); injectMoolaUllekhaLinks(); [100,400,900,1800].forEach(function(ms){ setTimeout(expandSections,ms); }); setTimeout(initToc,700); }&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) document.addEventListener( &#039;DOMContentLoaded&#039;, boot );&lt;br /&gt;
  else boot();&lt;br /&gt;
  if ( window.mw ) mw.hook( &#039;wikipage.content&#039; ).add(function(){ setTimeout(function(){ expandSections(); injectMenuLinks(); injectMoolaUllekhaLinks(); initToc(); },300); });&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
  mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
    setTimeout( function () {&lt;br /&gt;
      var blocks = document.querySelectorAll( &#039;.collapsible-block, .toggle-list&#039; );&lt;br /&gt;
      Array.prototype.forEach.call( blocks, function ( el ) { if ( !el.parentNode ) { try { el.remove(); } catch(e) {} } } );&lt;br /&gt;
    }, 0 );&lt;br /&gt;
  } );&lt;br /&gt;
  if ( mw.config.get( &#039;wgPageName&#039; ) !== &#039;Main_Page&#039; ) return;&lt;br /&gt;
  mw.loader.using( &#039;mediawiki.util&#039; ).done( function () {&lt;br /&gt;
    $( function () { applyHomeToggleOffset(); window.addEventListener( &#039;resize&#039;, applyHomeToggleOffset, { passive: true } ); setTimeout( applyHomeToggleOffset, 300 ); setTimeout( applyHomeToggleOffset, 800 ); } );&lt;br /&gt;
  } );&lt;br /&gt;
  function applyHomeToggleOffset() {&lt;br /&gt;
    var bar = document.getElementById( &#039;gr-static-bar&#039; ); if ( !bar ) return;&lt;br /&gt;
    var barBottom = Math.round( bar.getBoundingClientRect().bottom );&lt;br /&gt;
    [ document.getElementById(&#039;gr-home&#039;), document.getElementById(&#039;gr-home-toggle&#039;), document.querySelector(&#039;#mw-content-text .mw-parser-output &amp;gt; .gr-home, #mw-content-text .mw-parser-output &amp;gt; *:first-child&#039;) ].forEach( function(el){ if(el) el.style.scrollMarginTop=(barBottom+4)+&#039;px&#039;; } );&lt;br /&gt;
    var isMob = window.innerWidth &amp;lt; 768 || !!document.getElementById( &#039;mw-mf-viewport&#039; );&lt;br /&gt;
    if ( isMob ) { var toggleEl = document.getElementById(&#039;gr-home-toggle&#039;); if ( toggleEl ) { var tr = toggleEl.getBoundingClientRect(); if ( tr.top &amp;lt; barBottom ) { var cp = parseInt(window.getComputedStyle(document.body).paddingTop,10)||0; document.body.style.paddingTop=(cp+(barBottom-tr.top)+4)+&#039;px&#039;; } } }&lt;br /&gt;
  }&lt;br /&gt;
  $( function () {&lt;br /&gt;
    var $toggle=$(&#039;#gr-home-toggle&#039;),$viewG=$(&#039;#gr-view-grantha&#039;),$viewA=$(&#039;#gr-view-author&#039;),$btnG=$(&#039;#gr-toggle-grantha&#039;),$btnA=$(&#039;#gr-toggle-author&#039;);&lt;br /&gt;
    if(!$toggle.length||!$viewG.length||!$viewA.length)return; if($toggle.data(&#039;gr-wired&#039;))return; $toggle.data(&#039;gr-wired&#039;,true);&lt;br /&gt;
    function showView(which){ if(which===&#039;grantha&#039;){$viewG.show();$viewA.hide();$btnG.addClass(&#039;gr-toggle-active&#039;);$btnA.removeClass(&#039;gr-toggle-active&#039;);}else{$viewA.show();$viewG.hide();$btnA.addClass(&#039;gr-toggle-active&#039;);$btnG.removeClass(&#039;gr-toggle-active&#039;);} try{localStorage.setItem(&#039;grantha_home_tab&#039;,which);}catch(e){} }&lt;br /&gt;
    $btnG.on(&#039;click keydown&#039;,function(e){if(e.type===&#039;keydown&#039;&amp;amp;&amp;amp;e.key!==&#039;Enter&#039;&amp;amp;&amp;amp;e.key!==&#039; &#039;)return;showView(&#039;grantha&#039;);});&lt;br /&gt;
    $btnA.on(&#039;click keydown&#039;,function(e){if(e.type===&#039;keydown&#039;&amp;amp;&amp;amp;e.key!==&#039;Enter&#039;&amp;amp;&amp;amp;e.key!==&#039; &#039;)return;showView(&#039;author&#039;);});&lt;br /&gt;
    try{var saved=localStorage.getItem(&#039;grantha_home_tab&#039;);if(saved===&#039;author&#039;)showView(&#039;author&#039;);else showView(&#039;grantha&#039;);}catch(e){showView(&#039;grantha&#039;);}&lt;br /&gt;
  } );&lt;br /&gt;
}() );&lt;br /&gt;
// ── Replace MediaWiki user links with a single username dropdown (Profile + Logout) ──&lt;br /&gt;
( function () {&lt;br /&gt;
  function wikiHref( title ) {&lt;br /&gt;
    if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( title );&lt;br /&gt;
    var ap = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
    return ap.replace( &#039;$1&#039;, title );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function buildLogoutForm( token ) {&lt;br /&gt;
    // POST logout = no confirmation interstitial. returnto sends them home.&lt;br /&gt;
    var form = document.createElement( &#039;form&#039; );&lt;br /&gt;
    form.method = &#039;post&#039;;&lt;br /&gt;
    form.action = ( window.mw ? mw.util.wikiScript() : &#039;/index.php&#039; ) + &#039;?title=Special:UserLogout&#039;;&lt;br /&gt;
    form.style.display = &#039;none&#039;;&lt;br /&gt;
    form.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;wpEditToken&amp;quot; value=&amp;quot;&#039; + token.replace(/&amp;quot;/g,&#039;&amp;amp;quot;&#039;) + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;title&amp;quot; value=&amp;quot;Special:UserLogout&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;returnto&amp;quot; value=&amp;quot;Main Page&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
    document.body.appendChild( form );&lt;br /&gt;
    return form;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function injectUserDropdown() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-user-dropdown&#039; ) ) return;&lt;br /&gt;
&lt;br /&gt;
    var userName = window.mw ? mw.config.get( &#039;wgUserName&#039; ) : null;&lt;br /&gt;
    var isAnon = !userName || ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgUserId&#039; ) === null );&lt;br /&gt;
&lt;br /&gt;
    var container = document.querySelector( &#039;.vector-user-links-main&#039; )&lt;br /&gt;
                 || document.querySelector( &#039;.vector-user-links&#039; );&lt;br /&gt;
    if ( !container ) return;&lt;br /&gt;
&lt;br /&gt;
    // Logged-out: show a single Login/Signup link, nothing else&lt;br /&gt;
    if ( isAnon ) {&lt;br /&gt;
        if ( document.getElementById( &#039;gr-login-link&#039; ) ) return;&lt;br /&gt;
        var loginA = document.createElement( &#039;a&#039; );&lt;br /&gt;
        loginA.id = &#039;gr-login-link&#039;;&lt;br /&gt;
        loginA.href = wikiHref( &#039;Special:UserLogin&#039; );&lt;br /&gt;
        loginA.textContent = &#039;Login/Signup&#039;;&lt;br /&gt;
        loginA.style.cssText = &#039;color:#fff;font-size:0.9em;font-weight:500;&#039; +&lt;br /&gt;
            &#039;text-decoration:none;padding:6px 12px;border-radius:6px;&#039; +&lt;br /&gt;
            &#039;background:rgba(255,255,255,0.12);white-space:nowrap;&#039;;&lt;br /&gt;
        loginA.addEventListener( &#039;mouseover&#039;, function(){ this.style.background=&#039;rgba(255,255,255,0.2)&#039;; } );&lt;br /&gt;
        loginA.addEventListener( &#039;mouseout&#039;,  function(){ this.style.background=&#039;rgba(255,255,255,0.12)&#039;; } );&lt;br /&gt;
        container.appendChild( loginA );&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Logout token (csrf token works for logout in modern MW)&lt;br /&gt;
    var token = ( window.mw &amp;amp;&amp;amp; mw.user &amp;amp;&amp;amp; mw.user.tokens )&lt;br /&gt;
      ? mw.user.tokens.get( &#039;csrfToken&#039; ) : &#039;+\\&#039;;&lt;br /&gt;
&lt;br /&gt;
    var wrap = document.createElement( &#039;div&#039; );&lt;br /&gt;
    wrap.id = &#039;gr-user-dropdown&#039;;&lt;br /&gt;
    wrap.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;button id=&amp;quot;gr-user-trigger&amp;quot; type=&amp;quot;button&amp;quot; aria-haspopup=&amp;quot;true&amp;quot; aria-expanded=&amp;quot;false&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;&#039; + (userName.replace(/&amp;lt;/g,&#039;&amp;amp;lt;&#039;)) + &#039;&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span class=&amp;quot;gr-caret&amp;quot;&amp;gt;▾&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;div id=&amp;quot;gr-user-menu&amp;quot; role=&amp;quot;menu&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;&#039; + wikiHref( &#039;Special:Profile&#039; ) + &#039;&amp;quot; role=&amp;quot;menuitem&amp;quot;&amp;gt;Profile&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;#&amp;quot; id=&amp;quot;gr-logout-link&amp;quot; role=&amp;quot;menuitem&amp;quot;&amp;gt;Log out&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
    container.appendChild( wrap );&lt;br /&gt;
&lt;br /&gt;
    var trigger = document.getElementById( &#039;gr-user-trigger&#039; );&lt;br /&gt;
    var menu    = document.getElementById( &#039;gr-user-menu&#039; );&lt;br /&gt;
&lt;br /&gt;
    trigger.addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      e.stopPropagation();&lt;br /&gt;
      var open = menu.classList.toggle( &#039;gr-open&#039; );&lt;br /&gt;
      trigger.setAttribute( &#039;aria-expanded&#039;, open ? &#039;true&#039; : &#039;false&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    document.addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      if ( !wrap.contains( e.target ) ) {&lt;br /&gt;
        menu.classList.remove( &#039;gr-open&#039; );&lt;br /&gt;
        trigger.setAttribute( &#039;aria-expanded&#039;, &#039;false&#039; );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    document.getElementById( &#039;gr-logout-link&#039; ).addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      e.preventDefault();&lt;br /&gt;
      buildLogoutForm( token ).submit();&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) {&lt;br /&gt;
    document.addEventListener( &#039;DOMContentLoaded&#039;, injectUserDropdown );&lt;br /&gt;
  } else {&lt;br /&gt;
    injectUserDropdown();&lt;br /&gt;
  }&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Mobile.css&amp;diff=6202</id>
		<title>MediaWiki:Mobile.css</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Mobile.css&amp;diff=6202"/>
		<updated>2026-06-11T10:12:38Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ================================================================&lt;br /&gt;
   MediaWiki:Mobile.css&lt;br /&gt;
   Loaded only on Minerva (mobile skin).&lt;br /&gt;
   ================================================================ */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ── 1. AUTO-ZOOM PREVENTION ─────────────────────────────────────&lt;br /&gt;
   iOS and Android zoom the viewport when a focused input has&lt;br /&gt;
   font-size &amp;lt; 16px. Every input on the site must be &amp;gt;= 16px.&lt;br /&gt;
   ──────────────────────────────────────────────────────────────── */&lt;br /&gt;
&lt;br /&gt;
/* Reader toolbar search input */&lt;br /&gt;
#gr-search-panel input {&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* New document dialog inputs */&lt;br /&gt;
#gr-newdoc-overlay input,&lt;br /&gt;
#gr-newdoc-overlay select,&lt;br /&gt;
#gr-newdoc-overlay textarea {&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Annotation composer inputs (gr_annotations gadget) */&lt;br /&gt;
.gra-composer-input,&lt;br /&gt;
.gra-fb-select,&lt;br /&gt;
#gra-nt-input,&lt;br /&gt;
#gra-bm-input,&lt;br /&gt;
#gra-fb-text,&lt;br /&gt;
#gra-fb-email {&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ── 2. LONG-PRESS CONTEXT MENU SUPPRESSION ──────────────────────&lt;br /&gt;
   -webkit-touch-callout: none  → stops iOS &amp;quot;Copy / Look Up / Share&amp;quot;&lt;br /&gt;
                                   popup on long press of buttons&lt;br /&gt;
   user-select: none            → prevents text selection on button labels&lt;br /&gt;
   touch-action: manipulation   → removes 300ms tap delay and prevents&lt;br /&gt;
                                   context menu on long press (iOS + Android)&lt;br /&gt;
   ──────────────────────────────────────────────────────────────── */&lt;br /&gt;
&lt;br /&gt;
/* Sanskrit keyboard keys */&lt;br /&gt;
.gr-kb-key,&lt;br /&gt;
.gr-kb-key-iast,&lt;br /&gt;
.gr-kb-action,&lt;br /&gt;
.gr-kb {&lt;br /&gt;
  -webkit-touch-callout: none;&lt;br /&gt;
  user-select: none;&lt;br /&gt;
  touch-action: manipulation;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Annotation FAB buttons and mobile action bar */&lt;br /&gt;
.gra-mob-btn,&lt;br /&gt;
.gra-fab-btn,&lt;br /&gt;
#gra-toggle,&lt;br /&gt;
#gra-mob-feedback,&lt;br /&gt;
#gra-mob-note,&lt;br /&gt;
#gra-mob-bookmark,&lt;br /&gt;
#gra-mob-dismiss {&lt;br /&gt;
  -webkit-touch-callout: none;&lt;br /&gt;
  user-select: none;&lt;br /&gt;
  touch-action: manipulation;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Reader toolbar buttons */&lt;br /&gt;
#gr-static-bar .gr-btn,&lt;br /&gt;
#gr-static-bar .gr-icon-btn {&lt;br /&gt;
  -webkit-touch-callout: none;&lt;br /&gt;
  user-select: none;&lt;br /&gt;
  touch-action: manipulation;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* siteNav FAB buttons */&lt;br /&gt;
#se-docnav-btn,&lt;br /&gt;
#se-scrolltop {&lt;br /&gt;
  -webkit-touch-callout: none;&lt;br /&gt;
  user-select: none;&lt;br /&gt;
  touch-action: manipulation;&lt;br /&gt;
}&lt;br /&gt;
Template style fixes for Mobile&lt;br /&gt;
.mw-parser-output h2, .mw-parser-output .mw-heading2 h2 {&lt;br /&gt;
  margin-top: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Spacing fixes for headings */&lt;br /&gt;
.skin-minerva .mw-parser-output h2,&lt;br /&gt;
.skin-minerva .mw-parser-output .mw-heading2 h2,&lt;br /&gt;
.skin-minerva .mw-parser-output .mw-heading2 {&lt;br /&gt;
    margin-top: 8px !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .mw-parser-output .mw-heading2 + p,&lt;br /&gt;
.skin-minerva .mw-parser-output h2 + p {&lt;br /&gt;
    margin-top: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Also reduce Minerva&#039;s paragraph bottom margin inside content */&lt;br /&gt;
.skin-minerva .mw-parser-output p {&lt;br /&gt;
    padding-bottom: 0.25em !important;&lt;br /&gt;
    margin: 0 0 0.25em 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .section-heading,&lt;br /&gt;
.skin-minerva .collapsible-heading {&lt;br /&gt;
    margin: 0 !important;&lt;br /&gt;
    padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.page-Special_UserLogin .navigation-drawer,&lt;br /&gt;
.page-Special_UserLogin .header-container .toggle-list__checkbox,&lt;br /&gt;
.page-Special_UserLogin #mw-mf-main-menu-button,&lt;br /&gt;
.page-Special_CreateAccount .navigation-drawer,&lt;br /&gt;
.page-Special_CreateAccount #mw-mf-main-menu-button&lt;br /&gt;
.mw-special-Userlogin .page-Special_UserLogin .header-container .minerva-icon {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;br /&gt;
.page-Special_UserLogin #mw-mf-main-menu-button,&lt;br /&gt;
.mw-special-Userlogin #mw-mf-main-menu-button {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Mobile.css&amp;diff=6201</id>
		<title>MediaWiki:Mobile.css</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Mobile.css&amp;diff=6201"/>
		<updated>2026-06-11T10:09:15Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ================================================================&lt;br /&gt;
   MediaWiki:Mobile.css&lt;br /&gt;
   Loaded only on Minerva (mobile skin).&lt;br /&gt;
   ================================================================ */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ── 1. AUTO-ZOOM PREVENTION ─────────────────────────────────────&lt;br /&gt;
   iOS and Android zoom the viewport when a focused input has&lt;br /&gt;
   font-size &amp;lt; 16px. Every input on the site must be &amp;gt;= 16px.&lt;br /&gt;
   ──────────────────────────────────────────────────────────────── */&lt;br /&gt;
&lt;br /&gt;
/* Reader toolbar search input */&lt;br /&gt;
#gr-search-panel input {&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* New document dialog inputs */&lt;br /&gt;
#gr-newdoc-overlay input,&lt;br /&gt;
#gr-newdoc-overlay select,&lt;br /&gt;
#gr-newdoc-overlay textarea {&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Annotation composer inputs (gr_annotations gadget) */&lt;br /&gt;
.gra-composer-input,&lt;br /&gt;
.gra-fb-select,&lt;br /&gt;
#gra-nt-input,&lt;br /&gt;
#gra-bm-input,&lt;br /&gt;
#gra-fb-text,&lt;br /&gt;
#gra-fb-email {&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ── 2. LONG-PRESS CONTEXT MENU SUPPRESSION ──────────────────────&lt;br /&gt;
   -webkit-touch-callout: none  → stops iOS &amp;quot;Copy / Look Up / Share&amp;quot;&lt;br /&gt;
                                   popup on long press of buttons&lt;br /&gt;
   user-select: none            → prevents text selection on button labels&lt;br /&gt;
   touch-action: manipulation   → removes 300ms tap delay and prevents&lt;br /&gt;
                                   context menu on long press (iOS + Android)&lt;br /&gt;
   ──────────────────────────────────────────────────────────────── */&lt;br /&gt;
&lt;br /&gt;
/* Sanskrit keyboard keys */&lt;br /&gt;
.gr-kb-key,&lt;br /&gt;
.gr-kb-key-iast,&lt;br /&gt;
.gr-kb-action,&lt;br /&gt;
.gr-kb {&lt;br /&gt;
  -webkit-touch-callout: none;&lt;br /&gt;
  user-select: none;&lt;br /&gt;
  touch-action: manipulation;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Annotation FAB buttons and mobile action bar */&lt;br /&gt;
.gra-mob-btn,&lt;br /&gt;
.gra-fab-btn,&lt;br /&gt;
#gra-toggle,&lt;br /&gt;
#gra-mob-feedback,&lt;br /&gt;
#gra-mob-note,&lt;br /&gt;
#gra-mob-bookmark,&lt;br /&gt;
#gra-mob-dismiss {&lt;br /&gt;
  -webkit-touch-callout: none;&lt;br /&gt;
  user-select: none;&lt;br /&gt;
  touch-action: manipulation;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Reader toolbar buttons */&lt;br /&gt;
#gr-static-bar .gr-btn,&lt;br /&gt;
#gr-static-bar .gr-icon-btn {&lt;br /&gt;
  -webkit-touch-callout: none;&lt;br /&gt;
  user-select: none;&lt;br /&gt;
  touch-action: manipulation;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* siteNav FAB buttons */&lt;br /&gt;
#se-docnav-btn,&lt;br /&gt;
#se-scrolltop {&lt;br /&gt;
  -webkit-touch-callout: none;&lt;br /&gt;
  user-select: none;&lt;br /&gt;
  touch-action: manipulation;&lt;br /&gt;
}&lt;br /&gt;
Template style fixes for Mobile&lt;br /&gt;
.mw-parser-output h2, .mw-parser-output .mw-heading2 h2 {&lt;br /&gt;
  margin-top: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Spacing fixes for headings */&lt;br /&gt;
.skin-minerva .mw-parser-output h2,&lt;br /&gt;
.skin-minerva .mw-parser-output .mw-heading2 h2,&lt;br /&gt;
.skin-minerva .mw-parser-output .mw-heading2 {&lt;br /&gt;
    margin-top: 8px !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .mw-parser-output .mw-heading2 + p,&lt;br /&gt;
.skin-minerva .mw-parser-output h2 + p {&lt;br /&gt;
    margin-top: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Also reduce Minerva&#039;s paragraph bottom margin inside content */&lt;br /&gt;
.skin-minerva .mw-parser-output p {&lt;br /&gt;
    padding-bottom: 0.25em !important;&lt;br /&gt;
    margin: 0 0 0.25em 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .section-heading,&lt;br /&gt;
.skin-minerva .collapsible-heading {&lt;br /&gt;
    margin: 0 !important;&lt;br /&gt;
    padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.page-Special_UserLogin .navigation-drawer,&lt;br /&gt;
.page-Special_UserLogin .header-container .toggle-list__checkbox,&lt;br /&gt;
.page-Special_UserLogin #mw-mf-main-menu-button,&lt;br /&gt;
.page-Special_CreateAccount .navigation-drawer,&lt;br /&gt;
.page-Special_CreateAccount #mw-mf-main-menu-button&lt;br /&gt;
.mw-special-Userlogin .page-Special_UserLogin .header-container .minerva-icon {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-special-Userlogin .navigation-drawer,&lt;br /&gt;
.page-Special_UserLogin .navigation-drawer {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Mobile.css&amp;diff=6200</id>
		<title>MediaWiki:Mobile.css</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Mobile.css&amp;diff=6200"/>
		<updated>2026-06-11T09:57:40Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ================================================================&lt;br /&gt;
   MediaWiki:Mobile.css&lt;br /&gt;
   Loaded only on Minerva (mobile skin).&lt;br /&gt;
   ================================================================ */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ── 1. AUTO-ZOOM PREVENTION ─────────────────────────────────────&lt;br /&gt;
   iOS and Android zoom the viewport when a focused input has&lt;br /&gt;
   font-size &amp;lt; 16px. Every input on the site must be &amp;gt;= 16px.&lt;br /&gt;
   ──────────────────────────────────────────────────────────────── */&lt;br /&gt;
&lt;br /&gt;
/* Reader toolbar search input */&lt;br /&gt;
#gr-search-panel input {&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* New document dialog inputs */&lt;br /&gt;
#gr-newdoc-overlay input,&lt;br /&gt;
#gr-newdoc-overlay select,&lt;br /&gt;
#gr-newdoc-overlay textarea {&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Annotation composer inputs (gr_annotations gadget) */&lt;br /&gt;
.gra-composer-input,&lt;br /&gt;
.gra-fb-select,&lt;br /&gt;
#gra-nt-input,&lt;br /&gt;
#gra-bm-input,&lt;br /&gt;
#gra-fb-text,&lt;br /&gt;
#gra-fb-email {&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ── 2. LONG-PRESS CONTEXT MENU SUPPRESSION ──────────────────────&lt;br /&gt;
   -webkit-touch-callout: none  → stops iOS &amp;quot;Copy / Look Up / Share&amp;quot;&lt;br /&gt;
                                   popup on long press of buttons&lt;br /&gt;
   user-select: none            → prevents text selection on button labels&lt;br /&gt;
   touch-action: manipulation   → removes 300ms tap delay and prevents&lt;br /&gt;
                                   context menu on long press (iOS + Android)&lt;br /&gt;
   ──────────────────────────────────────────────────────────────── */&lt;br /&gt;
&lt;br /&gt;
/* Sanskrit keyboard keys */&lt;br /&gt;
.gr-kb-key,&lt;br /&gt;
.gr-kb-key-iast,&lt;br /&gt;
.gr-kb-action,&lt;br /&gt;
.gr-kb {&lt;br /&gt;
  -webkit-touch-callout: none;&lt;br /&gt;
  user-select: none;&lt;br /&gt;
  touch-action: manipulation;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Annotation FAB buttons and mobile action bar */&lt;br /&gt;
.gra-mob-btn,&lt;br /&gt;
.gra-fab-btn,&lt;br /&gt;
#gra-toggle,&lt;br /&gt;
#gra-mob-feedback,&lt;br /&gt;
#gra-mob-note,&lt;br /&gt;
#gra-mob-bookmark,&lt;br /&gt;
#gra-mob-dismiss {&lt;br /&gt;
  -webkit-touch-callout: none;&lt;br /&gt;
  user-select: none;&lt;br /&gt;
  touch-action: manipulation;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Reader toolbar buttons */&lt;br /&gt;
#gr-static-bar .gr-btn,&lt;br /&gt;
#gr-static-bar .gr-icon-btn {&lt;br /&gt;
  -webkit-touch-callout: none;&lt;br /&gt;
  user-select: none;&lt;br /&gt;
  touch-action: manipulation;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* siteNav FAB buttons */&lt;br /&gt;
#se-docnav-btn,&lt;br /&gt;
#se-scrolltop {&lt;br /&gt;
  -webkit-touch-callout: none;&lt;br /&gt;
  user-select: none;&lt;br /&gt;
  touch-action: manipulation;&lt;br /&gt;
}&lt;br /&gt;
Template style fixes for Mobile&lt;br /&gt;
.mw-parser-output h2, .mw-parser-output .mw-heading2 h2 {&lt;br /&gt;
  margin-top: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Spacing fixes for headings */&lt;br /&gt;
.skin-minerva .mw-parser-output h2,&lt;br /&gt;
.skin-minerva .mw-parser-output .mw-heading2 h2,&lt;br /&gt;
.skin-minerva .mw-parser-output .mw-heading2 {&lt;br /&gt;
    margin-top: 8px !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .mw-parser-output .mw-heading2 + p,&lt;br /&gt;
.skin-minerva .mw-parser-output h2 + p {&lt;br /&gt;
    margin-top: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Also reduce Minerva&#039;s paragraph bottom margin inside content */&lt;br /&gt;
.skin-minerva .mw-parser-output p {&lt;br /&gt;
    padding-bottom: 0.25em !important;&lt;br /&gt;
    margin: 0 0 0.25em 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .section-heading,&lt;br /&gt;
.skin-minerva .collapsible-heading {&lt;br /&gt;
    margin: 0 !important;&lt;br /&gt;
    padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.page-Special_UserLogin .navigation-drawer,&lt;br /&gt;
.page-Special_UserLogin .header-container .toggle-list__checkbox,&lt;br /&gt;
.page-Special_UserLogin #mw-mf-main-menu-button,&lt;br /&gt;
.page-Special_CreateAccount .navigation-drawer,&lt;br /&gt;
.page-Special_CreateAccount #mw-mf-main-menu-button&lt;br /&gt;
.mw-special-Userlogin .page-Special_UserLogin .header-container .minerva-icon {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Mobile.css&amp;diff=6199</id>
		<title>MediaWiki:Mobile.css</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Mobile.css&amp;diff=6199"/>
		<updated>2026-06-11T09:55:26Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ================================================================&lt;br /&gt;
   MediaWiki:Mobile.css&lt;br /&gt;
   Loaded only on Minerva (mobile skin).&lt;br /&gt;
   ================================================================ */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ── 1. AUTO-ZOOM PREVENTION ─────────────────────────────────────&lt;br /&gt;
   iOS and Android zoom the viewport when a focused input has&lt;br /&gt;
   font-size &amp;lt; 16px. Every input on the site must be &amp;gt;= 16px.&lt;br /&gt;
   ──────────────────────────────────────────────────────────────── */&lt;br /&gt;
&lt;br /&gt;
/* Reader toolbar search input */&lt;br /&gt;
#gr-search-panel input {&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* New document dialog inputs */&lt;br /&gt;
#gr-newdoc-overlay input,&lt;br /&gt;
#gr-newdoc-overlay select,&lt;br /&gt;
#gr-newdoc-overlay textarea {&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Annotation composer inputs (gr_annotations gadget) */&lt;br /&gt;
.gra-composer-input,&lt;br /&gt;
.gra-fb-select,&lt;br /&gt;
#gra-nt-input,&lt;br /&gt;
#gra-bm-input,&lt;br /&gt;
#gra-fb-text,&lt;br /&gt;
#gra-fb-email {&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ── 2. LONG-PRESS CONTEXT MENU SUPPRESSION ──────────────────────&lt;br /&gt;
   -webkit-touch-callout: none  → stops iOS &amp;quot;Copy / Look Up / Share&amp;quot;&lt;br /&gt;
                                   popup on long press of buttons&lt;br /&gt;
   user-select: none            → prevents text selection on button labels&lt;br /&gt;
   touch-action: manipulation   → removes 300ms tap delay and prevents&lt;br /&gt;
                                   context menu on long press (iOS + Android)&lt;br /&gt;
   ──────────────────────────────────────────────────────────────── */&lt;br /&gt;
&lt;br /&gt;
/* Sanskrit keyboard keys */&lt;br /&gt;
.gr-kb-key,&lt;br /&gt;
.gr-kb-key-iast,&lt;br /&gt;
.gr-kb-action,&lt;br /&gt;
.gr-kb {&lt;br /&gt;
  -webkit-touch-callout: none;&lt;br /&gt;
  user-select: none;&lt;br /&gt;
  touch-action: manipulation;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Annotation FAB buttons and mobile action bar */&lt;br /&gt;
.gra-mob-btn,&lt;br /&gt;
.gra-fab-btn,&lt;br /&gt;
#gra-toggle,&lt;br /&gt;
#gra-mob-feedback,&lt;br /&gt;
#gra-mob-note,&lt;br /&gt;
#gra-mob-bookmark,&lt;br /&gt;
#gra-mob-dismiss {&lt;br /&gt;
  -webkit-touch-callout: none;&lt;br /&gt;
  user-select: none;&lt;br /&gt;
  touch-action: manipulation;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Reader toolbar buttons */&lt;br /&gt;
#gr-static-bar .gr-btn,&lt;br /&gt;
#gr-static-bar .gr-icon-btn {&lt;br /&gt;
  -webkit-touch-callout: none;&lt;br /&gt;
  user-select: none;&lt;br /&gt;
  touch-action: manipulation;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* siteNav FAB buttons */&lt;br /&gt;
#se-docnav-btn,&lt;br /&gt;
#se-scrolltop {&lt;br /&gt;
  -webkit-touch-callout: none;&lt;br /&gt;
  user-select: none;&lt;br /&gt;
  touch-action: manipulation;&lt;br /&gt;
}&lt;br /&gt;
Template style fixes for Mobile&lt;br /&gt;
.mw-parser-output h2, .mw-parser-output .mw-heading2 h2 {&lt;br /&gt;
  margin-top: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Spacing fixes for headings */&lt;br /&gt;
.skin-minerva .mw-parser-output h2,&lt;br /&gt;
.skin-minerva .mw-parser-output .mw-heading2 h2,&lt;br /&gt;
.skin-minerva .mw-parser-output .mw-heading2 {&lt;br /&gt;
    margin-top: 8px !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .mw-parser-output .mw-heading2 + p,&lt;br /&gt;
.skin-minerva .mw-parser-output h2 + p {&lt;br /&gt;
    margin-top: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Also reduce Minerva&#039;s paragraph bottom margin inside content */&lt;br /&gt;
.skin-minerva .mw-parser-output p {&lt;br /&gt;
    padding-bottom: 0.25em !important;&lt;br /&gt;
    margin: 0 0 0.25em 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .section-heading,&lt;br /&gt;
.skin-minerva .collapsible-heading {&lt;br /&gt;
    margin: 0 !important;&lt;br /&gt;
    padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.page-Special_UserLogin .navigation-drawer,&lt;br /&gt;
.page-Special_UserLogin .header-container .toggle-list__checkbox,&lt;br /&gt;
.page-Special_UserLogin #mw-mf-main-menu-button,&lt;br /&gt;
.page-Special_CreateAccount .navigation-drawer,&lt;br /&gt;
.page-Special_CreateAccount #mw-mf-main-menu-button&lt;br /&gt;
.page-Special_UserLogin .header-container .minerva-icon {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.css&amp;diff=6198</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.css&amp;diff=6198"/>
		<updated>2026-06-11T09:41:23Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ═══════════════════════════════════════════════════════════════════&lt;br /&gt;
   MediaWiki:Common.css — Anandamakaranda&lt;br /&gt;
   Clean rebuild — works on Vector (desktop) + Minerva (mobile)&lt;br /&gt;
   ═══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
&lt;br /&gt;
/* ── 1. CSS VARIABLES ──────────────────────────────────────────── */&lt;br /&gt;
:root {&lt;br /&gt;
  --maroon:       #be100e;&lt;br /&gt;
  --orange:       #e65100;&lt;br /&gt;
  --light-orange: #f57c00;&lt;br /&gt;
  --dark-gray:    #555;&lt;br /&gt;
  --light-gray:   #eee;&lt;br /&gt;
  --muted-gray:   #888;&lt;br /&gt;
  --text:         #1a1a1a;&lt;br /&gt;
  --brown:        #a07040;&lt;br /&gt;
  --light-brown:  #e8d4a0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 2. FONTS ──────────────────────────────────────────────────── */&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;Adishila&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/adishila/Adishila.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: normal; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;Adishila&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/adishila/AdishilaBold.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: bold; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;AdishilaDev&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/AdishilaDev.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: normal; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;AdishilaDev&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/AdishilaDeBv.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: bold; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;AdishilaDevGuru&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/AdishilaDevGuru.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: bold; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;Noto Sans Devanagari&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/Noto_Sans_Devanagari/NotoSansDevanagari.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: normal; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-content-text {&lt;br /&gt;
  font-family: &#039;Adishila&#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output {&lt;br /&gt;
  font-size: 22px;&lt;br /&gt;
  line-height: 1.7;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  max-width: 100%;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  margin: 0; padding: 0;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Danda marks wrap issue&lt;br /&gt;
.mw-parser-output { overflow-wrap: anywhere; }&lt;br /&gt;
&lt;br /&gt;
/* ── 4. HIDE ELEMENTS (both skins) ────────────────────────────── */&lt;br /&gt;
/* Page title */&lt;br /&gt;
h1.firstHeading, #firstHeading, .mw-page-title-main { display: none !important; }&lt;br /&gt;
/* Footer */&lt;br /&gt;
#footer, .mw-footer, .vector-footer, .vector-footer-container,&lt;br /&gt;
footer, .minerva-footer { display: none !important; }&lt;br /&gt;
/* Categories */&lt;br /&gt;
.catlinks, #catlinks, .mw-normal-catlinks, .mw-hidden-catlinks { display: none !important; }&lt;br /&gt;
/* Edit section links */&lt;br /&gt;
.mw-editsection, .mw-editsection-bracket { display: none !important; }&lt;br /&gt;
/* Site notice */&lt;br /&gt;
#siteNotice { display: none !important; }&lt;br /&gt;
/* Watchlist */&lt;br /&gt;
li#pt-watchlist, li#pt-watchlist-kbd { display: none !important; }&lt;br /&gt;
/* Appearance panel */&lt;br /&gt;
#vector-appearance, #vector-appearance-pinned-container,&lt;br /&gt;
#vector-appearance-unpinned-container, .mw-portlet-appearance,&lt;br /&gt;
#p-appearance, [aria-controls=&amp;quot;vector-appearance&amp;quot;] { display: none !important; }&lt;br /&gt;
/* Vector hamburger + sidebar */&lt;br /&gt;
#mw-sidebar-button, .vector-main-menu, .vector-main-menu-container,&lt;br /&gt;
.vector-main-menu-landmark, #vector-main-menu-dropdown { display: none !important; }&lt;br /&gt;
/* Vector search box (we use our own) */&lt;br /&gt;
#p-search, .vector-search-box, .vector-search-box-vue,&lt;br /&gt;
.vector-search-box-collapses { display: none !important; }&lt;br /&gt;
/* Vector page toolbar */&lt;br /&gt;
.vector-page-toolbar, .vector-page-toolbar-container { display: none !important; }&lt;br /&gt;
/* Vector page tools */&lt;br /&gt;
.vector-page-tools { display: none !important; }&lt;br /&gt;
/* Empty paragraphs */&lt;br /&gt;
.mw-parser-output p:empty,&lt;br /&gt;
.mw-parser-output &amp;gt; div &amp;gt; p:empty,&lt;br /&gt;
.mw-heading + p:empty,&lt;br /&gt;
.adhyaya-block + p:empty,&lt;br /&gt;
.verse-block + p:empty { display: none !important; margin: 0 !important; }&lt;br /&gt;
/* Empty divs */&lt;br /&gt;
.adhyaya-block:empty, .mw-parser-output div:empty { display: none !important; }&lt;br /&gt;
/* Cargo hidden */&lt;br /&gt;
.cargo-store-only { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 5. VECTOR HEADER (desktop only) ──────────────────────────── */&lt;br /&gt;
.vector-header-container {&lt;br /&gt;
  background: #b5451b !important;&lt;br /&gt;
  border-bottom: 1px solid rgba(255,255,255,0.12);&lt;br /&gt;
}&lt;br /&gt;
.vector-header {&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  justify-content: space-between !important;&lt;br /&gt;
  padding-left: 20px !important;&lt;br /&gt;
  padding-right: 20px !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-header-start {&lt;br /&gt;
  flex: 0 0 auto !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  gap: 12px;&lt;br /&gt;
}&lt;br /&gt;
.vector-header-end {&lt;br /&gt;
  flex: 0 0 auto !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  margin-left: auto;&lt;br /&gt;
}&lt;br /&gt;
.mw-logo { display: flex !important; align-items: center; opacity: 1 !important; }&lt;br /&gt;
.mw-logo-icon { width: 24px; height: 24px; }&lt;br /&gt;
&lt;br /&gt;
/* Site name */&lt;br /&gt;
.mw-logo-wordmark {&lt;br /&gt;
  font-size: 0 !important;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  flex-direction: column !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-logo-wordmark::before {&lt;br /&gt;
  content: &#039;Anandamakaranda&#039;;&lt;br /&gt;
  font-size: 17px;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-family: system-ui, -apple-system, sans-serif;&lt;br /&gt;
  letter-spacing: -0.01em;&lt;br /&gt;
}&lt;br /&gt;
.mw-logo-wordmark::after {&lt;br /&gt;
  content: &amp;quot;A Digital Archive of Dvaita Vedanta Literature&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  font-weight: 400;&lt;br /&gt;
  color: rgba(255,255,255,0.85);&lt;br /&gt;
  letter-spacing: 0.3px;&lt;br /&gt;
  margin-top: 1px;&lt;br /&gt;
  font-family: sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Header right links */&lt;br /&gt;
.vector-header-end &amp;gt; *:not(#p-search) { color: rgba(255,255,255,0.9) !important; }&lt;br /&gt;
.vector-user-links a { color: rgba(255,255,255,0.9) !important; }&lt;br /&gt;
&lt;br /&gt;
/* User icon white */&lt;br /&gt;
.vector-user-menu-container .vector-icon svg,&lt;br /&gt;
.vector-user-menu-container .vector-icon svg path,&lt;br /&gt;
.vector-user-menu-container .vector-icon svg circle {&lt;br /&gt;
  fill: #fff !important; stroke: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-user-links .vector-user-menu-chevron .vector-icon svg,&lt;br /&gt;
.vector-user-links .vector-user-menu-chevron .vector-icon svg path {&lt;br /&gt;
  fill: rgba(255,255,255,0.9) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* User dropdown — dark text on white card */&lt;br /&gt;
.vector-user-menu .mw-list-item a,&lt;br /&gt;
.vector-user-menu .vector-menu-content-list a,&lt;br /&gt;
#p-personal .vector-menu-content a,&lt;br /&gt;
.mw-portlet-personal .vector-menu-content a { color: #202122 !important; }&lt;br /&gt;
.vector-user-menu .mw-list-item a:hover { color: var(--light-orange) !important; }&lt;br /&gt;
&lt;br /&gt;
/* Suppress Vector sticky header clone */&lt;br /&gt;
.vector-sticky-header { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* Suppress body top padding that Vector adds */&lt;br /&gt;
.mw-body { margin-top: 0 !important; padding-top: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 6. VECTOR TOC (desktop sidebar) ──────────────────────────── */&lt;br /&gt;
.vector-toc .vector-toc-numb { display: none !important; }&lt;br /&gt;
.vector-toc .vector-toc-title {&lt;br /&gt;
  font-size: 0.72em !important; font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase; letter-spacing: 0.08em;&lt;br /&gt;
  color: var(--text) !important;&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, system-ui, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-toc .vector-toc-text {&lt;br /&gt;
  white-space: normal !important; word-break: break-word !important;&lt;br /&gt;
  overflow-wrap: anywhere !important; display: inline !important;&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, system-ui, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-toc a, .vector-toc .vector-toc-link {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, system-ui, sans-serif !important;&lt;br /&gt;
  color: var(--text) !important; text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-toc a:hover { color: var(--light-orange) !important; }&lt;br /&gt;
.vector-toc .vector-toc-list-item-active .vector-toc-link,&lt;br /&gt;
.vector-toc .vector-toc-list-item-active .vector-toc-link * {&lt;br /&gt;
  color: var(--light-orange) !important; font-weight: 700 !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-toc .cdx-button.vector-toc-toggle {&lt;br /&gt;
  background: none !important; border: none !important;&lt;br /&gt;
  box-shadow: none !important; color: var(--text) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 7. HEADINGS ───────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output h1, .mw-parser-output h2, .mw-parser-output h3, .mw-parser-output h4,&lt;br /&gt;
.mw-parser-output .mw-heading h1, .mw-parser-output .mw-heading h2,&lt;br /&gt;
.mw-parser-output .mw-heading h3 {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  border: none !important; padding: 0 !important; background: none !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output .mw-heading { border: none !important; margin: 0; padding: 0; }&lt;br /&gt;
&lt;br /&gt;
.mw-heading, .mw-heading2, .mw-heading3 { text-align:center; }&lt;br /&gt;
.mw-parser-output h2, .mw-parser-output .mw-heading2 h2 {&lt;br /&gt;
  font-size: 1.2em !important; font-weight: 500 !important;&lt;br /&gt;
  color: var(--maroon) !important; line-height: 1.8;&lt;br /&gt;
  margin: 24px 0 4px !important;&lt;br /&gt;
  border-bottom: 2px dotted var(--maroon) !important;&lt;br /&gt;
  width: 75%; font-family: &#039;AdishilaDev&#039;; text-align: center;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output h3, .mw-parser-output .mw-heading3 h3 {&lt;br /&gt;
  font-size: 1em !important; font-weight: 500 !important;&lt;br /&gt;
  color: var(--orange) !important; line-height: 1.5;&lt;br /&gt;
  margin: 24px 0 8px !important;&lt;br /&gt;
  border-bottom: 1px dotted var(--orange) !important;&lt;br /&gt;
  width: 55%; font-family: &#039;AdishilaDev&#039;; text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 8. PARAGRAPHS ─────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output p { margin: 0 0 0.35rem !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 9. DOCUMENT TITLE ─────────────────────────────────────────── */&lt;br /&gt;
.gr-doc-title {&lt;br /&gt;
  font-size: 2em; font-weight: 500; color: var(--maroon);&lt;br /&gt;
  line-height: 1.4; margin: 0 0 16px; border: none !important;&lt;br /&gt;
  text-align:center; font-family: &#039;AdishilaDev&#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 10. VERSE BLOCKS ──────────────────────────────────────────── */&lt;br /&gt;
.shloka-block { display: block; text-align: left; margin: 3px 0 0; padding-bottom: 0.5em; }&lt;br /&gt;
.shloka-line { display: block; font-style: normal; color: #333; line-height: 1.35; margin: 0; }&lt;br /&gt;
.verse-block { display: block; margin: 6px 0 0; text-align: left; }&lt;br /&gt;
.verse-block .shloka-block { text-align: left; margin: 0; }&lt;br /&gt;
.verse-block .shloka-line {&lt;br /&gt;
  display: block; font-style: italic; color: #c65;&lt;br /&gt;
  font-weight: 500; line-height: 1.35; margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.verse-block + p { display: none !important; margin: 0 !important; }&lt;br /&gt;
.mw-parser-output .verse-block,&lt;br /&gt;
.mw-parser-output .shloka-block { margin-top: 2px !important; margin-bottom: 2px !important; }&lt;br /&gt;
&lt;br /&gt;
.gr-verse-text, .verse-line, .verse-text {&lt;br /&gt;
  color: #b5451b; font-style: italic; line-height: 1.5; display: block; margin: 0.1em 0;&lt;br /&gt;
}&lt;br /&gt;
.gr-verse-type-sutra .gr-verse-text,&lt;br /&gt;
.verse-block[data-type=&amp;quot;sutra&amp;quot;] .verse-line { font-style: normal; font-weight: 600; color: #b5451b; }&lt;br /&gt;
&lt;br /&gt;
/* ── 11. UVACHA ────────────────────────────────────────────────── */&lt;br /&gt;
.uvacha-block {&lt;br /&gt;
  display: block; font-weight: bold; color: #c65;&lt;br /&gt;
  margin: 0.5rem 0 0; padding: 2px 0 2px 12px;&lt;br /&gt;
  border-left: 3px solid #c65; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
.uvacha-block + .verse-block { margin-top: 2px; }&lt;br /&gt;
.gr-uvaaca, .uvaaca {&lt;br /&gt;
  color: #b5451b; font-weight: 600; font-size: 0.92em; margin: 0.5em 0 0.2em 0; display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 12. BHASHYAM ──────────────────────────────────────────────── */&lt;br /&gt;
.bhashyam-block {&lt;br /&gt;
  display: block; font-size: 1em; line-height: 1.6; color: #555;&lt;br /&gt;
  margin: 0.25em 0 0.35em 48px; padding: 0; border: none; background: transparent;&lt;br /&gt;
}&lt;br /&gt;
.gr-bhashyam, .commentary-bhashyam {&lt;br /&gt;
  color: #222; font-style: normal; line-height: 1.75; margin: 0.3em 0 0.5em 0;&lt;br /&gt;
}&lt;br /&gt;
.gr-leading-bhashya { font-style: italic; color: #555; margin: 0.4em 0 0.5em 0; }&lt;br /&gt;
&lt;br /&gt;
/* ── 13. PADYA ─────────────────────────────────────────────────── */&lt;br /&gt;
.padya-block {&lt;br /&gt;
  display: block; font-size: 1em; line-height: 1.75; color: #c65 !important;&lt;br /&gt;
  font-style: italic; font-weight: 500; margin: 0.4em 0 0.6em 60px;&lt;br /&gt;
}&lt;br /&gt;
.gr-padapatha { font-size: 0.9em; color: #555; margin: 0.2em 0 0.3em 0.8em; }&lt;br /&gt;
&lt;br /&gt;
/* ── 14. TEEKA ─────────────────────────────────────────────────── */&lt;br /&gt;
.teeka-block {&lt;br /&gt;
  padding: 6px 10px 8px; margin: 0.3em 0; line-height: 1.6; color: #555;&lt;br /&gt;
}&lt;br /&gt;
.teeka-title {&lt;br /&gt;
  font-family: &#039;AdishilaDev&#039;;, sans-serif !important;&lt;br /&gt;
  font-size: 1.75em; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase;&lt;br /&gt;
  margin-bottom: 4px; padding-bottom: 3px;&lt;br /&gt;
}&lt;br /&gt;
.teeka-body .shloka-block {&lt;br /&gt;
  margin: 0.4em 0; padding: 0.3em 0.6em; font-family: &#039;AdishilaDev&#039;;&lt;br /&gt;
}&lt;br /&gt;
.teeka-body .shloka-line { font-style: italic; font-size: 0.97em; font-family: &#039;AdishilaDev&#039;; }&lt;br /&gt;
&lt;br /&gt;
/* ── 15. PRATEEKA / MOOLA ──────────────────────────────────────── */&lt;br /&gt;
.gr-prateeka { font-weight: bold; font-style: normal; color: #333; }&lt;br /&gt;
.gr-mulaprateeka-block {&lt;br /&gt;
  display: block; font-weight: bold; font-style: normal;&lt;br /&gt;
  text-align: center; color: #333; margin: 0.7em 0 0.3em; line-height: 1.5;&lt;br /&gt;
}&lt;br /&gt;
.gr-moola { font-weight: bold; font-style: italic; color: #c65; }&lt;br /&gt;
&lt;br /&gt;
/* ── 16. ADHYAYA ───────────────────────────────────────────────── */&lt;br /&gt;
.adhyaya-block { margin: 0 0 4px; }&lt;br /&gt;
.adhyaya-trans { font-size: 0.9em; color: #666; margin: 2px 0 0; }&lt;br /&gt;
.adhyaya-intro { margin-top: 8px; line-height: 1.75; color: #555; }&lt;br /&gt;
.introduction p { color: var(--dark-gray); font-weight: 400; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.introduction { padding-bottom: 0.5em; text-align: justify; }&lt;br /&gt;
&lt;br /&gt;
/* ── 17. NYAYA / PRASNA ────────────────────────────────────────── */&lt;br /&gt;
.nyaya-block { margin: 32px 0; padding-top: 12px; border-top: 1px solid #eee; }&lt;br /&gt;
.nyaya-title {&lt;br /&gt;
  font-size: 1em; font-weight: 500; color: var(--orange);&lt;br /&gt;
  margin-bottom: 0.4rem; border-bottom: 1px dotted var(--orange); width: 50%;&lt;br /&gt;
}&lt;br /&gt;
.nyaya-body { color: #555; line-height: 1.75; margin-top: 0.5rem; }&lt;br /&gt;
.prasna-block { margin: 32px 0; padding-top: 12px; border-top: 1px solid #eee; }&lt;br /&gt;
.prasna-title {&lt;br /&gt;
  font-size: 1em; font-weight: 500; color: var(--orange);&lt;br /&gt;
  margin-bottom: 0.4rem; border-bottom: 1px dotted var(--orange); width: 50%;&lt;br /&gt;
}&lt;br /&gt;
.prasna-question, .prasna-answer { color: #555; line-height: 1.75; margin-top: 0.5rem; }&lt;br /&gt;
.prasna-answer { margin-left: 60px; }&lt;br /&gt;
&lt;br /&gt;
/* ── 18. VYAKHYA ELEMENTS ──────────────────────────────────────── */&lt;br /&gt;
.gr-vyakhya-head, .gr-section-head {&lt;br /&gt;
  font-size: 0.9em; font-weight: 700; color: #6a3e00;&lt;br /&gt;
  margin: 0.35em 0 0.15em; font-family: inherit; border: none; padding: 0;&lt;br /&gt;
}&lt;br /&gt;
.gr-avataranika {&lt;br /&gt;
  font-style: italic; color: #444; margin: 0.2em 0 0.5em 0.5em;&lt;br /&gt;
  padding-left: 0.6em; border-left: 2px solid #c9a96e; line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
.gr-vyakhya-pada {&lt;br /&gt;
  font-size: 0.88em; color: #555; background: #fafafa;&lt;br /&gt;
  border: 1px solid #e8e0d0; border-radius: 4px; padding: 0.5em 0.8em;&lt;br /&gt;
  margin: 0.5em 0; line-height: 1.5; white-space: pre-wrap;&lt;br /&gt;
}&lt;br /&gt;
.gr-vyakhya-gadya {&lt;br /&gt;
  font-weight: bold; font-size: 0.95em; text-align: center;&lt;br /&gt;
  color: #8b1a1a; margin: 0.2em 0; line-height: 1.6; letter-spacing: 0.03em;&lt;br /&gt;
}&lt;br /&gt;
.gr-vyakhya-para { margin: 0 0 0.5em 0; line-height: 1.65; color: #444; }&lt;br /&gt;
.gr-embedded-bhashya { margin: 0.2em 0 0.2em 1em; line-height: 1.6; }&lt;br /&gt;
.gr-gadya {&lt;br /&gt;
  display: block !important; font-size: 0.96em !important; font-weight: 600 !important;&lt;br /&gt;
  font-style: normal !important; color: #555 !important; margin: 16px 0 4px !important;&lt;br /&gt;
  border-bottom: 1px solid #ddd !important; width: 60%; line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
.gr-author-note {&lt;br /&gt;
  font-style: italic; color: var(--maroon); text-align: center; font-size: 0.9em;&lt;br /&gt;
  margin: 0.8em 0 0.4em 0; border-top: 1px solid #ddd; padding-top: 0.4em; font-family: &#039;AdishilaDev&#039;&lt;br /&gt;
}&lt;br /&gt;
.gr-devatachandas { font-size: 0.82em; color: #777; margin: 0.4em 0 0.2em 0; }&lt;br /&gt;
.gr-vargikarana   { font-size: 0.82em; color: #888; margin: 0.5em 0 0.1em 0; }&lt;br /&gt;
&lt;br /&gt;
/* ── 20. BHASHYA COLLECTION ────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output .bhashya-collection { margin: 0; padding: 0; }&lt;br /&gt;
.mw-parser-output .bhashya + p:empty,&lt;br /&gt;
.mw-parser-output .verse + p:empty,&lt;br /&gt;
.mw-parser-output .bhashya-collection + p:empty,&lt;br /&gt;
.mw-parser-output .pramana + p:empty,&lt;br /&gt;
.mw-parser-output .author-note + p:empty { display: none !important; margin: 0 !important; height: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 21. VERSE ACTIONS ─────────────────────────────────────────── */&lt;br /&gt;
.verse-actions {&lt;br /&gt;
  display: flex; flex-direction: row; align-items: center;&lt;br /&gt;
  gap: 6px; margin-top: 4px; justify-content: center;&lt;br /&gt;
}&lt;br /&gt;
.verse-action-btn {&lt;br /&gt;
  display: inline-flex; align-items: center; justify-content: center;&lt;br /&gt;
  padding: 4px; border-radius: 6px; cursor: pointer; opacity: 0.75; transition: all 0.2s;&lt;br /&gt;
}&lt;br /&gt;
.verse-action-btn:hover { opacity: 1; background-color: rgba(0,0,0,0.05); }&lt;br /&gt;
.icon { display: inline-block; width: 18px; height: 18px; background-repeat: no-repeat; background-position: center; background-size: contain; }&lt;br /&gt;
.icon-copy       { background-image: url(&#039;/images/copy.svg&#039;); }&lt;br /&gt;
.icon-commentary { background-image: url(&#039;/images/commentary.svg&#039;); }&lt;br /&gt;
.copy-tooltip {&lt;br /&gt;
  position: absolute; bottom: calc(100% + 8px); left: 50%;&lt;br /&gt;
  transform: translateX(-50%) translateY(4px);&lt;br /&gt;
  white-space: nowrap; pointer-events: none; z-index: 9999;&lt;br /&gt;
  display: inline-flex; align-items: center; padding: 2px 8px; border-radius: 999px;&lt;br /&gt;
  font-size: 0.75rem; font-weight: 500; background: rgba(30,30,30,0.82); color: #fff;&lt;br /&gt;
  opacity: 0; transition: opacity 0.2s, transform 0.2s;&lt;br /&gt;
}&lt;br /&gt;
.copy-tooltip.copy-tooltip-visible { opacity: 1; transform: translateX(-50%) translateY(0); }&lt;br /&gt;
&lt;br /&gt;
/* ── 22. CODE / PRE ────────────────────────────────────────────── */&lt;br /&gt;
pre, code, .mw-code, tt, kbd {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif ;&lt;br /&gt;
  background-color: transparent !important; border: none !important; padding: 0.3em 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-collapsible, .mw-collapsible-content, blockquote, .quotebox {&lt;br /&gt;
  background-color: transparent !important; border: none !important;&lt;br /&gt;
  font-style: normal !important; padding: 0 !important; margin-left: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 23. INLINE TOC BOX (wikitext __TOC__) ─────────────────────── */&lt;br /&gt;
.toc {&lt;br /&gt;
  display: block !important; background: #fffdf5; border: 1px solid #e8c88a;&lt;br /&gt;
  border-radius: 8px; padding: 12px 16px; margin: 0 0 24px 0;&lt;br /&gt;
  width: fit-content; min-width: 220px; max-width: 420px;&lt;br /&gt;
  font-size: 0.9em; line-height: 2;&lt;br /&gt;
}&lt;br /&gt;
.toc h2, .toc .toctitle {&lt;br /&gt;
  font-size: 0.85em !important; font-weight: 600 !important; color: var(--text) !important;&lt;br /&gt;
  border: none !important; margin: 0 0 6px !important; text-transform: uppercase; letter-spacing: 0.05em;&lt;br /&gt;
}&lt;br /&gt;
.toc ul { margin: 0 !important; padding-left: 1.2em !important; list-style: none !important; }&lt;br /&gt;
.toc li { margin: 0; padding: 0; }&lt;br /&gt;
.toc a { color: var(--text) !important; text-decoration: none !important; }&lt;br /&gt;
.toc a:hover { color: var(--light-orange) !important; }&lt;br /&gt;
.toc .toclevel-1 &amp;gt; a { font-weight: 600; }&lt;br /&gt;
.tocnumber { display: none; }&lt;br /&gt;
&lt;br /&gt;
/* ── 24. DOC TEEKAS + TOC NAV ──────────────────────────────────── */&lt;br /&gt;
.gr-doc-teekas { margin-bottom: 1em; }&lt;br /&gt;
.gr-doc-teekas + p:empty { display: none !important; margin: 0 !important; height: 0 !important; }&lt;br /&gt;
.toc-main-links { display: flex; gap: 6px; padding: 5px; align-items: center; margin-bottom: 4px; }&lt;br /&gt;
.toc-main-link-item {&lt;br /&gt;
  font-size: 0.9em; color: var(--text); text-decoration: none; padding: 4px 8px;&lt;br /&gt;
  border-radius: 6px; background: rgba(0,0,0,0.05); transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.toc-main-link-item:hover { background: rgba(0,0,0,0.10) !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 25. MAIN PAGE ─────────────────────────────────────────────── */&lt;br /&gt;
body.page-Main_Page #mw-panel,&lt;br /&gt;
body.page-Main_Page .vector-sidebar-container { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
.gr-home { max-width: 1080px; margin: 0 auto; padding: 0; }&lt;br /&gt;
.gr-home-page-title {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif !important;&lt;br /&gt;
  text-align: center; font-size: 1.8em; font-weight: 500; color: #1a2e40; margin: 24px 0 32px;&lt;br /&gt;
}&lt;br /&gt;
.gr-home-grid { display: flex; flex-wrap: wrap; gap: 20px; margin-bottom: 32px; }&lt;br /&gt;
.gr-home-card {&lt;br /&gt;
  background: #fff; border: 1px solid #e8e4df; border-radius: 10px;&lt;br /&gt;
  box-shadow: 0 2px 8px rgba(0,0,0,0.07);&lt;br /&gt;
  padding: 18px 20px 20px; flex: 1 1 280px; min-width: 240px; max-width: 360px;&lt;br /&gt;
}&lt;br /&gt;
.gr-home-card-title {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif !important;&lt;br /&gt;
  font-size: 1em; font-weight: 600; color: #1a2e40; text-align: center;&lt;br /&gt;
  padding-bottom: 10px; margin-bottom: 12px; border-bottom: 1.5px solid #c0392b;&lt;br /&gt;
}&lt;br /&gt;
.gr-home-card ol { margin: 0; padding-left: 1.4em; list-style: decimal; }&lt;br /&gt;
.gr-home-card li { font-size: 0.95em; line-height: 1.85; color: #333; }&lt;br /&gt;
.gr-home-card li a { color: #c0392b; text-decoration: none; }&lt;br /&gt;
.gr-home-card li a:hover { text-decoration: underline; }&lt;br /&gt;
.gr-home-card li a.new { color: #c08080; }&lt;br /&gt;
.gr-home-note { font-size: 0.82em; color: #888; }&lt;br /&gt;
.gr-home-group-label {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif !important;&lt;br /&gt;
  font-size: 1.1em; font-weight: 600; color: #1a2e40; text-align: center;&lt;br /&gt;
  margin: 36px 0 16px; padding-bottom: 8px; border-bottom: 2px solid #c0392b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 26. TOGGLE BUTTONS ────────────────────────────────────────── */&lt;br /&gt;
.gr-home-toggle { display: flex; gap: 8px; margin: 0 0 24px; justify-content: center; }&lt;br /&gt;
.gr-toggle-btn {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  font-size: 0.88em; padding: 6px 20px; border: 1.5px solid #c0392b; border-radius: 20px;&lt;br /&gt;
  background: transparent; color: #c0392b; cursor: pointer; user-select: none; transition: background 0.15s, color 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gr-toggle-btn:hover { background: #fdf0ed; }&lt;br /&gt;
.gr-toggle-btn.gr-toggle-active { background: #c0392b; color: #fff; }&lt;br /&gt;
&lt;br /&gt;
/* ── 27. SCRIPT BAR ────────────────────────────────────────────── */&lt;br /&gt;
.gr-script-bar { margin: 0 0 20px; font-size: 0.8em; color: #888; display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }&lt;br /&gt;
.gr-script-label { font-family: system-ui, sans-serif; color: #aaa; }&lt;br /&gt;
.gr-script-btn { font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif; color: #c0392b !important; text-decoration: underline dotted !important; cursor: pointer; }&lt;br /&gt;
.gr-script-btn.active { color: #888 !important; text-decoration: none !important; cursor: default; }&lt;br /&gt;
&lt;br /&gt;
/* ── 28. MODALS ────────────────────────────────────────────────── */&lt;br /&gt;
.grantha-modal { position: fixed; inset: 0; background: rgba(0,0,0,0.35); display: flex; align-items: center; justify-content: center; z-index: 10000; }&lt;br /&gt;
.grantha-modal-box { background: white; padding: 20px; border-radius: 10px; width: 300px; }&lt;br /&gt;
.gm-title { font-weight: bold; margin-bottom: 10px; }&lt;br /&gt;
.gm-actions { display: flex; justify-content: flex-end; gap: 10px; margin-top: 12px; }&lt;br /&gt;
&lt;br /&gt;
/* ── 29. LOGIN PAGE ────────────────────────────────────────────── */&lt;br /&gt;
body.page-Special_UserLogin .vector-search-box,&lt;br /&gt;
body.page-Special_UserLogin #p-search { display: none !important; }&lt;br /&gt;
body.page-Special_UserLogin #content { max-width: 420px; margin: 40px auto !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 30. SPECIAL PAGES ─────────────────────────────────────────── */&lt;br /&gt;
body.ns-special #footer, body.ns-special .mw-footer,&lt;br /&gt;
body.ns-special .vector-footer { display: none !important; }&lt;br /&gt;
body.ns-special .vector-page-tools { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 31. MINERVA (mobile) ──────────────────────────────────────── */&lt;br /&gt;
.skin-minerva .mw-parser-output {&lt;br /&gt;
  font-size: 18px !important;&lt;br /&gt;
  line-height: 1.8 !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .mw-parser-output h2,&lt;br /&gt;
.skin-minerva .mw-parser-output .mw-heading2 h2 {&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .mw-parser-output h3,&lt;br /&gt;
.skin-minerva .mw-parser-output .mw-heading3 h3 {&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .bhashyam-block { margin-left: 16px !important; }&lt;br /&gt;
.skin-minerva .prasna-answer  { margin-left: 16px !important; }&lt;br /&gt;
.skin-minerva .padya-block    { margin-left: 16px !important; }&lt;br /&gt;
/* Home grid single column on Minerva */&lt;br /&gt;
.skin-minerva .gr-home-grid {&lt;br /&gt;
  flex-direction: column !important;&lt;br /&gt;
  flex-wrap: nowrap !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .gr-home-card {&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
  min-width: unset !important;&lt;br /&gt;
  flex: 0 0 auto !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
/* Hide things that should be hidden on mobile too */&lt;br /&gt;
.skin-minerva .catlinks,&lt;br /&gt;
.skin-minerva #catlinks { display: none !important; }&lt;br /&gt;
.skin-minerva .mw-editsection { display: none !important; }&lt;br /&gt;
/* Minerva already has its own TOC — hide our inline .toc */&lt;br /&gt;
.skin-minerva .toc { display: none !important; }&lt;br /&gt;
/* ReaderToolbar on Minerva */&lt;br /&gt;
.skin-minerva #gr-static-bar {&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  min-height: 52px !important;&lt;br /&gt;
  overflow-x: auto !important;&lt;br /&gt;
  overflow-y: hidden !important;&lt;br /&gt;
  scrollbar-width: none !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva #gr-static-bar::-webkit-scrollbar { display: none !important; }&lt;br /&gt;
.skin-minerva .gr-controls .gr-btn {&lt;br /&gt;
  height: 44px !important;&lt;br /&gt;
  min-width: 44px !important;&lt;br /&gt;
  font-size: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .gr-btn-staging { display: none !important; }&lt;br /&gt;
.skin-minerva .gr-controls .gr-sep { display: none !important; }&lt;br /&gt;
/* Minerva already shows page title — don&#039;t double-hide */&lt;br /&gt;
.skin-minerva h1.firstHeading { display: block !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 32. PRINT ─────────────────────────────────────────────────── */&lt;br /&gt;
@media print {&lt;br /&gt;
  #gr-static-bar, .gr-controls, .vector-header-container { display: none !important; }&lt;br /&gt;
  .mw-parser-output { font-size: 11pt !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 33. TYPOGRAPHY CLASSES ────────────────────────────────────── */&lt;br /&gt;
&lt;br /&gt;
/* Heading — center, maroon, AdishilaDevGuru */&lt;br /&gt;
.gr-heading {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  font-size: 1.09em;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  color: #be100e;&lt;br /&gt;
  font-family: &#039;AdishilaDevGuru&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  line-height: 1.4;&lt;br /&gt;
  margin: 0.45em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Sub-heading — center, orange, AdishilaDevGuru */&lt;br /&gt;
.gr-sub-heading {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  font-size: 0.73em;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  color: #e65100;&lt;br /&gt;
  font-family: &#039;AdishilaDevGuru&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
  margin: 0.5em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Chapter Heading — center, maroon, AdishilaDevGuru */&lt;br /&gt;
.gr-chapter-heading {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  font-size: 0.82em;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  color: #be100e;&lt;br /&gt;
  font-family: &#039;AdishilaDevGuru&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
  margin: 0.5em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* M.Veda Shloka — left, bold, maroon, AdishilaVed, 5mm indent */&lt;br /&gt;
.gr-mv-shloka {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: left;&lt;br /&gt;
  font-size: 0.82em;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  color: #be100e;&lt;br /&gt;
  font-family: &#039;AdishilaVed&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  padding-left: 0.86em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.75;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* M.Veda Gadya — justify, bold, maroon, AdishilaVed */&lt;br /&gt;
.gr-mv-gadya {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: justify;&lt;br /&gt;
  font-size: 0.82em;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  color: #be100e;&lt;br /&gt;
  font-family: &#039;AdishilaVed&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  text-indent: 1.18em;&lt;br /&gt;
  padding-left: 0.36em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.75;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* M.Shloka — left, bold, orange, AdishilaDev, 5mm indent */&lt;br /&gt;
.gr-m-shloka {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: left;&lt;br /&gt;
  font-size: 0.82em;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  color: #e65100;&lt;br /&gt;
  font-family: &#039;AdishilaDev&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  padding-left: 0.86em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.75;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* B.Shloka / TK.Shloka / TP.Shloka — left, black, AdishilaDev, 10mm indent */&lt;br /&gt;
.gr-b-shloka,&lt;br /&gt;
.gr-tp-shloka {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: left;&lt;br /&gt;
  font-size: 0.73em;&lt;br /&gt;
  font-weight: normal;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  font-family: &#039;AdishilaDev&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  padding-left: 1.73em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.75;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Reference — orange, AdishilaDev */&lt;br /&gt;
.gr-reference {&lt;br /&gt;
  color: #e65100;&lt;br /&gt;
  font-family: &#039;AdishilaDev&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Custom tag span — subtle dashed underline only */&lt;br /&gt;
.gr-custom {&lt;br /&gt;
  border-bottom: 1px dashed #b5451b;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 34. MINERVA HEADER — orange theme + sticky ────────────────── */&lt;br /&gt;
&lt;br /&gt;
/* Kill space above header */&lt;br /&gt;
.skin-minerva body { margin-top: 0 !important; padding-top: 0 !important; }&lt;br /&gt;
.skin-minerva #mw-mf-viewport,&lt;br /&gt;
.skin-minerva #mw-mf-page-center { margin-top: 0 !important; padding-top: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* Header — orange, sticky */&lt;br /&gt;
.skin-minerva header.header-container {&lt;br /&gt;
  background: #b5451b !important;&lt;br /&gt;
  position: sticky !important;&lt;br /&gt;
  top: 0 !important;&lt;br /&gt;
  z-index: 200 !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  color: #ffffff;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .minerva-header {&lt;br /&gt;
  background: #b5451b !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  min-height: 54px !important;&lt;br /&gt;
  padding: 0 12px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.minerva-icon {&lt;br /&gt;
 &lt;br /&gt;
 filter: brightness(0) saturate(100%) invert(100%) sepia(4%) saturate(1%) hue-rotate(296deg) brightness(104%) contrast(100%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Site name text */&lt;br /&gt;
.skin-minerva .branding-box { background: transparent !important; }&lt;br /&gt;
.skin-minerva .branding-box a {&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .branding-box a span {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-size: 18px !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  font-family: system-ui, -apple-system, sans-serif !important;&lt;br /&gt;
  white-space: nowrap !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hamburger + search icons — white */&lt;br /&gt;
.skin-minerva .minerva-header label,&lt;br /&gt;
.skin-minerva .minerva-header .search-toggle {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .minerva-header svg path,&lt;br /&gt;
.skin-minerva .minerva-header svg rect,&lt;br /&gt;
.skin-minerva .minerva-header svg circle {&lt;br /&gt;
  fill: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .minerva-header .mw-ui-icon:before {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  filter: brightness(10) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Reader toolbar below Minerva header */&lt;br /&gt;
.skin-minerva #gr-static-bar {&lt;br /&gt;
  position: sticky !important;&lt;br /&gt;
  top: 54px !important;&lt;br /&gt;
  z-index: 100 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 35. MINERVA — auto-expand sections ────────────────────────── */&lt;br /&gt;
.skin-minerva .collapsible-block,&lt;br /&gt;
.skin-minerva .collapsible-heading + .collapsible-block {&lt;br /&gt;
  display: block !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .mf-section-0,&lt;br /&gt;
.skin-minerva .mf-section-1,&lt;br /&gt;
.skin-minerva .mf-section-2,&lt;br /&gt;
.skin-minerva .mf-section-3,&lt;br /&gt;
.skin-minerva .mf-section-4,&lt;br /&gt;
.skin-minerva .mf-section-5,&lt;br /&gt;
.skin-minerva .mf-section-6,&lt;br /&gt;
.skin-minerva .mf-section-7,&lt;br /&gt;
.skin-minerva .mf-section-8,&lt;br /&gt;
.skin-minerva .mf-section-9 {&lt;br /&gt;
  display: block !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .section-heading {&lt;br /&gt;
  pointer-events: none !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .section-heading .indicator {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* ── Hide MediaWiki default header user/account controls (desktop) ── */&lt;br /&gt;
#pt-userpage-2,&lt;br /&gt;
#p-vector-user-menu-userpage,&lt;br /&gt;
/* Hide the right-side person-icon dropdown */&lt;br /&gt;
#vector-user-links-dropdown,&lt;br /&gt;
.vector-user-links-dropdown,&lt;br /&gt;
#p-personal-more,&lt;br /&gt;
.vector-user-menu,&lt;br /&gt;
.mw-portlet-vector-user-menu-overflow,&lt;br /&gt;
#pt-watchlist-2, #pt-watchlist {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Hide original userpage text link */&lt;br /&gt;
#p-vector-user-menu-userpage { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* Hide the right-side person-icon user menu dropdown */&lt;br /&gt;
#vector-user-links-dropdown { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Custom username dropdown ── */&lt;br /&gt;
#gr-user-dropdown {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    font-family: system-ui, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
#gr-user-trigger {&lt;br /&gt;
    display: inline-flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    gap: 6px;&lt;br /&gt;
    background: rgba(255,255,255,0.12);&lt;br /&gt;
    border: none;&lt;br /&gt;
    color: #fff;&lt;br /&gt;
    font-size: 0.9em;&lt;br /&gt;
    font-weight: 500;&lt;br /&gt;
    padding: 6px 12px;&lt;br /&gt;
    border-radius: 6px;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
#gr-user-trigger:hover { background: rgba(255,255,255,0.2); }&lt;br /&gt;
#gr-user-trigger .gr-caret { font-size: 0.7em; opacity: 0.8; }&lt;br /&gt;
&lt;br /&gt;
#gr-user-menu {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: calc(100% + 6px);&lt;br /&gt;
    right: 0;&lt;br /&gt;
    min-width: 180px;&lt;br /&gt;
    background: #fff;&lt;br /&gt;
    border: 1px solid #e0d8d2;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
    box-shadow: 0 6px 24px rgba(0,0,0,0.14);&lt;br /&gt;
    padding: 6px;&lt;br /&gt;
    z-index: 1000;&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
#gr-user-menu.gr-open { display: block; }&lt;br /&gt;
#gr-user-menu a {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    gap: 10px;&lt;br /&gt;
    padding: 10px 12px;&lt;br /&gt;
    color: #2c1810;&lt;br /&gt;
    text-decoration: none;&lt;br /&gt;
    font-size: 0.92em;&lt;br /&gt;
    border-radius: 6px;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
#gr-user-menu a:hover { background: #f7f1ed; }&lt;br /&gt;
.vector-user-links a {&lt;br /&gt;
    color: #1C1A17 !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.css&amp;diff=6197</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.css&amp;diff=6197"/>
		<updated>2026-06-11T09:36:59Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ═══════════════════════════════════════════════════════════════════&lt;br /&gt;
   MediaWiki:Common.css — Anandamakaranda&lt;br /&gt;
   Clean rebuild — works on Vector (desktop) + Minerva (mobile)&lt;br /&gt;
   ═══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
&lt;br /&gt;
/* ── 1. CSS VARIABLES ──────────────────────────────────────────── */&lt;br /&gt;
:root {&lt;br /&gt;
  --maroon:       #be100e;&lt;br /&gt;
  --orange:       #e65100;&lt;br /&gt;
  --light-orange: #f57c00;&lt;br /&gt;
  --dark-gray:    #555;&lt;br /&gt;
  --light-gray:   #eee;&lt;br /&gt;
  --muted-gray:   #888;&lt;br /&gt;
  --text:         #1a1a1a;&lt;br /&gt;
  --brown:        #a07040;&lt;br /&gt;
  --light-brown:  #e8d4a0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 2. FONTS ──────────────────────────────────────────────────── */&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;Adishila&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/adishila/Adishila.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: normal; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;Adishila&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/adishila/AdishilaBold.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: bold; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;AdishilaDev&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/AdishilaDev.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: normal; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;AdishilaDev&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/AdishilaDeBv.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: bold; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;AdishilaDevGuru&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/AdishilaDevGuru.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: bold; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;Noto Sans Devanagari&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/Noto_Sans_Devanagari/NotoSansDevanagari.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: normal; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-content-text {&lt;br /&gt;
  font-family: &#039;Adishila&#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output {&lt;br /&gt;
  font-size: 22px;&lt;br /&gt;
  line-height: 1.7;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  max-width: 100%;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  margin: 0; padding: 0;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Danda marks wrap issue&lt;br /&gt;
.mw-parser-output { overflow-wrap: anywhere; }&lt;br /&gt;
&lt;br /&gt;
/* ── 4. HIDE ELEMENTS (both skins) ────────────────────────────── */&lt;br /&gt;
/* Page title */&lt;br /&gt;
h1.firstHeading, #firstHeading, .mw-page-title-main { display: none !important; }&lt;br /&gt;
/* Footer */&lt;br /&gt;
#footer, .mw-footer, .vector-footer, .vector-footer-container,&lt;br /&gt;
footer, .minerva-footer { display: none !important; }&lt;br /&gt;
/* Categories */&lt;br /&gt;
.catlinks, #catlinks, .mw-normal-catlinks, .mw-hidden-catlinks { display: none !important; }&lt;br /&gt;
/* Edit section links */&lt;br /&gt;
.mw-editsection, .mw-editsection-bracket { display: none !important; }&lt;br /&gt;
/* Site notice */&lt;br /&gt;
#siteNotice { display: none !important; }&lt;br /&gt;
/* Watchlist */&lt;br /&gt;
li#pt-watchlist, li#pt-watchlist-kbd { display: none !important; }&lt;br /&gt;
/* Appearance panel */&lt;br /&gt;
#vector-appearance, #vector-appearance-pinned-container,&lt;br /&gt;
#vector-appearance-unpinned-container, .mw-portlet-appearance,&lt;br /&gt;
#p-appearance, [aria-controls=&amp;quot;vector-appearance&amp;quot;] { display: none !important; }&lt;br /&gt;
/* Vector hamburger + sidebar */&lt;br /&gt;
#mw-sidebar-button, .vector-main-menu, .vector-main-menu-container,&lt;br /&gt;
.vector-main-menu-landmark, #vector-main-menu-dropdown { display: none !important; }&lt;br /&gt;
/* Vector search box (we use our own) */&lt;br /&gt;
#p-search, .vector-search-box, .vector-search-box-vue,&lt;br /&gt;
.vector-search-box-collapses { display: none !important; }&lt;br /&gt;
/* Vector page toolbar */&lt;br /&gt;
.vector-page-toolbar, .vector-page-toolbar-container { display: none !important; }&lt;br /&gt;
/* Vector page tools */&lt;br /&gt;
.vector-page-tools { display: none !important; }&lt;br /&gt;
/* Empty paragraphs */&lt;br /&gt;
.mw-parser-output p:empty,&lt;br /&gt;
.mw-parser-output &amp;gt; div &amp;gt; p:empty,&lt;br /&gt;
.mw-heading + p:empty,&lt;br /&gt;
.adhyaya-block + p:empty,&lt;br /&gt;
.verse-block + p:empty { display: none !important; margin: 0 !important; }&lt;br /&gt;
/* Empty divs */&lt;br /&gt;
.adhyaya-block:empty, .mw-parser-output div:empty { display: none !important; }&lt;br /&gt;
/* Cargo hidden */&lt;br /&gt;
.cargo-store-only { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 5. VECTOR HEADER (desktop only) ──────────────────────────── */&lt;br /&gt;
.vector-header-container {&lt;br /&gt;
  background: #b5451b !important;&lt;br /&gt;
  border-bottom: 1px solid rgba(255,255,255,0.12);&lt;br /&gt;
}&lt;br /&gt;
.vector-header {&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  justify-content: space-between !important;&lt;br /&gt;
  padding-left: 20px !important;&lt;br /&gt;
  padding-right: 20px !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-header-start {&lt;br /&gt;
  flex: 0 0 auto !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  gap: 12px;&lt;br /&gt;
}&lt;br /&gt;
.vector-header-end {&lt;br /&gt;
  flex: 0 0 auto !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  margin-left: auto;&lt;br /&gt;
}&lt;br /&gt;
.mw-logo { display: flex !important; align-items: center; opacity: 1 !important; }&lt;br /&gt;
.mw-logo-icon { width: 24px; height: 24px; }&lt;br /&gt;
&lt;br /&gt;
/* Site name */&lt;br /&gt;
.mw-logo-wordmark {&lt;br /&gt;
  font-size: 0 !important;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  flex-direction: column !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-logo-wordmark::before {&lt;br /&gt;
  content: &#039;Anandamakaranda&#039;;&lt;br /&gt;
  font-size: 17px;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-family: system-ui, -apple-system, sans-serif;&lt;br /&gt;
  letter-spacing: -0.01em;&lt;br /&gt;
}&lt;br /&gt;
.mw-logo-wordmark::after {&lt;br /&gt;
  content: &amp;quot;A Digital Archive of Dvaita Vedanta Literature&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  font-weight: 400;&lt;br /&gt;
  color: rgba(255,255,255,0.85);&lt;br /&gt;
  letter-spacing: 0.3px;&lt;br /&gt;
  margin-top: 1px;&lt;br /&gt;
  font-family: sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Header right links */&lt;br /&gt;
.vector-header-end &amp;gt; *:not(#p-search) { color: rgba(255,255,255,0.9) !important; }&lt;br /&gt;
.vector-user-links a { color: rgba(255,255,255,0.9) !important; }&lt;br /&gt;
&lt;br /&gt;
/* User icon white */&lt;br /&gt;
.vector-user-menu-container .vector-icon svg,&lt;br /&gt;
.vector-user-menu-container .vector-icon svg path,&lt;br /&gt;
.vector-user-menu-container .vector-icon svg circle {&lt;br /&gt;
  fill: #fff !important; stroke: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-user-links .vector-user-menu-chevron .vector-icon svg,&lt;br /&gt;
.vector-user-links .vector-user-menu-chevron .vector-icon svg path {&lt;br /&gt;
  fill: rgba(255,255,255,0.9) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* User dropdown — dark text on white card */&lt;br /&gt;
.vector-user-menu .mw-list-item a,&lt;br /&gt;
.vector-user-menu .vector-menu-content-list a,&lt;br /&gt;
#p-personal .vector-menu-content a,&lt;br /&gt;
.mw-portlet-personal .vector-menu-content a { color: #202122 !important; }&lt;br /&gt;
.vector-user-menu .mw-list-item a:hover { color: var(--light-orange) !important; }&lt;br /&gt;
&lt;br /&gt;
/* Suppress Vector sticky header clone */&lt;br /&gt;
.vector-sticky-header { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* Suppress body top padding that Vector adds */&lt;br /&gt;
.mw-body { margin-top: 0 !important; padding-top: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 6. VECTOR TOC (desktop sidebar) ──────────────────────────── */&lt;br /&gt;
.vector-toc .vector-toc-numb { display: none !important; }&lt;br /&gt;
.vector-toc .vector-toc-title {&lt;br /&gt;
  font-size: 0.72em !important; font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase; letter-spacing: 0.08em;&lt;br /&gt;
  color: var(--text) !important;&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, system-ui, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-toc .vector-toc-text {&lt;br /&gt;
  white-space: normal !important; word-break: break-word !important;&lt;br /&gt;
  overflow-wrap: anywhere !important; display: inline !important;&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, system-ui, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-toc a, .vector-toc .vector-toc-link {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, system-ui, sans-serif !important;&lt;br /&gt;
  color: var(--text) !important; text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-toc a:hover { color: var(--light-orange) !important; }&lt;br /&gt;
.vector-toc .vector-toc-list-item-active .vector-toc-link,&lt;br /&gt;
.vector-toc .vector-toc-list-item-active .vector-toc-link * {&lt;br /&gt;
  color: var(--light-orange) !important; font-weight: 700 !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-toc .cdx-button.vector-toc-toggle {&lt;br /&gt;
  background: none !important; border: none !important;&lt;br /&gt;
  box-shadow: none !important; color: var(--text) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 7. HEADINGS ───────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output h1, .mw-parser-output h2, .mw-parser-output h3, .mw-parser-output h4,&lt;br /&gt;
.mw-parser-output .mw-heading h1, .mw-parser-output .mw-heading h2,&lt;br /&gt;
.mw-parser-output .mw-heading h3 {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  border: none !important; padding: 0 !important; background: none !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output .mw-heading { border: none !important; margin: 0; padding: 0; }&lt;br /&gt;
&lt;br /&gt;
.mw-heading, .mw-heading2, .mw-heading3 { text-align:center; }&lt;br /&gt;
.mw-parser-output h2, .mw-parser-output .mw-heading2 h2 {&lt;br /&gt;
  font-size: 1.2em !important; font-weight: 500 !important;&lt;br /&gt;
  color: var(--maroon) !important; line-height: 1.8;&lt;br /&gt;
  margin: 24px 0 4px !important;&lt;br /&gt;
  border-bottom: 2px dotted var(--maroon) !important;&lt;br /&gt;
  width: 75%; font-family: &#039;AdishilaDev&#039;; text-align: center;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output h3, .mw-parser-output .mw-heading3 h3 {&lt;br /&gt;
  font-size: 1em !important; font-weight: 500 !important;&lt;br /&gt;
  color: var(--orange) !important; line-height: 1.5;&lt;br /&gt;
  margin: 24px 0 8px !important;&lt;br /&gt;
  border-bottom: 1px dotted var(--orange) !important;&lt;br /&gt;
  width: 55%; font-family: &#039;AdishilaDev&#039;; text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 8. PARAGRAPHS ─────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output p { margin: 0 0 0.35rem !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 9. DOCUMENT TITLE ─────────────────────────────────────────── */&lt;br /&gt;
.gr-doc-title {&lt;br /&gt;
  font-size: 2em; font-weight: 500; color: var(--maroon);&lt;br /&gt;
  line-height: 1.4; margin: 0 0 16px; border: none !important;&lt;br /&gt;
  text-align:center; font-family: &#039;AdishilaDev&#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 10. VERSE BLOCKS ──────────────────────────────────────────── */&lt;br /&gt;
.shloka-block { display: block; text-align: left; margin: 3px 0 0; padding-bottom: 0.5em; }&lt;br /&gt;
.shloka-line { display: block; font-style: normal; color: #333; line-height: 1.35; margin: 0; }&lt;br /&gt;
.verse-block { display: block; margin: 6px 0 0; text-align: left; }&lt;br /&gt;
.verse-block .shloka-block { text-align: left; margin: 0; }&lt;br /&gt;
.verse-block .shloka-line {&lt;br /&gt;
  display: block; font-style: italic; color: #c65;&lt;br /&gt;
  font-weight: 500; line-height: 1.35; margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.verse-block + p { display: none !important; margin: 0 !important; }&lt;br /&gt;
.mw-parser-output .verse-block,&lt;br /&gt;
.mw-parser-output .shloka-block { margin-top: 2px !important; margin-bottom: 2px !important; }&lt;br /&gt;
&lt;br /&gt;
.gr-verse-text, .verse-line, .verse-text {&lt;br /&gt;
  color: #b5451b; font-style: italic; line-height: 1.5; display: block; margin: 0.1em 0;&lt;br /&gt;
}&lt;br /&gt;
.gr-verse-type-sutra .gr-verse-text,&lt;br /&gt;
.verse-block[data-type=&amp;quot;sutra&amp;quot;] .verse-line { font-style: normal; font-weight: 600; color: #b5451b; }&lt;br /&gt;
&lt;br /&gt;
/* ── 11. UVACHA ────────────────────────────────────────────────── */&lt;br /&gt;
.uvacha-block {&lt;br /&gt;
  display: block; font-weight: bold; color: #c65;&lt;br /&gt;
  margin: 0.5rem 0 0; padding: 2px 0 2px 12px;&lt;br /&gt;
  border-left: 3px solid #c65; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
.uvacha-block + .verse-block { margin-top: 2px; }&lt;br /&gt;
.gr-uvaaca, .uvaaca {&lt;br /&gt;
  color: #b5451b; font-weight: 600; font-size: 0.92em; margin: 0.5em 0 0.2em 0; display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 12. BHASHYAM ──────────────────────────────────────────────── */&lt;br /&gt;
.bhashyam-block {&lt;br /&gt;
  display: block; font-size: 1em; line-height: 1.6; color: #555;&lt;br /&gt;
  margin: 0.25em 0 0.35em 48px; padding: 0; border: none; background: transparent;&lt;br /&gt;
}&lt;br /&gt;
.gr-bhashyam, .commentary-bhashyam {&lt;br /&gt;
  color: #222; font-style: normal; line-height: 1.75; margin: 0.3em 0 0.5em 0;&lt;br /&gt;
}&lt;br /&gt;
.gr-leading-bhashya { font-style: italic; color: #555; margin: 0.4em 0 0.5em 0; }&lt;br /&gt;
&lt;br /&gt;
/* ── 13. PADYA ─────────────────────────────────────────────────── */&lt;br /&gt;
.padya-block {&lt;br /&gt;
  display: block; font-size: 1em; line-height: 1.75; color: #c65 !important;&lt;br /&gt;
  font-style: italic; font-weight: 500; margin: 0.4em 0 0.6em 60px;&lt;br /&gt;
}&lt;br /&gt;
.gr-padapatha { font-size: 0.9em; color: #555; margin: 0.2em 0 0.3em 0.8em; }&lt;br /&gt;
&lt;br /&gt;
/* ── 14. TEEKA ─────────────────────────────────────────────────── */&lt;br /&gt;
.teeka-block {&lt;br /&gt;
  padding: 6px 10px 8px; margin: 0.3em 0; line-height: 1.6; color: #555;&lt;br /&gt;
}&lt;br /&gt;
.teeka-title {&lt;br /&gt;
  font-family: &#039;AdishilaDev&#039;;, sans-serif !important;&lt;br /&gt;
  font-size: 1.75em; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase;&lt;br /&gt;
  margin-bottom: 4px; padding-bottom: 3px;&lt;br /&gt;
}&lt;br /&gt;
.teeka-body .shloka-block {&lt;br /&gt;
  margin: 0.4em 0; padding: 0.3em 0.6em; font-family: &#039;AdishilaDev&#039;;&lt;br /&gt;
}&lt;br /&gt;
.teeka-body .shloka-line { font-style: italic; font-size: 0.97em; font-family: &#039;AdishilaDev&#039;; }&lt;br /&gt;
&lt;br /&gt;
/* ── 15. PRATEEKA / MOOLA ──────────────────────────────────────── */&lt;br /&gt;
.gr-prateeka { font-weight: bold; font-style: normal; color: #333; }&lt;br /&gt;
.gr-mulaprateeka-block {&lt;br /&gt;
  display: block; font-weight: bold; font-style: normal;&lt;br /&gt;
  text-align: center; color: #333; margin: 0.7em 0 0.3em; line-height: 1.5;&lt;br /&gt;
}&lt;br /&gt;
.gr-moola { font-weight: bold; font-style: italic; color: #c65; }&lt;br /&gt;
&lt;br /&gt;
/* ── 16. ADHYAYA ───────────────────────────────────────────────── */&lt;br /&gt;
.adhyaya-block { margin: 0 0 4px; }&lt;br /&gt;
.adhyaya-trans { font-size: 0.9em; color: #666; margin: 2px 0 0; }&lt;br /&gt;
.adhyaya-intro { margin-top: 8px; line-height: 1.75; color: #555; }&lt;br /&gt;
.introduction p { color: var(--dark-gray); font-weight: 400; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.introduction { padding-bottom: 0.5em; text-align: justify; }&lt;br /&gt;
&lt;br /&gt;
/* ── 17. NYAYA / PRASNA ────────────────────────────────────────── */&lt;br /&gt;
.nyaya-block { margin: 32px 0; padding-top: 12px; border-top: 1px solid #eee; }&lt;br /&gt;
.nyaya-title {&lt;br /&gt;
  font-size: 1em; font-weight: 500; color: var(--orange);&lt;br /&gt;
  margin-bottom: 0.4rem; border-bottom: 1px dotted var(--orange); width: 50%;&lt;br /&gt;
}&lt;br /&gt;
.nyaya-body { color: #555; line-height: 1.75; margin-top: 0.5rem; }&lt;br /&gt;
.prasna-block { margin: 32px 0; padding-top: 12px; border-top: 1px solid #eee; }&lt;br /&gt;
.prasna-title {&lt;br /&gt;
  font-size: 1em; font-weight: 500; color: var(--orange);&lt;br /&gt;
  margin-bottom: 0.4rem; border-bottom: 1px dotted var(--orange); width: 50%;&lt;br /&gt;
}&lt;br /&gt;
.prasna-question, .prasna-answer { color: #555; line-height: 1.75; margin-top: 0.5rem; }&lt;br /&gt;
.prasna-answer { margin-left: 60px; }&lt;br /&gt;
&lt;br /&gt;
/* ── 18. VYAKHYA ELEMENTS ──────────────────────────────────────── */&lt;br /&gt;
.gr-vyakhya-head, .gr-section-head {&lt;br /&gt;
  font-size: 0.9em; font-weight: 700; color: #6a3e00;&lt;br /&gt;
  margin: 0.35em 0 0.15em; font-family: inherit; border: none; padding: 0;&lt;br /&gt;
}&lt;br /&gt;
.gr-avataranika {&lt;br /&gt;
  font-style: italic; color: #444; margin: 0.2em 0 0.5em 0.5em;&lt;br /&gt;
  padding-left: 0.6em; border-left: 2px solid #c9a96e; line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
.gr-vyakhya-pada {&lt;br /&gt;
  font-size: 0.88em; color: #555; background: #fafafa;&lt;br /&gt;
  border: 1px solid #e8e0d0; border-radius: 4px; padding: 0.5em 0.8em;&lt;br /&gt;
  margin: 0.5em 0; line-height: 1.5; white-space: pre-wrap;&lt;br /&gt;
}&lt;br /&gt;
.gr-vyakhya-gadya {&lt;br /&gt;
  font-weight: bold; font-size: 0.95em; text-align: center;&lt;br /&gt;
  color: #8b1a1a; margin: 0.2em 0; line-height: 1.6; letter-spacing: 0.03em;&lt;br /&gt;
}&lt;br /&gt;
.gr-vyakhya-para { margin: 0 0 0.5em 0; line-height: 1.65; color: #444; }&lt;br /&gt;
.gr-embedded-bhashya { margin: 0.2em 0 0.2em 1em; line-height: 1.6; }&lt;br /&gt;
.gr-gadya {&lt;br /&gt;
  display: block !important; font-size: 0.96em !important; font-weight: 600 !important;&lt;br /&gt;
  font-style: normal !important; color: #555 !important; margin: 16px 0 4px !important;&lt;br /&gt;
  border-bottom: 1px solid #ddd !important; width: 60%; line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
.gr-author-note {&lt;br /&gt;
  font-style: italic; color: var(--maroon); text-align: center; font-size: 0.9em;&lt;br /&gt;
  margin: 0.8em 0 0.4em 0; border-top: 1px solid #ddd; padding-top: 0.4em; font-family: &#039;AdishilaDev&#039;&lt;br /&gt;
}&lt;br /&gt;
.gr-devatachandas { font-size: 0.82em; color: #777; margin: 0.4em 0 0.2em 0; }&lt;br /&gt;
.gr-vargikarana   { font-size: 0.82em; color: #888; margin: 0.5em 0 0.1em 0; }&lt;br /&gt;
&lt;br /&gt;
/* ── 20. BHASHYA COLLECTION ────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output .bhashya-collection { margin: 0; padding: 0; }&lt;br /&gt;
.mw-parser-output .bhashya + p:empty,&lt;br /&gt;
.mw-parser-output .verse + p:empty,&lt;br /&gt;
.mw-parser-output .bhashya-collection + p:empty,&lt;br /&gt;
.mw-parser-output .pramana + p:empty,&lt;br /&gt;
.mw-parser-output .author-note + p:empty { display: none !important; margin: 0 !important; height: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 21. VERSE ACTIONS ─────────────────────────────────────────── */&lt;br /&gt;
.verse-actions {&lt;br /&gt;
  display: flex; flex-direction: row; align-items: center;&lt;br /&gt;
  gap: 6px; margin-top: 4px; justify-content: center;&lt;br /&gt;
}&lt;br /&gt;
.verse-action-btn {&lt;br /&gt;
  display: inline-flex; align-items: center; justify-content: center;&lt;br /&gt;
  padding: 4px; border-radius: 6px; cursor: pointer; opacity: 0.75; transition: all 0.2s;&lt;br /&gt;
}&lt;br /&gt;
.verse-action-btn:hover { opacity: 1; background-color: rgba(0,0,0,0.05); }&lt;br /&gt;
.icon { display: inline-block; width: 18px; height: 18px; background-repeat: no-repeat; background-position: center; background-size: contain; }&lt;br /&gt;
.icon-copy       { background-image: url(&#039;/images/copy.svg&#039;); }&lt;br /&gt;
.icon-commentary { background-image: url(&#039;/images/commentary.svg&#039;); }&lt;br /&gt;
.copy-tooltip {&lt;br /&gt;
  position: absolute; bottom: calc(100% + 8px); left: 50%;&lt;br /&gt;
  transform: translateX(-50%) translateY(4px);&lt;br /&gt;
  white-space: nowrap; pointer-events: none; z-index: 9999;&lt;br /&gt;
  display: inline-flex; align-items: center; padding: 2px 8px; border-radius: 999px;&lt;br /&gt;
  font-size: 0.75rem; font-weight: 500; background: rgba(30,30,30,0.82); color: #fff;&lt;br /&gt;
  opacity: 0; transition: opacity 0.2s, transform 0.2s;&lt;br /&gt;
}&lt;br /&gt;
.copy-tooltip.copy-tooltip-visible { opacity: 1; transform: translateX(-50%) translateY(0); }&lt;br /&gt;
&lt;br /&gt;
/* ── 22. CODE / PRE ────────────────────────────────────────────── */&lt;br /&gt;
pre, code, .mw-code, tt, kbd {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif ;&lt;br /&gt;
  background-color: transparent !important; border: none !important; padding: 0.3em 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-collapsible, .mw-collapsible-content, blockquote, .quotebox {&lt;br /&gt;
  background-color: transparent !important; border: none !important;&lt;br /&gt;
  font-style: normal !important; padding: 0 !important; margin-left: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 23. INLINE TOC BOX (wikitext __TOC__) ─────────────────────── */&lt;br /&gt;
.toc {&lt;br /&gt;
  display: block !important; background: #fffdf5; border: 1px solid #e8c88a;&lt;br /&gt;
  border-radius: 8px; padding: 12px 16px; margin: 0 0 24px 0;&lt;br /&gt;
  width: fit-content; min-width: 220px; max-width: 420px;&lt;br /&gt;
  font-size: 0.9em; line-height: 2;&lt;br /&gt;
}&lt;br /&gt;
.toc h2, .toc .toctitle {&lt;br /&gt;
  font-size: 0.85em !important; font-weight: 600 !important; color: var(--text) !important;&lt;br /&gt;
  border: none !important; margin: 0 0 6px !important; text-transform: uppercase; letter-spacing: 0.05em;&lt;br /&gt;
}&lt;br /&gt;
.toc ul { margin: 0 !important; padding-left: 1.2em !important; list-style: none !important; }&lt;br /&gt;
.toc li { margin: 0; padding: 0; }&lt;br /&gt;
.toc a { color: var(--text) !important; text-decoration: none !important; }&lt;br /&gt;
.toc a:hover { color: var(--light-orange) !important; }&lt;br /&gt;
.toc .toclevel-1 &amp;gt; a { font-weight: 600; }&lt;br /&gt;
.tocnumber { display: none; }&lt;br /&gt;
&lt;br /&gt;
/* ── 24. DOC TEEKAS + TOC NAV ──────────────────────────────────── */&lt;br /&gt;
.gr-doc-teekas { margin-bottom: 1em; }&lt;br /&gt;
.gr-doc-teekas + p:empty { display: none !important; margin: 0 !important; height: 0 !important; }&lt;br /&gt;
.toc-main-links { display: flex; gap: 6px; padding: 5px; align-items: center; margin-bottom: 4px; }&lt;br /&gt;
.toc-main-link-item {&lt;br /&gt;
  font-size: 0.9em; color: var(--text); text-decoration: none; padding: 4px 8px;&lt;br /&gt;
  border-radius: 6px; background: rgba(0,0,0,0.05); transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.toc-main-link-item:hover { background: rgba(0,0,0,0.10) !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 25. MAIN PAGE ─────────────────────────────────────────────── */&lt;br /&gt;
body.page-Main_Page #mw-panel,&lt;br /&gt;
body.page-Main_Page .vector-sidebar-container { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
.gr-home { max-width: 1080px; margin: 0 auto; padding: 0; }&lt;br /&gt;
.gr-home-page-title {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif !important;&lt;br /&gt;
  text-align: center; font-size: 1.8em; font-weight: 500; color: #1a2e40; margin: 24px 0 32px;&lt;br /&gt;
}&lt;br /&gt;
.gr-home-grid { display: flex; flex-wrap: wrap; gap: 20px; margin-bottom: 32px; }&lt;br /&gt;
.gr-home-card {&lt;br /&gt;
  background: #fff; border: 1px solid #e8e4df; border-radius: 10px;&lt;br /&gt;
  box-shadow: 0 2px 8px rgba(0,0,0,0.07);&lt;br /&gt;
  padding: 18px 20px 20px; flex: 1 1 280px; min-width: 240px; max-width: 360px;&lt;br /&gt;
}&lt;br /&gt;
.gr-home-card-title {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif !important;&lt;br /&gt;
  font-size: 1em; font-weight: 600; color: #1a2e40; text-align: center;&lt;br /&gt;
  padding-bottom: 10px; margin-bottom: 12px; border-bottom: 1.5px solid #c0392b;&lt;br /&gt;
}&lt;br /&gt;
.gr-home-card ol { margin: 0; padding-left: 1.4em; list-style: decimal; }&lt;br /&gt;
.gr-home-card li { font-size: 0.95em; line-height: 1.85; color: #333; }&lt;br /&gt;
.gr-home-card li a { color: #c0392b; text-decoration: none; }&lt;br /&gt;
.gr-home-card li a:hover { text-decoration: underline; }&lt;br /&gt;
.gr-home-card li a.new { color: #c08080; }&lt;br /&gt;
.gr-home-note { font-size: 0.82em; color: #888; }&lt;br /&gt;
.gr-home-group-label {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif !important;&lt;br /&gt;
  font-size: 1.1em; font-weight: 600; color: #1a2e40; text-align: center;&lt;br /&gt;
  margin: 36px 0 16px; padding-bottom: 8px; border-bottom: 2px solid #c0392b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 26. TOGGLE BUTTONS ────────────────────────────────────────── */&lt;br /&gt;
.gr-home-toggle { display: flex; gap: 8px; margin: 0 0 24px; justify-content: center; }&lt;br /&gt;
.gr-toggle-btn {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  font-size: 0.88em; padding: 6px 20px; border: 1.5px solid #c0392b; border-radius: 20px;&lt;br /&gt;
  background: transparent; color: #c0392b; cursor: pointer; user-select: none; transition: background 0.15s, color 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gr-toggle-btn:hover { background: #fdf0ed; }&lt;br /&gt;
.gr-toggle-btn.gr-toggle-active { background: #c0392b; color: #fff; }&lt;br /&gt;
&lt;br /&gt;
/* ── 27. SCRIPT BAR ────────────────────────────────────────────── */&lt;br /&gt;
.gr-script-bar { margin: 0 0 20px; font-size: 0.8em; color: #888; display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }&lt;br /&gt;
.gr-script-label { font-family: system-ui, sans-serif; color: #aaa; }&lt;br /&gt;
.gr-script-btn { font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif; color: #c0392b !important; text-decoration: underline dotted !important; cursor: pointer; }&lt;br /&gt;
.gr-script-btn.active { color: #888 !important; text-decoration: none !important; cursor: default; }&lt;br /&gt;
&lt;br /&gt;
/* ── 28. MODALS ────────────────────────────────────────────────── */&lt;br /&gt;
.grantha-modal { position: fixed; inset: 0; background: rgba(0,0,0,0.35); display: flex; align-items: center; justify-content: center; z-index: 10000; }&lt;br /&gt;
.grantha-modal-box { background: white; padding: 20px; border-radius: 10px; width: 300px; }&lt;br /&gt;
.gm-title { font-weight: bold; margin-bottom: 10px; }&lt;br /&gt;
.gm-actions { display: flex; justify-content: flex-end; gap: 10px; margin-top: 12px; }&lt;br /&gt;
&lt;br /&gt;
/* ── 29. LOGIN PAGE ────────────────────────────────────────────── */&lt;br /&gt;
body.page-Special_UserLogin .vector-search-box,&lt;br /&gt;
body.page-Special_UserLogin #p-search { display: none !important; }&lt;br /&gt;
body.page-Special_UserLogin #content { max-width: 420px; margin: 40px auto !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 30. SPECIAL PAGES ─────────────────────────────────────────── */&lt;br /&gt;
body.ns-special #footer, body.ns-special .mw-footer,&lt;br /&gt;
body.ns-special .vector-footer { display: none !important; }&lt;br /&gt;
body.ns-special .vector-page-tools { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 31. MINERVA (mobile) ──────────────────────────────────────── */&lt;br /&gt;
.skin-minerva .mw-parser-output {&lt;br /&gt;
  font-size: 18px !important;&lt;br /&gt;
  line-height: 1.8 !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .mw-parser-output h2,&lt;br /&gt;
.skin-minerva .mw-parser-output .mw-heading2 h2 {&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .mw-parser-output h3,&lt;br /&gt;
.skin-minerva .mw-parser-output .mw-heading3 h3 {&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .bhashyam-block { margin-left: 16px !important; }&lt;br /&gt;
.skin-minerva .prasna-answer  { margin-left: 16px !important; }&lt;br /&gt;
.skin-minerva .padya-block    { margin-left: 16px !important; }&lt;br /&gt;
/* Home grid single column on Minerva */&lt;br /&gt;
.skin-minerva .gr-home-grid {&lt;br /&gt;
  flex-direction: column !important;&lt;br /&gt;
  flex-wrap: nowrap !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .gr-home-card {&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
  min-width: unset !important;&lt;br /&gt;
  flex: 0 0 auto !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
/* Hide things that should be hidden on mobile too */&lt;br /&gt;
.skin-minerva .catlinks,&lt;br /&gt;
.skin-minerva #catlinks { display: none !important; }&lt;br /&gt;
.skin-minerva .mw-editsection { display: none !important; }&lt;br /&gt;
/* Minerva already has its own TOC — hide our inline .toc */&lt;br /&gt;
.skin-minerva .toc { display: none !important; }&lt;br /&gt;
/* ReaderToolbar on Minerva */&lt;br /&gt;
.skin-minerva #gr-static-bar {&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  min-height: 52px !important;&lt;br /&gt;
  overflow-x: auto !important;&lt;br /&gt;
  overflow-y: hidden !important;&lt;br /&gt;
  scrollbar-width: none !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva #gr-static-bar::-webkit-scrollbar { display: none !important; }&lt;br /&gt;
.skin-minerva .gr-controls .gr-btn {&lt;br /&gt;
  height: 44px !important;&lt;br /&gt;
  min-width: 44px !important;&lt;br /&gt;
  font-size: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .gr-btn-staging { display: none !important; }&lt;br /&gt;
.skin-minerva .gr-controls .gr-sep { display: none !important; }&lt;br /&gt;
/* Minerva already shows page title — don&#039;t double-hide */&lt;br /&gt;
.skin-minerva h1.firstHeading { display: block !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 32. PRINT ─────────────────────────────────────────────────── */&lt;br /&gt;
@media print {&lt;br /&gt;
  #gr-static-bar, .gr-controls, .vector-header-container { display: none !important; }&lt;br /&gt;
  .mw-parser-output { font-size: 11pt !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 33. TYPOGRAPHY CLASSES ────────────────────────────────────── */&lt;br /&gt;
&lt;br /&gt;
/* Heading — center, maroon, AdishilaDevGuru */&lt;br /&gt;
.gr-heading {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  font-size: 1.09em;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  color: #be100e;&lt;br /&gt;
  font-family: &#039;AdishilaDevGuru&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  line-height: 1.4;&lt;br /&gt;
  margin: 0.45em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Sub-heading — center, orange, AdishilaDevGuru */&lt;br /&gt;
.gr-sub-heading {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  font-size: 0.73em;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  color: #e65100;&lt;br /&gt;
  font-family: &#039;AdishilaDevGuru&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
  margin: 0.5em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Chapter Heading — center, maroon, AdishilaDevGuru */&lt;br /&gt;
.gr-chapter-heading {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  font-size: 0.82em;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  color: #be100e;&lt;br /&gt;
  font-family: &#039;AdishilaDevGuru&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
  margin: 0.5em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* M.Veda Shloka — left, bold, maroon, AdishilaVed, 5mm indent */&lt;br /&gt;
.gr-mv-shloka {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: left;&lt;br /&gt;
  font-size: 0.82em;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  color: #be100e;&lt;br /&gt;
  font-family: &#039;AdishilaVed&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  padding-left: 0.86em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.75;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* M.Veda Gadya — justify, bold, maroon, AdishilaVed */&lt;br /&gt;
.gr-mv-gadya {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: justify;&lt;br /&gt;
  font-size: 0.82em;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  color: #be100e;&lt;br /&gt;
  font-family: &#039;AdishilaVed&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  text-indent: 1.18em;&lt;br /&gt;
  padding-left: 0.36em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.75;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* M.Shloka — left, bold, orange, AdishilaDev, 5mm indent */&lt;br /&gt;
.gr-m-shloka {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: left;&lt;br /&gt;
  font-size: 0.82em;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  color: #e65100;&lt;br /&gt;
  font-family: &#039;AdishilaDev&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  padding-left: 0.86em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.75;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* B.Shloka / TK.Shloka / TP.Shloka — left, black, AdishilaDev, 10mm indent */&lt;br /&gt;
.gr-b-shloka,&lt;br /&gt;
.gr-tp-shloka {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: left;&lt;br /&gt;
  font-size: 0.73em;&lt;br /&gt;
  font-weight: normal;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  font-family: &#039;AdishilaDev&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  padding-left: 1.73em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.75;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Reference — orange, AdishilaDev */&lt;br /&gt;
.gr-reference {&lt;br /&gt;
  color: #e65100;&lt;br /&gt;
  font-family: &#039;AdishilaDev&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Custom tag span — subtle dashed underline only */&lt;br /&gt;
.gr-custom {&lt;br /&gt;
  border-bottom: 1px dashed #b5451b;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 34. MINERVA HEADER — orange theme + sticky ────────────────── */&lt;br /&gt;
&lt;br /&gt;
/* Kill space above header */&lt;br /&gt;
.skin-minerva body { margin-top: 0 !important; padding-top: 0 !important; }&lt;br /&gt;
.skin-minerva #mw-mf-viewport,&lt;br /&gt;
.skin-minerva #mw-mf-page-center { margin-top: 0 !important; padding-top: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* Header — orange, sticky */&lt;br /&gt;
.skin-minerva header.header-container {&lt;br /&gt;
  background: #b5451b !important;&lt;br /&gt;
  position: sticky !important;&lt;br /&gt;
  top: 0 !important;&lt;br /&gt;
  z-index: 200 !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  color: #ffffff;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .minerva-header {&lt;br /&gt;
  background: #b5451b !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  min-height: 54px !important;&lt;br /&gt;
  padding: 0 12px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.minerva-icon {&lt;br /&gt;
 &lt;br /&gt;
 filter: brightness(0) saturate(100%) invert(100%) sepia(4%) saturate(1%) hue-rotate(296deg) brightness(104%) contrast(100%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Site name text */&lt;br /&gt;
.skin-minerva .branding-box { background: transparent !important; }&lt;br /&gt;
.skin-minerva .branding-box a {&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .branding-box a span {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-size: 18px !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  font-family: system-ui, -apple-system, sans-serif !important;&lt;br /&gt;
  white-space: nowrap !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hamburger + search icons — white */&lt;br /&gt;
.skin-minerva .minerva-header label,&lt;br /&gt;
.skin-minerva .minerva-header .search-toggle {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .minerva-header svg path,&lt;br /&gt;
.skin-minerva .minerva-header svg rect,&lt;br /&gt;
.skin-minerva .minerva-header svg circle {&lt;br /&gt;
  fill: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .minerva-header .mw-ui-icon:before {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  filter: brightness(10) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Reader toolbar below Minerva header */&lt;br /&gt;
.skin-minerva #gr-static-bar {&lt;br /&gt;
  position: sticky !important;&lt;br /&gt;
  top: 54px !important;&lt;br /&gt;
  z-index: 100 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 35. MINERVA — auto-expand sections ────────────────────────── */&lt;br /&gt;
.skin-minerva .collapsible-block,&lt;br /&gt;
.skin-minerva .collapsible-heading + .collapsible-block {&lt;br /&gt;
  display: block !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .mf-section-0,&lt;br /&gt;
.skin-minerva .mf-section-1,&lt;br /&gt;
.skin-minerva .mf-section-2,&lt;br /&gt;
.skin-minerva .mf-section-3,&lt;br /&gt;
.skin-minerva .mf-section-4,&lt;br /&gt;
.skin-minerva .mf-section-5,&lt;br /&gt;
.skin-minerva .mf-section-6,&lt;br /&gt;
.skin-minerva .mf-section-7,&lt;br /&gt;
.skin-minerva .mf-section-8,&lt;br /&gt;
.skin-minerva .mf-section-9 {&lt;br /&gt;
  display: block !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .section-heading {&lt;br /&gt;
  pointer-events: none !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .section-heading .indicator {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* ── Hide MediaWiki default header user/account controls (desktop) ── */&lt;br /&gt;
#pt-userpage-2,&lt;br /&gt;
#p-vector-user-menu-userpage,&lt;br /&gt;
/* Hide the right-side person-icon dropdown */&lt;br /&gt;
#vector-user-links-dropdown,&lt;br /&gt;
.vector-user-links-dropdown,&lt;br /&gt;
#p-personal-more,&lt;br /&gt;
.vector-user-menu,&lt;br /&gt;
.mw-portlet-vector-user-menu-overflow,&lt;br /&gt;
#pt-watchlist-2 {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Hide original userpage text link */&lt;br /&gt;
#p-vector-user-menu-userpage { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* Hide the right-side person-icon user menu dropdown */&lt;br /&gt;
#vector-user-links-dropdown { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Custom username dropdown ── */&lt;br /&gt;
#gr-user-dropdown {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    font-family: system-ui, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
#gr-user-trigger {&lt;br /&gt;
    display: inline-flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    gap: 6px;&lt;br /&gt;
    background: rgba(255,255,255,0.12);&lt;br /&gt;
    border: none;&lt;br /&gt;
    color: #fff;&lt;br /&gt;
    font-size: 0.9em;&lt;br /&gt;
    font-weight: 500;&lt;br /&gt;
    padding: 6px 12px;&lt;br /&gt;
    border-radius: 6px;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
#gr-user-trigger:hover { background: rgba(255,255,255,0.2); }&lt;br /&gt;
#gr-user-trigger .gr-caret { font-size: 0.7em; opacity: 0.8; }&lt;br /&gt;
&lt;br /&gt;
#gr-user-menu {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: calc(100% + 6px);&lt;br /&gt;
    right: 0;&lt;br /&gt;
    min-width: 180px;&lt;br /&gt;
    background: #fff;&lt;br /&gt;
    border: 1px solid #e0d8d2;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
    box-shadow: 0 6px 24px rgba(0,0,0,0.14);&lt;br /&gt;
    padding: 6px;&lt;br /&gt;
    z-index: 1000;&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
#gr-user-menu.gr-open { display: block; }&lt;br /&gt;
#gr-user-menu a {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    gap: 10px;&lt;br /&gt;
    padding: 10px 12px;&lt;br /&gt;
    color: #2c1810;&lt;br /&gt;
    text-decoration: none;&lt;br /&gt;
    font-size: 0.92em;&lt;br /&gt;
    border-radius: 6px;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
#gr-user-menu a:hover { background: #f7f1ed; }&lt;br /&gt;
.vector-user-links a {&lt;br /&gt;
    color: #1C1A17 !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.css&amp;diff=6196</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.css&amp;diff=6196"/>
		<updated>2026-06-11T09:32:01Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ═══════════════════════════════════════════════════════════════════&lt;br /&gt;
   MediaWiki:Common.css — Anandamakaranda&lt;br /&gt;
   Clean rebuild — works on Vector (desktop) + Minerva (mobile)&lt;br /&gt;
   ═══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
&lt;br /&gt;
/* ── 1. CSS VARIABLES ──────────────────────────────────────────── */&lt;br /&gt;
:root {&lt;br /&gt;
  --maroon:       #be100e;&lt;br /&gt;
  --orange:       #e65100;&lt;br /&gt;
  --light-orange: #f57c00;&lt;br /&gt;
  --dark-gray:    #555;&lt;br /&gt;
  --light-gray:   #eee;&lt;br /&gt;
  --muted-gray:   #888;&lt;br /&gt;
  --text:         #1a1a1a;&lt;br /&gt;
  --brown:        #a07040;&lt;br /&gt;
  --light-brown:  #e8d4a0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 2. FONTS ──────────────────────────────────────────────────── */&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;Adishila&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/adishila/Adishila.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: normal; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;Adishila&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/adishila/AdishilaBold.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: bold; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;AdishilaDev&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/AdishilaDev.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: normal; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;AdishilaDev&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/AdishilaDeBv.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: bold; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;AdishilaDevGuru&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/AdishilaDevGuru.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: bold; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;Noto Sans Devanagari&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/Noto_Sans_Devanagari/NotoSansDevanagari.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: normal; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-content-text {&lt;br /&gt;
  font-family: &#039;Adishila&#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output {&lt;br /&gt;
  font-size: 22px;&lt;br /&gt;
  line-height: 1.7;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  max-width: 100%;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  margin: 0; padding: 0;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Danda marks wrap issue&lt;br /&gt;
.mw-parser-output { overflow-wrap: anywhere; }&lt;br /&gt;
&lt;br /&gt;
/* ── 4. HIDE ELEMENTS (both skins) ────────────────────────────── */&lt;br /&gt;
/* Page title */&lt;br /&gt;
h1.firstHeading, #firstHeading, .mw-page-title-main { display: none !important; }&lt;br /&gt;
/* Footer */&lt;br /&gt;
#footer, .mw-footer, .vector-footer, .vector-footer-container,&lt;br /&gt;
footer, .minerva-footer { display: none !important; }&lt;br /&gt;
/* Categories */&lt;br /&gt;
.catlinks, #catlinks, .mw-normal-catlinks, .mw-hidden-catlinks { display: none !important; }&lt;br /&gt;
/* Edit section links */&lt;br /&gt;
.mw-editsection, .mw-editsection-bracket { display: none !important; }&lt;br /&gt;
/* Site notice */&lt;br /&gt;
#siteNotice { display: none !important; }&lt;br /&gt;
/* Watchlist */&lt;br /&gt;
li#pt-watchlist, li#pt-watchlist-kbd { display: none !important; }&lt;br /&gt;
/* Appearance panel */&lt;br /&gt;
#vector-appearance, #vector-appearance-pinned-container,&lt;br /&gt;
#vector-appearance-unpinned-container, .mw-portlet-appearance,&lt;br /&gt;
#p-appearance, [aria-controls=&amp;quot;vector-appearance&amp;quot;] { display: none !important; }&lt;br /&gt;
/* Vector hamburger + sidebar */&lt;br /&gt;
#mw-sidebar-button, .vector-main-menu, .vector-main-menu-container,&lt;br /&gt;
.vector-main-menu-landmark, #vector-main-menu-dropdown { display: none !important; }&lt;br /&gt;
/* Vector search box (we use our own) */&lt;br /&gt;
#p-search, .vector-search-box, .vector-search-box-vue,&lt;br /&gt;
.vector-search-box-collapses { display: none !important; }&lt;br /&gt;
/* Vector page toolbar */&lt;br /&gt;
.vector-page-toolbar, .vector-page-toolbar-container { display: none !important; }&lt;br /&gt;
/* Vector page tools */&lt;br /&gt;
.vector-page-tools { display: none !important; }&lt;br /&gt;
/* Empty paragraphs */&lt;br /&gt;
.mw-parser-output p:empty,&lt;br /&gt;
.mw-parser-output &amp;gt; div &amp;gt; p:empty,&lt;br /&gt;
.mw-heading + p:empty,&lt;br /&gt;
.adhyaya-block + p:empty,&lt;br /&gt;
.verse-block + p:empty { display: none !important; margin: 0 !important; }&lt;br /&gt;
/* Empty divs */&lt;br /&gt;
.adhyaya-block:empty, .mw-parser-output div:empty { display: none !important; }&lt;br /&gt;
/* Cargo hidden */&lt;br /&gt;
.cargo-store-only { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 5. VECTOR HEADER (desktop only) ──────────────────────────── */&lt;br /&gt;
.vector-header-container {&lt;br /&gt;
  background: #b5451b !important;&lt;br /&gt;
  border-bottom: 1px solid rgba(255,255,255,0.12);&lt;br /&gt;
}&lt;br /&gt;
.vector-header {&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  justify-content: space-between !important;&lt;br /&gt;
  padding-left: 20px !important;&lt;br /&gt;
  padding-right: 20px !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-header-start {&lt;br /&gt;
  flex: 0 0 auto !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  gap: 12px;&lt;br /&gt;
}&lt;br /&gt;
.vector-header-end {&lt;br /&gt;
  flex: 0 0 auto !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  margin-left: auto;&lt;br /&gt;
}&lt;br /&gt;
.mw-logo { display: flex !important; align-items: center; opacity: 1 !important; }&lt;br /&gt;
.mw-logo-icon { width: 24px; height: 24px; }&lt;br /&gt;
&lt;br /&gt;
/* Site name */&lt;br /&gt;
.mw-logo-wordmark {&lt;br /&gt;
  font-size: 0 !important;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  flex-direction: column !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-logo-wordmark::before {&lt;br /&gt;
  content: &#039;Anandamakaranda&#039;;&lt;br /&gt;
  font-size: 17px;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-family: system-ui, -apple-system, sans-serif;&lt;br /&gt;
  letter-spacing: -0.01em;&lt;br /&gt;
}&lt;br /&gt;
.mw-logo-wordmark::after {&lt;br /&gt;
  content: &amp;quot;A Digital Archive of Dvaita Vedanta Literature&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  font-weight: 400;&lt;br /&gt;
  color: rgba(255,255,255,0.85);&lt;br /&gt;
  letter-spacing: 0.3px;&lt;br /&gt;
  margin-top: 1px;&lt;br /&gt;
  font-family: sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Header right links */&lt;br /&gt;
.vector-header-end &amp;gt; *:not(#p-search) { color: rgba(255,255,255,0.9) !important; }&lt;br /&gt;
.vector-user-links a { color: rgba(255,255,255,0.9) !important; }&lt;br /&gt;
&lt;br /&gt;
/* User icon white */&lt;br /&gt;
.vector-user-menu-container .vector-icon svg,&lt;br /&gt;
.vector-user-menu-container .vector-icon svg path,&lt;br /&gt;
.vector-user-menu-container .vector-icon svg circle {&lt;br /&gt;
  fill: #fff !important; stroke: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-user-links .vector-user-menu-chevron .vector-icon svg,&lt;br /&gt;
.vector-user-links .vector-user-menu-chevron .vector-icon svg path {&lt;br /&gt;
  fill: rgba(255,255,255,0.9) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* User dropdown — dark text on white card */&lt;br /&gt;
.vector-user-menu .mw-list-item a,&lt;br /&gt;
.vector-user-menu .vector-menu-content-list a,&lt;br /&gt;
#p-personal .vector-menu-content a,&lt;br /&gt;
.mw-portlet-personal .vector-menu-content a { color: #202122 !important; }&lt;br /&gt;
.vector-user-menu .mw-list-item a:hover { color: var(--light-orange) !important; }&lt;br /&gt;
&lt;br /&gt;
/* Suppress Vector sticky header clone */&lt;br /&gt;
.vector-sticky-header { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* Suppress body top padding that Vector adds */&lt;br /&gt;
.mw-body { margin-top: 0 !important; padding-top: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 6. VECTOR TOC (desktop sidebar) ──────────────────────────── */&lt;br /&gt;
.vector-toc .vector-toc-numb { display: none !important; }&lt;br /&gt;
.vector-toc .vector-toc-title {&lt;br /&gt;
  font-size: 0.72em !important; font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase; letter-spacing: 0.08em;&lt;br /&gt;
  color: var(--text) !important;&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, system-ui, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-toc .vector-toc-text {&lt;br /&gt;
  white-space: normal !important; word-break: break-word !important;&lt;br /&gt;
  overflow-wrap: anywhere !important; display: inline !important;&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, system-ui, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-toc a, .vector-toc .vector-toc-link {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, system-ui, sans-serif !important;&lt;br /&gt;
  color: var(--text) !important; text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-toc a:hover { color: var(--light-orange) !important; }&lt;br /&gt;
.vector-toc .vector-toc-list-item-active .vector-toc-link,&lt;br /&gt;
.vector-toc .vector-toc-list-item-active .vector-toc-link * {&lt;br /&gt;
  color: var(--light-orange) !important; font-weight: 700 !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-toc .cdx-button.vector-toc-toggle {&lt;br /&gt;
  background: none !important; border: none !important;&lt;br /&gt;
  box-shadow: none !important; color: var(--text) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 7. HEADINGS ───────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output h1, .mw-parser-output h2, .mw-parser-output h3, .mw-parser-output h4,&lt;br /&gt;
.mw-parser-output .mw-heading h1, .mw-parser-output .mw-heading h2,&lt;br /&gt;
.mw-parser-output .mw-heading h3 {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  border: none !important; padding: 0 !important; background: none !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output .mw-heading { border: none !important; margin: 0; padding: 0; }&lt;br /&gt;
&lt;br /&gt;
.mw-heading, .mw-heading2, .mw-heading3 { text-align:center; }&lt;br /&gt;
.mw-parser-output h2, .mw-parser-output .mw-heading2 h2 {&lt;br /&gt;
  font-size: 1.2em !important; font-weight: 500 !important;&lt;br /&gt;
  color: var(--maroon) !important; line-height: 1.8;&lt;br /&gt;
  margin: 24px 0 4px !important;&lt;br /&gt;
  border-bottom: 2px dotted var(--maroon) !important;&lt;br /&gt;
  width: 75%; font-family: &#039;AdishilaDev&#039;; text-align: center;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output h3, .mw-parser-output .mw-heading3 h3 {&lt;br /&gt;
  font-size: 1em !important; font-weight: 500 !important;&lt;br /&gt;
  color: var(--orange) !important; line-height: 1.5;&lt;br /&gt;
  margin: 24px 0 8px !important;&lt;br /&gt;
  border-bottom: 1px dotted var(--orange) !important;&lt;br /&gt;
  width: 55%; font-family: &#039;AdishilaDev&#039;; text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 8. PARAGRAPHS ─────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output p { margin: 0 0 0.35rem !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 9. DOCUMENT TITLE ─────────────────────────────────────────── */&lt;br /&gt;
.gr-doc-title {&lt;br /&gt;
  font-size: 2em; font-weight: 500; color: var(--maroon);&lt;br /&gt;
  line-height: 1.4; margin: 0 0 16px; border: none !important;&lt;br /&gt;
  text-align:center; font-family: &#039;AdishilaDev&#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 10. VERSE BLOCKS ──────────────────────────────────────────── */&lt;br /&gt;
.shloka-block { display: block; text-align: left; margin: 3px 0 0; padding-bottom: 0.5em; }&lt;br /&gt;
.shloka-line { display: block; font-style: normal; color: #333; line-height: 1.35; margin: 0; }&lt;br /&gt;
.verse-block { display: block; margin: 6px 0 0; text-align: left; }&lt;br /&gt;
.verse-block .shloka-block { text-align: left; margin: 0; }&lt;br /&gt;
.verse-block .shloka-line {&lt;br /&gt;
  display: block; font-style: italic; color: #c65;&lt;br /&gt;
  font-weight: 500; line-height: 1.35; margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.verse-block + p { display: none !important; margin: 0 !important; }&lt;br /&gt;
.mw-parser-output .verse-block,&lt;br /&gt;
.mw-parser-output .shloka-block { margin-top: 2px !important; margin-bottom: 2px !important; }&lt;br /&gt;
&lt;br /&gt;
.gr-verse-text, .verse-line, .verse-text {&lt;br /&gt;
  color: #b5451b; font-style: italic; line-height: 1.5; display: block; margin: 0.1em 0;&lt;br /&gt;
}&lt;br /&gt;
.gr-verse-type-sutra .gr-verse-text,&lt;br /&gt;
.verse-block[data-type=&amp;quot;sutra&amp;quot;] .verse-line { font-style: normal; font-weight: 600; color: #b5451b; }&lt;br /&gt;
&lt;br /&gt;
/* ── 11. UVACHA ────────────────────────────────────────────────── */&lt;br /&gt;
.uvacha-block {&lt;br /&gt;
  display: block; font-weight: bold; color: #c65;&lt;br /&gt;
  margin: 0.5rem 0 0; padding: 2px 0 2px 12px;&lt;br /&gt;
  border-left: 3px solid #c65; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
.uvacha-block + .verse-block { margin-top: 2px; }&lt;br /&gt;
.gr-uvaaca, .uvaaca {&lt;br /&gt;
  color: #b5451b; font-weight: 600; font-size: 0.92em; margin: 0.5em 0 0.2em 0; display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 12. BHASHYAM ──────────────────────────────────────────────── */&lt;br /&gt;
.bhashyam-block {&lt;br /&gt;
  display: block; font-size: 1em; line-height: 1.6; color: #555;&lt;br /&gt;
  margin: 0.25em 0 0.35em 48px; padding: 0; border: none; background: transparent;&lt;br /&gt;
}&lt;br /&gt;
.gr-bhashyam, .commentary-bhashyam {&lt;br /&gt;
  color: #222; font-style: normal; line-height: 1.75; margin: 0.3em 0 0.5em 0;&lt;br /&gt;
}&lt;br /&gt;
.gr-leading-bhashya { font-style: italic; color: #555; margin: 0.4em 0 0.5em 0; }&lt;br /&gt;
&lt;br /&gt;
/* ── 13. PADYA ─────────────────────────────────────────────────── */&lt;br /&gt;
.padya-block {&lt;br /&gt;
  display: block; font-size: 1em; line-height: 1.75; color: #c65 !important;&lt;br /&gt;
  font-style: italic; font-weight: 500; margin: 0.4em 0 0.6em 60px;&lt;br /&gt;
}&lt;br /&gt;
.gr-padapatha { font-size: 0.9em; color: #555; margin: 0.2em 0 0.3em 0.8em; }&lt;br /&gt;
&lt;br /&gt;
/* ── 14. TEEKA ─────────────────────────────────────────────────── */&lt;br /&gt;
.teeka-block {&lt;br /&gt;
  padding: 6px 10px 8px; margin: 0.3em 0; line-height: 1.6; color: #555;&lt;br /&gt;
}&lt;br /&gt;
.teeka-title {&lt;br /&gt;
  font-family: &#039;AdishilaDev&#039;;, sans-serif !important;&lt;br /&gt;
  font-size: 1.75em; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase;&lt;br /&gt;
  margin-bottom: 4px; padding-bottom: 3px;&lt;br /&gt;
}&lt;br /&gt;
.teeka-body .shloka-block {&lt;br /&gt;
  margin: 0.4em 0; padding: 0.3em 0.6em; font-family: &#039;AdishilaDev&#039;;&lt;br /&gt;
}&lt;br /&gt;
.teeka-body .shloka-line { font-style: italic; font-size: 0.97em; font-family: &#039;AdishilaDev&#039;; }&lt;br /&gt;
&lt;br /&gt;
/* ── 15. PRATEEKA / MOOLA ──────────────────────────────────────── */&lt;br /&gt;
.gr-prateeka { font-weight: bold; font-style: normal; color: #333; }&lt;br /&gt;
.gr-mulaprateeka-block {&lt;br /&gt;
  display: block; font-weight: bold; font-style: normal;&lt;br /&gt;
  text-align: center; color: #333; margin: 0.7em 0 0.3em; line-height: 1.5;&lt;br /&gt;
}&lt;br /&gt;
.gr-moola { font-weight: bold; font-style: italic; color: #c65; }&lt;br /&gt;
&lt;br /&gt;
/* ── 16. ADHYAYA ───────────────────────────────────────────────── */&lt;br /&gt;
.adhyaya-block { margin: 0 0 4px; }&lt;br /&gt;
.adhyaya-trans { font-size: 0.9em; color: #666; margin: 2px 0 0; }&lt;br /&gt;
.adhyaya-intro { margin-top: 8px; line-height: 1.75; color: #555; }&lt;br /&gt;
.introduction p { color: var(--dark-gray); font-weight: 400; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.introduction { padding-bottom: 0.5em; text-align: justify; }&lt;br /&gt;
&lt;br /&gt;
/* ── 17. NYAYA / PRASNA ────────────────────────────────────────── */&lt;br /&gt;
.nyaya-block { margin: 32px 0; padding-top: 12px; border-top: 1px solid #eee; }&lt;br /&gt;
.nyaya-title {&lt;br /&gt;
  font-size: 1em; font-weight: 500; color: var(--orange);&lt;br /&gt;
  margin-bottom: 0.4rem; border-bottom: 1px dotted var(--orange); width: 50%;&lt;br /&gt;
}&lt;br /&gt;
.nyaya-body { color: #555; line-height: 1.75; margin-top: 0.5rem; }&lt;br /&gt;
.prasna-block { margin: 32px 0; padding-top: 12px; border-top: 1px solid #eee; }&lt;br /&gt;
.prasna-title {&lt;br /&gt;
  font-size: 1em; font-weight: 500; color: var(--orange);&lt;br /&gt;
  margin-bottom: 0.4rem; border-bottom: 1px dotted var(--orange); width: 50%;&lt;br /&gt;
}&lt;br /&gt;
.prasna-question, .prasna-answer { color: #555; line-height: 1.75; margin-top: 0.5rem; }&lt;br /&gt;
.prasna-answer { margin-left: 60px; }&lt;br /&gt;
&lt;br /&gt;
/* ── 18. VYAKHYA ELEMENTS ──────────────────────────────────────── */&lt;br /&gt;
.gr-vyakhya-head, .gr-section-head {&lt;br /&gt;
  font-size: 0.9em; font-weight: 700; color: #6a3e00;&lt;br /&gt;
  margin: 0.35em 0 0.15em; font-family: inherit; border: none; padding: 0;&lt;br /&gt;
}&lt;br /&gt;
.gr-avataranika {&lt;br /&gt;
  font-style: italic; color: #444; margin: 0.2em 0 0.5em 0.5em;&lt;br /&gt;
  padding-left: 0.6em; border-left: 2px solid #c9a96e; line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
.gr-vyakhya-pada {&lt;br /&gt;
  font-size: 0.88em; color: #555; background: #fafafa;&lt;br /&gt;
  border: 1px solid #e8e0d0; border-radius: 4px; padding: 0.5em 0.8em;&lt;br /&gt;
  margin: 0.5em 0; line-height: 1.5; white-space: pre-wrap;&lt;br /&gt;
}&lt;br /&gt;
.gr-vyakhya-gadya {&lt;br /&gt;
  font-weight: bold; font-size: 0.95em; text-align: center;&lt;br /&gt;
  color: #8b1a1a; margin: 0.2em 0; line-height: 1.6; letter-spacing: 0.03em;&lt;br /&gt;
}&lt;br /&gt;
.gr-vyakhya-para { margin: 0 0 0.5em 0; line-height: 1.65; color: #444; }&lt;br /&gt;
.gr-embedded-bhashya { margin: 0.2em 0 0.2em 1em; line-height: 1.6; }&lt;br /&gt;
.gr-gadya {&lt;br /&gt;
  display: block !important; font-size: 0.96em !important; font-weight: 600 !important;&lt;br /&gt;
  font-style: normal !important; color: #555 !important; margin: 16px 0 4px !important;&lt;br /&gt;
  border-bottom: 1px solid #ddd !important; width: 60%; line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
.gr-author-note {&lt;br /&gt;
  font-style: italic; color: var(--maroon); text-align: center; font-size: 0.9em;&lt;br /&gt;
  margin: 0.8em 0 0.4em 0; border-top: 1px solid #ddd; padding-top: 0.4em; font-family: &#039;AdishilaDev&#039;&lt;br /&gt;
}&lt;br /&gt;
.gr-devatachandas { font-size: 0.82em; color: #777; margin: 0.4em 0 0.2em 0; }&lt;br /&gt;
.gr-vargikarana   { font-size: 0.82em; color: #888; margin: 0.5em 0 0.1em 0; }&lt;br /&gt;
&lt;br /&gt;
/* ── 20. BHASHYA COLLECTION ────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output .bhashya-collection { margin: 0; padding: 0; }&lt;br /&gt;
.mw-parser-output .bhashya + p:empty,&lt;br /&gt;
.mw-parser-output .verse + p:empty,&lt;br /&gt;
.mw-parser-output .bhashya-collection + p:empty,&lt;br /&gt;
.mw-parser-output .pramana + p:empty,&lt;br /&gt;
.mw-parser-output .author-note + p:empty { display: none !important; margin: 0 !important; height: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 21. VERSE ACTIONS ─────────────────────────────────────────── */&lt;br /&gt;
.verse-actions {&lt;br /&gt;
  display: flex; flex-direction: row; align-items: center;&lt;br /&gt;
  gap: 6px; margin-top: 4px; justify-content: center;&lt;br /&gt;
}&lt;br /&gt;
.verse-action-btn {&lt;br /&gt;
  display: inline-flex; align-items: center; justify-content: center;&lt;br /&gt;
  padding: 4px; border-radius: 6px; cursor: pointer; opacity: 0.75; transition: all 0.2s;&lt;br /&gt;
}&lt;br /&gt;
.verse-action-btn:hover { opacity: 1; background-color: rgba(0,0,0,0.05); }&lt;br /&gt;
.icon { display: inline-block; width: 18px; height: 18px; background-repeat: no-repeat; background-position: center; background-size: contain; }&lt;br /&gt;
.icon-copy       { background-image: url(&#039;/images/copy.svg&#039;); }&lt;br /&gt;
.icon-commentary { background-image: url(&#039;/images/commentary.svg&#039;); }&lt;br /&gt;
.copy-tooltip {&lt;br /&gt;
  position: absolute; bottom: calc(100% + 8px); left: 50%;&lt;br /&gt;
  transform: translateX(-50%) translateY(4px);&lt;br /&gt;
  white-space: nowrap; pointer-events: none; z-index: 9999;&lt;br /&gt;
  display: inline-flex; align-items: center; padding: 2px 8px; border-radius: 999px;&lt;br /&gt;
  font-size: 0.75rem; font-weight: 500; background: rgba(30,30,30,0.82); color: #fff;&lt;br /&gt;
  opacity: 0; transition: opacity 0.2s, transform 0.2s;&lt;br /&gt;
}&lt;br /&gt;
.copy-tooltip.copy-tooltip-visible { opacity: 1; transform: translateX(-50%) translateY(0); }&lt;br /&gt;
&lt;br /&gt;
/* ── 22. CODE / PRE ────────────────────────────────────────────── */&lt;br /&gt;
pre, code, .mw-code, tt, kbd {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif ;&lt;br /&gt;
  background-color: transparent !important; border: none !important; padding: 0.3em 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-collapsible, .mw-collapsible-content, blockquote, .quotebox {&lt;br /&gt;
  background-color: transparent !important; border: none !important;&lt;br /&gt;
  font-style: normal !important; padding: 0 !important; margin-left: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 23. INLINE TOC BOX (wikitext __TOC__) ─────────────────────── */&lt;br /&gt;
.toc {&lt;br /&gt;
  display: block !important; background: #fffdf5; border: 1px solid #e8c88a;&lt;br /&gt;
  border-radius: 8px; padding: 12px 16px; margin: 0 0 24px 0;&lt;br /&gt;
  width: fit-content; min-width: 220px; max-width: 420px;&lt;br /&gt;
  font-size: 0.9em; line-height: 2;&lt;br /&gt;
}&lt;br /&gt;
.toc h2, .toc .toctitle {&lt;br /&gt;
  font-size: 0.85em !important; font-weight: 600 !important; color: var(--text) !important;&lt;br /&gt;
  border: none !important; margin: 0 0 6px !important; text-transform: uppercase; letter-spacing: 0.05em;&lt;br /&gt;
}&lt;br /&gt;
.toc ul { margin: 0 !important; padding-left: 1.2em !important; list-style: none !important; }&lt;br /&gt;
.toc li { margin: 0; padding: 0; }&lt;br /&gt;
.toc a { color: var(--text) !important; text-decoration: none !important; }&lt;br /&gt;
.toc a:hover { color: var(--light-orange) !important; }&lt;br /&gt;
.toc .toclevel-1 &amp;gt; a { font-weight: 600; }&lt;br /&gt;
.tocnumber { display: none; }&lt;br /&gt;
&lt;br /&gt;
/* ── 24. DOC TEEKAS + TOC NAV ──────────────────────────────────── */&lt;br /&gt;
.gr-doc-teekas { margin-bottom: 1em; }&lt;br /&gt;
.gr-doc-teekas + p:empty { display: none !important; margin: 0 !important; height: 0 !important; }&lt;br /&gt;
.toc-main-links { display: flex; gap: 6px; padding: 5px; align-items: center; margin-bottom: 4px; }&lt;br /&gt;
.toc-main-link-item {&lt;br /&gt;
  font-size: 0.9em; color: var(--text); text-decoration: none; padding: 4px 8px;&lt;br /&gt;
  border-radius: 6px; background: rgba(0,0,0,0.05); transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.toc-main-link-item:hover { background: rgba(0,0,0,0.10) !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 25. MAIN PAGE ─────────────────────────────────────────────── */&lt;br /&gt;
body.page-Main_Page #mw-panel,&lt;br /&gt;
body.page-Main_Page .vector-sidebar-container { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
.gr-home { max-width: 1080px; margin: 0 auto; padding: 0; }&lt;br /&gt;
.gr-home-page-title {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif !important;&lt;br /&gt;
  text-align: center; font-size: 1.8em; font-weight: 500; color: #1a2e40; margin: 24px 0 32px;&lt;br /&gt;
}&lt;br /&gt;
.gr-home-grid { display: flex; flex-wrap: wrap; gap: 20px; margin-bottom: 32px; }&lt;br /&gt;
.gr-home-card {&lt;br /&gt;
  background: #fff; border: 1px solid #e8e4df; border-radius: 10px;&lt;br /&gt;
  box-shadow: 0 2px 8px rgba(0,0,0,0.07);&lt;br /&gt;
  padding: 18px 20px 20px; flex: 1 1 280px; min-width: 240px; max-width: 360px;&lt;br /&gt;
}&lt;br /&gt;
.gr-home-card-title {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif !important;&lt;br /&gt;
  font-size: 1em; font-weight: 600; color: #1a2e40; text-align: center;&lt;br /&gt;
  padding-bottom: 10px; margin-bottom: 12px; border-bottom: 1.5px solid #c0392b;&lt;br /&gt;
}&lt;br /&gt;
.gr-home-card ol { margin: 0; padding-left: 1.4em; list-style: decimal; }&lt;br /&gt;
.gr-home-card li { font-size: 0.95em; line-height: 1.85; color: #333; }&lt;br /&gt;
.gr-home-card li a { color: #c0392b; text-decoration: none; }&lt;br /&gt;
.gr-home-card li a:hover { text-decoration: underline; }&lt;br /&gt;
.gr-home-card li a.new { color: #c08080; }&lt;br /&gt;
.gr-home-note { font-size: 0.82em; color: #888; }&lt;br /&gt;
.gr-home-group-label {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif !important;&lt;br /&gt;
  font-size: 1.1em; font-weight: 600; color: #1a2e40; text-align: center;&lt;br /&gt;
  margin: 36px 0 16px; padding-bottom: 8px; border-bottom: 2px solid #c0392b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 26. TOGGLE BUTTONS ────────────────────────────────────────── */&lt;br /&gt;
.gr-home-toggle { display: flex; gap: 8px; margin: 0 0 24px; justify-content: center; }&lt;br /&gt;
.gr-toggle-btn {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  font-size: 0.88em; padding: 6px 20px; border: 1.5px solid #c0392b; border-radius: 20px;&lt;br /&gt;
  background: transparent; color: #c0392b; cursor: pointer; user-select: none; transition: background 0.15s, color 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gr-toggle-btn:hover { background: #fdf0ed; }&lt;br /&gt;
.gr-toggle-btn.gr-toggle-active { background: #c0392b; color: #fff; }&lt;br /&gt;
&lt;br /&gt;
/* ── 27. SCRIPT BAR ────────────────────────────────────────────── */&lt;br /&gt;
.gr-script-bar { margin: 0 0 20px; font-size: 0.8em; color: #888; display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }&lt;br /&gt;
.gr-script-label { font-family: system-ui, sans-serif; color: #aaa; }&lt;br /&gt;
.gr-script-btn { font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif; color: #c0392b !important; text-decoration: underline dotted !important; cursor: pointer; }&lt;br /&gt;
.gr-script-btn.active { color: #888 !important; text-decoration: none !important; cursor: default; }&lt;br /&gt;
&lt;br /&gt;
/* ── 28. MODALS ────────────────────────────────────────────────── */&lt;br /&gt;
.grantha-modal { position: fixed; inset: 0; background: rgba(0,0,0,0.35); display: flex; align-items: center; justify-content: center; z-index: 10000; }&lt;br /&gt;
.grantha-modal-box { background: white; padding: 20px; border-radius: 10px; width: 300px; }&lt;br /&gt;
.gm-title { font-weight: bold; margin-bottom: 10px; }&lt;br /&gt;
.gm-actions { display: flex; justify-content: flex-end; gap: 10px; margin-top: 12px; }&lt;br /&gt;
&lt;br /&gt;
/* ── 29. LOGIN PAGE ────────────────────────────────────────────── */&lt;br /&gt;
body.page-Special_UserLogin .vector-search-box,&lt;br /&gt;
body.page-Special_UserLogin #p-search { display: none !important; }&lt;br /&gt;
body.page-Special_UserLogin #content { max-width: 420px; margin: 40px auto !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 30. SPECIAL PAGES ─────────────────────────────────────────── */&lt;br /&gt;
body.ns-special #footer, body.ns-special .mw-footer,&lt;br /&gt;
body.ns-special .vector-footer { display: none !important; }&lt;br /&gt;
body.ns-special .vector-page-tools { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 31. MINERVA (mobile) ──────────────────────────────────────── */&lt;br /&gt;
.skin-minerva .mw-parser-output {&lt;br /&gt;
  font-size: 18px !important;&lt;br /&gt;
  line-height: 1.8 !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .mw-parser-output h2,&lt;br /&gt;
.skin-minerva .mw-parser-output .mw-heading2 h2 {&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .mw-parser-output h3,&lt;br /&gt;
.skin-minerva .mw-parser-output .mw-heading3 h3 {&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .bhashyam-block { margin-left: 16px !important; }&lt;br /&gt;
.skin-minerva .prasna-answer  { margin-left: 16px !important; }&lt;br /&gt;
.skin-minerva .padya-block    { margin-left: 16px !important; }&lt;br /&gt;
/* Home grid single column on Minerva */&lt;br /&gt;
.skin-minerva .gr-home-grid {&lt;br /&gt;
  flex-direction: column !important;&lt;br /&gt;
  flex-wrap: nowrap !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .gr-home-card {&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
  min-width: unset !important;&lt;br /&gt;
  flex: 0 0 auto !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
/* Hide things that should be hidden on mobile too */&lt;br /&gt;
.skin-minerva .catlinks,&lt;br /&gt;
.skin-minerva #catlinks { display: none !important; }&lt;br /&gt;
.skin-minerva .mw-editsection { display: none !important; }&lt;br /&gt;
/* Minerva already has its own TOC — hide our inline .toc */&lt;br /&gt;
.skin-minerva .toc { display: none !important; }&lt;br /&gt;
/* ReaderToolbar on Minerva */&lt;br /&gt;
.skin-minerva #gr-static-bar {&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  min-height: 52px !important;&lt;br /&gt;
  overflow-x: auto !important;&lt;br /&gt;
  overflow-y: hidden !important;&lt;br /&gt;
  scrollbar-width: none !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva #gr-static-bar::-webkit-scrollbar { display: none !important; }&lt;br /&gt;
.skin-minerva .gr-controls .gr-btn {&lt;br /&gt;
  height: 44px !important;&lt;br /&gt;
  min-width: 44px !important;&lt;br /&gt;
  font-size: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .gr-btn-staging { display: none !important; }&lt;br /&gt;
.skin-minerva .gr-controls .gr-sep { display: none !important; }&lt;br /&gt;
/* Minerva already shows page title — don&#039;t double-hide */&lt;br /&gt;
.skin-minerva h1.firstHeading { display: block !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 32. PRINT ─────────────────────────────────────────────────── */&lt;br /&gt;
@media print {&lt;br /&gt;
  #gr-static-bar, .gr-controls, .vector-header-container { display: none !important; }&lt;br /&gt;
  .mw-parser-output { font-size: 11pt !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 33. TYPOGRAPHY CLASSES ────────────────────────────────────── */&lt;br /&gt;
&lt;br /&gt;
/* Heading — center, maroon, AdishilaDevGuru */&lt;br /&gt;
.gr-heading {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  font-size: 1.09em;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  color: #be100e;&lt;br /&gt;
  font-family: &#039;AdishilaDevGuru&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  line-height: 1.4;&lt;br /&gt;
  margin: 0.45em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Sub-heading — center, orange, AdishilaDevGuru */&lt;br /&gt;
.gr-sub-heading {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  font-size: 0.73em;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  color: #e65100;&lt;br /&gt;
  font-family: &#039;AdishilaDevGuru&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
  margin: 0.5em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Chapter Heading — center, maroon, AdishilaDevGuru */&lt;br /&gt;
.gr-chapter-heading {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  font-size: 0.82em;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  color: #be100e;&lt;br /&gt;
  font-family: &#039;AdishilaDevGuru&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
  margin: 0.5em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* M.Veda Shloka — left, bold, maroon, AdishilaVed, 5mm indent */&lt;br /&gt;
.gr-mv-shloka {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: left;&lt;br /&gt;
  font-size: 0.82em;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  color: #be100e;&lt;br /&gt;
  font-family: &#039;AdishilaVed&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  padding-left: 0.86em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.75;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* M.Veda Gadya — justify, bold, maroon, AdishilaVed */&lt;br /&gt;
.gr-mv-gadya {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: justify;&lt;br /&gt;
  font-size: 0.82em;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  color: #be100e;&lt;br /&gt;
  font-family: &#039;AdishilaVed&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  text-indent: 1.18em;&lt;br /&gt;
  padding-left: 0.36em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.75;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* M.Shloka — left, bold, orange, AdishilaDev, 5mm indent */&lt;br /&gt;
.gr-m-shloka {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: left;&lt;br /&gt;
  font-size: 0.82em;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  color: #e65100;&lt;br /&gt;
  font-family: &#039;AdishilaDev&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  padding-left: 0.86em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.75;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* B.Shloka / TK.Shloka / TP.Shloka — left, black, AdishilaDev, 10mm indent */&lt;br /&gt;
.gr-b-shloka,&lt;br /&gt;
.gr-tp-shloka {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: left;&lt;br /&gt;
  font-size: 0.73em;&lt;br /&gt;
  font-weight: normal;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  font-family: &#039;AdishilaDev&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  padding-left: 1.73em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.75;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Reference — orange, AdishilaDev */&lt;br /&gt;
.gr-reference {&lt;br /&gt;
  color: #e65100;&lt;br /&gt;
  font-family: &#039;AdishilaDev&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Custom tag span — subtle dashed underline only */&lt;br /&gt;
.gr-custom {&lt;br /&gt;
  border-bottom: 1px dashed #b5451b;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 34. MINERVA HEADER — orange theme + sticky ────────────────── */&lt;br /&gt;
&lt;br /&gt;
/* Kill space above header */&lt;br /&gt;
.skin-minerva body { margin-top: 0 !important; padding-top: 0 !important; }&lt;br /&gt;
.skin-minerva #mw-mf-viewport,&lt;br /&gt;
.skin-minerva #mw-mf-page-center { margin-top: 0 !important; padding-top: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* Header — orange, sticky */&lt;br /&gt;
.skin-minerva header.header-container {&lt;br /&gt;
  background: #b5451b !important;&lt;br /&gt;
  position: sticky !important;&lt;br /&gt;
  top: 0 !important;&lt;br /&gt;
  z-index: 200 !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  color: #ffffff;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .minerva-header {&lt;br /&gt;
  background: #b5451b !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  min-height: 54px !important;&lt;br /&gt;
  padding: 0 12px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.minerva-icon {&lt;br /&gt;
 &lt;br /&gt;
 filter: brightness(0) saturate(100%) invert(100%) sepia(4%) saturate(1%) hue-rotate(296deg) brightness(104%) contrast(100%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Site name text */&lt;br /&gt;
.skin-minerva .branding-box { background: transparent !important; }&lt;br /&gt;
.skin-minerva .branding-box a {&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .branding-box a span {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-size: 18px !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  font-family: system-ui, -apple-system, sans-serif !important;&lt;br /&gt;
  white-space: nowrap !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hamburger + search icons — white */&lt;br /&gt;
.skin-minerva .minerva-header label,&lt;br /&gt;
.skin-minerva .minerva-header .search-toggle {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .minerva-header svg path,&lt;br /&gt;
.skin-minerva .minerva-header svg rect,&lt;br /&gt;
.skin-minerva .minerva-header svg circle {&lt;br /&gt;
  fill: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .minerva-header .mw-ui-icon:before {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  filter: brightness(10) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Reader toolbar below Minerva header */&lt;br /&gt;
.skin-minerva #gr-static-bar {&lt;br /&gt;
  position: sticky !important;&lt;br /&gt;
  top: 54px !important;&lt;br /&gt;
  z-index: 100 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 35. MINERVA — auto-expand sections ────────────────────────── */&lt;br /&gt;
.skin-minerva .collapsible-block,&lt;br /&gt;
.skin-minerva .collapsible-heading + .collapsible-block {&lt;br /&gt;
  display: block !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .mf-section-0,&lt;br /&gt;
.skin-minerva .mf-section-1,&lt;br /&gt;
.skin-minerva .mf-section-2,&lt;br /&gt;
.skin-minerva .mf-section-3,&lt;br /&gt;
.skin-minerva .mf-section-4,&lt;br /&gt;
.skin-minerva .mf-section-5,&lt;br /&gt;
.skin-minerva .mf-section-6,&lt;br /&gt;
.skin-minerva .mf-section-7,&lt;br /&gt;
.skin-minerva .mf-section-8,&lt;br /&gt;
.skin-minerva .mf-section-9 {&lt;br /&gt;
  display: block !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .section-heading {&lt;br /&gt;
  pointer-events: none !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .section-heading .indicator {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* ── Hide MediaWiki default header user/account controls (desktop) ── */&lt;br /&gt;
#pt-userpage-2,&lt;br /&gt;
#p-vector-user-menu-userpage,&lt;br /&gt;
/* Hide the right-side person-icon dropdown */&lt;br /&gt;
#vector-user-links-dropdown,&lt;br /&gt;
.vector-user-links-dropdown,&lt;br /&gt;
#p-personal-more,&lt;br /&gt;
.vector-user-menu,&lt;br /&gt;
.mw-portlet-vector-user-menu-overflow,&lt;br /&gt;
#pt-watchlist-2 {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Hide original userpage text link */&lt;br /&gt;
#p-vector-user-menu-userpage { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* Hide the right-side person-icon user menu dropdown */&lt;br /&gt;
#vector-user-links-dropdown { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Custom username dropdown ── */&lt;br /&gt;
#gr-user-dropdown {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    font-family: system-ui, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
#gr-user-trigger {&lt;br /&gt;
    display: inline-flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    gap: 6px;&lt;br /&gt;
    background: rgba(255,255,255,0.12);&lt;br /&gt;
    border: none;&lt;br /&gt;
    color: #fff;&lt;br /&gt;
    font-size: 0.9em;&lt;br /&gt;
    font-weight: 500;&lt;br /&gt;
    padding: 6px 12px;&lt;br /&gt;
    border-radius: 6px;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
#gr-user-trigger:hover { background: rgba(255,255,255,0.2); }&lt;br /&gt;
#gr-user-trigger .gr-caret { font-size: 0.7em; opacity: 0.8; }&lt;br /&gt;
&lt;br /&gt;
#gr-user-menu {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: calc(100% + 6px);&lt;br /&gt;
    right: 0;&lt;br /&gt;
    min-width: 180px;&lt;br /&gt;
    background: #fff;&lt;br /&gt;
    border: 1px solid #e0d8d2;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
    box-shadow: 0 6px 24px rgba(0,0,0,0.14);&lt;br /&gt;
    padding: 6px;&lt;br /&gt;
    z-index: 1000;&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
#gr-user-menu.gr-open { display: block; }&lt;br /&gt;
#gr-user-menu a {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    gap: 10px;&lt;br /&gt;
    padding: 10px 12px;&lt;br /&gt;
    color: #2c1810;&lt;br /&gt;
    text-decoration: none;&lt;br /&gt;
    font-size: 0.92em;&lt;br /&gt;
    border-radius: 6px;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
#gr-user-menu a:hover { background: #f7f1ed; }&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.css&amp;diff=6195</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.css&amp;diff=6195"/>
		<updated>2026-06-11T09:29:34Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ═══════════════════════════════════════════════════════════════════&lt;br /&gt;
   MediaWiki:Common.css — Anandamakaranda&lt;br /&gt;
   Clean rebuild — works on Vector (desktop) + Minerva (mobile)&lt;br /&gt;
   ═══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
&lt;br /&gt;
/* ── 1. CSS VARIABLES ──────────────────────────────────────────── */&lt;br /&gt;
:root {&lt;br /&gt;
  --maroon:       #be100e;&lt;br /&gt;
  --orange:       #e65100;&lt;br /&gt;
  --light-orange: #f57c00;&lt;br /&gt;
  --dark-gray:    #555;&lt;br /&gt;
  --light-gray:   #eee;&lt;br /&gt;
  --muted-gray:   #888;&lt;br /&gt;
  --text:         #1a1a1a;&lt;br /&gt;
  --brown:        #a07040;&lt;br /&gt;
  --light-brown:  #e8d4a0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 2. FONTS ──────────────────────────────────────────────────── */&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;Adishila&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/adishila/Adishila.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: normal; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;Adishila&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/adishila/AdishilaBold.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: bold; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;AdishilaDev&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/AdishilaDev.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: normal; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;AdishilaDev&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/AdishilaDeBv.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: bold; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;AdishilaDevGuru&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/AdishilaDevGuru.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: bold; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;Noto Sans Devanagari&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/Noto_Sans_Devanagari/NotoSansDevanagari.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: normal; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-content-text {&lt;br /&gt;
  font-family: &#039;Adishila&#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output {&lt;br /&gt;
  font-size: 22px;&lt;br /&gt;
  line-height: 1.7;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  max-width: 100%;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  margin: 0; padding: 0;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Danda marks wrap issue&lt;br /&gt;
.mw-parser-output { overflow-wrap: anywhere; }&lt;br /&gt;
&lt;br /&gt;
/* ── 4. HIDE ELEMENTS (both skins) ────────────────────────────── */&lt;br /&gt;
/* Page title */&lt;br /&gt;
h1.firstHeading, #firstHeading, .mw-page-title-main { display: none !important; }&lt;br /&gt;
/* Footer */&lt;br /&gt;
#footer, .mw-footer, .vector-footer, .vector-footer-container,&lt;br /&gt;
footer, .minerva-footer { display: none !important; }&lt;br /&gt;
/* Categories */&lt;br /&gt;
.catlinks, #catlinks, .mw-normal-catlinks, .mw-hidden-catlinks { display: none !important; }&lt;br /&gt;
/* Edit section links */&lt;br /&gt;
.mw-editsection, .mw-editsection-bracket { display: none !important; }&lt;br /&gt;
/* Site notice */&lt;br /&gt;
#siteNotice { display: none !important; }&lt;br /&gt;
/* Watchlist */&lt;br /&gt;
li#pt-watchlist, li#pt-watchlist-kbd { display: none !important; }&lt;br /&gt;
/* Appearance panel */&lt;br /&gt;
#vector-appearance, #vector-appearance-pinned-container,&lt;br /&gt;
#vector-appearance-unpinned-container, .mw-portlet-appearance,&lt;br /&gt;
#p-appearance, [aria-controls=&amp;quot;vector-appearance&amp;quot;] { display: none !important; }&lt;br /&gt;
/* Vector hamburger + sidebar */&lt;br /&gt;
#mw-sidebar-button, .vector-main-menu, .vector-main-menu-container,&lt;br /&gt;
.vector-main-menu-landmark, #vector-main-menu-dropdown { display: none !important; }&lt;br /&gt;
/* Vector search box (we use our own) */&lt;br /&gt;
#p-search, .vector-search-box, .vector-search-box-vue,&lt;br /&gt;
.vector-search-box-collapses { display: none !important; }&lt;br /&gt;
/* Vector page toolbar */&lt;br /&gt;
.vector-page-toolbar, .vector-page-toolbar-container { display: none !important; }&lt;br /&gt;
/* Vector page tools */&lt;br /&gt;
.vector-page-tools { display: none !important; }&lt;br /&gt;
/* Empty paragraphs */&lt;br /&gt;
.mw-parser-output p:empty,&lt;br /&gt;
.mw-parser-output &amp;gt; div &amp;gt; p:empty,&lt;br /&gt;
.mw-heading + p:empty,&lt;br /&gt;
.adhyaya-block + p:empty,&lt;br /&gt;
.verse-block + p:empty { display: none !important; margin: 0 !important; }&lt;br /&gt;
/* Empty divs */&lt;br /&gt;
.adhyaya-block:empty, .mw-parser-output div:empty { display: none !important; }&lt;br /&gt;
/* Cargo hidden */&lt;br /&gt;
.cargo-store-only { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 5. VECTOR HEADER (desktop only) ──────────────────────────── */&lt;br /&gt;
.vector-header-container {&lt;br /&gt;
  background: #b5451b !important;&lt;br /&gt;
  border-bottom: 1px solid rgba(255,255,255,0.12);&lt;br /&gt;
}&lt;br /&gt;
.vector-header {&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  justify-content: space-between !important;&lt;br /&gt;
  padding-left: 20px !important;&lt;br /&gt;
  padding-right: 20px !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-header-start {&lt;br /&gt;
  flex: 0 0 auto !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  gap: 12px;&lt;br /&gt;
}&lt;br /&gt;
.vector-header-end {&lt;br /&gt;
  flex: 0 0 auto !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  margin-left: auto;&lt;br /&gt;
}&lt;br /&gt;
.mw-logo { display: flex !important; align-items: center; opacity: 1 !important; }&lt;br /&gt;
.mw-logo-icon { width: 24px; height: 24px; }&lt;br /&gt;
&lt;br /&gt;
/* Site name */&lt;br /&gt;
.mw-logo-wordmark {&lt;br /&gt;
  font-size: 0 !important;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  flex-direction: column !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-logo-wordmark::before {&lt;br /&gt;
  content: &#039;Anandamakaranda&#039;;&lt;br /&gt;
  font-size: 17px;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-family: system-ui, -apple-system, sans-serif;&lt;br /&gt;
  letter-spacing: -0.01em;&lt;br /&gt;
}&lt;br /&gt;
.mw-logo-wordmark::after {&lt;br /&gt;
  content: &amp;quot;A Digital Archive of Dvaita Vedanta Literature&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  font-weight: 400;&lt;br /&gt;
  color: rgba(255,255,255,0.85);&lt;br /&gt;
  letter-spacing: 0.3px;&lt;br /&gt;
  margin-top: 1px;&lt;br /&gt;
  font-family: sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Header right links */&lt;br /&gt;
.vector-header-end &amp;gt; *:not(#p-search) { color: rgba(255,255,255,0.9) !important; }&lt;br /&gt;
.vector-user-links a { color: rgba(255,255,255,0.9) !important; }&lt;br /&gt;
&lt;br /&gt;
/* User icon white */&lt;br /&gt;
.vector-user-menu-container .vector-icon svg,&lt;br /&gt;
.vector-user-menu-container .vector-icon svg path,&lt;br /&gt;
.vector-user-menu-container .vector-icon svg circle {&lt;br /&gt;
  fill: #fff !important; stroke: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-user-links .vector-user-menu-chevron .vector-icon svg,&lt;br /&gt;
.vector-user-links .vector-user-menu-chevron .vector-icon svg path {&lt;br /&gt;
  fill: rgba(255,255,255,0.9) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* User dropdown — dark text on white card */&lt;br /&gt;
.vector-user-menu .mw-list-item a,&lt;br /&gt;
.vector-user-menu .vector-menu-content-list a,&lt;br /&gt;
#p-personal .vector-menu-content a,&lt;br /&gt;
.mw-portlet-personal .vector-menu-content a { color: #202122 !important; }&lt;br /&gt;
.vector-user-menu .mw-list-item a:hover { color: var(--light-orange) !important; }&lt;br /&gt;
&lt;br /&gt;
/* Suppress Vector sticky header clone */&lt;br /&gt;
.vector-sticky-header { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* Suppress body top padding that Vector adds */&lt;br /&gt;
.mw-body { margin-top: 0 !important; padding-top: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 6. VECTOR TOC (desktop sidebar) ──────────────────────────── */&lt;br /&gt;
.vector-toc .vector-toc-numb { display: none !important; }&lt;br /&gt;
.vector-toc .vector-toc-title {&lt;br /&gt;
  font-size: 0.72em !important; font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase; letter-spacing: 0.08em;&lt;br /&gt;
  color: var(--text) !important;&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, system-ui, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-toc .vector-toc-text {&lt;br /&gt;
  white-space: normal !important; word-break: break-word !important;&lt;br /&gt;
  overflow-wrap: anywhere !important; display: inline !important;&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, system-ui, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-toc a, .vector-toc .vector-toc-link {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, system-ui, sans-serif !important;&lt;br /&gt;
  color: var(--text) !important; text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-toc a:hover { color: var(--light-orange) !important; }&lt;br /&gt;
.vector-toc .vector-toc-list-item-active .vector-toc-link,&lt;br /&gt;
.vector-toc .vector-toc-list-item-active .vector-toc-link * {&lt;br /&gt;
  color: var(--light-orange) !important; font-weight: 700 !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-toc .cdx-button.vector-toc-toggle {&lt;br /&gt;
  background: none !important; border: none !important;&lt;br /&gt;
  box-shadow: none !important; color: var(--text) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 7. HEADINGS ───────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output h1, .mw-parser-output h2, .mw-parser-output h3, .mw-parser-output h4,&lt;br /&gt;
.mw-parser-output .mw-heading h1, .mw-parser-output .mw-heading h2,&lt;br /&gt;
.mw-parser-output .mw-heading h3 {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  border: none !important; padding: 0 !important; background: none !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output .mw-heading { border: none !important; margin: 0; padding: 0; }&lt;br /&gt;
&lt;br /&gt;
.mw-heading, .mw-heading2, .mw-heading3 { text-align:center; }&lt;br /&gt;
.mw-parser-output h2, .mw-parser-output .mw-heading2 h2 {&lt;br /&gt;
  font-size: 1.2em !important; font-weight: 500 !important;&lt;br /&gt;
  color: var(--maroon) !important; line-height: 1.8;&lt;br /&gt;
  margin: 24px 0 4px !important;&lt;br /&gt;
  border-bottom: 2px dotted var(--maroon) !important;&lt;br /&gt;
  width: 75%; font-family: &#039;AdishilaDev&#039;; text-align: center;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output h3, .mw-parser-output .mw-heading3 h3 {&lt;br /&gt;
  font-size: 1em !important; font-weight: 500 !important;&lt;br /&gt;
  color: var(--orange) !important; line-height: 1.5;&lt;br /&gt;
  margin: 24px 0 8px !important;&lt;br /&gt;
  border-bottom: 1px dotted var(--orange) !important;&lt;br /&gt;
  width: 55%; font-family: &#039;AdishilaDev&#039;; text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 8. PARAGRAPHS ─────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output p { margin: 0 0 0.35rem !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 9. DOCUMENT TITLE ─────────────────────────────────────────── */&lt;br /&gt;
.gr-doc-title {&lt;br /&gt;
  font-size: 2em; font-weight: 500; color: var(--maroon);&lt;br /&gt;
  line-height: 1.4; margin: 0 0 16px; border: none !important;&lt;br /&gt;
  text-align:center; font-family: &#039;AdishilaDev&#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 10. VERSE BLOCKS ──────────────────────────────────────────── */&lt;br /&gt;
.shloka-block { display: block; text-align: left; margin: 3px 0 0; padding-bottom: 0.5em; }&lt;br /&gt;
.shloka-line { display: block; font-style: normal; color: #333; line-height: 1.35; margin: 0; }&lt;br /&gt;
.verse-block { display: block; margin: 6px 0 0; text-align: left; }&lt;br /&gt;
.verse-block .shloka-block { text-align: left; margin: 0; }&lt;br /&gt;
.verse-block .shloka-line {&lt;br /&gt;
  display: block; font-style: italic; color: #c65;&lt;br /&gt;
  font-weight: 500; line-height: 1.35; margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.verse-block + p { display: none !important; margin: 0 !important; }&lt;br /&gt;
.mw-parser-output .verse-block,&lt;br /&gt;
.mw-parser-output .shloka-block { margin-top: 2px !important; margin-bottom: 2px !important; }&lt;br /&gt;
&lt;br /&gt;
.gr-verse-text, .verse-line, .verse-text {&lt;br /&gt;
  color: #b5451b; font-style: italic; line-height: 1.5; display: block; margin: 0.1em 0;&lt;br /&gt;
}&lt;br /&gt;
.gr-verse-type-sutra .gr-verse-text,&lt;br /&gt;
.verse-block[data-type=&amp;quot;sutra&amp;quot;] .verse-line { font-style: normal; font-weight: 600; color: #b5451b; }&lt;br /&gt;
&lt;br /&gt;
/* ── 11. UVACHA ────────────────────────────────────────────────── */&lt;br /&gt;
.uvacha-block {&lt;br /&gt;
  display: block; font-weight: bold; color: #c65;&lt;br /&gt;
  margin: 0.5rem 0 0; padding: 2px 0 2px 12px;&lt;br /&gt;
  border-left: 3px solid #c65; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
.uvacha-block + .verse-block { margin-top: 2px; }&lt;br /&gt;
.gr-uvaaca, .uvaaca {&lt;br /&gt;
  color: #b5451b; font-weight: 600; font-size: 0.92em; margin: 0.5em 0 0.2em 0; display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 12. BHASHYAM ──────────────────────────────────────────────── */&lt;br /&gt;
.bhashyam-block {&lt;br /&gt;
  display: block; font-size: 1em; line-height: 1.6; color: #555;&lt;br /&gt;
  margin: 0.25em 0 0.35em 48px; padding: 0; border: none; background: transparent;&lt;br /&gt;
}&lt;br /&gt;
.gr-bhashyam, .commentary-bhashyam {&lt;br /&gt;
  color: #222; font-style: normal; line-height: 1.75; margin: 0.3em 0 0.5em 0;&lt;br /&gt;
}&lt;br /&gt;
.gr-leading-bhashya { font-style: italic; color: #555; margin: 0.4em 0 0.5em 0; }&lt;br /&gt;
&lt;br /&gt;
/* ── 13. PADYA ─────────────────────────────────────────────────── */&lt;br /&gt;
.padya-block {&lt;br /&gt;
  display: block; font-size: 1em; line-height: 1.75; color: #c65 !important;&lt;br /&gt;
  font-style: italic; font-weight: 500; margin: 0.4em 0 0.6em 60px;&lt;br /&gt;
}&lt;br /&gt;
.gr-padapatha { font-size: 0.9em; color: #555; margin: 0.2em 0 0.3em 0.8em; }&lt;br /&gt;
&lt;br /&gt;
/* ── 14. TEEKA ─────────────────────────────────────────────────── */&lt;br /&gt;
.teeka-block {&lt;br /&gt;
  padding: 6px 10px 8px; margin: 0.3em 0; line-height: 1.6; color: #555;&lt;br /&gt;
}&lt;br /&gt;
.teeka-title {&lt;br /&gt;
  font-family: &#039;AdishilaDev&#039;;, sans-serif !important;&lt;br /&gt;
  font-size: 1.75em; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase;&lt;br /&gt;
  margin-bottom: 4px; padding-bottom: 3px;&lt;br /&gt;
}&lt;br /&gt;
.teeka-body .shloka-block {&lt;br /&gt;
  margin: 0.4em 0; padding: 0.3em 0.6em; font-family: &#039;AdishilaDev&#039;;&lt;br /&gt;
}&lt;br /&gt;
.teeka-body .shloka-line { font-style: italic; font-size: 0.97em; font-family: &#039;AdishilaDev&#039;; }&lt;br /&gt;
&lt;br /&gt;
/* ── 15. PRATEEKA / MOOLA ──────────────────────────────────────── */&lt;br /&gt;
.gr-prateeka { font-weight: bold; font-style: normal; color: #333; }&lt;br /&gt;
.gr-mulaprateeka-block {&lt;br /&gt;
  display: block; font-weight: bold; font-style: normal;&lt;br /&gt;
  text-align: center; color: #333; margin: 0.7em 0 0.3em; line-height: 1.5;&lt;br /&gt;
}&lt;br /&gt;
.gr-moola { font-weight: bold; font-style: italic; color: #c65; }&lt;br /&gt;
&lt;br /&gt;
/* ── 16. ADHYAYA ───────────────────────────────────────────────── */&lt;br /&gt;
.adhyaya-block { margin: 0 0 4px; }&lt;br /&gt;
.adhyaya-trans { font-size: 0.9em; color: #666; margin: 2px 0 0; }&lt;br /&gt;
.adhyaya-intro { margin-top: 8px; line-height: 1.75; color: #555; }&lt;br /&gt;
.introduction p { color: var(--dark-gray); font-weight: 400; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.introduction { padding-bottom: 0.5em; text-align: justify; }&lt;br /&gt;
&lt;br /&gt;
/* ── 17. NYAYA / PRASNA ────────────────────────────────────────── */&lt;br /&gt;
.nyaya-block { margin: 32px 0; padding-top: 12px; border-top: 1px solid #eee; }&lt;br /&gt;
.nyaya-title {&lt;br /&gt;
  font-size: 1em; font-weight: 500; color: var(--orange);&lt;br /&gt;
  margin-bottom: 0.4rem; border-bottom: 1px dotted var(--orange); width: 50%;&lt;br /&gt;
}&lt;br /&gt;
.nyaya-body { color: #555; line-height: 1.75; margin-top: 0.5rem; }&lt;br /&gt;
.prasna-block { margin: 32px 0; padding-top: 12px; border-top: 1px solid #eee; }&lt;br /&gt;
.prasna-title {&lt;br /&gt;
  font-size: 1em; font-weight: 500; color: var(--orange);&lt;br /&gt;
  margin-bottom: 0.4rem; border-bottom: 1px dotted var(--orange); width: 50%;&lt;br /&gt;
}&lt;br /&gt;
.prasna-question, .prasna-answer { color: #555; line-height: 1.75; margin-top: 0.5rem; }&lt;br /&gt;
.prasna-answer { margin-left: 60px; }&lt;br /&gt;
&lt;br /&gt;
/* ── 18. VYAKHYA ELEMENTS ──────────────────────────────────────── */&lt;br /&gt;
.gr-vyakhya-head, .gr-section-head {&lt;br /&gt;
  font-size: 0.9em; font-weight: 700; color: #6a3e00;&lt;br /&gt;
  margin: 0.35em 0 0.15em; font-family: inherit; border: none; padding: 0;&lt;br /&gt;
}&lt;br /&gt;
.gr-avataranika {&lt;br /&gt;
  font-style: italic; color: #444; margin: 0.2em 0 0.5em 0.5em;&lt;br /&gt;
  padding-left: 0.6em; border-left: 2px solid #c9a96e; line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
.gr-vyakhya-pada {&lt;br /&gt;
  font-size: 0.88em; color: #555; background: #fafafa;&lt;br /&gt;
  border: 1px solid #e8e0d0; border-radius: 4px; padding: 0.5em 0.8em;&lt;br /&gt;
  margin: 0.5em 0; line-height: 1.5; white-space: pre-wrap;&lt;br /&gt;
}&lt;br /&gt;
.gr-vyakhya-gadya {&lt;br /&gt;
  font-weight: bold; font-size: 0.95em; text-align: center;&lt;br /&gt;
  color: #8b1a1a; margin: 0.2em 0; line-height: 1.6; letter-spacing: 0.03em;&lt;br /&gt;
}&lt;br /&gt;
.gr-vyakhya-para { margin: 0 0 0.5em 0; line-height: 1.65; color: #444; }&lt;br /&gt;
.gr-embedded-bhashya { margin: 0.2em 0 0.2em 1em; line-height: 1.6; }&lt;br /&gt;
.gr-gadya {&lt;br /&gt;
  display: block !important; font-size: 0.96em !important; font-weight: 600 !important;&lt;br /&gt;
  font-style: normal !important; color: #555 !important; margin: 16px 0 4px !important;&lt;br /&gt;
  border-bottom: 1px solid #ddd !important; width: 60%; line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
.gr-author-note {&lt;br /&gt;
  font-style: italic; color: var(--maroon); text-align: center; font-size: 0.9em;&lt;br /&gt;
  margin: 0.8em 0 0.4em 0; border-top: 1px solid #ddd; padding-top: 0.4em; font-family: &#039;AdishilaDev&#039;&lt;br /&gt;
}&lt;br /&gt;
.gr-devatachandas { font-size: 0.82em; color: #777; margin: 0.4em 0 0.2em 0; }&lt;br /&gt;
.gr-vargikarana   { font-size: 0.82em; color: #888; margin: 0.5em 0 0.1em 0; }&lt;br /&gt;
&lt;br /&gt;
/* ── 20. BHASHYA COLLECTION ────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output .bhashya-collection { margin: 0; padding: 0; }&lt;br /&gt;
.mw-parser-output .bhashya + p:empty,&lt;br /&gt;
.mw-parser-output .verse + p:empty,&lt;br /&gt;
.mw-parser-output .bhashya-collection + p:empty,&lt;br /&gt;
.mw-parser-output .pramana + p:empty,&lt;br /&gt;
.mw-parser-output .author-note + p:empty { display: none !important; margin: 0 !important; height: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 21. VERSE ACTIONS ─────────────────────────────────────────── */&lt;br /&gt;
.verse-actions {&lt;br /&gt;
  display: flex; flex-direction: row; align-items: center;&lt;br /&gt;
  gap: 6px; margin-top: 4px; justify-content: center;&lt;br /&gt;
}&lt;br /&gt;
.verse-action-btn {&lt;br /&gt;
  display: inline-flex; align-items: center; justify-content: center;&lt;br /&gt;
  padding: 4px; border-radius: 6px; cursor: pointer; opacity: 0.75; transition: all 0.2s;&lt;br /&gt;
}&lt;br /&gt;
.verse-action-btn:hover { opacity: 1; background-color: rgba(0,0,0,0.05); }&lt;br /&gt;
.icon { display: inline-block; width: 18px; height: 18px; background-repeat: no-repeat; background-position: center; background-size: contain; }&lt;br /&gt;
.icon-copy       { background-image: url(&#039;/images/copy.svg&#039;); }&lt;br /&gt;
.icon-commentary { background-image: url(&#039;/images/commentary.svg&#039;); }&lt;br /&gt;
.copy-tooltip {&lt;br /&gt;
  position: absolute; bottom: calc(100% + 8px); left: 50%;&lt;br /&gt;
  transform: translateX(-50%) translateY(4px);&lt;br /&gt;
  white-space: nowrap; pointer-events: none; z-index: 9999;&lt;br /&gt;
  display: inline-flex; align-items: center; padding: 2px 8px; border-radius: 999px;&lt;br /&gt;
  font-size: 0.75rem; font-weight: 500; background: rgba(30,30,30,0.82); color: #fff;&lt;br /&gt;
  opacity: 0; transition: opacity 0.2s, transform 0.2s;&lt;br /&gt;
}&lt;br /&gt;
.copy-tooltip.copy-tooltip-visible { opacity: 1; transform: translateX(-50%) translateY(0); }&lt;br /&gt;
&lt;br /&gt;
/* ── 22. CODE / PRE ────────────────────────────────────────────── */&lt;br /&gt;
pre, code, .mw-code, tt, kbd {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif ;&lt;br /&gt;
  background-color: transparent !important; border: none !important; padding: 0.3em 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-collapsible, .mw-collapsible-content, blockquote, .quotebox {&lt;br /&gt;
  background-color: transparent !important; border: none !important;&lt;br /&gt;
  font-style: normal !important; padding: 0 !important; margin-left: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 23. INLINE TOC BOX (wikitext __TOC__) ─────────────────────── */&lt;br /&gt;
.toc {&lt;br /&gt;
  display: block !important; background: #fffdf5; border: 1px solid #e8c88a;&lt;br /&gt;
  border-radius: 8px; padding: 12px 16px; margin: 0 0 24px 0;&lt;br /&gt;
  width: fit-content; min-width: 220px; max-width: 420px;&lt;br /&gt;
  font-size: 0.9em; line-height: 2;&lt;br /&gt;
}&lt;br /&gt;
.toc h2, .toc .toctitle {&lt;br /&gt;
  font-size: 0.85em !important; font-weight: 600 !important; color: var(--text) !important;&lt;br /&gt;
  border: none !important; margin: 0 0 6px !important; text-transform: uppercase; letter-spacing: 0.05em;&lt;br /&gt;
}&lt;br /&gt;
.toc ul { margin: 0 !important; padding-left: 1.2em !important; list-style: none !important; }&lt;br /&gt;
.toc li { margin: 0; padding: 0; }&lt;br /&gt;
.toc a { color: var(--text) !important; text-decoration: none !important; }&lt;br /&gt;
.toc a:hover { color: var(--light-orange) !important; }&lt;br /&gt;
.toc .toclevel-1 &amp;gt; a { font-weight: 600; }&lt;br /&gt;
.tocnumber { display: none; }&lt;br /&gt;
&lt;br /&gt;
/* ── 24. DOC TEEKAS + TOC NAV ──────────────────────────────────── */&lt;br /&gt;
.gr-doc-teekas { margin-bottom: 1em; }&lt;br /&gt;
.gr-doc-teekas + p:empty { display: none !important; margin: 0 !important; height: 0 !important; }&lt;br /&gt;
.toc-main-links { display: flex; gap: 6px; padding: 5px; align-items: center; margin-bottom: 4px; }&lt;br /&gt;
.toc-main-link-item {&lt;br /&gt;
  font-size: 0.9em; color: var(--text); text-decoration: none; padding: 4px 8px;&lt;br /&gt;
  border-radius: 6px; background: rgba(0,0,0,0.05); transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.toc-main-link-item:hover { background: rgba(0,0,0,0.10) !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 25. MAIN PAGE ─────────────────────────────────────────────── */&lt;br /&gt;
body.page-Main_Page #mw-panel,&lt;br /&gt;
body.page-Main_Page .vector-sidebar-container { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
.gr-home { max-width: 1080px; margin: 0 auto; padding: 0; }&lt;br /&gt;
.gr-home-page-title {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif !important;&lt;br /&gt;
  text-align: center; font-size: 1.8em; font-weight: 500; color: #1a2e40; margin: 24px 0 32px;&lt;br /&gt;
}&lt;br /&gt;
.gr-home-grid { display: flex; flex-wrap: wrap; gap: 20px; margin-bottom: 32px; }&lt;br /&gt;
.gr-home-card {&lt;br /&gt;
  background: #fff; border: 1px solid #e8e4df; border-radius: 10px;&lt;br /&gt;
  box-shadow: 0 2px 8px rgba(0,0,0,0.07);&lt;br /&gt;
  padding: 18px 20px 20px; flex: 1 1 280px; min-width: 240px; max-width: 360px;&lt;br /&gt;
}&lt;br /&gt;
.gr-home-card-title {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif !important;&lt;br /&gt;
  font-size: 1em; font-weight: 600; color: #1a2e40; text-align: center;&lt;br /&gt;
  padding-bottom: 10px; margin-bottom: 12px; border-bottom: 1.5px solid #c0392b;&lt;br /&gt;
}&lt;br /&gt;
.gr-home-card ol { margin: 0; padding-left: 1.4em; list-style: decimal; }&lt;br /&gt;
.gr-home-card li { font-size: 0.95em; line-height: 1.85; color: #333; }&lt;br /&gt;
.gr-home-card li a { color: #c0392b; text-decoration: none; }&lt;br /&gt;
.gr-home-card li a:hover { text-decoration: underline; }&lt;br /&gt;
.gr-home-card li a.new { color: #c08080; }&lt;br /&gt;
.gr-home-note { font-size: 0.82em; color: #888; }&lt;br /&gt;
.gr-home-group-label {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif !important;&lt;br /&gt;
  font-size: 1.1em; font-weight: 600; color: #1a2e40; text-align: center;&lt;br /&gt;
  margin: 36px 0 16px; padding-bottom: 8px; border-bottom: 2px solid #c0392b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 26. TOGGLE BUTTONS ────────────────────────────────────────── */&lt;br /&gt;
.gr-home-toggle { display: flex; gap: 8px; margin: 0 0 24px; justify-content: center; }&lt;br /&gt;
.gr-toggle-btn {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  font-size: 0.88em; padding: 6px 20px; border: 1.5px solid #c0392b; border-radius: 20px;&lt;br /&gt;
  background: transparent; color: #c0392b; cursor: pointer; user-select: none; transition: background 0.15s, color 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gr-toggle-btn:hover { background: #fdf0ed; }&lt;br /&gt;
.gr-toggle-btn.gr-toggle-active { background: #c0392b; color: #fff; }&lt;br /&gt;
&lt;br /&gt;
/* ── 27. SCRIPT BAR ────────────────────────────────────────────── */&lt;br /&gt;
.gr-script-bar { margin: 0 0 20px; font-size: 0.8em; color: #888; display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }&lt;br /&gt;
.gr-script-label { font-family: system-ui, sans-serif; color: #aaa; }&lt;br /&gt;
.gr-script-btn { font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif; color: #c0392b !important; text-decoration: underline dotted !important; cursor: pointer; }&lt;br /&gt;
.gr-script-btn.active { color: #888 !important; text-decoration: none !important; cursor: default; }&lt;br /&gt;
&lt;br /&gt;
/* ── 28. MODALS ────────────────────────────────────────────────── */&lt;br /&gt;
.grantha-modal { position: fixed; inset: 0; background: rgba(0,0,0,0.35); display: flex; align-items: center; justify-content: center; z-index: 10000; }&lt;br /&gt;
.grantha-modal-box { background: white; padding: 20px; border-radius: 10px; width: 300px; }&lt;br /&gt;
.gm-title { font-weight: bold; margin-bottom: 10px; }&lt;br /&gt;
.gm-actions { display: flex; justify-content: flex-end; gap: 10px; margin-top: 12px; }&lt;br /&gt;
&lt;br /&gt;
/* ── 29. LOGIN PAGE ────────────────────────────────────────────── */&lt;br /&gt;
body.page-Special_UserLogin .vector-search-box,&lt;br /&gt;
body.page-Special_UserLogin #p-search { display: none !important; }&lt;br /&gt;
body.page-Special_UserLogin #content { max-width: 420px; margin: 40px auto !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 30. SPECIAL PAGES ─────────────────────────────────────────── */&lt;br /&gt;
body.ns-special #footer, body.ns-special .mw-footer,&lt;br /&gt;
body.ns-special .vector-footer { display: none !important; }&lt;br /&gt;
body.ns-special .vector-page-tools { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 31. MINERVA (mobile) ──────────────────────────────────────── */&lt;br /&gt;
.skin-minerva .mw-parser-output {&lt;br /&gt;
  font-size: 18px !important;&lt;br /&gt;
  line-height: 1.8 !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .mw-parser-output h2,&lt;br /&gt;
.skin-minerva .mw-parser-output .mw-heading2 h2 {&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .mw-parser-output h3,&lt;br /&gt;
.skin-minerva .mw-parser-output .mw-heading3 h3 {&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .bhashyam-block { margin-left: 16px !important; }&lt;br /&gt;
.skin-minerva .prasna-answer  { margin-left: 16px !important; }&lt;br /&gt;
.skin-minerva .padya-block    { margin-left: 16px !important; }&lt;br /&gt;
/* Home grid single column on Minerva */&lt;br /&gt;
.skin-minerva .gr-home-grid {&lt;br /&gt;
  flex-direction: column !important;&lt;br /&gt;
  flex-wrap: nowrap !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .gr-home-card {&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
  min-width: unset !important;&lt;br /&gt;
  flex: 0 0 auto !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
/* Hide things that should be hidden on mobile too */&lt;br /&gt;
.skin-minerva .catlinks,&lt;br /&gt;
.skin-minerva #catlinks { display: none !important; }&lt;br /&gt;
.skin-minerva .mw-editsection { display: none !important; }&lt;br /&gt;
/* Minerva already has its own TOC — hide our inline .toc */&lt;br /&gt;
.skin-minerva .toc { display: none !important; }&lt;br /&gt;
/* ReaderToolbar on Minerva */&lt;br /&gt;
.skin-minerva #gr-static-bar {&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  min-height: 52px !important;&lt;br /&gt;
  overflow-x: auto !important;&lt;br /&gt;
  overflow-y: hidden !important;&lt;br /&gt;
  scrollbar-width: none !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva #gr-static-bar::-webkit-scrollbar { display: none !important; }&lt;br /&gt;
.skin-minerva .gr-controls .gr-btn {&lt;br /&gt;
  height: 44px !important;&lt;br /&gt;
  min-width: 44px !important;&lt;br /&gt;
  font-size: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .gr-btn-staging { display: none !important; }&lt;br /&gt;
.skin-minerva .gr-controls .gr-sep { display: none !important; }&lt;br /&gt;
/* Minerva already shows page title — don&#039;t double-hide */&lt;br /&gt;
.skin-minerva h1.firstHeading { display: block !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 32. PRINT ─────────────────────────────────────────────────── */&lt;br /&gt;
@media print {&lt;br /&gt;
  #gr-static-bar, .gr-controls, .vector-header-container { display: none !important; }&lt;br /&gt;
  .mw-parser-output { font-size: 11pt !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 33. TYPOGRAPHY CLASSES ────────────────────────────────────── */&lt;br /&gt;
&lt;br /&gt;
/* Heading — center, maroon, AdishilaDevGuru */&lt;br /&gt;
.gr-heading {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  font-size: 1.09em;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  color: #be100e;&lt;br /&gt;
  font-family: &#039;AdishilaDevGuru&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  line-height: 1.4;&lt;br /&gt;
  margin: 0.45em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Sub-heading — center, orange, AdishilaDevGuru */&lt;br /&gt;
.gr-sub-heading {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  font-size: 0.73em;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  color: #e65100;&lt;br /&gt;
  font-family: &#039;AdishilaDevGuru&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
  margin: 0.5em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Chapter Heading — center, maroon, AdishilaDevGuru */&lt;br /&gt;
.gr-chapter-heading {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  font-size: 0.82em;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  color: #be100e;&lt;br /&gt;
  font-family: &#039;AdishilaDevGuru&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
  margin: 0.5em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* M.Veda Shloka — left, bold, maroon, AdishilaVed, 5mm indent */&lt;br /&gt;
.gr-mv-shloka {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: left;&lt;br /&gt;
  font-size: 0.82em;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  color: #be100e;&lt;br /&gt;
  font-family: &#039;AdishilaVed&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  padding-left: 0.86em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.75;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* M.Veda Gadya — justify, bold, maroon, AdishilaVed */&lt;br /&gt;
.gr-mv-gadya {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: justify;&lt;br /&gt;
  font-size: 0.82em;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  color: #be100e;&lt;br /&gt;
  font-family: &#039;AdishilaVed&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  text-indent: 1.18em;&lt;br /&gt;
  padding-left: 0.36em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.75;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* M.Shloka — left, bold, orange, AdishilaDev, 5mm indent */&lt;br /&gt;
.gr-m-shloka {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: left;&lt;br /&gt;
  font-size: 0.82em;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  color: #e65100;&lt;br /&gt;
  font-family: &#039;AdishilaDev&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  padding-left: 0.86em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.75;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* B.Shloka / TK.Shloka / TP.Shloka — left, black, AdishilaDev, 10mm indent */&lt;br /&gt;
.gr-b-shloka,&lt;br /&gt;
.gr-tp-shloka {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: left;&lt;br /&gt;
  font-size: 0.73em;&lt;br /&gt;
  font-weight: normal;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  font-family: &#039;AdishilaDev&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  padding-left: 1.73em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.75;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Reference — orange, AdishilaDev */&lt;br /&gt;
.gr-reference {&lt;br /&gt;
  color: #e65100;&lt;br /&gt;
  font-family: &#039;AdishilaDev&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Custom tag span — subtle dashed underline only */&lt;br /&gt;
.gr-custom {&lt;br /&gt;
  border-bottom: 1px dashed #b5451b;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 34. MINERVA HEADER — orange theme + sticky ────────────────── */&lt;br /&gt;
&lt;br /&gt;
/* Kill space above header */&lt;br /&gt;
.skin-minerva body { margin-top: 0 !important; padding-top: 0 !important; }&lt;br /&gt;
.skin-minerva #mw-mf-viewport,&lt;br /&gt;
.skin-minerva #mw-mf-page-center { margin-top: 0 !important; padding-top: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* Header — orange, sticky */&lt;br /&gt;
.skin-minerva header.header-container {&lt;br /&gt;
  background: #b5451b !important;&lt;br /&gt;
  position: sticky !important;&lt;br /&gt;
  top: 0 !important;&lt;br /&gt;
  z-index: 200 !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  color: #ffffff;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .minerva-header {&lt;br /&gt;
  background: #b5451b !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  min-height: 54px !important;&lt;br /&gt;
  padding: 0 12px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.minerva-icon {&lt;br /&gt;
 &lt;br /&gt;
 filter: brightness(0) saturate(100%) invert(100%) sepia(4%) saturate(1%) hue-rotate(296deg) brightness(104%) contrast(100%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Site name text */&lt;br /&gt;
.skin-minerva .branding-box { background: transparent !important; }&lt;br /&gt;
.skin-minerva .branding-box a {&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .branding-box a span {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-size: 18px !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  font-family: system-ui, -apple-system, sans-serif !important;&lt;br /&gt;
  white-space: nowrap !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hamburger + search icons — white */&lt;br /&gt;
.skin-minerva .minerva-header label,&lt;br /&gt;
.skin-minerva .minerva-header .search-toggle {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .minerva-header svg path,&lt;br /&gt;
.skin-minerva .minerva-header svg rect,&lt;br /&gt;
.skin-minerva .minerva-header svg circle {&lt;br /&gt;
  fill: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .minerva-header .mw-ui-icon:before {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  filter: brightness(10) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Reader toolbar below Minerva header */&lt;br /&gt;
.skin-minerva #gr-static-bar {&lt;br /&gt;
  position: sticky !important;&lt;br /&gt;
  top: 54px !important;&lt;br /&gt;
  z-index: 100 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 35. MINERVA — auto-expand sections ────────────────────────── */&lt;br /&gt;
.skin-minerva .collapsible-block,&lt;br /&gt;
.skin-minerva .collapsible-heading + .collapsible-block {&lt;br /&gt;
  display: block !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .mf-section-0,&lt;br /&gt;
.skin-minerva .mf-section-1,&lt;br /&gt;
.skin-minerva .mf-section-2,&lt;br /&gt;
.skin-minerva .mf-section-3,&lt;br /&gt;
.skin-minerva .mf-section-4,&lt;br /&gt;
.skin-minerva .mf-section-5,&lt;br /&gt;
.skin-minerva .mf-section-6,&lt;br /&gt;
.skin-minerva .mf-section-7,&lt;br /&gt;
.skin-minerva .mf-section-8,&lt;br /&gt;
.skin-minerva .mf-section-9 {&lt;br /&gt;
  display: block !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .section-heading {&lt;br /&gt;
  pointer-events: none !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .section-heading .indicator {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* ── Hide MediaWiki default header user/account controls (desktop) ── */&lt;br /&gt;
#pt-userpage-2,&lt;br /&gt;
#p-vector-user-menu-userpage,&lt;br /&gt;
/* Hide the right-side person-icon dropdown */&lt;br /&gt;
#vector-user-links-dropdown,&lt;br /&gt;
.vector-user-links-dropdown,&lt;br /&gt;
#p-personal-more,&lt;br /&gt;
.vector-user-menu,&lt;br /&gt;
.mw-portlet-vector-user-menu-overflow,&lt;br /&gt;
#pt-watchlist-2 {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* ── Custom username dropdown ── */&lt;br /&gt;
#gr-user-dropdown {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    font-family: system-ui, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
#gr-user-trigger {&lt;br /&gt;
    display: inline-flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    gap: 6px;&lt;br /&gt;
    background: rgba(255,255,255,0.12);&lt;br /&gt;
    border: none;&lt;br /&gt;
    color: #fff;&lt;br /&gt;
    font-size: 0.9em;&lt;br /&gt;
    font-weight: 500;&lt;br /&gt;
    padding: 6px 12px;&lt;br /&gt;
    border-radius: 6px;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
#gr-user-trigger:hover { background: rgba(255,255,255,0.2); }&lt;br /&gt;
#gr-user-trigger .gr-caret { font-size: 0.7em; opacity: 0.8; }&lt;br /&gt;
&lt;br /&gt;
#gr-user-menu {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: calc(100% + 6px);&lt;br /&gt;
    right: 0;&lt;br /&gt;
    min-width: 180px;&lt;br /&gt;
    background: #fff;&lt;br /&gt;
    border: 1px solid #e0d8d2;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
    box-shadow: 0 6px 24px rgba(0,0,0,0.14);&lt;br /&gt;
    padding: 6px;&lt;br /&gt;
    z-index: 1000;&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
#gr-user-menu.gr-open { display: block; }&lt;br /&gt;
#gr-user-menu a {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    gap: 10px;&lt;br /&gt;
    padding: 10px 12px;&lt;br /&gt;
    color: #2c1810;&lt;br /&gt;
    text-decoration: none;&lt;br /&gt;
    font-size: 0.92em;&lt;br /&gt;
    border-radius: 6px;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
#gr-user-menu a:hover { background: #f7f1ed; }&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.css&amp;diff=6194</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.css&amp;diff=6194"/>
		<updated>2026-06-11T09:27:35Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ═══════════════════════════════════════════════════════════════════&lt;br /&gt;
   MediaWiki:Common.css — Anandamakaranda&lt;br /&gt;
   Clean rebuild — works on Vector (desktop) + Minerva (mobile)&lt;br /&gt;
   ═══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
&lt;br /&gt;
/* ── 1. CSS VARIABLES ──────────────────────────────────────────── */&lt;br /&gt;
:root {&lt;br /&gt;
  --maroon:       #be100e;&lt;br /&gt;
  --orange:       #e65100;&lt;br /&gt;
  --light-orange: #f57c00;&lt;br /&gt;
  --dark-gray:    #555;&lt;br /&gt;
  --light-gray:   #eee;&lt;br /&gt;
  --muted-gray:   #888;&lt;br /&gt;
  --text:         #1a1a1a;&lt;br /&gt;
  --brown:        #a07040;&lt;br /&gt;
  --light-brown:  #e8d4a0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 2. FONTS ──────────────────────────────────────────────────── */&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;Adishila&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/adishila/Adishila.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: normal; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;Adishila&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/adishila/AdishilaBold.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: bold; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;AdishilaDev&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/AdishilaDev.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: normal; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;AdishilaDev&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/AdishilaDeBv.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: bold; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;AdishilaDevGuru&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/AdishilaDevGuru.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: bold; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;Noto Sans Devanagari&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/Noto_Sans_Devanagari/NotoSansDevanagari.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: normal; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-content-text {&lt;br /&gt;
  font-family: &#039;Adishila&#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output {&lt;br /&gt;
  font-size: 22px;&lt;br /&gt;
  line-height: 1.7;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  max-width: 100%;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  margin: 0; padding: 0;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Danda marks wrap issue&lt;br /&gt;
.mw-parser-output { overflow-wrap: anywhere; }&lt;br /&gt;
&lt;br /&gt;
/* ── 4. HIDE ELEMENTS (both skins) ────────────────────────────── */&lt;br /&gt;
/* Page title */&lt;br /&gt;
h1.firstHeading, #firstHeading, .mw-page-title-main { display: none !important; }&lt;br /&gt;
/* Footer */&lt;br /&gt;
#footer, .mw-footer, .vector-footer, .vector-footer-container,&lt;br /&gt;
footer, .minerva-footer { display: none !important; }&lt;br /&gt;
/* Categories */&lt;br /&gt;
.catlinks, #catlinks, .mw-normal-catlinks, .mw-hidden-catlinks { display: none !important; }&lt;br /&gt;
/* Edit section links */&lt;br /&gt;
.mw-editsection, .mw-editsection-bracket { display: none !important; }&lt;br /&gt;
/* Site notice */&lt;br /&gt;
#siteNotice { display: none !important; }&lt;br /&gt;
/* Watchlist */&lt;br /&gt;
li#pt-watchlist, li#pt-watchlist-kbd { display: none !important; }&lt;br /&gt;
/* Appearance panel */&lt;br /&gt;
#vector-appearance, #vector-appearance-pinned-container,&lt;br /&gt;
#vector-appearance-unpinned-container, .mw-portlet-appearance,&lt;br /&gt;
#p-appearance, [aria-controls=&amp;quot;vector-appearance&amp;quot;] { display: none !important; }&lt;br /&gt;
/* Vector hamburger + sidebar */&lt;br /&gt;
#mw-sidebar-button, .vector-main-menu, .vector-main-menu-container,&lt;br /&gt;
.vector-main-menu-landmark, #vector-main-menu-dropdown { display: none !important; }&lt;br /&gt;
/* Vector search box (we use our own) */&lt;br /&gt;
#p-search, .vector-search-box, .vector-search-box-vue,&lt;br /&gt;
.vector-search-box-collapses { display: none !important; }&lt;br /&gt;
/* Vector page toolbar */&lt;br /&gt;
.vector-page-toolbar, .vector-page-toolbar-container { display: none !important; }&lt;br /&gt;
/* Vector page tools */&lt;br /&gt;
.vector-page-tools { display: none !important; }&lt;br /&gt;
/* Empty paragraphs */&lt;br /&gt;
.mw-parser-output p:empty,&lt;br /&gt;
.mw-parser-output &amp;gt; div &amp;gt; p:empty,&lt;br /&gt;
.mw-heading + p:empty,&lt;br /&gt;
.adhyaya-block + p:empty,&lt;br /&gt;
.verse-block + p:empty { display: none !important; margin: 0 !important; }&lt;br /&gt;
/* Empty divs */&lt;br /&gt;
.adhyaya-block:empty, .mw-parser-output div:empty { display: none !important; }&lt;br /&gt;
/* Cargo hidden */&lt;br /&gt;
.cargo-store-only { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 5. VECTOR HEADER (desktop only) ──────────────────────────── */&lt;br /&gt;
.vector-header-container {&lt;br /&gt;
  background: #b5451b !important;&lt;br /&gt;
  border-bottom: 1px solid rgba(255,255,255,0.12);&lt;br /&gt;
}&lt;br /&gt;
.vector-header {&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  justify-content: space-between !important;&lt;br /&gt;
  padding-left: 20px !important;&lt;br /&gt;
  padding-right: 20px !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-header-start {&lt;br /&gt;
  flex: 0 0 auto !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  gap: 12px;&lt;br /&gt;
}&lt;br /&gt;
.vector-header-end {&lt;br /&gt;
  flex: 0 0 auto !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  margin-left: auto;&lt;br /&gt;
}&lt;br /&gt;
.mw-logo { display: flex !important; align-items: center; opacity: 1 !important; }&lt;br /&gt;
.mw-logo-icon { width: 24px; height: 24px; }&lt;br /&gt;
&lt;br /&gt;
/* Site name */&lt;br /&gt;
.mw-logo-wordmark {&lt;br /&gt;
  font-size: 0 !important;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  flex-direction: column !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-logo-wordmark::before {&lt;br /&gt;
  content: &#039;Anandamakaranda&#039;;&lt;br /&gt;
  font-size: 17px;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-family: system-ui, -apple-system, sans-serif;&lt;br /&gt;
  letter-spacing: -0.01em;&lt;br /&gt;
}&lt;br /&gt;
.mw-logo-wordmark::after {&lt;br /&gt;
  content: &amp;quot;A Digital Archive of Dvaita Vedanta Literature&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  font-weight: 400;&lt;br /&gt;
  color: rgba(255,255,255,0.85);&lt;br /&gt;
  letter-spacing: 0.3px;&lt;br /&gt;
  margin-top: 1px;&lt;br /&gt;
  font-family: sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Header right links */&lt;br /&gt;
.vector-header-end &amp;gt; *:not(#p-search) { color: rgba(255,255,255,0.9) !important; }&lt;br /&gt;
.vector-user-links a { color: rgba(255,255,255,0.9) !important; }&lt;br /&gt;
&lt;br /&gt;
/* User icon white */&lt;br /&gt;
.vector-user-menu-container .vector-icon svg,&lt;br /&gt;
.vector-user-menu-container .vector-icon svg path,&lt;br /&gt;
.vector-user-menu-container .vector-icon svg circle {&lt;br /&gt;
  fill: #fff !important; stroke: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-user-links .vector-user-menu-chevron .vector-icon svg,&lt;br /&gt;
.vector-user-links .vector-user-menu-chevron .vector-icon svg path {&lt;br /&gt;
  fill: rgba(255,255,255,0.9) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* User dropdown — dark text on white card */&lt;br /&gt;
.vector-user-menu .mw-list-item a,&lt;br /&gt;
.vector-user-menu .vector-menu-content-list a,&lt;br /&gt;
#p-personal .vector-menu-content a,&lt;br /&gt;
.mw-portlet-personal .vector-menu-content a { color: #202122 !important; }&lt;br /&gt;
.vector-user-menu .mw-list-item a:hover { color: var(--light-orange) !important; }&lt;br /&gt;
&lt;br /&gt;
/* Suppress Vector sticky header clone */&lt;br /&gt;
.vector-sticky-header { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* Suppress body top padding that Vector adds */&lt;br /&gt;
.mw-body { margin-top: 0 !important; padding-top: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 6. VECTOR TOC (desktop sidebar) ──────────────────────────── */&lt;br /&gt;
.vector-toc .vector-toc-numb { display: none !important; }&lt;br /&gt;
.vector-toc .vector-toc-title {&lt;br /&gt;
  font-size: 0.72em !important; font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase; letter-spacing: 0.08em;&lt;br /&gt;
  color: var(--text) !important;&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, system-ui, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-toc .vector-toc-text {&lt;br /&gt;
  white-space: normal !important; word-break: break-word !important;&lt;br /&gt;
  overflow-wrap: anywhere !important; display: inline !important;&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, system-ui, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-toc a, .vector-toc .vector-toc-link {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, system-ui, sans-serif !important;&lt;br /&gt;
  color: var(--text) !important; text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-toc a:hover { color: var(--light-orange) !important; }&lt;br /&gt;
.vector-toc .vector-toc-list-item-active .vector-toc-link,&lt;br /&gt;
.vector-toc .vector-toc-list-item-active .vector-toc-link * {&lt;br /&gt;
  color: var(--light-orange) !important; font-weight: 700 !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-toc .cdx-button.vector-toc-toggle {&lt;br /&gt;
  background: none !important; border: none !important;&lt;br /&gt;
  box-shadow: none !important; color: var(--text) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 7. HEADINGS ───────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output h1, .mw-parser-output h2, .mw-parser-output h3, .mw-parser-output h4,&lt;br /&gt;
.mw-parser-output .mw-heading h1, .mw-parser-output .mw-heading h2,&lt;br /&gt;
.mw-parser-output .mw-heading h3 {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  border: none !important; padding: 0 !important; background: none !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output .mw-heading { border: none !important; margin: 0; padding: 0; }&lt;br /&gt;
&lt;br /&gt;
.mw-heading, .mw-heading2, .mw-heading3 { text-align:center; }&lt;br /&gt;
.mw-parser-output h2, .mw-parser-output .mw-heading2 h2 {&lt;br /&gt;
  font-size: 1.2em !important; font-weight: 500 !important;&lt;br /&gt;
  color: var(--maroon) !important; line-height: 1.8;&lt;br /&gt;
  margin: 24px 0 4px !important;&lt;br /&gt;
  border-bottom: 2px dotted var(--maroon) !important;&lt;br /&gt;
  width: 75%; font-family: &#039;AdishilaDev&#039;; text-align: center;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output h3, .mw-parser-output .mw-heading3 h3 {&lt;br /&gt;
  font-size: 1em !important; font-weight: 500 !important;&lt;br /&gt;
  color: var(--orange) !important; line-height: 1.5;&lt;br /&gt;
  margin: 24px 0 8px !important;&lt;br /&gt;
  border-bottom: 1px dotted var(--orange) !important;&lt;br /&gt;
  width: 55%; font-family: &#039;AdishilaDev&#039;; text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 8. PARAGRAPHS ─────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output p { margin: 0 0 0.35rem !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 9. DOCUMENT TITLE ─────────────────────────────────────────── */&lt;br /&gt;
.gr-doc-title {&lt;br /&gt;
  font-size: 2em; font-weight: 500; color: var(--maroon);&lt;br /&gt;
  line-height: 1.4; margin: 0 0 16px; border: none !important;&lt;br /&gt;
  text-align:center; font-family: &#039;AdishilaDev&#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 10. VERSE BLOCKS ──────────────────────────────────────────── */&lt;br /&gt;
.shloka-block { display: block; text-align: left; margin: 3px 0 0; padding-bottom: 0.5em; }&lt;br /&gt;
.shloka-line { display: block; font-style: normal; color: #333; line-height: 1.35; margin: 0; }&lt;br /&gt;
.verse-block { display: block; margin: 6px 0 0; text-align: left; }&lt;br /&gt;
.verse-block .shloka-block { text-align: left; margin: 0; }&lt;br /&gt;
.verse-block .shloka-line {&lt;br /&gt;
  display: block; font-style: italic; color: #c65;&lt;br /&gt;
  font-weight: 500; line-height: 1.35; margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.verse-block + p { display: none !important; margin: 0 !important; }&lt;br /&gt;
.mw-parser-output .verse-block,&lt;br /&gt;
.mw-parser-output .shloka-block { margin-top: 2px !important; margin-bottom: 2px !important; }&lt;br /&gt;
&lt;br /&gt;
.gr-verse-text, .verse-line, .verse-text {&lt;br /&gt;
  color: #b5451b; font-style: italic; line-height: 1.5; display: block; margin: 0.1em 0;&lt;br /&gt;
}&lt;br /&gt;
.gr-verse-type-sutra .gr-verse-text,&lt;br /&gt;
.verse-block[data-type=&amp;quot;sutra&amp;quot;] .verse-line { font-style: normal; font-weight: 600; color: #b5451b; }&lt;br /&gt;
&lt;br /&gt;
/* ── 11. UVACHA ────────────────────────────────────────────────── */&lt;br /&gt;
.uvacha-block {&lt;br /&gt;
  display: block; font-weight: bold; color: #c65;&lt;br /&gt;
  margin: 0.5rem 0 0; padding: 2px 0 2px 12px;&lt;br /&gt;
  border-left: 3px solid #c65; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
.uvacha-block + .verse-block { margin-top: 2px; }&lt;br /&gt;
.gr-uvaaca, .uvaaca {&lt;br /&gt;
  color: #b5451b; font-weight: 600; font-size: 0.92em; margin: 0.5em 0 0.2em 0; display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 12. BHASHYAM ──────────────────────────────────────────────── */&lt;br /&gt;
.bhashyam-block {&lt;br /&gt;
  display: block; font-size: 1em; line-height: 1.6; color: #555;&lt;br /&gt;
  margin: 0.25em 0 0.35em 48px; padding: 0; border: none; background: transparent;&lt;br /&gt;
}&lt;br /&gt;
.gr-bhashyam, .commentary-bhashyam {&lt;br /&gt;
  color: #222; font-style: normal; line-height: 1.75; margin: 0.3em 0 0.5em 0;&lt;br /&gt;
}&lt;br /&gt;
.gr-leading-bhashya { font-style: italic; color: #555; margin: 0.4em 0 0.5em 0; }&lt;br /&gt;
&lt;br /&gt;
/* ── 13. PADYA ─────────────────────────────────────────────────── */&lt;br /&gt;
.padya-block {&lt;br /&gt;
  display: block; font-size: 1em; line-height: 1.75; color: #c65 !important;&lt;br /&gt;
  font-style: italic; font-weight: 500; margin: 0.4em 0 0.6em 60px;&lt;br /&gt;
}&lt;br /&gt;
.gr-padapatha { font-size: 0.9em; color: #555; margin: 0.2em 0 0.3em 0.8em; }&lt;br /&gt;
&lt;br /&gt;
/* ── 14. TEEKA ─────────────────────────────────────────────────── */&lt;br /&gt;
.teeka-block {&lt;br /&gt;
  padding: 6px 10px 8px; margin: 0.3em 0; line-height: 1.6; color: #555;&lt;br /&gt;
}&lt;br /&gt;
.teeka-title {&lt;br /&gt;
  font-family: &#039;AdishilaDev&#039;;, sans-serif !important;&lt;br /&gt;
  font-size: 1.75em; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase;&lt;br /&gt;
  margin-bottom: 4px; padding-bottom: 3px;&lt;br /&gt;
}&lt;br /&gt;
.teeka-body .shloka-block {&lt;br /&gt;
  margin: 0.4em 0; padding: 0.3em 0.6em; font-family: &#039;AdishilaDev&#039;;&lt;br /&gt;
}&lt;br /&gt;
.teeka-body .shloka-line { font-style: italic; font-size: 0.97em; font-family: &#039;AdishilaDev&#039;; }&lt;br /&gt;
&lt;br /&gt;
/* ── 15. PRATEEKA / MOOLA ──────────────────────────────────────── */&lt;br /&gt;
.gr-prateeka { font-weight: bold; font-style: normal; color: #333; }&lt;br /&gt;
.gr-mulaprateeka-block {&lt;br /&gt;
  display: block; font-weight: bold; font-style: normal;&lt;br /&gt;
  text-align: center; color: #333; margin: 0.7em 0 0.3em; line-height: 1.5;&lt;br /&gt;
}&lt;br /&gt;
.gr-moola { font-weight: bold; font-style: italic; color: #c65; }&lt;br /&gt;
&lt;br /&gt;
/* ── 16. ADHYAYA ───────────────────────────────────────────────── */&lt;br /&gt;
.adhyaya-block { margin: 0 0 4px; }&lt;br /&gt;
.adhyaya-trans { font-size: 0.9em; color: #666; margin: 2px 0 0; }&lt;br /&gt;
.adhyaya-intro { margin-top: 8px; line-height: 1.75; color: #555; }&lt;br /&gt;
.introduction p { color: var(--dark-gray); font-weight: 400; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.introduction { padding-bottom: 0.5em; text-align: justify; }&lt;br /&gt;
&lt;br /&gt;
/* ── 17. NYAYA / PRASNA ────────────────────────────────────────── */&lt;br /&gt;
.nyaya-block { margin: 32px 0; padding-top: 12px; border-top: 1px solid #eee; }&lt;br /&gt;
.nyaya-title {&lt;br /&gt;
  font-size: 1em; font-weight: 500; color: var(--orange);&lt;br /&gt;
  margin-bottom: 0.4rem; border-bottom: 1px dotted var(--orange); width: 50%;&lt;br /&gt;
}&lt;br /&gt;
.nyaya-body { color: #555; line-height: 1.75; margin-top: 0.5rem; }&lt;br /&gt;
.prasna-block { margin: 32px 0; padding-top: 12px; border-top: 1px solid #eee; }&lt;br /&gt;
.prasna-title {&lt;br /&gt;
  font-size: 1em; font-weight: 500; color: var(--orange);&lt;br /&gt;
  margin-bottom: 0.4rem; border-bottom: 1px dotted var(--orange); width: 50%;&lt;br /&gt;
}&lt;br /&gt;
.prasna-question, .prasna-answer { color: #555; line-height: 1.75; margin-top: 0.5rem; }&lt;br /&gt;
.prasna-answer { margin-left: 60px; }&lt;br /&gt;
&lt;br /&gt;
/* ── 18. VYAKHYA ELEMENTS ──────────────────────────────────────── */&lt;br /&gt;
.gr-vyakhya-head, .gr-section-head {&lt;br /&gt;
  font-size: 0.9em; font-weight: 700; color: #6a3e00;&lt;br /&gt;
  margin: 0.35em 0 0.15em; font-family: inherit; border: none; padding: 0;&lt;br /&gt;
}&lt;br /&gt;
.gr-avataranika {&lt;br /&gt;
  font-style: italic; color: #444; margin: 0.2em 0 0.5em 0.5em;&lt;br /&gt;
  padding-left: 0.6em; border-left: 2px solid #c9a96e; line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
.gr-vyakhya-pada {&lt;br /&gt;
  font-size: 0.88em; color: #555; background: #fafafa;&lt;br /&gt;
  border: 1px solid #e8e0d0; border-radius: 4px; padding: 0.5em 0.8em;&lt;br /&gt;
  margin: 0.5em 0; line-height: 1.5; white-space: pre-wrap;&lt;br /&gt;
}&lt;br /&gt;
.gr-vyakhya-gadya {&lt;br /&gt;
  font-weight: bold; font-size: 0.95em; text-align: center;&lt;br /&gt;
  color: #8b1a1a; margin: 0.2em 0; line-height: 1.6; letter-spacing: 0.03em;&lt;br /&gt;
}&lt;br /&gt;
.gr-vyakhya-para { margin: 0 0 0.5em 0; line-height: 1.65; color: #444; }&lt;br /&gt;
.gr-embedded-bhashya { margin: 0.2em 0 0.2em 1em; line-height: 1.6; }&lt;br /&gt;
.gr-gadya {&lt;br /&gt;
  display: block !important; font-size: 0.96em !important; font-weight: 600 !important;&lt;br /&gt;
  font-style: normal !important; color: #555 !important; margin: 16px 0 4px !important;&lt;br /&gt;
  border-bottom: 1px solid #ddd !important; width: 60%; line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
.gr-author-note {&lt;br /&gt;
  font-style: italic; color: var(--maroon); text-align: center; font-size: 0.9em;&lt;br /&gt;
  margin: 0.8em 0 0.4em 0; border-top: 1px solid #ddd; padding-top: 0.4em; font-family: &#039;AdishilaDev&#039;&lt;br /&gt;
}&lt;br /&gt;
.gr-devatachandas { font-size: 0.82em; color: #777; margin: 0.4em 0 0.2em 0; }&lt;br /&gt;
.gr-vargikarana   { font-size: 0.82em; color: #888; margin: 0.5em 0 0.1em 0; }&lt;br /&gt;
&lt;br /&gt;
/* ── 20. BHASHYA COLLECTION ────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output .bhashya-collection { margin: 0; padding: 0; }&lt;br /&gt;
.mw-parser-output .bhashya + p:empty,&lt;br /&gt;
.mw-parser-output .verse + p:empty,&lt;br /&gt;
.mw-parser-output .bhashya-collection + p:empty,&lt;br /&gt;
.mw-parser-output .pramana + p:empty,&lt;br /&gt;
.mw-parser-output .author-note + p:empty { display: none !important; margin: 0 !important; height: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 21. VERSE ACTIONS ─────────────────────────────────────────── */&lt;br /&gt;
.verse-actions {&lt;br /&gt;
  display: flex; flex-direction: row; align-items: center;&lt;br /&gt;
  gap: 6px; margin-top: 4px; justify-content: center;&lt;br /&gt;
}&lt;br /&gt;
.verse-action-btn {&lt;br /&gt;
  display: inline-flex; align-items: center; justify-content: center;&lt;br /&gt;
  padding: 4px; border-radius: 6px; cursor: pointer; opacity: 0.75; transition: all 0.2s;&lt;br /&gt;
}&lt;br /&gt;
.verse-action-btn:hover { opacity: 1; background-color: rgba(0,0,0,0.05); }&lt;br /&gt;
.icon { display: inline-block; width: 18px; height: 18px; background-repeat: no-repeat; background-position: center; background-size: contain; }&lt;br /&gt;
.icon-copy       { background-image: url(&#039;/images/copy.svg&#039;); }&lt;br /&gt;
.icon-commentary { background-image: url(&#039;/images/commentary.svg&#039;); }&lt;br /&gt;
.copy-tooltip {&lt;br /&gt;
  position: absolute; bottom: calc(100% + 8px); left: 50%;&lt;br /&gt;
  transform: translateX(-50%) translateY(4px);&lt;br /&gt;
  white-space: nowrap; pointer-events: none; z-index: 9999;&lt;br /&gt;
  display: inline-flex; align-items: center; padding: 2px 8px; border-radius: 999px;&lt;br /&gt;
  font-size: 0.75rem; font-weight: 500; background: rgba(30,30,30,0.82); color: #fff;&lt;br /&gt;
  opacity: 0; transition: opacity 0.2s, transform 0.2s;&lt;br /&gt;
}&lt;br /&gt;
.copy-tooltip.copy-tooltip-visible { opacity: 1; transform: translateX(-50%) translateY(0); }&lt;br /&gt;
&lt;br /&gt;
/* ── 22. CODE / PRE ────────────────────────────────────────────── */&lt;br /&gt;
pre, code, .mw-code, tt, kbd {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif ;&lt;br /&gt;
  background-color: transparent !important; border: none !important; padding: 0.3em 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-collapsible, .mw-collapsible-content, blockquote, .quotebox {&lt;br /&gt;
  background-color: transparent !important; border: none !important;&lt;br /&gt;
  font-style: normal !important; padding: 0 !important; margin-left: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 23. INLINE TOC BOX (wikitext __TOC__) ─────────────────────── */&lt;br /&gt;
.toc {&lt;br /&gt;
  display: block !important; background: #fffdf5; border: 1px solid #e8c88a;&lt;br /&gt;
  border-radius: 8px; padding: 12px 16px; margin: 0 0 24px 0;&lt;br /&gt;
  width: fit-content; min-width: 220px; max-width: 420px;&lt;br /&gt;
  font-size: 0.9em; line-height: 2;&lt;br /&gt;
}&lt;br /&gt;
.toc h2, .toc .toctitle {&lt;br /&gt;
  font-size: 0.85em !important; font-weight: 600 !important; color: var(--text) !important;&lt;br /&gt;
  border: none !important; margin: 0 0 6px !important; text-transform: uppercase; letter-spacing: 0.05em;&lt;br /&gt;
}&lt;br /&gt;
.toc ul { margin: 0 !important; padding-left: 1.2em !important; list-style: none !important; }&lt;br /&gt;
.toc li { margin: 0; padding: 0; }&lt;br /&gt;
.toc a { color: var(--text) !important; text-decoration: none !important; }&lt;br /&gt;
.toc a:hover { color: var(--light-orange) !important; }&lt;br /&gt;
.toc .toclevel-1 &amp;gt; a { font-weight: 600; }&lt;br /&gt;
.tocnumber { display: none; }&lt;br /&gt;
&lt;br /&gt;
/* ── 24. DOC TEEKAS + TOC NAV ──────────────────────────────────── */&lt;br /&gt;
.gr-doc-teekas { margin-bottom: 1em; }&lt;br /&gt;
.gr-doc-teekas + p:empty { display: none !important; margin: 0 !important; height: 0 !important; }&lt;br /&gt;
.toc-main-links { display: flex; gap: 6px; padding: 5px; align-items: center; margin-bottom: 4px; }&lt;br /&gt;
.toc-main-link-item {&lt;br /&gt;
  font-size: 0.9em; color: var(--text); text-decoration: none; padding: 4px 8px;&lt;br /&gt;
  border-radius: 6px; background: rgba(0,0,0,0.05); transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.toc-main-link-item:hover { background: rgba(0,0,0,0.10) !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 25. MAIN PAGE ─────────────────────────────────────────────── */&lt;br /&gt;
body.page-Main_Page #mw-panel,&lt;br /&gt;
body.page-Main_Page .vector-sidebar-container { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
.gr-home { max-width: 1080px; margin: 0 auto; padding: 0; }&lt;br /&gt;
.gr-home-page-title {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif !important;&lt;br /&gt;
  text-align: center; font-size: 1.8em; font-weight: 500; color: #1a2e40; margin: 24px 0 32px;&lt;br /&gt;
}&lt;br /&gt;
.gr-home-grid { display: flex; flex-wrap: wrap; gap: 20px; margin-bottom: 32px; }&lt;br /&gt;
.gr-home-card {&lt;br /&gt;
  background: #fff; border: 1px solid #e8e4df; border-radius: 10px;&lt;br /&gt;
  box-shadow: 0 2px 8px rgba(0,0,0,0.07);&lt;br /&gt;
  padding: 18px 20px 20px; flex: 1 1 280px; min-width: 240px; max-width: 360px;&lt;br /&gt;
}&lt;br /&gt;
.gr-home-card-title {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif !important;&lt;br /&gt;
  font-size: 1em; font-weight: 600; color: #1a2e40; text-align: center;&lt;br /&gt;
  padding-bottom: 10px; margin-bottom: 12px; border-bottom: 1.5px solid #c0392b;&lt;br /&gt;
}&lt;br /&gt;
.gr-home-card ol { margin: 0; padding-left: 1.4em; list-style: decimal; }&lt;br /&gt;
.gr-home-card li { font-size: 0.95em; line-height: 1.85; color: #333; }&lt;br /&gt;
.gr-home-card li a { color: #c0392b; text-decoration: none; }&lt;br /&gt;
.gr-home-card li a:hover { text-decoration: underline; }&lt;br /&gt;
.gr-home-card li a.new { color: #c08080; }&lt;br /&gt;
.gr-home-note { font-size: 0.82em; color: #888; }&lt;br /&gt;
.gr-home-group-label {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif !important;&lt;br /&gt;
  font-size: 1.1em; font-weight: 600; color: #1a2e40; text-align: center;&lt;br /&gt;
  margin: 36px 0 16px; padding-bottom: 8px; border-bottom: 2px solid #c0392b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 26. TOGGLE BUTTONS ────────────────────────────────────────── */&lt;br /&gt;
.gr-home-toggle { display: flex; gap: 8px; margin: 0 0 24px; justify-content: center; }&lt;br /&gt;
.gr-toggle-btn {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  font-size: 0.88em; padding: 6px 20px; border: 1.5px solid #c0392b; border-radius: 20px;&lt;br /&gt;
  background: transparent; color: #c0392b; cursor: pointer; user-select: none; transition: background 0.15s, color 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gr-toggle-btn:hover { background: #fdf0ed; }&lt;br /&gt;
.gr-toggle-btn.gr-toggle-active { background: #c0392b; color: #fff; }&lt;br /&gt;
&lt;br /&gt;
/* ── 27. SCRIPT BAR ────────────────────────────────────────────── */&lt;br /&gt;
.gr-script-bar { margin: 0 0 20px; font-size: 0.8em; color: #888; display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }&lt;br /&gt;
.gr-script-label { font-family: system-ui, sans-serif; color: #aaa; }&lt;br /&gt;
.gr-script-btn { font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif; color: #c0392b !important; text-decoration: underline dotted !important; cursor: pointer; }&lt;br /&gt;
.gr-script-btn.active { color: #888 !important; text-decoration: none !important; cursor: default; }&lt;br /&gt;
&lt;br /&gt;
/* ── 28. MODALS ────────────────────────────────────────────────── */&lt;br /&gt;
.grantha-modal { position: fixed; inset: 0; background: rgba(0,0,0,0.35); display: flex; align-items: center; justify-content: center; z-index: 10000; }&lt;br /&gt;
.grantha-modal-box { background: white; padding: 20px; border-radius: 10px; width: 300px; }&lt;br /&gt;
.gm-title { font-weight: bold; margin-bottom: 10px; }&lt;br /&gt;
.gm-actions { display: flex; justify-content: flex-end; gap: 10px; margin-top: 12px; }&lt;br /&gt;
&lt;br /&gt;
/* ── 29. LOGIN PAGE ────────────────────────────────────────────── */&lt;br /&gt;
body.page-Special_UserLogin .vector-search-box,&lt;br /&gt;
body.page-Special_UserLogin #p-search { display: none !important; }&lt;br /&gt;
body.page-Special_UserLogin #content { max-width: 420px; margin: 40px auto !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 30. SPECIAL PAGES ─────────────────────────────────────────── */&lt;br /&gt;
body.ns-special #footer, body.ns-special .mw-footer,&lt;br /&gt;
body.ns-special .vector-footer { display: none !important; }&lt;br /&gt;
body.ns-special .vector-page-tools { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 31. MINERVA (mobile) ──────────────────────────────────────── */&lt;br /&gt;
.skin-minerva .mw-parser-output {&lt;br /&gt;
  font-size: 18px !important;&lt;br /&gt;
  line-height: 1.8 !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .mw-parser-output h2,&lt;br /&gt;
.skin-minerva .mw-parser-output .mw-heading2 h2 {&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .mw-parser-output h3,&lt;br /&gt;
.skin-minerva .mw-parser-output .mw-heading3 h3 {&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .bhashyam-block { margin-left: 16px !important; }&lt;br /&gt;
.skin-minerva .prasna-answer  { margin-left: 16px !important; }&lt;br /&gt;
.skin-minerva .padya-block    { margin-left: 16px !important; }&lt;br /&gt;
/* Home grid single column on Minerva */&lt;br /&gt;
.skin-minerva .gr-home-grid {&lt;br /&gt;
  flex-direction: column !important;&lt;br /&gt;
  flex-wrap: nowrap !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .gr-home-card {&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
  min-width: unset !important;&lt;br /&gt;
  flex: 0 0 auto !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
/* Hide things that should be hidden on mobile too */&lt;br /&gt;
.skin-minerva .catlinks,&lt;br /&gt;
.skin-minerva #catlinks { display: none !important; }&lt;br /&gt;
.skin-minerva .mw-editsection { display: none !important; }&lt;br /&gt;
/* Minerva already has its own TOC — hide our inline .toc */&lt;br /&gt;
.skin-minerva .toc { display: none !important; }&lt;br /&gt;
/* ReaderToolbar on Minerva */&lt;br /&gt;
.skin-minerva #gr-static-bar {&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  min-height: 52px !important;&lt;br /&gt;
  overflow-x: auto !important;&lt;br /&gt;
  overflow-y: hidden !important;&lt;br /&gt;
  scrollbar-width: none !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva #gr-static-bar::-webkit-scrollbar { display: none !important; }&lt;br /&gt;
.skin-minerva .gr-controls .gr-btn {&lt;br /&gt;
  height: 44px !important;&lt;br /&gt;
  min-width: 44px !important;&lt;br /&gt;
  font-size: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .gr-btn-staging { display: none !important; }&lt;br /&gt;
.skin-minerva .gr-controls .gr-sep { display: none !important; }&lt;br /&gt;
/* Minerva already shows page title — don&#039;t double-hide */&lt;br /&gt;
.skin-minerva h1.firstHeading { display: block !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 32. PRINT ─────────────────────────────────────────────────── */&lt;br /&gt;
@media print {&lt;br /&gt;
  #gr-static-bar, .gr-controls, .vector-header-container { display: none !important; }&lt;br /&gt;
  .mw-parser-output { font-size: 11pt !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 33. TYPOGRAPHY CLASSES ────────────────────────────────────── */&lt;br /&gt;
&lt;br /&gt;
/* Heading — center, maroon, AdishilaDevGuru */&lt;br /&gt;
.gr-heading {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  font-size: 1.09em;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  color: #be100e;&lt;br /&gt;
  font-family: &#039;AdishilaDevGuru&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  line-height: 1.4;&lt;br /&gt;
  margin: 0.45em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Sub-heading — center, orange, AdishilaDevGuru */&lt;br /&gt;
.gr-sub-heading {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  font-size: 0.73em;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  color: #e65100;&lt;br /&gt;
  font-family: &#039;AdishilaDevGuru&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
  margin: 0.5em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Chapter Heading — center, maroon, AdishilaDevGuru */&lt;br /&gt;
.gr-chapter-heading {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  font-size: 0.82em;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  color: #be100e;&lt;br /&gt;
  font-family: &#039;AdishilaDevGuru&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
  margin: 0.5em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* M.Veda Shloka — left, bold, maroon, AdishilaVed, 5mm indent */&lt;br /&gt;
.gr-mv-shloka {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: left;&lt;br /&gt;
  font-size: 0.82em;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  color: #be100e;&lt;br /&gt;
  font-family: &#039;AdishilaVed&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  padding-left: 0.86em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.75;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* M.Veda Gadya — justify, bold, maroon, AdishilaVed */&lt;br /&gt;
.gr-mv-gadya {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: justify;&lt;br /&gt;
  font-size: 0.82em;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  color: #be100e;&lt;br /&gt;
  font-family: &#039;AdishilaVed&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  text-indent: 1.18em;&lt;br /&gt;
  padding-left: 0.36em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.75;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* M.Shloka — left, bold, orange, AdishilaDev, 5mm indent */&lt;br /&gt;
.gr-m-shloka {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: left;&lt;br /&gt;
  font-size: 0.82em;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  color: #e65100;&lt;br /&gt;
  font-family: &#039;AdishilaDev&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  padding-left: 0.86em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.75;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* B.Shloka / TK.Shloka / TP.Shloka — left, black, AdishilaDev, 10mm indent */&lt;br /&gt;
.gr-b-shloka,&lt;br /&gt;
.gr-tp-shloka {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: left;&lt;br /&gt;
  font-size: 0.73em;&lt;br /&gt;
  font-weight: normal;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  font-family: &#039;AdishilaDev&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  padding-left: 1.73em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.75;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Reference — orange, AdishilaDev */&lt;br /&gt;
.gr-reference {&lt;br /&gt;
  color: #e65100;&lt;br /&gt;
  font-family: &#039;AdishilaDev&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Custom tag span — subtle dashed underline only */&lt;br /&gt;
.gr-custom {&lt;br /&gt;
  border-bottom: 1px dashed #b5451b;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 34. MINERVA HEADER — orange theme + sticky ────────────────── */&lt;br /&gt;
&lt;br /&gt;
/* Kill space above header */&lt;br /&gt;
.skin-minerva body { margin-top: 0 !important; padding-top: 0 !important; }&lt;br /&gt;
.skin-minerva #mw-mf-viewport,&lt;br /&gt;
.skin-minerva #mw-mf-page-center { margin-top: 0 !important; padding-top: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* Header — orange, sticky */&lt;br /&gt;
.skin-minerva header.header-container {&lt;br /&gt;
  background: #b5451b !important;&lt;br /&gt;
  position: sticky !important;&lt;br /&gt;
  top: 0 !important;&lt;br /&gt;
  z-index: 200 !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  color: #ffffff;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .minerva-header {&lt;br /&gt;
  background: #b5451b !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  min-height: 54px !important;&lt;br /&gt;
  padding: 0 12px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.minerva-icon {&lt;br /&gt;
 &lt;br /&gt;
 filter: brightness(0) saturate(100%) invert(100%) sepia(4%) saturate(1%) hue-rotate(296deg) brightness(104%) contrast(100%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Site name text */&lt;br /&gt;
.skin-minerva .branding-box { background: transparent !important; }&lt;br /&gt;
.skin-minerva .branding-box a {&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .branding-box a span {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-size: 18px !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  font-family: system-ui, -apple-system, sans-serif !important;&lt;br /&gt;
  white-space: nowrap !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hamburger + search icons — white */&lt;br /&gt;
.skin-minerva .minerva-header label,&lt;br /&gt;
.skin-minerva .minerva-header .search-toggle {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .minerva-header svg path,&lt;br /&gt;
.skin-minerva .minerva-header svg rect,&lt;br /&gt;
.skin-minerva .minerva-header svg circle {&lt;br /&gt;
  fill: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .minerva-header .mw-ui-icon:before {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  filter: brightness(10) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Reader toolbar below Minerva header */&lt;br /&gt;
.skin-minerva #gr-static-bar {&lt;br /&gt;
  position: sticky !important;&lt;br /&gt;
  top: 54px !important;&lt;br /&gt;
  z-index: 100 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 35. MINERVA — auto-expand sections ────────────────────────── */&lt;br /&gt;
.skin-minerva .collapsible-block,&lt;br /&gt;
.skin-minerva .collapsible-heading + .collapsible-block {&lt;br /&gt;
  display: block !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .mf-section-0,&lt;br /&gt;
.skin-minerva .mf-section-1,&lt;br /&gt;
.skin-minerva .mf-section-2,&lt;br /&gt;
.skin-minerva .mf-section-3,&lt;br /&gt;
.skin-minerva .mf-section-4,&lt;br /&gt;
.skin-minerva .mf-section-5,&lt;br /&gt;
.skin-minerva .mf-section-6,&lt;br /&gt;
.skin-minerva .mf-section-7,&lt;br /&gt;
.skin-minerva .mf-section-8,&lt;br /&gt;
.skin-minerva .mf-section-9 {&lt;br /&gt;
  display: block !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .section-heading {&lt;br /&gt;
  pointer-events: none !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .section-heading .indicator {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* ── Hide MediaWiki default header user/account controls (desktop) ── */&lt;br /&gt;
#pt-userpage-2,&lt;br /&gt;
#p-vector-user-menu-userpage,&lt;br /&gt;
/* Hide the right-side person-icon dropdown */&lt;br /&gt;
#vector-user-links-dropdown,&lt;br /&gt;
.vector-user-links-dropdown,&lt;br /&gt;
#p-personal-more,&lt;br /&gt;
.vector-user-menu,&lt;br /&gt;
.mw-portlet-vector-user-menu-overflow {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* ── Custom username dropdown ── */&lt;br /&gt;
#gr-user-dropdown {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    font-family: system-ui, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
#gr-user-trigger {&lt;br /&gt;
    display: inline-flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    gap: 6px;&lt;br /&gt;
    background: rgba(255,255,255,0.12);&lt;br /&gt;
    border: none;&lt;br /&gt;
    color: #fff;&lt;br /&gt;
    font-size: 0.9em;&lt;br /&gt;
    font-weight: 500;&lt;br /&gt;
    padding: 6px 12px;&lt;br /&gt;
    border-radius: 6px;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
#gr-user-trigger:hover { background: rgba(255,255,255,0.2); }&lt;br /&gt;
#gr-user-trigger .gr-caret { font-size: 0.7em; opacity: 0.8; }&lt;br /&gt;
&lt;br /&gt;
#gr-user-menu {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: calc(100% + 6px);&lt;br /&gt;
    right: 0;&lt;br /&gt;
    min-width: 180px;&lt;br /&gt;
    background: #fff;&lt;br /&gt;
    border: 1px solid #e0d8d2;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
    box-shadow: 0 6px 24px rgba(0,0,0,0.14);&lt;br /&gt;
    padding: 6px;&lt;br /&gt;
    z-index: 1000;&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
#gr-user-menu.gr-open { display: block; }&lt;br /&gt;
#gr-user-menu a {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    gap: 10px;&lt;br /&gt;
    padding: 10px 12px;&lt;br /&gt;
    color: #2c1810;&lt;br /&gt;
    text-decoration: none;&lt;br /&gt;
    font-size: 0.92em;&lt;br /&gt;
    border-radius: 6px;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
#gr-user-menu a:hover { background: #f7f1ed; }&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.js&amp;diff=6193</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.js&amp;diff=6193"/>
		<updated>2026-06-11T09:18:55Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* MediaWiki:Common.js — grantha.io  (v7) */&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
  var LS_SCRIPT_KEY = &#039;grantha_reader_script&#039;;&lt;br /&gt;
  var currentScript = &#039;deva&#039;;&lt;br /&gt;
&lt;br /&gt;
  function devanagariToIAST( text ) {&lt;br /&gt;
    var CONSONANTS = {&lt;br /&gt;
      &#039;क&#039;:&#039;k&#039;,&#039;ख&#039;:&#039;kh&#039;,&#039;ग&#039;:&#039;g&#039;,&#039;घ&#039;:&#039;gh&#039;,&#039;ङ&#039;:&#039;ṅ&#039;,&lt;br /&gt;
      &#039;च&#039;:&#039;c&#039;,&#039;छ&#039;:&#039;ch&#039;,&#039;ज&#039;:&#039;j&#039;,&#039;झ&#039;:&#039;jh&#039;,&#039;ञ&#039;:&#039;ñ&#039;,&lt;br /&gt;
      &#039;ट&#039;:&#039;ṭ&#039;,&#039;ठ&#039;:&#039;ṭh&#039;,&#039;ड&#039;:&#039;ḍ&#039;,&#039;ढ&#039;:&#039;ḍh&#039;,&#039;ण&#039;:&#039;ṇ&#039;,&lt;br /&gt;
      &#039;त&#039;:&#039;t&#039;,&#039;थ&#039;:&#039;th&#039;,&#039;द&#039;:&#039;d&#039;,&#039;ध&#039;:&#039;dh&#039;,&#039;न&#039;:&#039;n&#039;,&lt;br /&gt;
      &#039;प&#039;:&#039;p&#039;,&#039;फ&#039;:&#039;ph&#039;,&#039;ब&#039;:&#039;b&#039;,&#039;भ&#039;:&#039;bh&#039;,&#039;म&#039;:&#039;m&#039;,&lt;br /&gt;
      &#039;य&#039;:&#039;y&#039;,&#039;र&#039;:&#039;r&#039;,&#039;ल&#039;:&#039;l&#039;,&#039;ळ&#039;:&#039;ḷ&#039;,&#039;व&#039;:&#039;v&#039;,&lt;br /&gt;
      &#039;श&#039;:&#039;ś&#039;,&#039;ष&#039;:&#039;ṣ&#039;,&#039;स&#039;:&#039;s&#039;,&#039;ह&#039;:&#039;h&#039;&lt;br /&gt;
    };&lt;br /&gt;
    var DIACRITICS = {&lt;br /&gt;
      &#039;ा&#039;:&#039;ā&#039;,&#039;ि&#039;:&#039;i&#039;,&#039;ी&#039;:&#039;ī&#039;,&#039;ु&#039;:&#039;u&#039;,&#039;ू&#039;:&#039;ū&#039;,&lt;br /&gt;
      &#039;ृ&#039;:&#039;ṛ&#039;,&#039;ॄ&#039;:&#039;ṝ&#039;,&#039;े&#039;:&#039;e&#039;,&#039;ै&#039;:&#039;ai&#039;,&#039;ो&#039;:&#039;o&#039;,&#039;ौ&#039;:&#039;au&#039;&lt;br /&gt;
    };&lt;br /&gt;
    var VOWELS = {&lt;br /&gt;
      &#039;अ&#039;:&#039;a&#039;,&#039;आ&#039;:&#039;ā&#039;,&#039;इ&#039;:&#039;i&#039;,&#039;ई&#039;:&#039;ī&#039;,&#039;उ&#039;:&#039;u&#039;,&#039;ऊ&#039;:&#039;ū&#039;,&lt;br /&gt;
      &#039;ऋ&#039;:&#039;ṛ&#039;,&#039;ॠ&#039;:&#039;ṝ&#039;,&#039;ए&#039;:&#039;e&#039;,&#039;ऐ&#039;:&#039;ai&#039;,&#039;ओ&#039;:&#039;o&#039;,&#039;औ&#039;:&#039;au&#039;,&#039;ऽ&#039;:&amp;quot;&#039;&amp;quot;&lt;br /&gt;
    };&lt;br /&gt;
    var MISC = {&lt;br /&gt;
      &#039;ं&#039;:&#039;ṃ&#039;,&#039;ः&#039;:&#039;ḥ&#039;,&#039;ँ&#039;:&#039;m̐&#039;,&#039;ॐ&#039;:&#039;oṃ&#039;,&lt;br /&gt;
      &#039;०&#039;:&#039;0&#039;,&#039;१&#039;:&#039;1&#039;,&#039;२&#039;:&#039;2&#039;,&#039;३&#039;:&#039;3&#039;,&#039;४&#039;:&#039;4&#039;,&lt;br /&gt;
      &#039;५&#039;:&#039;5&#039;,&#039;६&#039;:&#039;6&#039;,&#039;७&#039;:&#039;7&#039;,&#039;८&#039;:&#039;8&#039;,&#039;९&#039;:&#039;9&#039;&lt;br /&gt;
    };&lt;br /&gt;
    var HALANTA = &#039;्&#039;;&lt;br /&gt;
    var chars = Array.from( text );&lt;br /&gt;
    var result = &#039;&#039;;&lt;br /&gt;
    var i = 0;&lt;br /&gt;
    while ( i &amp;lt; chars.length ) {&lt;br /&gt;
      var ch   = chars[ i ];&lt;br /&gt;
      var next = chars[ i + 1 ];&lt;br /&gt;
      if ( CONSONANTS[ ch ] ) {&lt;br /&gt;
        var base = CONSONANTS[ ch ];&lt;br /&gt;
        if ( next === HALANTA )          { result += base;               i += 2; }&lt;br /&gt;
        else if ( DIACRITICS[ next ] )   { result += base + DIACRITICS[ next ]; i += 2; }&lt;br /&gt;
        else if ( next === &#039;ं&#039; || next === &#039;ः&#039; ) { result += base + &#039;a&#039; + MISC[ next ]; i += 2; }&lt;br /&gt;
        else                             { result += base + &#039;a&#039;;         i++;    }&lt;br /&gt;
      } else if ( VOWELS[ ch ] )         { result += VOWELS[ ch ];       i++; }&lt;br /&gt;
      else if ( DIACRITICS[ ch ] )       { result += DIACRITICS[ ch ];   i++; }&lt;br /&gt;
      else if ( MISC[ ch ] )             { result += MISC[ ch ];         i++; }&lt;br /&gt;
      else                               { result += ch;                 i++; }&lt;br /&gt;
    }&lt;br /&gt;
    return result;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var SCRIPT_MAP = {&lt;br /&gt;
    kn: {&lt;br /&gt;
      &#039;अ&#039;:&#039;ಅ&#039;,&#039;आ&#039;:&#039;ಆ&#039;,&#039;इ&#039;:&#039;ಇ&#039;,&#039;ई&#039;:&#039;ಈ&#039;,&#039;उ&#039;:&#039;ಉ&#039;,&#039;ऊ&#039;:&#039;ಊ&#039;,&#039;ऋ&#039;:&#039;ಋ&#039;,&lt;br /&gt;
      &#039;ए&#039;:&#039;ಏ&#039;,&#039;ऐ&#039;:&#039;ಐ&#039;,&#039;ओ&#039;:&#039;ಓ&#039;,&#039;औ&#039;:&#039;ಔ&#039;,&#039;ऽ&#039;:&#039;ಽ&#039;,&lt;br /&gt;
      &#039;क&#039;:&#039;ಕ&#039;,&#039;ख&#039;:&#039;ಖ&#039;,&#039;ग&#039;:&#039;ಗ&#039;,&#039;घ&#039;:&#039;ಘ&#039;,&#039;ङ&#039;:&#039;ಙ&#039;,&lt;br /&gt;
      &#039;च&#039;:&#039;ಚ&#039;,&#039;छ&#039;:&#039;ಛ&#039;,&#039;ज&#039;:&#039;ಜ&#039;,&#039;झ&#039;:&#039;ಝ&#039;,&#039;ञ&#039;:&#039;ಞ&#039;,&lt;br /&gt;
      &#039;ट&#039;:&#039;ಟ&#039;,&#039;ठ&#039;:&#039;ಠ&#039;,&#039;ड&#039;:&#039;ಡ&#039;,&#039;ढ&#039;:&#039;ಢ&#039;,&#039;ण&#039;:&#039;ಣ&#039;,&lt;br /&gt;
      &#039;त&#039;:&#039;ತ&#039;,&#039;थ&#039;:&#039;ಥ&#039;,&#039;द&#039;:&#039;ದ&#039;,&#039;ध&#039;:&#039;ಧ&#039;,&#039;न&#039;:&#039;ನ&#039;,&lt;br /&gt;
      &#039;प&#039;:&#039;ಪ&#039;,&#039;फ&#039;:&#039;ಫ&#039;,&#039;ब&#039;:&#039;ಬ&#039;,&#039;भ&#039;:&#039;ಭ&#039;,&#039;म&#039;:&#039;ಮ&#039;,&lt;br /&gt;
      &#039;य&#039;:&#039;ಯ&#039;,&#039;र&#039;:&#039;ರ&#039;,&#039;ल&#039;:&#039;ಲ&#039;,&#039;व&#039;:&#039;ವ&#039;,&lt;br /&gt;
      &#039;श&#039;:&#039;ಶ&#039;,&#039;ष&#039;:&#039;ಷ&#039;,&#039;स&#039;:&#039;ಸ&#039;,&#039;ह&#039;:&#039;ಹ&#039;,&lt;br /&gt;
      &#039;ा&#039;:&#039;ಾ&#039;,&#039;ि&#039;:&#039;ಿ&#039;,&#039;ी&#039;:&#039;ೀ&#039;,&#039;ु&#039;:&#039;ು&#039;,&#039;ू&#039;:&#039;ೂ&#039;,&lt;br /&gt;
      &#039;ृ&#039;:&#039;ೃ&#039;,&#039;े&#039;:&#039;ೇ&#039;,&#039;ै&#039;:&#039;ೈ&#039;,&#039;ो&#039;:&#039;ೋ&#039;,&#039;ौ&#039;:&#039;ೌ&#039;,&lt;br /&gt;
      &#039;ं&#039;:&#039;ಂ&#039;,&#039;ः&#039;:&#039;ಃ&#039;,&#039;्&#039;:&#039;್&#039;,&lt;br /&gt;
      &#039;०&#039;:&#039;೦&#039;,&#039;१&#039;:&#039;೧&#039;,&#039;२&#039;:&#039;೨&#039;,&#039;३&#039;:&#039;೩&#039;,&#039;४&#039;:&#039;೪&#039;,&lt;br /&gt;
      &#039;५&#039;:&#039;೫&#039;,&#039;६&#039;:&#039;೬&#039;,&#039;७&#039;:&#039;೭&#039;,&#039;८&#039;:&#039;೮&#039;,&#039;९&#039;:&#039;೯&#039;&lt;br /&gt;
    },&lt;br /&gt;
    ta: {&lt;br /&gt;
      &#039;अ&#039;:&#039;அ&#039;,&#039;आ&#039;:&#039;ஆ&#039;,&#039;इ&#039;:&#039;இ&#039;,&#039;ई&#039;:&#039;ஈ&#039;,&#039;उ&#039;:&#039;உ&#039;,&#039;ऊ&#039;:&#039;ஊ&#039;,&lt;br /&gt;
      &#039;ऋ&#039;:&#039;ரு&#039;,&#039;ॠ&#039;:&#039;ரூ&#039;,&lt;br /&gt;
      &#039;ए&#039;:&#039;ஏ&#039;,&#039;ऐ&#039;:&#039;ஐ&#039;,&#039;ओ&#039;:&#039;ஓ&#039;,&#039;औ&#039;:&#039;ஔ&#039;,&lt;br /&gt;
      &#039;क&#039;:&#039;க&#039;,&#039;ख&#039;:&#039;க&#039;,&#039;ग&#039;:&#039;க&#039;,&#039;घ&#039;:&#039;க&#039;,&#039;ङ&#039;:&#039;ங&#039;,&lt;br /&gt;
      &#039;च&#039;:&#039;ச&#039;,&#039;छ&#039;:&#039;ச&#039;,&#039;ज&#039;:&#039;ஜ&#039;,&#039;झ&#039;:&#039;ஜ&#039;,&#039;ञ&#039;:&#039;ஞ&#039;,&lt;br /&gt;
      &#039;ட&#039;:&#039;ட&#039;,&#039;ठ&#039;:&#039;ட&#039;,&#039;ड&#039;:&#039;ட&#039;,&#039;ढ&#039;:&#039;ட&#039;,&#039;ண&#039;:&#039;ண&#039;,&lt;br /&gt;
      &#039;त&#039;:&#039;த&#039;,&#039;थ&#039;:&#039;த&#039;,&#039;द&#039;:&#039;த&#039;,&#039;ध&#039;:&#039;த&#039;,&#039;न&#039;:&#039;ந&#039;,&lt;br /&gt;
      &#039;प&#039;:&#039;ப&#039;,&#039;फ&#039;:&#039;ப&#039;,&#039;ब&#039;:&#039;ப&#039;,&#039;भ&#039;:&#039;ப&#039;,&#039;म&#039;:&#039;ம&#039;,&lt;br /&gt;
      &#039;य&#039;:&#039;ய&#039;,&#039;र&#039;:&#039;ர&#039;,&#039;ल&#039;:&#039;ல&#039;,&#039;ळ&#039;:&#039;ழ&#039;,&#039;व&#039;:&#039;வ&#039;,&lt;br /&gt;
      &#039;श&#039;:&#039;ஶ&#039;,&#039;ष&#039;:&#039;ஷ&#039;,&#039;स&#039;:&#039;ஸ&#039;,&#039;ह&#039;:&#039;ஹ&#039;,&lt;br /&gt;
      &#039;ा&#039;:&#039;ா&#039;,&#039;ि&#039;:&#039;ி&#039;,&#039;ी&#039;:&#039;ீ&#039;,&#039;ु&#039;:&#039;ு&#039;,&#039;ू&#039;:&#039;ூ&#039;,&lt;br /&gt;
      &#039;ृ&#039;:&#039;ு&#039;,&#039;ॄ&#039;:&#039;ூ&#039;,&lt;br /&gt;
      &#039;े&#039;:&#039;ே&#039;,&#039;ை&#039;:&#039;ை&#039;,&#039;ो&#039;:&#039;ோ&#039;,&#039;ौ&#039;:&#039;ௌ&#039;,&lt;br /&gt;
      &#039;ं&#039;:&#039;ம்&#039;,&#039;ः&#039;:&#039;:&#039;,&#039;ँ&#039;:&#039;ம்&#039;,&#039;्&#039;:&#039;்&#039;,&#039;ॐ&#039;:&#039;ௐ&#039;,&#039;ऽ&#039;:&#039;ௗ&#039;,&lt;br /&gt;
      &#039;०&#039;:&#039;0&#039;,&#039;१&#039;:&#039;1&#039;,&#039;२&#039;:&#039;2&#039;,&#039;३&#039;:&#039;3&#039;,&#039;४&#039;:&#039;4&#039;,&lt;br /&gt;
      &#039;५&#039;:&#039;5&#039;,&#039;६&#039;:&#039;6&#039;,&#039;७&#039;:&#039;7&#039;,&#039;८&#039;:&#039;8&#039;,&#039;९&#039;:&#039;9&#039;&lt;br /&gt;
    }&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  var PRE = [&lt;br /&gt;
    [ /ङ्क/g, &#039;ंक&#039; ], [ /ङ्ख/g, &#039;ंख&#039; ], [ /ङ्ग/g, &#039;ंग&#039; ], [ /ङ्घ/g, &#039;ंघ&#039; ],&lt;br /&gt;
    [ /ञ्च/g, &#039;ंच&#039; ], [ /ञ्ज/g, &#039;ंज&#039; ], [ /ण्ट/g, &#039;ंट&#039; ], [ /ण्ड/g, &#039;ंड&#039; ],&lt;br /&gt;
    [ /न्त/g, &#039;ंत&#039; ], [ /न्द/g, &#039;ंद&#039; ], [ /म्ब/g, &#039;ंब&#039; ], [ /म्भ/g, &#039;ंभ&#039; ]&lt;br /&gt;
  ];&lt;br /&gt;
&lt;br /&gt;
  function transliterateText( text, script ) {&lt;br /&gt;
    if ( script === &#039;en&#039; ) return devanagariToIAST( text );&lt;br /&gt;
    var map = SCRIPT_MAP[ script ];&lt;br /&gt;
    if ( !map ) return text;&lt;br /&gt;
    var t = text;&lt;br /&gt;
    PRE.forEach( function ( p ) { t = t.replace( p[ 0 ], p[ 1 ] ); } );&lt;br /&gt;
    return Array.from( t ).map( function ( ch ) {&lt;br /&gt;
      return map[ ch ] !== undefined ? map[ ch ] : ch;&lt;br /&gt;
    } ).join( &#039;&#039; );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var translatableSpans = [];&lt;br /&gt;
&lt;br /&gt;
  function tagTextNodes() {&lt;br /&gt;
    var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
    if ( content ) {&lt;br /&gt;
      var walker = document.createTreeWalker( content, NodeFilter.SHOW_TEXT );&lt;br /&gt;
      var nodes  = [];&lt;br /&gt;
      while ( walker.nextNode() ) nodes.push( walker.currentNode );&lt;br /&gt;
      nodes.forEach( function ( node ) {&lt;br /&gt;
        var p = node.parentNode;&lt;br /&gt;
        if ( !p ) return;&lt;br /&gt;
        if ( p.hasAttribute &amp;amp;&amp;amp; p.hasAttribute( &#039;data-deva&#039; ) ) return;&lt;br /&gt;
        if ( p.closest ) {&lt;br /&gt;
          if ( p.closest( &#039;.gr-controls&#039; )    ) return;&lt;br /&gt;
          if ( p.closest( &#039;.mw-editsection&#039; ) ) return;&lt;br /&gt;
        }&lt;br /&gt;
        var orig = node.textContent;&lt;br /&gt;
        if ( !orig.trim() ) return;&lt;br /&gt;
        var span = document.createElement( &#039;span&#039; );&lt;br /&gt;
        span.setAttribute( &#039;data-deva&#039;, orig );&lt;br /&gt;
        span.textContent = orig;&lt;br /&gt;
        p.replaceChild( span, node );&lt;br /&gt;
        translatableSpans.push( span );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
    document.querySelectorAll( &#039;.vector-toc .vector-toc-text&#039; ).forEach( function ( span ) {&lt;br /&gt;
      if ( span.hasAttribute( &#039;data-deva&#039; ) ) return;&lt;br /&gt;
      var orig = span.textContent;&lt;br /&gt;
      if ( !orig.trim() ) return;&lt;br /&gt;
      span.setAttribute( &#039;data-deva&#039;, orig );&lt;br /&gt;
      translatableSpans.push( span );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function applyScript( script ) {&lt;br /&gt;
    currentScript = script;&lt;br /&gt;
    translatableSpans.forEach( function ( span ) {&lt;br /&gt;
      if ( !span.parentNode ) return;&lt;br /&gt;
      var orig = span.getAttribute( &#039;data-deva&#039; );&lt;br /&gt;
      if ( !orig ) return;&lt;br /&gt;
      span.textContent = ( script === &#039;deva&#039; )&lt;br /&gt;
        ? orig&lt;br /&gt;
        : transliterateText( orig, script );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function _isNoTocPage() {&lt;br /&gt;
    var pn = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039; ) ) || &#039;&#039;;&lt;br /&gt;
    return pn === &#039;Main_Page&#039; || /^[A-Za-z0-9_]+:About$/.test( pn );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function renameTocTitle() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector(&#039;.vector-toc&#039;);&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    var titleEl = toc.querySelector(&#039;.vector-toc-title&#039;) || toc.querySelector(&#039;.vector-pinnable-header-label&#039;);&lt;br /&gt;
    if ( !titleEl ) return;&lt;br /&gt;
    var LABEL = &#039;विषयसूची&#039;;&lt;br /&gt;
    var span = titleEl.querySelector(&#039;.gr-toc-title&#039;);&lt;br /&gt;
    if ( !span ) {&lt;br /&gt;
      titleEl.innerHTML = &#039;&#039;;&lt;br /&gt;
      span = document.createElement(&#039;span&#039;);&lt;br /&gt;
      span.className = &#039;gr-toc-title&#039;;&lt;br /&gt;
      span.setAttribute(&#039;data-deva&#039;, LABEL);&lt;br /&gt;
      titleEl.appendChild(span);&lt;br /&gt;
      translatableSpans.push(span);&lt;br /&gt;
    }&lt;br /&gt;
    span.textContent = currentScript === &#039;deva&#039; ? LABEL : transliterateText(LABEL, currentScript);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function removeTocBeginning() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    var el = toc.querySelector( &#039;#vector-toc-beginning&#039; );&lt;br /&gt;
    if ( !el ) {&lt;br /&gt;
      var items = toc.querySelectorAll( &#039;.vector-toc-list-item&#039; );&lt;br /&gt;
      for ( var i = 0; i &amp;lt; items.length; i++ ) {&lt;br /&gt;
        var a = items[ i ].querySelector( &#039;a&#039; );&lt;br /&gt;
        if ( a ) {&lt;br /&gt;
          var href = a.getAttribute( &#039;href&#039; ) || &#039;&#039;;&lt;br /&gt;
          if ( href.indexOf( &#039;#&#039; ) === -1 ) { el = items[ i ]; break; }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if ( el &amp;amp;&amp;amp; el.parentNode ) el.parentNode.removeChild( el );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function expandTocSections() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    toc.querySelectorAll( &#039;.vector-toc-list-item-collapsed&#039; ).forEach( function ( li ) {&lt;br /&gt;
      li.classList.remove( &#039;vector-toc-list-item-collapsed&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function injectTocDocNav() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    if ( document.getElementById( &#039;gr-toc-doc-nav&#039; ) ) return;&lt;br /&gt;
    var artPath   = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
    var pageTitle = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039;   ) ) || &#039;&#039;;&lt;br /&gt;
    var teekaPage   = document.querySelector( &#039;.gr-teeka-page&#039; );&lt;br /&gt;
    var primarySlug = teekaPage ? ( teekaPage.getAttribute( &#039;data-primary&#039; ) || &#039;&#039; ) : &#039;&#039;;&lt;br /&gt;
    if ( !primarySlug ) { primarySlug = pageTitle.split( &#039;/&#039; )[ 0 ]; }&lt;br /&gt;
    if ( !primarySlug ) return;&lt;br /&gt;
    function wikiUrl( slug ) {&lt;br /&gt;
      if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( slug );&lt;br /&gt;
      return artPath.replace( &#039;$1&#039;, encodeURIComponent( slug ).replace( /%2F/g, &#039;/&#039; ) );&lt;br /&gt;
    }&lt;br /&gt;
    var docTitleEl     = document.querySelector( &#039;.gr-doc-title&#039; );&lt;br /&gt;
    var hasMoolaPage   = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-moola&#039; )   === &#039;1&#039;;&lt;br /&gt;
    var hasUllekhaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-ullekha&#039; ) === &#039;1&#039;;&lt;br /&gt;
    var showMoolaPage  = !teekaPage &amp;amp;&amp;amp; hasMoolaPage;&lt;br /&gt;
    var showMoolaBack  = !!teekaPage;&lt;br /&gt;
    var showUllekha    = hasUllekhaPage || !!teekaPage;&lt;br /&gt;
    if ( !showMoolaPage &amp;amp;&amp;amp; !showMoolaBack &amp;amp;&amp;amp; !showUllekha ) return;&lt;br /&gt;
    var nav = document.createElement( &#039;div&#039; );&lt;br /&gt;
    nav.id = &#039;gr-toc-doc-nav&#039;;&lt;br /&gt;
    nav.setAttribute( &#039;class&#039;, &#039;toc-main-links&#039; );&lt;br /&gt;
    function makeBtn( href, label ) {&lt;br /&gt;
      var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
      a.href = href;&lt;br /&gt;
      a.setAttribute( &#039;class&#039;, &#039;toc-main-link-item&#039; );&lt;br /&gt;
      var lspan = document.createElement( &#039;span&#039; );&lt;br /&gt;
      lspan.setAttribute( &#039;data-deva&#039;, label );&lt;br /&gt;
      lspan.textContent = ( currentScript &amp;amp;&amp;amp; currentScript !== &#039;deva&#039; ) ? transliterateText( label, currentScript ) : label;&lt;br /&gt;
      translatableSpans.push( lspan );&lt;br /&gt;
      a.appendChild( lspan );&lt;br /&gt;
      a.addEventListener( &#039;mouseover&#039;, function () { this.style.opacity = &#039;0.72&#039;; } );&lt;br /&gt;
      a.addEventListener( &#039;mouseout&#039;,  function () { this.style.opacity = &#039;1&#039;;    } );&lt;br /&gt;
      return a;&lt;br /&gt;
    }&lt;br /&gt;
    if ( showMoolaPage ) nav.appendChild( makeBtn( wikiUrl( primarySlug + &#039;/Moola&#039; ), &#039;मूलम्&#039; ) );&lt;br /&gt;
    if ( showMoolaBack ) nav.appendChild( makeBtn( wikiUrl( primarySlug ),            &#039;मूल&#039;   ) );&lt;br /&gt;
    if ( showUllekha   ) nav.appendChild( makeBtn( wikiUrl( primarySlug + &#039;/Ullekha&#039;), &#039;उल्लेख&#039;) );&lt;br /&gt;
    var tocContents = toc.querySelector( &#039;.vector-toc-contents&#039; );&lt;br /&gt;
    if ( tocContents ) toc.insertBefore( nav, tocContents );&lt;br /&gt;
    else               toc.appendChild( nav );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var _headingObserver = null;&lt;br /&gt;
&lt;br /&gt;
  function attachHeadingObserver() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    if ( _headingObserver ) return;&lt;br /&gt;
    if ( !window.IntersectionObserver ) return;&lt;br /&gt;
    var ACTIVE_COLOR = &#039;#f57c00&#039;;&lt;br /&gt;
    var _activeId    = null;&lt;br /&gt;
    var content  = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
    if ( !content ) return;&lt;br /&gt;
    var headings = Array.from( content.querySelectorAll( &#039;h1[id],h2[id],h3[id],h4[id],h5[id],h6[id]&#039; ) );&lt;br /&gt;
    if ( !headings.length ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    function getTocLink( id ) { return toc.querySelector( &#039;a[href=&amp;quot;#&#039; + CSS.escape( id ) + &#039;&amp;quot;]&#039; ); }&lt;br /&gt;
    function getTocLi( id ) { var a = getTocLink( id ); return a ? a.closest( &#039;.vector-toc-list-item&#039; ) : null; }&lt;br /&gt;
    function clearActive() {&lt;br /&gt;
      toc.querySelectorAll( &#039;.vector-toc-list-item&#039; ).forEach( function ( li ) {&lt;br /&gt;
        li.classList.remove( &#039;vector-toc-list-item-active&#039; );&lt;br /&gt;
        var lnk = li.querySelector( &#039;.vector-toc-link&#039; );&lt;br /&gt;
        if ( !lnk ) return;&lt;br /&gt;
        lnk.style.removeProperty( &#039;color&#039; );&lt;br /&gt;
        lnk.style.setProperty( &#039;font-weight&#039;, &#039;400&#039;, &#039;important&#039; );&lt;br /&gt;
        lnk.querySelectorAll( &#039;*&#039; ).forEach( function ( el ) { el.style.removeProperty( &#039;color&#039; ); el.style.setProperty( &#039;font-weight&#039;, &#039;400&#039;, &#039;important&#039; ); } );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
    function setActive( id ) {&lt;br /&gt;
      if ( _activeId === id ) return;&lt;br /&gt;
      _activeId = id;&lt;br /&gt;
      clearActive();&lt;br /&gt;
      if ( !id ) return;&lt;br /&gt;
      var li = getTocLi( id );&lt;br /&gt;
      if ( !li ) return;&lt;br /&gt;
      li.classList.add( &#039;vector-toc-list-item-active&#039; );&lt;br /&gt;
      var hasActiveChild = !!li.querySelector( &#039;.vector-toc-list-item .vector-toc-list-item-active&#039; );&lt;br /&gt;
      if ( !hasActiveChild ) {&lt;br /&gt;
        var lnk = li.querySelector( &#039;.vector-toc-link&#039; );&lt;br /&gt;
        if ( lnk ) {&lt;br /&gt;
          lnk.style.setProperty( &#039;color&#039;, ACTIVE_COLOR, &#039;important&#039; );&lt;br /&gt;
          lnk.style.setProperty( &#039;font-weight&#039;, &#039;700&#039;, &#039;important&#039; );&lt;br /&gt;
          lnk.querySelectorAll( &#039;*&#039; ).forEach( function ( el ) { el.style.setProperty( &#039;color&#039;, ACTIVE_COLOR, &#039;important&#039; ); el.style.setProperty( &#039;font-weight&#039;, &#039;700&#039;, &#039;important&#039; ); } );&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      var anc = li.parentNode;&lt;br /&gt;
      while ( anc &amp;amp;&amp;amp; anc !== toc ) {&lt;br /&gt;
        if ( anc.classList ) anc.classList.remove( &#039;vector-toc-list-item-collapsed&#039; );&lt;br /&gt;
        if ( anc.tagName === &#039;UL&#039; || anc.tagName === &#039;LI&#039; ) anc.style.removeProperty( &#039;display&#039; );&lt;br /&gt;
        anc = anc.parentNode;&lt;br /&gt;
      }&lt;br /&gt;
      var sticky = document.querySelector( &#039;.vector-sticky-pinned-container&#039; );&lt;br /&gt;
      var scrollEl = sticky || toc;&lt;br /&gt;
      if ( scrollEl.scrollHeight &amp;gt; scrollEl.clientHeight ) {&lt;br /&gt;
        var lr = li.getBoundingClientRect();&lt;br /&gt;
        var cr = scrollEl.getBoundingClientRect();&lt;br /&gt;
        if ( lr.top &amp;lt; cr.top + 8 || lr.bottom &amp;gt; cr.bottom - 8 ) {&lt;br /&gt;
          scrollEl.scrollTop += lr.top - cr.top - scrollEl.clientHeight / 2 + li.offsetHeight / 2;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    var _visible = new Set();&lt;br /&gt;
    _headingObserver = new IntersectionObserver( function ( entries ) {&lt;br /&gt;
      entries.forEach( function ( entry ) {&lt;br /&gt;
        if ( entry.isIntersecting ) _visible.add( entry.target.id );&lt;br /&gt;
        else _visible.delete( entry.target.id );&lt;br /&gt;
      } );&lt;br /&gt;
      var topId = null, topY = Infinity;&lt;br /&gt;
      _visible.forEach( function ( id ) {&lt;br /&gt;
        var el = document.getElementById( id );&lt;br /&gt;
        if ( el ) { var y = el.getBoundingClientRect().top; if ( y &amp;gt;= 0 &amp;amp;&amp;amp; y &amp;lt; topY ) { topY = y; topId = id; } }&lt;br /&gt;
      } );&lt;br /&gt;
      if ( !topId ) {&lt;br /&gt;
        var bestY = -Infinity;&lt;br /&gt;
        headings.forEach( function ( h ) { var y = h.getBoundingClientRect().top; if ( y &amp;lt; 0 &amp;amp;&amp;amp; y &amp;gt; bestY ) { bestY = y; topId = h.id; } } );&lt;br /&gt;
      }&lt;br /&gt;
      setActive( topId || null );&lt;br /&gt;
    }, { rootMargin: &#039;-60px 0px -65% 0px&#039;, threshold: 0 } );&lt;br /&gt;
    headings.forEach( function ( h ) { _headingObserver.observe( h ); } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function setupToc() {&lt;br /&gt;
    if ( _isNoTocPage() ) return;&lt;br /&gt;
    var toc = document.querySelector( &#039;.vector-toc&#039; );&lt;br /&gt;
    if ( !toc ) return;&lt;br /&gt;
    removeTocBeginning();&lt;br /&gt;
    renameTocTitle();&lt;br /&gt;
    expandTocSections();&lt;br /&gt;
    injectTocDocNav();&lt;br /&gt;
    attachHeadingObserver();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function init() {&lt;br /&gt;
    var HIDE_IDS = [ &#039;vector-appearance&#039;, &#039;vector-appearance-pinned-container&#039;, &#039;vector-appearance-unpinned-container&#039; ];&lt;br /&gt;
    function removeHiddenEls() {&lt;br /&gt;
      HIDE_IDS.forEach( function ( id ) { var el = document.getElementById( id ); if ( el &amp;amp;&amp;amp; el.parentNode ) el.parentNode.removeChild( el ); } );&lt;br /&gt;
      var pt = document.getElementById( &#039;vector-page-tools&#039; ) || document.querySelector( &#039;.vector-page-tools-pinned-container&#039; );&lt;br /&gt;
      if ( pt ) pt.querySelectorAll( &#039;[aria-controls=&amp;quot;vector-appearance&amp;quot;]&#039; ).forEach( function ( el ) { if ( el.parentNode ) el.parentNode.removeChild( el ); } );&lt;br /&gt;
    }&lt;br /&gt;
    removeHiddenEls();&lt;br /&gt;
    ( function detectTeekaMode() {&lt;br /&gt;
      var tp = document.querySelector( &#039;.gr-teeka-page&#039; );&lt;br /&gt;
      if ( !tp ) return;&lt;br /&gt;
      var primary = tp.getAttribute( &#039;data-primary&#039; ) || &#039;&#039;;&lt;br /&gt;
      var artPath = ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
      var mainUrl = artPath.replace( &#039;$1&#039;, primary );&lt;br /&gt;
      var refParam = window.location.search.match( /[?&amp;amp;]ref=([01])/ );&lt;br /&gt;
      if ( refParam ) { document.body.classList.add( refParam[1] === &#039;1&#039; ? &#039;gr-ref-mode&#039; : &#039;gr-standalone&#039; ); return; }&lt;br /&gt;
      var ref = document.referrer || &#039;&#039;;&lt;br /&gt;
      document.body.classList.add( ( ref &amp;amp;&amp;amp; primary &amp;amp;&amp;amp; ref.indexOf( mainUrl ) !== -1 ) ? &#039;gr-ref-mode&#039; : &#039;gr-standalone&#039; );&lt;br /&gt;
    }() );&lt;br /&gt;
    if ( window.MutationObserver ) {&lt;br /&gt;
      var hideObs = new MutationObserver( function ( mutations ) {&lt;br /&gt;
        var dirty = false;&lt;br /&gt;
        mutations.forEach( function ( m ) { if ( m.addedNodes.length ) dirty = true; } );&lt;br /&gt;
        if ( dirty ) removeHiddenEls();&lt;br /&gt;
      } );&lt;br /&gt;
      hideObs.observe( document.body, { childList: true, subtree: false } );&lt;br /&gt;
      setTimeout( function () { hideObs.disconnect(); }, 6000 );&lt;br /&gt;
    }&lt;br /&gt;
    var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
    var alreadyTagged = content &amp;amp;&amp;amp; content.querySelector( &#039;[data-deva]&#039; );&lt;br /&gt;
    if ( !alreadyTagged ) { translatableSpans = []; tagTextNodes(); }&lt;br /&gt;
    else {&lt;br /&gt;
      document.querySelectorAll( &#039;.vector-toc .vector-toc-text:not([data-deva])&#039; ).forEach( function ( span ) {&lt;br /&gt;
        var orig = span.textContent; if ( !orig.trim() ) return;&lt;br /&gt;
        span.setAttribute( &#039;data-deva&#039;, orig ); translatableSpans.push( span );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
    var saved = ( function () { try { return localStorage.getItem( LS_SCRIPT_KEY ); } catch ( e ) { return null; } }() );&lt;br /&gt;
    if ( saved &amp;amp;&amp;amp; saved !== &#039;deva&#039; ) { applyScript( saved ); } else { currentScript = &#039;deva&#039;; }&lt;br /&gt;
    setTimeout( setupToc, 200 );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  window.addEventListener( &#039;gr-script-change&#039;, function ( e ) {&lt;br /&gt;
    var script = e &amp;amp;&amp;amp; e.detail &amp;amp;&amp;amp; e.detail.script;&lt;br /&gt;
    if ( script ) applyScript( script );&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
  window.addEventListener( &#039;gr-new-content&#039;, function ( e ) {&lt;br /&gt;
    var container = e &amp;amp;&amp;amp; e.detail &amp;amp;&amp;amp; e.detail.container;&lt;br /&gt;
    if ( !container ) return;&lt;br /&gt;
    var walker = document.createTreeWalker( container, NodeFilter.SHOW_TEXT );&lt;br /&gt;
    var nodes = [];&lt;br /&gt;
    while ( walker.nextNode() ) nodes.push( walker.currentNode );&lt;br /&gt;
    nodes.forEach( function ( node ) {&lt;br /&gt;
      var p = node.parentNode;&lt;br /&gt;
      if ( !p || ( p.hasAttribute &amp;amp;&amp;amp; p.hasAttribute( &#039;data-deva&#039; ) ) ) return;&lt;br /&gt;
      var orig = node.textContent;&lt;br /&gt;
      if ( !orig.trim() ) return;&lt;br /&gt;
      var span = document.createElement( &#039;span&#039; );&lt;br /&gt;
      span.setAttribute( &#039;data-deva&#039;, orig );&lt;br /&gt;
      span.textContent = currentScript !== &#039;deva&#039; ? transliterateText( orig, currentScript ) : orig;&lt;br /&gt;
      p.replaceChild( span, node );&lt;br /&gt;
      translatableSpans.push( span );&lt;br /&gt;
    } );&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
  try {&lt;br /&gt;
    var _grBC = new BroadcastChannel( &#039;gr-script&#039; );&lt;br /&gt;
    _grBC.onmessage = function ( e ) {&lt;br /&gt;
      var script = e &amp;amp;&amp;amp; e.data &amp;amp;&amp;amp; e.data.script;&lt;br /&gt;
      if ( script ) { currentScript = script; var sel = document.querySelector( &#039;.gr-script-sel&#039; ); if ( sel ) sel.value = script; applyScript( script ); }&lt;br /&gt;
    };&lt;br /&gt;
  } catch ( e ) {}&lt;br /&gt;
&lt;br /&gt;
  if ( window.mw ) {&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
      setTimeout( function () {&lt;br /&gt;
        var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
        var alreadyTagged = content &amp;amp;&amp;amp; content.querySelector( &#039;[data-deva]&#039; );&lt;br /&gt;
        if ( !alreadyTagged ) { translatableSpans = []; tagTextNodes(); }&lt;br /&gt;
        else {&lt;br /&gt;
          document.querySelectorAll( &#039;.vector-toc .vector-toc-text:not([data-deva])&#039; ).forEach( function ( span ) {&lt;br /&gt;
            var orig = span.textContent; if ( !orig.trim() ) return;&lt;br /&gt;
            span.setAttribute( &#039;data-deva&#039;, orig ); translatableSpans.push( span );&lt;br /&gt;
          } );&lt;br /&gt;
        }&lt;br /&gt;
        if ( currentScript !== &#039;deva&#039; ) applyScript( currentScript );&lt;br /&gt;
        setupToc();&lt;br /&gt;
      }, 150 );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) { document.addEventListener( &#039;DOMContentLoaded&#039;, init ); }&lt;br /&gt;
  else { init(); }&lt;br /&gt;
&lt;br /&gt;
}() );   /* ← end of main IIFE */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Inject &amp;quot;Help&amp;quot; and &amp;quot;About&amp;quot; links into the header ─────────────────&lt;br /&gt;
( function () {&lt;br /&gt;
  function wikiHref( title ) {&lt;br /&gt;
    if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( title );&lt;br /&gt;
    var ap = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
    return ap.replace( &#039;$1&#039;, title );&lt;br /&gt;
  }&lt;br /&gt;
  var linkStyle = [ &#039;color:rgba(255,255,255,0.88)&#039;,&#039;font-size:0.88em&#039;,&#039;font-family:system-ui,sans-serif&#039;,&#039;font-weight:500&#039;,&#039;text-decoration:none&#039;,&#039;padding:4px 10px&#039;,&#039;border-radius:4px&#039;,&#039;margin-right:4px&#039;,&#039;transition:color 0.15s,background 0.15s&#039;,&#039;white-space:nowrap&#039; ].join( &#039;;&#039; );&lt;br /&gt;
  function makeHeaderLink( id, href, label ) {&lt;br /&gt;
    var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
    a.id = id; a.href = href; a.textContent = label; a.style.cssText = linkStyle;&lt;br /&gt;
    a.addEventListener( &#039;mouseover&#039;, function () { this.style.color = &#039;#fff&#039;; this.style.background = &#039;rgba(255,255,255,0.12)&#039;; } );&lt;br /&gt;
    a.addEventListener( &#039;mouseout&#039;,  function () { this.style.color = &#039;rgba(255,255,255,0.88)&#039;; this.style.background = &#039;transparent&#039;; } );&lt;br /&gt;
    return a;&lt;br /&gt;
  }&lt;br /&gt;
  function injectHeaderLinks() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-about-link&#039; ) ) return;&lt;br /&gt;
    var headerEnd = document.querySelector( &#039;.vector-header-end&#039; ) || document.querySelector( &#039;#vector-user-links&#039; ) || document.querySelector( &#039;.mw-header&#039; );&lt;br /&gt;
    if ( !headerEnd ) return;&lt;br /&gt;
    var helpLink  = makeHeaderLink( &#039;gr-help-link&#039;,  wikiHref( &#039;My_wiki:Help&#039;  ), &#039;Help&#039;  );&lt;br /&gt;
    var aboutLink = makeHeaderLink( &#039;gr-about-link&#039;, wikiHref( &#039;My_wiki:About&#039; ), &#039;About&#039; );&lt;br /&gt;
    var ul = document.querySelector( &#039;.vector-user-links&#039; ) || document.querySelector( &#039;#pt-userpage&#039; );&lt;br /&gt;
    if ( ul &amp;amp;&amp;amp; ul.parentNode === headerEnd ) { headerEnd.insertBefore( aboutLink, ul ); headerEnd.insertBefore( helpLink, aboutLink ); }&lt;br /&gt;
    else { headerEnd.appendChild( helpLink ); headerEnd.appendChild( aboutLink ); }&lt;br /&gt;
  }&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) document.addEventListener( &#039;DOMContentLoaded&#039;, injectHeaderLinks );&lt;br /&gt;
  else injectHeaderLinks();&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Main page: by-Grantha / by-Author toggle ──────────────────────&lt;br /&gt;
( function () {&lt;br /&gt;
  function grHomeView( v ) {&lt;br /&gt;
    var gView = document.getElementById( &#039;gr-view-grantha&#039; );&lt;br /&gt;
    var aView = document.getElementById( &#039;gr-view-author&#039; );&lt;br /&gt;
    var gBtn  = document.getElementById( &#039;gr-toggle-grantha&#039; );&lt;br /&gt;
    var aBtn  = document.getElementById( &#039;gr-toggle-author&#039; );&lt;br /&gt;
    if ( !gView || !aView || !gBtn || !aBtn ) return;&lt;br /&gt;
    gView.style.display = ( v === &#039;grantha&#039; ) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
    aView.style.display = ( v === &#039;author&#039;  ) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
    gBtn.className = &#039;gr-toggle-btn&#039; + ( v === &#039;grantha&#039; ? &#039; gr-toggle-active&#039; : &#039;&#039; );&lt;br /&gt;
    aBtn.className = &#039;gr-toggle-btn&#039; + ( v === &#039;author&#039;  ? &#039; gr-toggle-active&#039; : &#039;&#039; );&lt;br /&gt;
    try { localStorage.setItem( &#039;gr_home_view&#039;, v ); } catch ( e ) {}&lt;br /&gt;
  }&lt;br /&gt;
  function initHomeToggle() {&lt;br /&gt;
    var gBtn = document.getElementById( &#039;gr-toggle-grantha&#039; );&lt;br /&gt;
    var aBtn = document.getElementById( &#039;gr-toggle-author&#039; );&lt;br /&gt;
    if ( !gBtn || !aBtn ) return;&lt;br /&gt;
    gBtn.addEventListener( &#039;click&#039;, function () { grHomeView( &#039;grantha&#039; ); } );&lt;br /&gt;
    aBtn.addEventListener( &#039;click&#039;, function () { grHomeView( &#039;author&#039; );  } );&lt;br /&gt;
    [ gBtn, aBtn ].forEach( function ( btn ) { btn.addEventListener( &#039;keydown&#039;, function ( e ) { if ( e.key === &#039;Enter&#039; || e.key === &#039; &#039; ) btn.click(); } ); } );&lt;br /&gt;
    var saved; try { saved = localStorage.getItem( &#039;gr_home_view&#039; ); } catch ( e ) {}&lt;br /&gt;
    if ( saved === &#039;author&#039; ) grHomeView( &#039;author&#039; );&lt;br /&gt;
  }&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) document.addEventListener( &#039;DOMContentLoaded&#039;, initHomeToggle );&lt;br /&gt;
  else initHomeToggle();&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ── Ullekha reference link handler ─────────────────────────────────&lt;br /&gt;
( function () {&lt;br /&gt;
  function highlightOnArrival() {&lt;br /&gt;
    var search = window.location.search;&lt;br /&gt;
    if ( !search ) return;&lt;br /&gt;
    var m = search.match( /[?&amp;amp;]hlUllekha=([^&amp;amp;]+)/ );&lt;br /&gt;
    if ( !m ) return;&lt;br /&gt;
    var needle;&lt;br /&gt;
    try { needle = decodeURIComponent( m[ 1 ] ); } catch ( e ) { return; }&lt;br /&gt;
    if ( !needle || needle.length &amp;lt; 4 ) return;&lt;br /&gt;
    function doHighlight() {&lt;br /&gt;
      var content = document.querySelector( &#039;.mw-parser-output&#039; );&lt;br /&gt;
      if ( !content ) return;&lt;br /&gt;
      var snippet = needle.slice( 0, 40 );&lt;br /&gt;
      var found   = false;&lt;br /&gt;
      var spans = content.querySelectorAll( &#039;[data-deva]&#039; );&lt;br /&gt;
      for ( var i = 0; i &amp;lt; spans.length &amp;amp;&amp;amp; !found; i++ ) {&lt;br /&gt;
        var spanEl = spans[ i ];&lt;br /&gt;
        var orig   = spanEl.getAttribute( &#039;data-deva&#039; ) || &#039;&#039;;&lt;br /&gt;
        if ( orig.indexOf( snippet ) === -1 ) continue;&lt;br /&gt;
        var idx    = orig.indexOf( snippet );&lt;br /&gt;
        var hlText = orig.slice( idx, Math.min( idx + needle.length, orig.length ) );&lt;br /&gt;
        var mark   = document.createElement( &#039;mark&#039; );&lt;br /&gt;
        mark.className = &#039;gr-ullekha-highlight&#039;;&lt;br /&gt;
        mark.style.cssText = &#039;background:#fff176;border-radius:2px;padding:0 2px;&#039;;&lt;br /&gt;
        mark.textContent = hlText;&lt;br /&gt;
        var parent = spanEl.parentNode;&lt;br /&gt;
        if ( !parent ) continue;&lt;br /&gt;
        var before = document.createTextNode( orig.slice( 0, idx ) );&lt;br /&gt;
        var after  = document.createTextNode( orig.slice( idx + hlText.length ) );&lt;br /&gt;
        parent.insertBefore( before, spanEl ); parent.insertBefore( mark, spanEl ); parent.insertBefore( after, spanEl ); parent.removeChild( spanEl );&lt;br /&gt;
        setTimeout( function () { mark.scrollIntoView( { behavior: &#039;smooth&#039;, block: &#039;center&#039; } ); }, 100 );&lt;br /&gt;
        found = true;&lt;br /&gt;
      }&lt;br /&gt;
      if ( !found ) {&lt;br /&gt;
        var walker = document.createTreeWalker( content, NodeFilter.SHOW_TEXT );&lt;br /&gt;
        while ( walker.nextNode() &amp;amp;&amp;amp; !found ) {&lt;br /&gt;
          var node = walker.currentNode;&lt;br /&gt;
          var txt  = node.textContent || &#039;&#039;;&lt;br /&gt;
          if ( txt.indexOf( snippet ) === -1 ) continue;&lt;br /&gt;
          var idx2  = txt.indexOf( snippet );&lt;br /&gt;
          var mark2 = document.createElement( &#039;mark&#039; );&lt;br /&gt;
          mark2.className = &#039;gr-ullekha-highlight&#039;;&lt;br /&gt;
          mark2.style.cssText = &#039;background:#fff176;border-radius:2px;padding:0 2px;&#039;;&lt;br /&gt;
          mark2.textContent = txt.slice( idx2, Math.min( idx2 + needle.length, txt.length ) );&lt;br /&gt;
          var p = node.parentNode;&lt;br /&gt;
          p.insertBefore( document.createTextNode( txt.slice( 0, idx2 ) ), node );&lt;br /&gt;
          p.insertBefore( mark2, node );&lt;br /&gt;
          p.insertBefore( document.createTextNode( txt.slice( idx2 + mark2.textContent.length ) ), node );&lt;br /&gt;
          p.removeChild( node );&lt;br /&gt;
          setTimeout( function () { mark2.scrollIntoView( { behavior: &#039;smooth&#039;, block: &#039;center&#039; } ); }, 100 );&lt;br /&gt;
          found = true;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    doHighlight();&lt;br /&gt;
  }&lt;br /&gt;
  function wireUllekhaLinks() {&lt;br /&gt;
    document.querySelectorAll( &#039;.gr-ullekha-ref-link&#039; ).forEach( function ( wrap ) {&lt;br /&gt;
      var anchor = wrap.getAttribute( &#039;data-anchor&#039; ) || &#039;&#039;;&lt;br /&gt;
      var hl     = wrap.getAttribute( &#039;data-hl&#039; )     || &#039;&#039;;&lt;br /&gt;
      var a = wrap.querySelector( &#039;a&#039; );&lt;br /&gt;
      if ( !a ) return;&lt;br /&gt;
      var base = a.href.split( &#039;#&#039; )[ 0 ];&lt;br /&gt;
      var encoded = encodeURIComponent( hl );&lt;br /&gt;
      a.href = base + ( hl ? &#039;?hlUllekha=&#039; + encoded : &#039;&#039; ) + ( anchor ? &#039;#&#039; + anchor : &#039;&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) { document.addEventListener( &#039;DOMContentLoaded&#039;, function () { highlightOnArrival(); wireUllekhaLinks(); } ); }&lt;br /&gt;
  else { highlightOnArrival(); wireUllekhaLinks(); }&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
/* ── Search result highlight ──────────────────────────────────── */&lt;br /&gt;
/* EXACT REPLACEMENT for the search highlight IIFE in MediaWiki:Common.js.&lt;br /&gt;
 * Only changes from the original working version:&lt;br /&gt;
 *  - Mobile bar: full-width terracotta bottom bar instead of floating pill&lt;br /&gt;
 *  - showDismissBar: guard added (if !count return) to prevent empty bar&lt;br /&gt;
 * Everything else (storeQueryForLink, applyHighlight, wrapMatches) is&lt;br /&gt;
 * identical to the version that was working.&lt;br /&gt;
 */&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
  function storeQueryForLink( url, query ) {&lt;br /&gt;
    try {&lt;br /&gt;
      var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
      a.href = url;&lt;br /&gt;
      sessionStorage.setItem( &#039;gr_search_hl&#039;, JSON.stringify({&lt;br /&gt;
        query:    query,&lt;br /&gt;
        pathname: a.pathname&lt;br /&gt;
      }) );&lt;br /&gt;
    } catch(e) {}&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function applyHighlight() {&lt;br /&gt;
    var stored;&lt;br /&gt;
    try {&lt;br /&gt;
      stored = JSON.parse( sessionStorage.getItem( &#039;gr_search_hl&#039; ) || &#039;null&#039; );&lt;br /&gt;
    } catch(e) { return; }&lt;br /&gt;
    if ( !stored || !stored.query ) return;&lt;br /&gt;
&lt;br /&gt;
    var currentPath = window.location.pathname;&lt;br /&gt;
    var storedPath  = stored.pathname || &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
    function normPath(p) { return decodeURIComponent(p).replace(/\/+$/, &#039;&#039;); }&lt;br /&gt;
    if ( storedPath &amp;amp;&amp;amp; normPath(storedPath) !== normPath(currentPath) ) {&lt;br /&gt;
      try { sessionStorage.removeItem( &#039;gr_search_hl&#039; ); } catch(e) {}&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var query = stored.query.trim();&lt;br /&gt;
    if ( !query ) return;&lt;br /&gt;
&lt;br /&gt;
    try { sessionStorage.removeItem( &#039;gr_search_hl&#039; ); } catch(e) {}&lt;br /&gt;
&lt;br /&gt;
    var delays = [ 0, 200, 600 ];&lt;br /&gt;
    delays.forEach( function(ms) {&lt;br /&gt;
      setTimeout( function() {&lt;br /&gt;
        if ( document.querySelector( &#039;.gr-search-hl&#039; ) ) return;&lt;br /&gt;
        highlightText( query );&lt;br /&gt;
      }, ms );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function highlightText( query ) {&lt;br /&gt;
    var content = document.querySelector( &#039;#mw-content-text .mw-parser-output&#039; );&lt;br /&gt;
    if ( !content ) return;&lt;br /&gt;
&lt;br /&gt;
    var raw = query.replace( /^&amp;quot;|&amp;quot;$/g, &#039;&#039; ).trim();&lt;br /&gt;
    if ( !raw ) return;&lt;br /&gt;
&lt;br /&gt;
    var patterns = [];&lt;br /&gt;
    patterns.push( escapeRegex( raw ) );&lt;br /&gt;
    raw.split( /\s+/ ).forEach( function(w) {&lt;br /&gt;
      if ( w.length &amp;gt;= 2 ) patterns.push( escapeRegex( w ) );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    var matched = false;&lt;br /&gt;
    for ( var pi = 0; pi &amp;lt; patterns.length; pi++ ) {&lt;br /&gt;
      var re;&lt;br /&gt;
      try { re = new RegExp( &#039;(&#039; + patterns[pi] + &#039;)&#039;, &#039;gi&#039; ); }&lt;br /&gt;
      catch(e) { continue; }&lt;br /&gt;
      var count = wrapMatches( content, re );&lt;br /&gt;
      if ( count &amp;gt; 0 ) { matched = true; break; }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ( !matched ) return;&lt;br /&gt;
&lt;br /&gt;
    var first = document.querySelector( &#039;.gr-search-hl&#039; );&lt;br /&gt;
    if ( first ) {&lt;br /&gt;
      first.scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; });&lt;br /&gt;
      first.classList.add( &#039;gr-search-hl-pulse&#039; );&lt;br /&gt;
      setTimeout( function() { first.classList.remove( &#039;gr-search-hl-pulse&#039; ); }, 2000 );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    showDismissBar( query );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function escapeRegex( s ) {&lt;br /&gt;
    return s.replace( /[.*+?^${}()|[\]\\]/g, &#039;\\$&amp;amp;&#039; );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function wrapMatches( root, re ) {&lt;br /&gt;
    var count = 0;&lt;br /&gt;
    var walker = document.createTreeWalker(&lt;br /&gt;
      root, NodeFilter.SHOW_TEXT, {&lt;br /&gt;
        acceptNode: function( node ) {&lt;br /&gt;
          var p = node.parentElement;&lt;br /&gt;
          if ( !p ) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
          var tag = p.tagName.toUpperCase();&lt;br /&gt;
          if ( tag === &#039;SCRIPT&#039; || tag === &#039;STYLE&#039; || tag === &#039;NOSCRIPT&#039; ) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
          if ( p.classList.contains( &#039;gr-search-hl&#039; ) ) return NodeFilter.FILTER_REJECT;&lt;br /&gt;
          return NodeFilter.FILTER_ACCEPT;&lt;br /&gt;
        }&lt;br /&gt;
      }, false&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    var nodes = [];&lt;br /&gt;
    var node;&lt;br /&gt;
    while ( ( node = walker.nextNode() ) ) nodes.push( node );&lt;br /&gt;
&lt;br /&gt;
    nodes.forEach( function( textNode ) {&lt;br /&gt;
      var val = textNode.nodeValue;&lt;br /&gt;
      if ( !re.test( val ) ) return;&lt;br /&gt;
      re.lastIndex = 0;&lt;br /&gt;
&lt;br /&gt;
      var frag = document.createDocumentFragment();&lt;br /&gt;
      var last = 0;&lt;br /&gt;
      var m;&lt;br /&gt;
      while ( ( m = re.exec( val ) ) !== null ) {&lt;br /&gt;
        if ( m.index &amp;gt; last ) {&lt;br /&gt;
          frag.appendChild( document.createTextNode( val.slice( last, m.index ) ) );&lt;br /&gt;
        }&lt;br /&gt;
        var span = document.createElement( &#039;span&#039; );&lt;br /&gt;
        span.className = &#039;gr-search-hl&#039;;&lt;br /&gt;
        span.textContent = m[0];&lt;br /&gt;
        frag.appendChild( span );&lt;br /&gt;
        last = m.index + m[0].length;&lt;br /&gt;
        count++;&lt;br /&gt;
      }&lt;br /&gt;
      if ( last &amp;lt; val.length ) {&lt;br /&gt;
        frag.appendChild( document.createTextNode( val.slice( last ) ) );&lt;br /&gt;
      }&lt;br /&gt;
      textNode.parentNode.replaceChild( frag, textNode );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    return count;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function showDismissBar( query ) {&lt;br /&gt;
    var existing = document.getElementById( &#039;gr-hl-bar&#039; );&lt;br /&gt;
    if ( existing ) existing.remove();&lt;br /&gt;
&lt;br /&gt;
    var count = document.querySelectorAll( &#039;.gr-search-hl&#039; ).length;&lt;br /&gt;
    if ( !count ) return;&lt;br /&gt;
&lt;br /&gt;
    var isMob = window.innerWidth &amp;lt; 768 || !!document.getElementById( &#039;mw-mf-viewport&#039; );&lt;br /&gt;
    var bar = document.createElement( &#039;div&#039; );&lt;br /&gt;
    bar.id = &#039;gr-hl-bar&#039;;&lt;br /&gt;
&lt;br /&gt;
    if ( isMob ) {&lt;br /&gt;
      bar.style.cssText = [&lt;br /&gt;
        &#039;position:fixed&#039;, &#039;bottom:0&#039;, &#039;left:0&#039;, &#039;right:0&#039;,&lt;br /&gt;
        &#039;z-index:10200&#039;, &#039;background:#b5451b&#039;, &#039;color:#fff&#039;,&lt;br /&gt;
        &#039;padding:0&#039;, &#039;display:flex&#039;, &#039;align-items:stretch&#039;,&lt;br /&gt;
        &#039;font-family:system-ui,sans-serif&#039;,&lt;br /&gt;
        &#039;box-shadow:0 -2px 12px rgba(0,0,0,0.25)&#039;, &#039;height:56px&#039;&lt;br /&gt;
      ].join(&#039;;&#039;);&lt;br /&gt;
&lt;br /&gt;
      var mbs = &#039;flex:1;display:flex;flex-direction:column;align-items:center;&#039; +&lt;br /&gt;
        &#039;justify-content:center;background:none;border:none;color:#fff;cursor:pointer;&#039; +&lt;br /&gt;
        &#039;padding:6px 4px;font-family:system-ui,sans-serif;font-size:11px;font-weight:500;&#039; +&lt;br /&gt;
        &#039;gap:3px;-webkit-tap-highlight-color:rgba(0,0,0,0.12);&#039;;&lt;br /&gt;
&lt;br /&gt;
      bar.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-prev&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;polyline points=&amp;quot;15 18 9 12 15 6&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;Prev&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-next&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;polyline points=&amp;quot;9 18 15 12 9 6&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;Next&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-results&amp;quot; style=&amp;quot;&#039; + mbs + &#039;flex:1.6;border-left:1px solid rgba(255,255,255,0.2);border-right:1px solid rgba(255,255,255,0.2);&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;circle cx=&amp;quot;11&amp;quot; cy=&amp;quot;11&amp;quot; r=&amp;quot;7&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;16.5&amp;quot; y1=&amp;quot;16.5&amp;quot; x2=&amp;quot;22&amp;quot; y2=&amp;quot;22&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;&#039; + count + &#039; match&#039; + (count===1?&#039;&#039;:&#039;es&#039;) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-dismiss&amp;quot; style=&amp;quot;&#039; + mbs + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.2&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;line x1=&amp;quot;18&amp;quot; y1=&amp;quot;6&amp;quot; x2=&amp;quot;6&amp;quot; y2=&amp;quot;18&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;6&amp;quot; y1=&amp;quot;6&amp;quot; x2=&amp;quot;18&amp;quot; y2=&amp;quot;18&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;span&amp;gt;Close&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
    } else {&lt;br /&gt;
      bar.style.cssText = [&lt;br /&gt;
        &#039;position:fixed&#039;, &#039;bottom:0&#039;, &#039;left:0&#039;, &#039;right:0&#039;, &#039;z-index:10200&#039;,&lt;br /&gt;
        &#039;background:#b5451b&#039;, &#039;color:#fff&#039;, &#039;padding:10px 16px&#039;,&lt;br /&gt;
        &#039;display:flex&#039;, &#039;align-items:center&#039;, &#039;justify-content:space-between&#039;,&lt;br /&gt;
        &#039;font-family:system-ui,sans-serif&#039;, &#039;font-size:14px&#039;,&lt;br /&gt;
        &#039;box-shadow:0 -2px 8px rgba(0,0,0,0.2)&#039;&lt;br /&gt;
      ].join(&#039;;&#039;);&lt;br /&gt;
&lt;br /&gt;
      var nav = document.createElement( &#039;div&#039; );&lt;br /&gt;
      nav.style.cssText = &#039;display:flex;align-items:center;gap:12px;&#039;;&lt;br /&gt;
      nav.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;🔍 &amp;lt;strong&amp;gt;&#039; + escHtml(query) + &#039;&amp;lt;/strong&amp;gt; — &#039; + count + &#039; match&#039; + (count===1?&#039;&#039;:&#039;es&#039;) + &#039;&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-prev&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;↑ Prev&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-next&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;↓ Next&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;button id=&amp;quot;gr-hl-results&amp;quot; style=&amp;quot;background:rgba(255,255,255,0.2);border:none;color:#fff;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&amp;quot;&amp;gt;← Results&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
      bar.appendChild( nav );&lt;br /&gt;
&lt;br /&gt;
      var db = document.createElement( &#039;button&#039; );&lt;br /&gt;
      db.id = &#039;gr-hl-dismiss&#039;; db.textContent = &#039;✕ Close&#039;;&lt;br /&gt;
      db.style.cssText = &#039;background:rgba(255,255,255,0.15);border:none;color:#fff;padding:4px 12px;border-radius:4px;cursor:pointer;font-size:13px;min-height:32px;&#039;;&lt;br /&gt;
      bar.appendChild( db );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    document.body.appendChild( bar );&lt;br /&gt;
&lt;br /&gt;
    var hlEls = Array.from( document.querySelectorAll( &#039;.gr-search-hl&#039; ) );&lt;br /&gt;
    var current = 0;&lt;br /&gt;
&lt;br /&gt;
    function goTo( idx ) {&lt;br /&gt;
      hlEls.forEach( function(el) { el.classList.remove( &#039;gr-search-hl-current&#039; ); } );&lt;br /&gt;
      current = ( ( idx % hlEls.length ) + hlEls.length ) % hlEls.length;&lt;br /&gt;
      hlEls[ current ].classList.add( &#039;gr-search-hl-current&#039; );&lt;br /&gt;
      hlEls[ current ].scrollIntoView({ behavior: &#039;smooth&#039;, block: &#039;center&#039; });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function dismiss() { clearHighlights(); bar.remove(); }&lt;br /&gt;
&lt;br /&gt;
    var nb = document.getElementById( &#039;gr-hl-next&#039; );&lt;br /&gt;
    var pb = document.getElementById( &#039;gr-hl-prev&#039; );&lt;br /&gt;
    var rb = document.getElementById( &#039;gr-hl-results&#039; );&lt;br /&gt;
    var db2 = document.getElementById( &#039;gr-hl-dismiss&#039; );&lt;br /&gt;
    if ( nb ) nb.onclick = function() { goTo( current + 1 ); };&lt;br /&gt;
    if ( pb ) pb.onclick = function() { goTo( current - 1 ); };&lt;br /&gt;
    if ( db2 ) db2.onclick = dismiss;&lt;br /&gt;
    if ( rb ) rb.onclick = function() {&lt;br /&gt;
      bar.remove(); clearHighlights();&lt;br /&gt;
      if ( window.showSearchDialog ) window.showSearchDialog( query );&lt;br /&gt;
    };&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function clearHighlights() {&lt;br /&gt;
    document.querySelectorAll( &#039;.gr-search-hl&#039; ).forEach( function( span ) {&lt;br /&gt;
      var p = span.parentNode; if ( !p ) return;&lt;br /&gt;
      while ( span.firstChild ) p.insertBefore( span.firstChild, span );&lt;br /&gt;
      p.removeChild( span );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function escHtml( s ) {&lt;br /&gt;
    return String(s).replace(/&amp;amp;/g,&#039;&amp;amp;amp;&#039;).replace(/&amp;lt;/g,&#039;&amp;amp;lt;&#039;).replace(/&amp;gt;/g,&#039;&amp;amp;gt;&#039;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function injectHighlightCSS() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-hl-css&#039; ) ) return;&lt;br /&gt;
    var s = document.createElement( &#039;style&#039; );&lt;br /&gt;
    s.id = &#039;gr-hl-css&#039;;&lt;br /&gt;
    s.textContent = [&lt;br /&gt;
      &#039;.gr-search-hl{background:#fff176;color:#1a1a1a;border-radius:2px;padding:0 1px;box-shadow:0 0 0 1px rgba(181,69,27,0.25);}&#039;,&lt;br /&gt;
      &#039;.gr-search-hl-current{background:#ffb300!important;box-shadow:0 0 0 2px #b5451b!important;}&#039;,&lt;br /&gt;
      &#039;@keyframes gr-hl-pulse{0%{background:#ffb300;}50%{background:#fff176;}100%{background:#fff176;}}&#039;,&lt;br /&gt;
      &#039;.gr-search-hl-pulse{animation:gr-hl-pulse 1.2s ease 2;}&#039;,&lt;br /&gt;
    ].join(&#039;&#039;);&lt;br /&gt;
    document.head.appendChild( s );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  injectHighlightCSS();&lt;br /&gt;
&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) {&lt;br /&gt;
    document.addEventListener( &#039;DOMContentLoaded&#039;, applyHighlight );&lt;br /&gt;
  } else {&lt;br /&gt;
    applyHighlight();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ( window.mw ) {&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function() {&lt;br /&gt;
      setTimeout( applyHighlight, 100 );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  window.grStoreSearchHL = storeQueryForLink;&lt;br /&gt;
&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
/* ═══════════════════════════════════════════════════════════════&lt;br /&gt;
   Mobile addon — only runs on Minerva (mobile) skin&lt;br /&gt;
   ═══════════════════════════════════════════════════════════════ */&lt;br /&gt;
( function () {&lt;br /&gt;
  if ( !document.body.classList.contains( &#039;skin-minerva&#039; ) ) return;&lt;br /&gt;
  function injectCSS() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-mob-css&#039; ) ) return;&lt;br /&gt;
    var s = document.createElement( &#039;style&#039; );&lt;br /&gt;
    s.id = &#039;gr-mob-css&#039;;&lt;br /&gt;
    s.textContent =&lt;br /&gt;
      &#039;body,#mw-mf-viewport,#mw-mf-page-center{padding-top:0!important;margin-top:0!important;}&#039; +&lt;br /&gt;
      &#039;html,body,#mw-mf-viewport,#mw-mf-page-center{overflow-x:hidden!important;max-width:100vw!important;}&#039; +&lt;br /&gt;
      &#039;header.header-container{background:#b5451b!important;position:sticky!important;top:0!important;z-index:300!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header{background:#b5451b!important;min-height:54px!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header .search-toggle,.minerva-header .minerva-user-notifications{display:none!important;}&#039; +&lt;br /&gt;
      &#039;.branding-box a{display:flex!important;align-items:center!important;text-decoration:none!important;max-width:calc(100vw - 80px)!important;}&#039; +&lt;br /&gt;
      &#039;.branding-box a::before{content:&amp;quot;&amp;quot;;display:block;width:30px;height:30px;flex-shrink:0;background:url(&amp;quot;/favicon.png&amp;quot;) center/contain no-repeat;margin-right:8px;}&#039; +&lt;br /&gt;
      &#039;.branding-box a span{color:#fff!important;font-size:16px!important;font-weight:700!important;font-family:system-ui,sans-serif!important;line-height:1.2!important;flex:1 1 auto!important;min-width:0!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header svg path,.minerva-header svg rect,.minerva-header svg circle{fill:#fff!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-header label{color:#fff!important;}&#039; +&lt;br /&gt;
      &#039;.minerva-tabs,.mw-portlet-associated-pages,.page-actions-menu,#page-secondary-actions,.last-modified-bar,.minerva-anon-talk-link{display:none!important;}&#039; +&lt;br /&gt;
      &#039;#gr-mob-menu-items{display:block!important;}&#039; +&lt;br /&gt;
      &#039;.mw-footer.minerva-footer,.footer-places,.footer-info,.minerva-footer-logo,#footer-places-about,#footer-places-disclaimers,#footer-places-privacy{display:none!important;}&#039; +&lt;br /&gt;
      &#039;#gr-static-bar{position:sticky!important;top:54px!important;z-index:200!important;}&#039; +&lt;br /&gt;
      &#039;.mf-section-0,.mf-section-1,.mf-section-2,.mf-section-3,.mf-section-4,.mf-section-5,.mf-section-6,.mf-section-7,.mf-section-8,.mf-section-9,.mf-section-10{display:block!important;visibility:visible!important;}&#039; +&lt;br /&gt;
      &#039;.collapsible-block{display:block!important;}&#039; +&lt;br /&gt;
      &#039;.section-heading .indicator,.collapsible-heading .indicator{display:none!important;}&#039; +&lt;br /&gt;
      &#039;.section-heading,.collapsible-heading{pointer-events:none!important;}&#039; +&lt;br /&gt;
      &#039;.gr-home-grid{flex-direction:column!important;flex-wrap:nowrap!important;gap:12px!important;width:100%!important;}&#039; +&lt;br /&gt;
      &#039;.gr-home-card{width:100%!important;max-width:100%!important;min-width:unset!important;box-sizing:border-box!important;flex:none!important;}&#039; +&lt;br /&gt;
      &#039;.gr-home-toggle{flex-wrap:wrap!important;}&#039; +&lt;br /&gt;
      &#039;.mw-parser-output{font-size:18px!important;line-height:1.8!important;}&#039; +&lt;br /&gt;
      &#039;.mw-parser-output h2,.mw-parser-output h3{width:100%!important;}&#039; +&lt;br /&gt;
      &#039;.bhashyam-block{margin-left:8px!important;}&#039; +&lt;br /&gt;
      &#039;#footer,.mw-footer,.catlinks,#catlinks{display:none!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-panel{position:fixed!important;top:0!important;left:0!important;bottom:0!important;width:82vw!important;max-width:340px!important;background:#fff!important;z-index:10400!important;box-shadow:4px 0 28px rgba(0,0,0,0.22)!important;overflow-y:auto!important;padding:0 0 40px!important;transform:translateX(-110%)!important;transition:transform 0.26s cubic-bezier(0.4,0,0.2,1)!important;display:block!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-panel.open{transform:translateX(0)!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-backdrop{display:none!important;position:fixed!important;inset:0!important;background:rgba(0,0,0,0.4)!important;z-index:10399!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-backdrop.open{display:block!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-header{position:sticky!important;top:0!important;background:#fff!important;display:flex!important;align-items:center!important;justify-content:space-between!important;padding:16px 16px 12px!important;border-bottom:1px solid #f0ebe6!important;z-index:1!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-title{font-size:13px!important;font-weight:700!important;text-transform:uppercase!important;letter-spacing:0.08em!important;color:#b5451b!important;font-family:system-ui,sans-serif!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-close{background:none!important;border:none!important;font-size:22px!important;color:#999!important;cursor:pointer!important;padding:4px 8px!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-body{padding:12px 16px!important;}&#039; +&lt;br /&gt;
      &#039;.gr-mob-toc-body a{display:block!important;font-size:16px!important;line-height:1.6!important;color:#2c1810!important;text-decoration:none!important;padding:8px 0!important;border-bottom:1px solid #f5f0ed!important;}&#039;;&lt;br /&gt;
    document.head.appendChild( s );&lt;br /&gt;
  }&lt;br /&gt;
  function expandSections() {&lt;br /&gt;
    document.querySelectorAll( &#039;[class*=&amp;quot;mf-section-&amp;quot;], .collapsible-block&#039; ).forEach( function ( el ) { el.removeAttribute( &#039;hidden&#039; ); el.style.setProperty( &#039;display&#039;, &#039;block&#039;, &#039;important&#039; ); el.style.setProperty( &#039;visibility&#039;, &#039;visible&#039;, &#039;important&#039; ); el.removeAttribute( &#039;aria-hidden&#039; ); } );&lt;br /&gt;
    document.querySelectorAll( &#039;.section-heading, .collapsible-heading&#039; ).forEach( function ( el ) { el.setAttribute( &#039;aria-expanded&#039;, &#039;true&#039; ); el.style.setProperty( &#039;pointer-events&#039;, &#039;none&#039;, &#039;important&#039; ); } );&lt;br /&gt;
  }&lt;br /&gt;
  function watchSections() {&lt;br /&gt;
    var t = null;&lt;br /&gt;
    var obs = new MutationObserver( function ( ms ) { if ( ms.some( function(m){ return m.attributeName === &#039;hidden&#039;; } ) ) { clearTimeout(t); t = setTimeout( expandSections, 30 ); } } );&lt;br /&gt;
    obs.observe( document.querySelector( &#039;#mw-content-text&#039; ) || document.body, { subtree:true, attributes:true, attributeFilter:[&#039;hidden&#039;,&#039;aria-hidden&#039;] } );&lt;br /&gt;
  }&lt;br /&gt;
  function watchBodyPadding() {&lt;br /&gt;
    new MutationObserver( function () { if ( document.body.style.paddingTop &amp;amp;&amp;amp; document.body.style.paddingTop !== &#039;0px&#039; ) document.body.style.paddingTop = &#039;&#039;; } ).observe( document.body, { attributes:true, attributeFilter:[&#039;style&#039;] } );&lt;br /&gt;
  }&lt;br /&gt;
  function injectMenuLinks() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-mob-menu-items&#039; ) ) return;&lt;br /&gt;
    var navDrawer = document.querySelector( &#039;.navigation-drawer&#039; );&lt;br /&gt;
    if ( !navDrawer ) return;&lt;br /&gt;
    var wrap = document.createElement( &#039;div&#039; ); wrap.id = &#039;gr-mob-menu-items&#039;; wrap.style.cssText = &#039;width:100%;background:#fff;margin-top:8px;&#039;;&lt;br /&gt;
    var itemStyle = &#039;display:flex;align-items:center;gap:14px;padding:15px 20px;font-size:16px;color:#2c1810;text-decoration:none;font-family:system-ui,sans-serif;border-bottom:1px solid #f0ebe6;background:#fff;&#039;;&lt;br /&gt;
    function makeItem( href, label ) { var a = document.createElement( &#039;a&#039; ); a.href = href; a.style.cssText = itemStyle; a.innerHTML = &#039;&amp;lt;span&amp;gt;&#039; + label + &#039;&amp;lt;/span&amp;gt;&#039;; return a; }&lt;br /&gt;
    wrap.appendChild( makeItem( &#039;/Main_Page&#039;, &#039;Home&#039; ) );&lt;br /&gt;
    wrap.appendChild( makeItem( &#039;/My_wiki:Help&#039;, &#039;Help&#039; ) );&lt;br /&gt;
    wrap.appendChild( makeItem( &#039;/My_wiki:About&#039;, &#039;About&#039; ) );&lt;br /&gt;
    var userName = window.mw ? mw.config.get( &#039;wgUserName&#039; ) : null;&lt;br /&gt;
    if ( userName ) { var la = document.querySelector( &#039;a[href*=&amp;quot;action=logout&amp;quot;]&#039; ); wrap.appendChild( makeItem( la ? la.href : &#039;/index.php?title=Special:UserLogout&#039;, &#039;Log out&#039; ) ); }&lt;br /&gt;
    else wrap.appendChild( makeItem( &#039;/index.php?title=Special:UserLogin&#039;, &#039;Log in&#039; ) );&lt;br /&gt;
    var pageLeft = document.getElementById( &#039;mw-mf-page-left&#039; );&lt;br /&gt;
    if ( pageLeft ) { while ( pageLeft.firstChild ) pageLeft.removeChild( pageLeft.firstChild ); pageLeft.style.removeProperty( &#039;display&#039; ); pageLeft.appendChild( wrap ); }&lt;br /&gt;
    else navDrawer.appendChild( wrap );&lt;br /&gt;
  }&lt;br /&gt;
  var _tocDone = false;&lt;br /&gt;
  function initToc() {&lt;br /&gt;
    if ( _tocDone ) return;&lt;br /&gt;
    var tocList = document.querySelector( &#039;.vector-toc-contents, .vector-toc .vector-toc-list&#039; );&lt;br /&gt;
    if ( !tocList || !tocList.querySelector( &#039;li&#039; ) ) return;&lt;br /&gt;
    _tocDone = true;&lt;br /&gt;
    var bd = document.createElement( &#039;div&#039; ); bd.className = &#039;gr-mob-toc-backdrop&#039;; document.body.appendChild( bd );&lt;br /&gt;
    var panel = document.createElement( &#039;div&#039; ); panel.className = &#039;gr-mob-toc-panel&#039;;&lt;br /&gt;
    var hdr = document.createElement( &#039;div&#039; ); hdr.className = &#039;gr-mob-toc-header&#039;;&lt;br /&gt;
    var ttl = document.createElement( &#039;div&#039; ); ttl.className = &#039;gr-mob-toc-title&#039;; ttl.textContent = &#039;विषयसूची&#039;;&lt;br /&gt;
    var cls = document.createElement( &#039;button&#039; ); cls.className = &#039;gr-mob-toc-close&#039;; cls.textContent = &#039;✕&#039;;&lt;br /&gt;
    hdr.appendChild( ttl ); hdr.appendChild( cls ); panel.appendChild( hdr );&lt;br /&gt;
    var body = document.createElement( &#039;div&#039; ); body.className = &#039;gr-mob-toc-body&#039;; body.appendChild( tocList.cloneNode( true ) ); panel.appendChild( body ); document.body.appendChild( panel );&lt;br /&gt;
    var btn = document.createElement( &#039;button&#039; ); btn.id = &#039;gr-mob-toc-btn&#039;; btn.innerHTML = &#039;☰ &amp;amp;nbsp;Contents&#039;;&lt;br /&gt;
    btn.style.cssText = &#039;position:fixed;bottom:148px;left:16px;z-index:9100;background:#fff;border:1.5px solid #b5451b;border-radius:24px;padding:10px 16px;font-size:15px;font-family:system-ui,sans-serif;color:#b5451b;font-weight:600;box-shadow:0 3px 14px rgba(0,0,0,0.15);cursor:pointer;&#039;;&lt;br /&gt;
    document.body.appendChild( btn );&lt;br /&gt;
    function open()  { panel.classList.add(&#039;open&#039;); bd.classList.add(&#039;open&#039;); document.body.style.overflow=&#039;hidden&#039;; }&lt;br /&gt;
    function close() { panel.classList.remove(&#039;open&#039;); bd.classList.remove(&#039;open&#039;); document.body.style.overflow=&#039;&#039;; }&lt;br /&gt;
    btn.onclick = open; cls.onclick = close; bd.onclick = close;&lt;br /&gt;
    body.querySelectorAll(&#039;a&#039;).forEach(function(a){ a.onclick = close; });&lt;br /&gt;
  }&lt;br /&gt;
  function injectMoolaUllekhaLinks() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-mob-doc-nav&#039; ) ) return;&lt;br /&gt;
    var pageName = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039; ) ) || &#039;&#039;;&lt;br /&gt;
    if ( pageName === &#039;Main_Page&#039; || !pageName ) return;&lt;br /&gt;
    function wikiUrl( slug ) { if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( slug ); return ( ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039; ).replace( &#039;$1&#039;, encodeURIComponent( slug ).replace( /%2F/g, &#039;/&#039; ) ); }&lt;br /&gt;
    var teekaPage = document.querySelector( &#039;.gr-teeka-page&#039; );&lt;br /&gt;
    var primarySlug = teekaPage ? ( teekaPage.getAttribute( &#039;data-primary&#039; ) || pageName.split(&#039;/&#039;)[0] ) : pageName.split(&#039;/&#039;)[0];&lt;br /&gt;
    var docTitleEl = document.querySelector( &#039;.gr-doc-title&#039; );&lt;br /&gt;
    var hasMoolaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-moola&#039; ) === &#039;1&#039;;&lt;br /&gt;
    var hasUllekhaPage = docTitleEl &amp;amp;&amp;amp; docTitleEl.getAttribute( &#039;data-has-ullekha&#039; ) === &#039;1&#039;;&lt;br /&gt;
    var showMoolam = !!teekaPage || hasMoolaPage, showUllekha = hasUllekhaPage || !!teekaPage;&lt;br /&gt;
    if ( !showMoolam &amp;amp;&amp;amp; !showUllekha ) return;&lt;br /&gt;
    var nav = document.createElement( &#039;div&#039; ); nav.id = &#039;gr-mob-doc-nav&#039;;&lt;br /&gt;
    nav.style.cssText = &#039;display:flex;gap:10px;padding:10px 16px 8px;background:#fdf8f5;border-bottom:1px solid #f0e0d6;font-family:system-ui,sans-serif;&#039;;&lt;br /&gt;
    function makeLink( href, label ) { var a = document.createElement( &#039;a&#039; ); a.href = href; a.textContent = label; a.style.cssText = &#039;display:inline-flex;align-items:center;padding:5px 16px;border-radius:20px;background:#fff;border:1.5px solid #e8cfc4;color:#b5451b;font-size:14px;font-weight:600;text-decoration:none;&#039;; return a; }&lt;br /&gt;
    if ( teekaPage ) nav.appendChild( makeLink( wikiUrl( primarySlug ), &#039;मूल&#039; ) );&lt;br /&gt;
    else if ( hasMoolaPage ) nav.appendChild( makeLink( wikiUrl( primarySlug + &#039;/Moola&#039; ), &#039;मूलम्&#039; ) );&lt;br /&gt;
    if ( showUllekha ) nav.appendChild( makeLink( wikiUrl( primarySlug + &#039;/Ullekha&#039; ), &#039;उल्लेख&#039; ) );&lt;br /&gt;
    var h1 = document.getElementById( &#039;firstHeading&#039; ) || document.querySelector( &#039;.page-heading, h1.firstHeading, .mw-first-heading&#039; );&lt;br /&gt;
    if ( h1 &amp;amp;&amp;amp; h1.parentNode ) h1.parentNode.insertBefore( nav, h1.nextSibling );&lt;br /&gt;
    else { var ct = document.getElementById( &#039;mw-content-text&#039; ); if ( ct ) ct.insertBefore( nav, ct.firstChild ); }&lt;br /&gt;
  }&lt;br /&gt;
  injectCSS(); watchBodyPadding();&lt;br /&gt;
  function boot() { expandSections(); watchSections(); injectMenuLinks(); injectMoolaUllekhaLinks(); [100,400,900,1800].forEach(function(ms){ setTimeout(expandSections,ms); }); setTimeout(initToc,700); }&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) document.addEventListener( &#039;DOMContentLoaded&#039;, boot );&lt;br /&gt;
  else boot();&lt;br /&gt;
  if ( window.mw ) mw.hook( &#039;wikipage.content&#039; ).add(function(){ setTimeout(function(){ expandSections(); injectMenuLinks(); injectMoolaUllekhaLinks(); initToc(); },300); });&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
  mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
    setTimeout( function () {&lt;br /&gt;
      var blocks = document.querySelectorAll( &#039;.collapsible-block, .toggle-list&#039; );&lt;br /&gt;
      Array.prototype.forEach.call( blocks, function ( el ) { if ( !el.parentNode ) { try { el.remove(); } catch(e) {} } } );&lt;br /&gt;
    }, 0 );&lt;br /&gt;
  } );&lt;br /&gt;
  if ( mw.config.get( &#039;wgPageName&#039; ) !== &#039;Main_Page&#039; ) return;&lt;br /&gt;
  mw.loader.using( &#039;mediawiki.util&#039; ).done( function () {&lt;br /&gt;
    $( function () { applyHomeToggleOffset(); window.addEventListener( &#039;resize&#039;, applyHomeToggleOffset, { passive: true } ); setTimeout( applyHomeToggleOffset, 300 ); setTimeout( applyHomeToggleOffset, 800 ); } );&lt;br /&gt;
  } );&lt;br /&gt;
  function applyHomeToggleOffset() {&lt;br /&gt;
    var bar = document.getElementById( &#039;gr-static-bar&#039; ); if ( !bar ) return;&lt;br /&gt;
    var barBottom = Math.round( bar.getBoundingClientRect().bottom );&lt;br /&gt;
    [ document.getElementById(&#039;gr-home&#039;), document.getElementById(&#039;gr-home-toggle&#039;), document.querySelector(&#039;#mw-content-text .mw-parser-output &amp;gt; .gr-home, #mw-content-text .mw-parser-output &amp;gt; *:first-child&#039;) ].forEach( function(el){ if(el) el.style.scrollMarginTop=(barBottom+4)+&#039;px&#039;; } );&lt;br /&gt;
    var isMob = window.innerWidth &amp;lt; 768 || !!document.getElementById( &#039;mw-mf-viewport&#039; );&lt;br /&gt;
    if ( isMob ) { var toggleEl = document.getElementById(&#039;gr-home-toggle&#039;); if ( toggleEl ) { var tr = toggleEl.getBoundingClientRect(); if ( tr.top &amp;lt; barBottom ) { var cp = parseInt(window.getComputedStyle(document.body).paddingTop,10)||0; document.body.style.paddingTop=(cp+(barBottom-tr.top)+4)+&#039;px&#039;; } } }&lt;br /&gt;
  }&lt;br /&gt;
  $( function () {&lt;br /&gt;
    var $toggle=$(&#039;#gr-home-toggle&#039;),$viewG=$(&#039;#gr-view-grantha&#039;),$viewA=$(&#039;#gr-view-author&#039;),$btnG=$(&#039;#gr-toggle-grantha&#039;),$btnA=$(&#039;#gr-toggle-author&#039;);&lt;br /&gt;
    if(!$toggle.length||!$viewG.length||!$viewA.length)return; if($toggle.data(&#039;gr-wired&#039;))return; $toggle.data(&#039;gr-wired&#039;,true);&lt;br /&gt;
    function showView(which){ if(which===&#039;grantha&#039;){$viewG.show();$viewA.hide();$btnG.addClass(&#039;gr-toggle-active&#039;);$btnA.removeClass(&#039;gr-toggle-active&#039;);}else{$viewA.show();$viewG.hide();$btnA.addClass(&#039;gr-toggle-active&#039;);$btnG.removeClass(&#039;gr-toggle-active&#039;);} try{localStorage.setItem(&#039;grantha_home_tab&#039;,which);}catch(e){} }&lt;br /&gt;
    $btnG.on(&#039;click keydown&#039;,function(e){if(e.type===&#039;keydown&#039;&amp;amp;&amp;amp;e.key!==&#039;Enter&#039;&amp;amp;&amp;amp;e.key!==&#039; &#039;)return;showView(&#039;grantha&#039;);});&lt;br /&gt;
    $btnA.on(&#039;click keydown&#039;,function(e){if(e.type===&#039;keydown&#039;&amp;amp;&amp;amp;e.key!==&#039;Enter&#039;&amp;amp;&amp;amp;e.key!==&#039; &#039;)return;showView(&#039;author&#039;);});&lt;br /&gt;
    try{var saved=localStorage.getItem(&#039;grantha_home_tab&#039;);if(saved===&#039;author&#039;)showView(&#039;author&#039;);else showView(&#039;grantha&#039;);}catch(e){showView(&#039;grantha&#039;);}&lt;br /&gt;
  } );&lt;br /&gt;
}() );&lt;br /&gt;
// ── Replace MediaWiki user links with a single username dropdown (Profile + Logout) ──&lt;br /&gt;
( function () {&lt;br /&gt;
  function wikiHref( title ) {&lt;br /&gt;
    if ( window.mw &amp;amp;&amp;amp; mw.util &amp;amp;&amp;amp; mw.util.getUrl ) return mw.util.getUrl( title );&lt;br /&gt;
    var ap = ( window.mw &amp;amp;&amp;amp; mw.config &amp;amp;&amp;amp; mw.config.get( &#039;wgArticlePath&#039; ) ) || &#039;/wiki/$1&#039;;&lt;br /&gt;
    return ap.replace( &#039;$1&#039;, title );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function buildLogoutForm( token ) {&lt;br /&gt;
    // POST logout = no confirmation interstitial. returnto sends them home.&lt;br /&gt;
    var form = document.createElement( &#039;form&#039; );&lt;br /&gt;
    form.method = &#039;post&#039;;&lt;br /&gt;
    form.action = ( window.mw ? mw.util.wikiScript() : &#039;/index.php&#039; ) + &#039;?title=Special:UserLogout&#039;;&lt;br /&gt;
    form.style.display = &#039;none&#039;;&lt;br /&gt;
    form.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;wpEditToken&amp;quot; value=&amp;quot;&#039; + token.replace(/&amp;quot;/g,&#039;&amp;amp;quot;&#039;) + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;title&amp;quot; value=&amp;quot;Special:UserLogout&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;returnto&amp;quot; value=&amp;quot;Main Page&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
    document.body.appendChild( form );&lt;br /&gt;
    return form;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function injectUserDropdown() {&lt;br /&gt;
    if ( document.getElementById( &#039;gr-user-dropdown&#039; ) ) return;&lt;br /&gt;
&lt;br /&gt;
    var userName = window.mw ? mw.config.get( &#039;wgUserName&#039; ) : null;&lt;br /&gt;
    if ( !userName ) return; // anonymous — nothing to show&lt;br /&gt;
&lt;br /&gt;
    var container = document.querySelector( &#039;.vector-user-links-main&#039; )&lt;br /&gt;
                 || document.querySelector( &#039;.vector-user-links&#039; );&lt;br /&gt;
    if ( !container ) return;&lt;br /&gt;
&lt;br /&gt;
    // Logout token (csrf token works for logout in modern MW)&lt;br /&gt;
    var token = ( window.mw &amp;amp;&amp;amp; mw.user &amp;amp;&amp;amp; mw.user.tokens )&lt;br /&gt;
      ? mw.user.tokens.get( &#039;csrfToken&#039; ) : &#039;+\\&#039;;&lt;br /&gt;
&lt;br /&gt;
    var wrap = document.createElement( &#039;div&#039; );&lt;br /&gt;
    wrap.id = &#039;gr-user-dropdown&#039;;&lt;br /&gt;
    wrap.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;button id=&amp;quot;gr-user-trigger&amp;quot; type=&amp;quot;button&amp;quot; aria-haspopup=&amp;quot;true&amp;quot; aria-expanded=&amp;quot;false&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;&#039; + (userName.replace(/&amp;lt;/g,&#039;&amp;amp;lt;&#039;)) + &#039;&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span class=&amp;quot;gr-caret&amp;quot;&amp;gt;▾&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;/button&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;div id=&amp;quot;gr-user-menu&amp;quot; role=&amp;quot;menu&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;&#039; + wikiHref( &#039;Special:Profile&#039; ) + &#039;&amp;quot; role=&amp;quot;menuitem&amp;quot;&amp;gt;Profile&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;#&amp;quot; id=&amp;quot;gr-logout-link&amp;quot; role=&amp;quot;menuitem&amp;quot;&amp;gt;Log out&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
    container.appendChild( wrap );&lt;br /&gt;
&lt;br /&gt;
    var trigger = document.getElementById( &#039;gr-user-trigger&#039; );&lt;br /&gt;
    var menu    = document.getElementById( &#039;gr-user-menu&#039; );&lt;br /&gt;
&lt;br /&gt;
    trigger.addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      e.stopPropagation();&lt;br /&gt;
      var open = menu.classList.toggle( &#039;gr-open&#039; );&lt;br /&gt;
      trigger.setAttribute( &#039;aria-expanded&#039;, open ? &#039;true&#039; : &#039;false&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    document.addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      if ( !wrap.contains( e.target ) ) {&lt;br /&gt;
        menu.classList.remove( &#039;gr-open&#039; );&lt;br /&gt;
        trigger.setAttribute( &#039;aria-expanded&#039;, &#039;false&#039; );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    document.getElementById( &#039;gr-logout-link&#039; ).addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      e.preventDefault();&lt;br /&gt;
      buildLogoutForm( token ).submit();&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) {&lt;br /&gt;
    document.addEventListener( &#039;DOMContentLoaded&#039;, injectUserDropdown );&lt;br /&gt;
  } else {&lt;br /&gt;
    injectUserDropdown();&lt;br /&gt;
  }&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.css&amp;diff=6192</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.css&amp;diff=6192"/>
		<updated>2026-06-11T09:18:01Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ═══════════════════════════════════════════════════════════════════&lt;br /&gt;
   MediaWiki:Common.css — Anandamakaranda&lt;br /&gt;
   Clean rebuild — works on Vector (desktop) + Minerva (mobile)&lt;br /&gt;
   ═══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
&lt;br /&gt;
/* ── 1. CSS VARIABLES ──────────────────────────────────────────── */&lt;br /&gt;
:root {&lt;br /&gt;
  --maroon:       #be100e;&lt;br /&gt;
  --orange:       #e65100;&lt;br /&gt;
  --light-orange: #f57c00;&lt;br /&gt;
  --dark-gray:    #555;&lt;br /&gt;
  --light-gray:   #eee;&lt;br /&gt;
  --muted-gray:   #888;&lt;br /&gt;
  --text:         #1a1a1a;&lt;br /&gt;
  --brown:        #a07040;&lt;br /&gt;
  --light-brown:  #e8d4a0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 2. FONTS ──────────────────────────────────────────────────── */&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;Adishila&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/adishila/Adishila.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: normal; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;Adishila&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/adishila/AdishilaBold.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: bold; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;AdishilaDev&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/AdishilaDev.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: normal; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;AdishilaDev&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/AdishilaDeBv.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: bold; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;AdishilaDevGuru&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/AdishilaDevGuru.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: bold; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;Noto Sans Devanagari&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/Noto_Sans_Devanagari/NotoSansDevanagari.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: normal; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-content-text {&lt;br /&gt;
  font-family: &#039;Adishila&#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output {&lt;br /&gt;
  font-size: 22px;&lt;br /&gt;
  line-height: 1.7;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  max-width: 100%;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  margin: 0; padding: 0;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Danda marks wrap issue&lt;br /&gt;
.mw-parser-output { overflow-wrap: anywhere; }&lt;br /&gt;
&lt;br /&gt;
/* ── 4. HIDE ELEMENTS (both skins) ────────────────────────────── */&lt;br /&gt;
/* Page title */&lt;br /&gt;
h1.firstHeading, #firstHeading, .mw-page-title-main { display: none !important; }&lt;br /&gt;
/* Footer */&lt;br /&gt;
#footer, .mw-footer, .vector-footer, .vector-footer-container,&lt;br /&gt;
footer, .minerva-footer { display: none !important; }&lt;br /&gt;
/* Categories */&lt;br /&gt;
.catlinks, #catlinks, .mw-normal-catlinks, .mw-hidden-catlinks { display: none !important; }&lt;br /&gt;
/* Edit section links */&lt;br /&gt;
.mw-editsection, .mw-editsection-bracket { display: none !important; }&lt;br /&gt;
/* Site notice */&lt;br /&gt;
#siteNotice { display: none !important; }&lt;br /&gt;
/* Watchlist */&lt;br /&gt;
li#pt-watchlist, li#pt-watchlist-kbd { display: none !important; }&lt;br /&gt;
/* Appearance panel */&lt;br /&gt;
#vector-appearance, #vector-appearance-pinned-container,&lt;br /&gt;
#vector-appearance-unpinned-container, .mw-portlet-appearance,&lt;br /&gt;
#p-appearance, [aria-controls=&amp;quot;vector-appearance&amp;quot;] { display: none !important; }&lt;br /&gt;
/* Vector hamburger + sidebar */&lt;br /&gt;
#mw-sidebar-button, .vector-main-menu, .vector-main-menu-container,&lt;br /&gt;
.vector-main-menu-landmark, #vector-main-menu-dropdown { display: none !important; }&lt;br /&gt;
/* Vector search box (we use our own) */&lt;br /&gt;
#p-search, .vector-search-box, .vector-search-box-vue,&lt;br /&gt;
.vector-search-box-collapses { display: none !important; }&lt;br /&gt;
/* Vector page toolbar */&lt;br /&gt;
.vector-page-toolbar, .vector-page-toolbar-container { display: none !important; }&lt;br /&gt;
/* Vector page tools */&lt;br /&gt;
.vector-page-tools { display: none !important; }&lt;br /&gt;
/* Empty paragraphs */&lt;br /&gt;
.mw-parser-output p:empty,&lt;br /&gt;
.mw-parser-output &amp;gt; div &amp;gt; p:empty,&lt;br /&gt;
.mw-heading + p:empty,&lt;br /&gt;
.adhyaya-block + p:empty,&lt;br /&gt;
.verse-block + p:empty { display: none !important; margin: 0 !important; }&lt;br /&gt;
/* Empty divs */&lt;br /&gt;
.adhyaya-block:empty, .mw-parser-output div:empty { display: none !important; }&lt;br /&gt;
/* Cargo hidden */&lt;br /&gt;
.cargo-store-only { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 5. VECTOR HEADER (desktop only) ──────────────────────────── */&lt;br /&gt;
.vector-header-container {&lt;br /&gt;
  background: #b5451b !important;&lt;br /&gt;
  border-bottom: 1px solid rgba(255,255,255,0.12);&lt;br /&gt;
}&lt;br /&gt;
.vector-header {&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  justify-content: space-between !important;&lt;br /&gt;
  padding-left: 20px !important;&lt;br /&gt;
  padding-right: 20px !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-header-start {&lt;br /&gt;
  flex: 0 0 auto !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  gap: 12px;&lt;br /&gt;
}&lt;br /&gt;
.vector-header-end {&lt;br /&gt;
  flex: 0 0 auto !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  margin-left: auto;&lt;br /&gt;
}&lt;br /&gt;
.mw-logo { display: flex !important; align-items: center; opacity: 1 !important; }&lt;br /&gt;
.mw-logo-icon { width: 24px; height: 24px; }&lt;br /&gt;
&lt;br /&gt;
/* Site name */&lt;br /&gt;
.mw-logo-wordmark {&lt;br /&gt;
  font-size: 0 !important;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  flex-direction: column !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-logo-wordmark::before {&lt;br /&gt;
  content: &#039;Anandamakaranda&#039;;&lt;br /&gt;
  font-size: 17px;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-family: system-ui, -apple-system, sans-serif;&lt;br /&gt;
  letter-spacing: -0.01em;&lt;br /&gt;
}&lt;br /&gt;
.mw-logo-wordmark::after {&lt;br /&gt;
  content: &amp;quot;A Digital Archive of Dvaita Vedanta Literature&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  font-weight: 400;&lt;br /&gt;
  color: rgba(255,255,255,0.85);&lt;br /&gt;
  letter-spacing: 0.3px;&lt;br /&gt;
  margin-top: 1px;&lt;br /&gt;
  font-family: sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Header right links */&lt;br /&gt;
.vector-header-end &amp;gt; *:not(#p-search) { color: rgba(255,255,255,0.9) !important; }&lt;br /&gt;
.vector-user-links a { color: rgba(255,255,255,0.9) !important; }&lt;br /&gt;
&lt;br /&gt;
/* User icon white */&lt;br /&gt;
.vector-user-menu-container .vector-icon svg,&lt;br /&gt;
.vector-user-menu-container .vector-icon svg path,&lt;br /&gt;
.vector-user-menu-container .vector-icon svg circle {&lt;br /&gt;
  fill: #fff !important; stroke: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-user-links .vector-user-menu-chevron .vector-icon svg,&lt;br /&gt;
.vector-user-links .vector-user-menu-chevron .vector-icon svg path {&lt;br /&gt;
  fill: rgba(255,255,255,0.9) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* User dropdown — dark text on white card */&lt;br /&gt;
.vector-user-menu .mw-list-item a,&lt;br /&gt;
.vector-user-menu .vector-menu-content-list a,&lt;br /&gt;
#p-personal .vector-menu-content a,&lt;br /&gt;
.mw-portlet-personal .vector-menu-content a { color: #202122 !important; }&lt;br /&gt;
.vector-user-menu .mw-list-item a:hover { color: var(--light-orange) !important; }&lt;br /&gt;
&lt;br /&gt;
/* Suppress Vector sticky header clone */&lt;br /&gt;
.vector-sticky-header { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* Suppress body top padding that Vector adds */&lt;br /&gt;
.mw-body { margin-top: 0 !important; padding-top: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 6. VECTOR TOC (desktop sidebar) ──────────────────────────── */&lt;br /&gt;
.vector-toc .vector-toc-numb { display: none !important; }&lt;br /&gt;
.vector-toc .vector-toc-title {&lt;br /&gt;
  font-size: 0.72em !important; font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase; letter-spacing: 0.08em;&lt;br /&gt;
  color: var(--text) !important;&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, system-ui, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-toc .vector-toc-text {&lt;br /&gt;
  white-space: normal !important; word-break: break-word !important;&lt;br /&gt;
  overflow-wrap: anywhere !important; display: inline !important;&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, system-ui, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-toc a, .vector-toc .vector-toc-link {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, system-ui, sans-serif !important;&lt;br /&gt;
  color: var(--text) !important; text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-toc a:hover { color: var(--light-orange) !important; }&lt;br /&gt;
.vector-toc .vector-toc-list-item-active .vector-toc-link,&lt;br /&gt;
.vector-toc .vector-toc-list-item-active .vector-toc-link * {&lt;br /&gt;
  color: var(--light-orange) !important; font-weight: 700 !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-toc .cdx-button.vector-toc-toggle {&lt;br /&gt;
  background: none !important; border: none !important;&lt;br /&gt;
  box-shadow: none !important; color: var(--text) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 7. HEADINGS ───────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output h1, .mw-parser-output h2, .mw-parser-output h3, .mw-parser-output h4,&lt;br /&gt;
.mw-parser-output .mw-heading h1, .mw-parser-output .mw-heading h2,&lt;br /&gt;
.mw-parser-output .mw-heading h3 {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  border: none !important; padding: 0 !important; background: none !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output .mw-heading { border: none !important; margin: 0; padding: 0; }&lt;br /&gt;
&lt;br /&gt;
.mw-heading, .mw-heading2, .mw-heading3 { text-align:center; }&lt;br /&gt;
.mw-parser-output h2, .mw-parser-output .mw-heading2 h2 {&lt;br /&gt;
  font-size: 1.2em !important; font-weight: 500 !important;&lt;br /&gt;
  color: var(--maroon) !important; line-height: 1.8;&lt;br /&gt;
  margin: 24px 0 4px !important;&lt;br /&gt;
  border-bottom: 2px dotted var(--maroon) !important;&lt;br /&gt;
  width: 75%; font-family: &#039;AdishilaDev&#039;; text-align: center;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output h3, .mw-parser-output .mw-heading3 h3 {&lt;br /&gt;
  font-size: 1em !important; font-weight: 500 !important;&lt;br /&gt;
  color: var(--orange) !important; line-height: 1.5;&lt;br /&gt;
  margin: 24px 0 8px !important;&lt;br /&gt;
  border-bottom: 1px dotted var(--orange) !important;&lt;br /&gt;
  width: 55%; font-family: &#039;AdishilaDev&#039;; text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 8. PARAGRAPHS ─────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output p { margin: 0 0 0.35rem !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 9. DOCUMENT TITLE ─────────────────────────────────────────── */&lt;br /&gt;
.gr-doc-title {&lt;br /&gt;
  font-size: 2em; font-weight: 500; color: var(--maroon);&lt;br /&gt;
  line-height: 1.4; margin: 0 0 16px; border: none !important;&lt;br /&gt;
  text-align:center; font-family: &#039;AdishilaDev&#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 10. VERSE BLOCKS ──────────────────────────────────────────── */&lt;br /&gt;
.shloka-block { display: block; text-align: left; margin: 3px 0 0; padding-bottom: 0.5em; }&lt;br /&gt;
.shloka-line { display: block; font-style: normal; color: #333; line-height: 1.35; margin: 0; }&lt;br /&gt;
.verse-block { display: block; margin: 6px 0 0; text-align: left; }&lt;br /&gt;
.verse-block .shloka-block { text-align: left; margin: 0; }&lt;br /&gt;
.verse-block .shloka-line {&lt;br /&gt;
  display: block; font-style: italic; color: #c65;&lt;br /&gt;
  font-weight: 500; line-height: 1.35; margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.verse-block + p { display: none !important; margin: 0 !important; }&lt;br /&gt;
.mw-parser-output .verse-block,&lt;br /&gt;
.mw-parser-output .shloka-block { margin-top: 2px !important; margin-bottom: 2px !important; }&lt;br /&gt;
&lt;br /&gt;
.gr-verse-text, .verse-line, .verse-text {&lt;br /&gt;
  color: #b5451b; font-style: italic; line-height: 1.5; display: block; margin: 0.1em 0;&lt;br /&gt;
}&lt;br /&gt;
.gr-verse-type-sutra .gr-verse-text,&lt;br /&gt;
.verse-block[data-type=&amp;quot;sutra&amp;quot;] .verse-line { font-style: normal; font-weight: 600; color: #b5451b; }&lt;br /&gt;
&lt;br /&gt;
/* ── 11. UVACHA ────────────────────────────────────────────────── */&lt;br /&gt;
.uvacha-block {&lt;br /&gt;
  display: block; font-weight: bold; color: #c65;&lt;br /&gt;
  margin: 0.5rem 0 0; padding: 2px 0 2px 12px;&lt;br /&gt;
  border-left: 3px solid #c65; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
.uvacha-block + .verse-block { margin-top: 2px; }&lt;br /&gt;
.gr-uvaaca, .uvaaca {&lt;br /&gt;
  color: #b5451b; font-weight: 600; font-size: 0.92em; margin: 0.5em 0 0.2em 0; display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 12. BHASHYAM ──────────────────────────────────────────────── */&lt;br /&gt;
.bhashyam-block {&lt;br /&gt;
  display: block; font-size: 1em; line-height: 1.6; color: #555;&lt;br /&gt;
  margin: 0.25em 0 0.35em 48px; padding: 0; border: none; background: transparent;&lt;br /&gt;
}&lt;br /&gt;
.gr-bhashyam, .commentary-bhashyam {&lt;br /&gt;
  color: #222; font-style: normal; line-height: 1.75; margin: 0.3em 0 0.5em 0;&lt;br /&gt;
}&lt;br /&gt;
.gr-leading-bhashya { font-style: italic; color: #555; margin: 0.4em 0 0.5em 0; }&lt;br /&gt;
&lt;br /&gt;
/* ── 13. PADYA ─────────────────────────────────────────────────── */&lt;br /&gt;
.padya-block {&lt;br /&gt;
  display: block; font-size: 1em; line-height: 1.75; color: #c65 !important;&lt;br /&gt;
  font-style: italic; font-weight: 500; margin: 0.4em 0 0.6em 60px;&lt;br /&gt;
}&lt;br /&gt;
.gr-padapatha { font-size: 0.9em; color: #555; margin: 0.2em 0 0.3em 0.8em; }&lt;br /&gt;
&lt;br /&gt;
/* ── 14. TEEKA ─────────────────────────────────────────────────── */&lt;br /&gt;
.teeka-block {&lt;br /&gt;
  padding: 6px 10px 8px; margin: 0.3em 0; line-height: 1.6; color: #555;&lt;br /&gt;
}&lt;br /&gt;
.teeka-title {&lt;br /&gt;
  font-family: &#039;AdishilaDev&#039;;, sans-serif !important;&lt;br /&gt;
  font-size: 1.75em; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase;&lt;br /&gt;
  margin-bottom: 4px; padding-bottom: 3px;&lt;br /&gt;
}&lt;br /&gt;
.teeka-body .shloka-block {&lt;br /&gt;
  margin: 0.4em 0; padding: 0.3em 0.6em; font-family: &#039;AdishilaDev&#039;;&lt;br /&gt;
}&lt;br /&gt;
.teeka-body .shloka-line { font-style: italic; font-size: 0.97em; font-family: &#039;AdishilaDev&#039;; }&lt;br /&gt;
&lt;br /&gt;
/* ── 15. PRATEEKA / MOOLA ──────────────────────────────────────── */&lt;br /&gt;
.gr-prateeka { font-weight: bold; font-style: normal; color: #333; }&lt;br /&gt;
.gr-mulaprateeka-block {&lt;br /&gt;
  display: block; font-weight: bold; font-style: normal;&lt;br /&gt;
  text-align: center; color: #333; margin: 0.7em 0 0.3em; line-height: 1.5;&lt;br /&gt;
}&lt;br /&gt;
.gr-moola { font-weight: bold; font-style: italic; color: #c65; }&lt;br /&gt;
&lt;br /&gt;
/* ── 16. ADHYAYA ───────────────────────────────────────────────── */&lt;br /&gt;
.adhyaya-block { margin: 0 0 4px; }&lt;br /&gt;
.adhyaya-trans { font-size: 0.9em; color: #666; margin: 2px 0 0; }&lt;br /&gt;
.adhyaya-intro { margin-top: 8px; line-height: 1.75; color: #555; }&lt;br /&gt;
.introduction p { color: var(--dark-gray); font-weight: 400; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.introduction { padding-bottom: 0.5em; text-align: justify; }&lt;br /&gt;
&lt;br /&gt;
/* ── 17. NYAYA / PRASNA ────────────────────────────────────────── */&lt;br /&gt;
.nyaya-block { margin: 32px 0; padding-top: 12px; border-top: 1px solid #eee; }&lt;br /&gt;
.nyaya-title {&lt;br /&gt;
  font-size: 1em; font-weight: 500; color: var(--orange);&lt;br /&gt;
  margin-bottom: 0.4rem; border-bottom: 1px dotted var(--orange); width: 50%;&lt;br /&gt;
}&lt;br /&gt;
.nyaya-body { color: #555; line-height: 1.75; margin-top: 0.5rem; }&lt;br /&gt;
.prasna-block { margin: 32px 0; padding-top: 12px; border-top: 1px solid #eee; }&lt;br /&gt;
.prasna-title {&lt;br /&gt;
  font-size: 1em; font-weight: 500; color: var(--orange);&lt;br /&gt;
  margin-bottom: 0.4rem; border-bottom: 1px dotted var(--orange); width: 50%;&lt;br /&gt;
}&lt;br /&gt;
.prasna-question, .prasna-answer { color: #555; line-height: 1.75; margin-top: 0.5rem; }&lt;br /&gt;
.prasna-answer { margin-left: 60px; }&lt;br /&gt;
&lt;br /&gt;
/* ── 18. VYAKHYA ELEMENTS ──────────────────────────────────────── */&lt;br /&gt;
.gr-vyakhya-head, .gr-section-head {&lt;br /&gt;
  font-size: 0.9em; font-weight: 700; color: #6a3e00;&lt;br /&gt;
  margin: 0.35em 0 0.15em; font-family: inherit; border: none; padding: 0;&lt;br /&gt;
}&lt;br /&gt;
.gr-avataranika {&lt;br /&gt;
  font-style: italic; color: #444; margin: 0.2em 0 0.5em 0.5em;&lt;br /&gt;
  padding-left: 0.6em; border-left: 2px solid #c9a96e; line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
.gr-vyakhya-pada {&lt;br /&gt;
  font-size: 0.88em; color: #555; background: #fafafa;&lt;br /&gt;
  border: 1px solid #e8e0d0; border-radius: 4px; padding: 0.5em 0.8em;&lt;br /&gt;
  margin: 0.5em 0; line-height: 1.5; white-space: pre-wrap;&lt;br /&gt;
}&lt;br /&gt;
.gr-vyakhya-gadya {&lt;br /&gt;
  font-weight: bold; font-size: 0.95em; text-align: center;&lt;br /&gt;
  color: #8b1a1a; margin: 0.2em 0; line-height: 1.6; letter-spacing: 0.03em;&lt;br /&gt;
}&lt;br /&gt;
.gr-vyakhya-para { margin: 0 0 0.5em 0; line-height: 1.65; color: #444; }&lt;br /&gt;
.gr-embedded-bhashya { margin: 0.2em 0 0.2em 1em; line-height: 1.6; }&lt;br /&gt;
.gr-gadya {&lt;br /&gt;
  display: block !important; font-size: 0.96em !important; font-weight: 600 !important;&lt;br /&gt;
  font-style: normal !important; color: #555 !important; margin: 16px 0 4px !important;&lt;br /&gt;
  border-bottom: 1px solid #ddd !important; width: 60%; line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
.gr-author-note {&lt;br /&gt;
  font-style: italic; color: var(--maroon); text-align: center; font-size: 0.9em;&lt;br /&gt;
  margin: 0.8em 0 0.4em 0; border-top: 1px solid #ddd; padding-top: 0.4em; font-family: &#039;AdishilaDev&#039;&lt;br /&gt;
}&lt;br /&gt;
.gr-devatachandas { font-size: 0.82em; color: #777; margin: 0.4em 0 0.2em 0; }&lt;br /&gt;
.gr-vargikarana   { font-size: 0.82em; color: #888; margin: 0.5em 0 0.1em 0; }&lt;br /&gt;
&lt;br /&gt;
/* ── 20. BHASHYA COLLECTION ────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output .bhashya-collection { margin: 0; padding: 0; }&lt;br /&gt;
.mw-parser-output .bhashya + p:empty,&lt;br /&gt;
.mw-parser-output .verse + p:empty,&lt;br /&gt;
.mw-parser-output .bhashya-collection + p:empty,&lt;br /&gt;
.mw-parser-output .pramana + p:empty,&lt;br /&gt;
.mw-parser-output .author-note + p:empty { display: none !important; margin: 0 !important; height: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 21. VERSE ACTIONS ─────────────────────────────────────────── */&lt;br /&gt;
.verse-actions {&lt;br /&gt;
  display: flex; flex-direction: row; align-items: center;&lt;br /&gt;
  gap: 6px; margin-top: 4px; justify-content: center;&lt;br /&gt;
}&lt;br /&gt;
.verse-action-btn {&lt;br /&gt;
  display: inline-flex; align-items: center; justify-content: center;&lt;br /&gt;
  padding: 4px; border-radius: 6px; cursor: pointer; opacity: 0.75; transition: all 0.2s;&lt;br /&gt;
}&lt;br /&gt;
.verse-action-btn:hover { opacity: 1; background-color: rgba(0,0,0,0.05); }&lt;br /&gt;
.icon { display: inline-block; width: 18px; height: 18px; background-repeat: no-repeat; background-position: center; background-size: contain; }&lt;br /&gt;
.icon-copy       { background-image: url(&#039;/images/copy.svg&#039;); }&lt;br /&gt;
.icon-commentary { background-image: url(&#039;/images/commentary.svg&#039;); }&lt;br /&gt;
.copy-tooltip {&lt;br /&gt;
  position: absolute; bottom: calc(100% + 8px); left: 50%;&lt;br /&gt;
  transform: translateX(-50%) translateY(4px);&lt;br /&gt;
  white-space: nowrap; pointer-events: none; z-index: 9999;&lt;br /&gt;
  display: inline-flex; align-items: center; padding: 2px 8px; border-radius: 999px;&lt;br /&gt;
  font-size: 0.75rem; font-weight: 500; background: rgba(30,30,30,0.82); color: #fff;&lt;br /&gt;
  opacity: 0; transition: opacity 0.2s, transform 0.2s;&lt;br /&gt;
}&lt;br /&gt;
.copy-tooltip.copy-tooltip-visible { opacity: 1; transform: translateX(-50%) translateY(0); }&lt;br /&gt;
&lt;br /&gt;
/* ── 22. CODE / PRE ────────────────────────────────────────────── */&lt;br /&gt;
pre, code, .mw-code, tt, kbd {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif ;&lt;br /&gt;
  background-color: transparent !important; border: none !important; padding: 0.3em 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-collapsible, .mw-collapsible-content, blockquote, .quotebox {&lt;br /&gt;
  background-color: transparent !important; border: none !important;&lt;br /&gt;
  font-style: normal !important; padding: 0 !important; margin-left: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 23. INLINE TOC BOX (wikitext __TOC__) ─────────────────────── */&lt;br /&gt;
.toc {&lt;br /&gt;
  display: block !important; background: #fffdf5; border: 1px solid #e8c88a;&lt;br /&gt;
  border-radius: 8px; padding: 12px 16px; margin: 0 0 24px 0;&lt;br /&gt;
  width: fit-content; min-width: 220px; max-width: 420px;&lt;br /&gt;
  font-size: 0.9em; line-height: 2;&lt;br /&gt;
}&lt;br /&gt;
.toc h2, .toc .toctitle {&lt;br /&gt;
  font-size: 0.85em !important; font-weight: 600 !important; color: var(--text) !important;&lt;br /&gt;
  border: none !important; margin: 0 0 6px !important; text-transform: uppercase; letter-spacing: 0.05em;&lt;br /&gt;
}&lt;br /&gt;
.toc ul { margin: 0 !important; padding-left: 1.2em !important; list-style: none !important; }&lt;br /&gt;
.toc li { margin: 0; padding: 0; }&lt;br /&gt;
.toc a { color: var(--text) !important; text-decoration: none !important; }&lt;br /&gt;
.toc a:hover { color: var(--light-orange) !important; }&lt;br /&gt;
.toc .toclevel-1 &amp;gt; a { font-weight: 600; }&lt;br /&gt;
.tocnumber { display: none; }&lt;br /&gt;
&lt;br /&gt;
/* ── 24. DOC TEEKAS + TOC NAV ──────────────────────────────────── */&lt;br /&gt;
.gr-doc-teekas { margin-bottom: 1em; }&lt;br /&gt;
.gr-doc-teekas + p:empty { display: none !important; margin: 0 !important; height: 0 !important; }&lt;br /&gt;
.toc-main-links { display: flex; gap: 6px; padding: 5px; align-items: center; margin-bottom: 4px; }&lt;br /&gt;
.toc-main-link-item {&lt;br /&gt;
  font-size: 0.9em; color: var(--text); text-decoration: none; padding: 4px 8px;&lt;br /&gt;
  border-radius: 6px; background: rgba(0,0,0,0.05); transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.toc-main-link-item:hover { background: rgba(0,0,0,0.10) !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 25. MAIN PAGE ─────────────────────────────────────────────── */&lt;br /&gt;
body.page-Main_Page #mw-panel,&lt;br /&gt;
body.page-Main_Page .vector-sidebar-container { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
.gr-home { max-width: 1080px; margin: 0 auto; padding: 0; }&lt;br /&gt;
.gr-home-page-title {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif !important;&lt;br /&gt;
  text-align: center; font-size: 1.8em; font-weight: 500; color: #1a2e40; margin: 24px 0 32px;&lt;br /&gt;
}&lt;br /&gt;
.gr-home-grid { display: flex; flex-wrap: wrap; gap: 20px; margin-bottom: 32px; }&lt;br /&gt;
.gr-home-card {&lt;br /&gt;
  background: #fff; border: 1px solid #e8e4df; border-radius: 10px;&lt;br /&gt;
  box-shadow: 0 2px 8px rgba(0,0,0,0.07);&lt;br /&gt;
  padding: 18px 20px 20px; flex: 1 1 280px; min-width: 240px; max-width: 360px;&lt;br /&gt;
}&lt;br /&gt;
.gr-home-card-title {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif !important;&lt;br /&gt;
  font-size: 1em; font-weight: 600; color: #1a2e40; text-align: center;&lt;br /&gt;
  padding-bottom: 10px; margin-bottom: 12px; border-bottom: 1.5px solid #c0392b;&lt;br /&gt;
}&lt;br /&gt;
.gr-home-card ol { margin: 0; padding-left: 1.4em; list-style: decimal; }&lt;br /&gt;
.gr-home-card li { font-size: 0.95em; line-height: 1.85; color: #333; }&lt;br /&gt;
.gr-home-card li a { color: #c0392b; text-decoration: none; }&lt;br /&gt;
.gr-home-card li a:hover { text-decoration: underline; }&lt;br /&gt;
.gr-home-card li a.new { color: #c08080; }&lt;br /&gt;
.gr-home-note { font-size: 0.82em; color: #888; }&lt;br /&gt;
.gr-home-group-label {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif !important;&lt;br /&gt;
  font-size: 1.1em; font-weight: 600; color: #1a2e40; text-align: center;&lt;br /&gt;
  margin: 36px 0 16px; padding-bottom: 8px; border-bottom: 2px solid #c0392b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 26. TOGGLE BUTTONS ────────────────────────────────────────── */&lt;br /&gt;
.gr-home-toggle { display: flex; gap: 8px; margin: 0 0 24px; justify-content: center; }&lt;br /&gt;
.gr-toggle-btn {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  font-size: 0.88em; padding: 6px 20px; border: 1.5px solid #c0392b; border-radius: 20px;&lt;br /&gt;
  background: transparent; color: #c0392b; cursor: pointer; user-select: none; transition: background 0.15s, color 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gr-toggle-btn:hover { background: #fdf0ed; }&lt;br /&gt;
.gr-toggle-btn.gr-toggle-active { background: #c0392b; color: #fff; }&lt;br /&gt;
&lt;br /&gt;
/* ── 27. SCRIPT BAR ────────────────────────────────────────────── */&lt;br /&gt;
.gr-script-bar { margin: 0 0 20px; font-size: 0.8em; color: #888; display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }&lt;br /&gt;
.gr-script-label { font-family: system-ui, sans-serif; color: #aaa; }&lt;br /&gt;
.gr-script-btn { font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif; color: #c0392b !important; text-decoration: underline dotted !important; cursor: pointer; }&lt;br /&gt;
.gr-script-btn.active { color: #888 !important; text-decoration: none !important; cursor: default; }&lt;br /&gt;
&lt;br /&gt;
/* ── 28. MODALS ────────────────────────────────────────────────── */&lt;br /&gt;
.grantha-modal { position: fixed; inset: 0; background: rgba(0,0,0,0.35); display: flex; align-items: center; justify-content: center; z-index: 10000; }&lt;br /&gt;
.grantha-modal-box { background: white; padding: 20px; border-radius: 10px; width: 300px; }&lt;br /&gt;
.gm-title { font-weight: bold; margin-bottom: 10px; }&lt;br /&gt;
.gm-actions { display: flex; justify-content: flex-end; gap: 10px; margin-top: 12px; }&lt;br /&gt;
&lt;br /&gt;
/* ── 29. LOGIN PAGE ────────────────────────────────────────────── */&lt;br /&gt;
body.page-Special_UserLogin .vector-search-box,&lt;br /&gt;
body.page-Special_UserLogin #p-search { display: none !important; }&lt;br /&gt;
body.page-Special_UserLogin #content { max-width: 420px; margin: 40px auto !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 30. SPECIAL PAGES ─────────────────────────────────────────── */&lt;br /&gt;
body.ns-special #footer, body.ns-special .mw-footer,&lt;br /&gt;
body.ns-special .vector-footer { display: none !important; }&lt;br /&gt;
body.ns-special .vector-page-tools { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 31. MINERVA (mobile) ──────────────────────────────────────── */&lt;br /&gt;
.skin-minerva .mw-parser-output {&lt;br /&gt;
  font-size: 18px !important;&lt;br /&gt;
  line-height: 1.8 !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .mw-parser-output h2,&lt;br /&gt;
.skin-minerva .mw-parser-output .mw-heading2 h2 {&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .mw-parser-output h3,&lt;br /&gt;
.skin-minerva .mw-parser-output .mw-heading3 h3 {&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .bhashyam-block { margin-left: 16px !important; }&lt;br /&gt;
.skin-minerva .prasna-answer  { margin-left: 16px !important; }&lt;br /&gt;
.skin-minerva .padya-block    { margin-left: 16px !important; }&lt;br /&gt;
/* Home grid single column on Minerva */&lt;br /&gt;
.skin-minerva .gr-home-grid {&lt;br /&gt;
  flex-direction: column !important;&lt;br /&gt;
  flex-wrap: nowrap !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .gr-home-card {&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
  min-width: unset !important;&lt;br /&gt;
  flex: 0 0 auto !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
/* Hide things that should be hidden on mobile too */&lt;br /&gt;
.skin-minerva .catlinks,&lt;br /&gt;
.skin-minerva #catlinks { display: none !important; }&lt;br /&gt;
.skin-minerva .mw-editsection { display: none !important; }&lt;br /&gt;
/* Minerva already has its own TOC — hide our inline .toc */&lt;br /&gt;
.skin-minerva .toc { display: none !important; }&lt;br /&gt;
/* ReaderToolbar on Minerva */&lt;br /&gt;
.skin-minerva #gr-static-bar {&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  min-height: 52px !important;&lt;br /&gt;
  overflow-x: auto !important;&lt;br /&gt;
  overflow-y: hidden !important;&lt;br /&gt;
  scrollbar-width: none !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva #gr-static-bar::-webkit-scrollbar { display: none !important; }&lt;br /&gt;
.skin-minerva .gr-controls .gr-btn {&lt;br /&gt;
  height: 44px !important;&lt;br /&gt;
  min-width: 44px !important;&lt;br /&gt;
  font-size: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .gr-btn-staging { display: none !important; }&lt;br /&gt;
.skin-minerva .gr-controls .gr-sep { display: none !important; }&lt;br /&gt;
/* Minerva already shows page title — don&#039;t double-hide */&lt;br /&gt;
.skin-minerva h1.firstHeading { display: block !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 32. PRINT ─────────────────────────────────────────────────── */&lt;br /&gt;
@media print {&lt;br /&gt;
  #gr-static-bar, .gr-controls, .vector-header-container { display: none !important; }&lt;br /&gt;
  .mw-parser-output { font-size: 11pt !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 33. TYPOGRAPHY CLASSES ────────────────────────────────────── */&lt;br /&gt;
&lt;br /&gt;
/* Heading — center, maroon, AdishilaDevGuru */&lt;br /&gt;
.gr-heading {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  font-size: 1.09em;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  color: #be100e;&lt;br /&gt;
  font-family: &#039;AdishilaDevGuru&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  line-height: 1.4;&lt;br /&gt;
  margin: 0.45em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Sub-heading — center, orange, AdishilaDevGuru */&lt;br /&gt;
.gr-sub-heading {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  font-size: 0.73em;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  color: #e65100;&lt;br /&gt;
  font-family: &#039;AdishilaDevGuru&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
  margin: 0.5em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Chapter Heading — center, maroon, AdishilaDevGuru */&lt;br /&gt;
.gr-chapter-heading {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  font-size: 0.82em;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  color: #be100e;&lt;br /&gt;
  font-family: &#039;AdishilaDevGuru&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
  margin: 0.5em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* M.Veda Shloka — left, bold, maroon, AdishilaVed, 5mm indent */&lt;br /&gt;
.gr-mv-shloka {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: left;&lt;br /&gt;
  font-size: 0.82em;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  color: #be100e;&lt;br /&gt;
  font-family: &#039;AdishilaVed&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  padding-left: 0.86em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.75;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* M.Veda Gadya — justify, bold, maroon, AdishilaVed */&lt;br /&gt;
.gr-mv-gadya {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: justify;&lt;br /&gt;
  font-size: 0.82em;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  color: #be100e;&lt;br /&gt;
  font-family: &#039;AdishilaVed&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  text-indent: 1.18em;&lt;br /&gt;
  padding-left: 0.36em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.75;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* M.Shloka — left, bold, orange, AdishilaDev, 5mm indent */&lt;br /&gt;
.gr-m-shloka {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: left;&lt;br /&gt;
  font-size: 0.82em;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  color: #e65100;&lt;br /&gt;
  font-family: &#039;AdishilaDev&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  padding-left: 0.86em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.75;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* B.Shloka / TK.Shloka / TP.Shloka — left, black, AdishilaDev, 10mm indent */&lt;br /&gt;
.gr-b-shloka,&lt;br /&gt;
.gr-tp-shloka {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: left;&lt;br /&gt;
  font-size: 0.73em;&lt;br /&gt;
  font-weight: normal;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  font-family: &#039;AdishilaDev&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  padding-left: 1.73em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.75;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Reference — orange, AdishilaDev */&lt;br /&gt;
.gr-reference {&lt;br /&gt;
  color: #e65100;&lt;br /&gt;
  font-family: &#039;AdishilaDev&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Custom tag span — subtle dashed underline only */&lt;br /&gt;
.gr-custom {&lt;br /&gt;
  border-bottom: 1px dashed #b5451b;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 34. MINERVA HEADER — orange theme + sticky ────────────────── */&lt;br /&gt;
&lt;br /&gt;
/* Kill space above header */&lt;br /&gt;
.skin-minerva body { margin-top: 0 !important; padding-top: 0 !important; }&lt;br /&gt;
.skin-minerva #mw-mf-viewport,&lt;br /&gt;
.skin-minerva #mw-mf-page-center { margin-top: 0 !important; padding-top: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* Header — orange, sticky */&lt;br /&gt;
.skin-minerva header.header-container {&lt;br /&gt;
  background: #b5451b !important;&lt;br /&gt;
  position: sticky !important;&lt;br /&gt;
  top: 0 !important;&lt;br /&gt;
  z-index: 200 !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  color: #ffffff;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .minerva-header {&lt;br /&gt;
  background: #b5451b !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  min-height: 54px !important;&lt;br /&gt;
  padding: 0 12px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.minerva-icon {&lt;br /&gt;
 &lt;br /&gt;
 filter: brightness(0) saturate(100%) invert(100%) sepia(4%) saturate(1%) hue-rotate(296deg) brightness(104%) contrast(100%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Site name text */&lt;br /&gt;
.skin-minerva .branding-box { background: transparent !important; }&lt;br /&gt;
.skin-minerva .branding-box a {&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .branding-box a span {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-size: 18px !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  font-family: system-ui, -apple-system, sans-serif !important;&lt;br /&gt;
  white-space: nowrap !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hamburger + search icons — white */&lt;br /&gt;
.skin-minerva .minerva-header label,&lt;br /&gt;
.skin-minerva .minerva-header .search-toggle {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .minerva-header svg path,&lt;br /&gt;
.skin-minerva .minerva-header svg rect,&lt;br /&gt;
.skin-minerva .minerva-header svg circle {&lt;br /&gt;
  fill: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .minerva-header .mw-ui-icon:before {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  filter: brightness(10) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Reader toolbar below Minerva header */&lt;br /&gt;
.skin-minerva #gr-static-bar {&lt;br /&gt;
  position: sticky !important;&lt;br /&gt;
  top: 54px !important;&lt;br /&gt;
  z-index: 100 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 35. MINERVA — auto-expand sections ────────────────────────── */&lt;br /&gt;
.skin-minerva .collapsible-block,&lt;br /&gt;
.skin-minerva .collapsible-heading + .collapsible-block {&lt;br /&gt;
  display: block !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .mf-section-0,&lt;br /&gt;
.skin-minerva .mf-section-1,&lt;br /&gt;
.skin-minerva .mf-section-2,&lt;br /&gt;
.skin-minerva .mf-section-3,&lt;br /&gt;
.skin-minerva .mf-section-4,&lt;br /&gt;
.skin-minerva .mf-section-5,&lt;br /&gt;
.skin-minerva .mf-section-6,&lt;br /&gt;
.skin-minerva .mf-section-7,&lt;br /&gt;
.skin-minerva .mf-section-8,&lt;br /&gt;
.skin-minerva .mf-section-9 {&lt;br /&gt;
  display: block !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .section-heading {&lt;br /&gt;
  pointer-events: none !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .section-heading .indicator {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* ── Hide MediaWiki default header user/account controls (desktop) ── */&lt;br /&gt;
#pt-createaccount,&lt;br /&gt;
#pt-login,&lt;br /&gt;
#pt-anonuserpage,&lt;br /&gt;
#pt-watchlist,&lt;br /&gt;
#p-vector-user-menu-preferences,&lt;br /&gt;
#vector-appearance-dropdown,&lt;br /&gt;
.vector-appearance-landmark,&lt;br /&gt;
#p-vector-user-menu-overflow,&lt;br /&gt;
.vector-user-links-dropdown {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Custom username dropdown ── */&lt;br /&gt;
#gr-user-dropdown {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    font-family: system-ui, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
#gr-user-trigger {&lt;br /&gt;
    display: inline-flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    gap: 6px;&lt;br /&gt;
    background: rgba(255,255,255,0.12);&lt;br /&gt;
    border: none;&lt;br /&gt;
    color: #fff;&lt;br /&gt;
    font-size: 0.9em;&lt;br /&gt;
    font-weight: 500;&lt;br /&gt;
    padding: 6px 12px;&lt;br /&gt;
    border-radius: 6px;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
#gr-user-trigger:hover { background: rgba(255,255,255,0.2); }&lt;br /&gt;
#gr-user-trigger .gr-caret { font-size: 0.7em; opacity: 0.8; }&lt;br /&gt;
&lt;br /&gt;
#gr-user-menu {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: calc(100% + 6px);&lt;br /&gt;
    right: 0;&lt;br /&gt;
    min-width: 180px;&lt;br /&gt;
    background: #fff;&lt;br /&gt;
    border: 1px solid #e0d8d2;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
    box-shadow: 0 6px 24px rgba(0,0,0,0.14);&lt;br /&gt;
    padding: 6px;&lt;br /&gt;
    z-index: 1000;&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
#gr-user-menu.gr-open { display: block; }&lt;br /&gt;
#gr-user-menu a {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    gap: 10px;&lt;br /&gt;
    padding: 10px 12px;&lt;br /&gt;
    color: #2c1810;&lt;br /&gt;
    text-decoration: none;&lt;br /&gt;
    font-size: 0.92em;&lt;br /&gt;
    border-radius: 6px;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
#gr-user-menu a:hover { background: #f7f1ed; }&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Mobile.css&amp;diff=6191</id>
		<title>MediaWiki:Mobile.css</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Mobile.css&amp;diff=6191"/>
		<updated>2026-06-11T08:47:57Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ================================================================&lt;br /&gt;
   MediaWiki:Mobile.css&lt;br /&gt;
   Loaded only on Minerva (mobile skin).&lt;br /&gt;
   ================================================================ */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ── 1. AUTO-ZOOM PREVENTION ─────────────────────────────────────&lt;br /&gt;
   iOS and Android zoom the viewport when a focused input has&lt;br /&gt;
   font-size &amp;lt; 16px. Every input on the site must be &amp;gt;= 16px.&lt;br /&gt;
   ──────────────────────────────────────────────────────────────── */&lt;br /&gt;
&lt;br /&gt;
/* Reader toolbar search input */&lt;br /&gt;
#gr-search-panel input {&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* New document dialog inputs */&lt;br /&gt;
#gr-newdoc-overlay input,&lt;br /&gt;
#gr-newdoc-overlay select,&lt;br /&gt;
#gr-newdoc-overlay textarea {&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Annotation composer inputs (gr_annotations gadget) */&lt;br /&gt;
.gra-composer-input,&lt;br /&gt;
.gra-fb-select,&lt;br /&gt;
#gra-nt-input,&lt;br /&gt;
#gra-bm-input,&lt;br /&gt;
#gra-fb-text,&lt;br /&gt;
#gra-fb-email {&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ── 2. LONG-PRESS CONTEXT MENU SUPPRESSION ──────────────────────&lt;br /&gt;
   -webkit-touch-callout: none  → stops iOS &amp;quot;Copy / Look Up / Share&amp;quot;&lt;br /&gt;
                                   popup on long press of buttons&lt;br /&gt;
   user-select: none            → prevents text selection on button labels&lt;br /&gt;
   touch-action: manipulation   → removes 300ms tap delay and prevents&lt;br /&gt;
                                   context menu on long press (iOS + Android)&lt;br /&gt;
   ──────────────────────────────────────────────────────────────── */&lt;br /&gt;
&lt;br /&gt;
/* Sanskrit keyboard keys */&lt;br /&gt;
.gr-kb-key,&lt;br /&gt;
.gr-kb-key-iast,&lt;br /&gt;
.gr-kb-action,&lt;br /&gt;
.gr-kb {&lt;br /&gt;
  -webkit-touch-callout: none;&lt;br /&gt;
  user-select: none;&lt;br /&gt;
  touch-action: manipulation;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Annotation FAB buttons and mobile action bar */&lt;br /&gt;
.gra-mob-btn,&lt;br /&gt;
.gra-fab-btn,&lt;br /&gt;
#gra-toggle,&lt;br /&gt;
#gra-mob-feedback,&lt;br /&gt;
#gra-mob-note,&lt;br /&gt;
#gra-mob-bookmark,&lt;br /&gt;
#gra-mob-dismiss {&lt;br /&gt;
  -webkit-touch-callout: none;&lt;br /&gt;
  user-select: none;&lt;br /&gt;
  touch-action: manipulation;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Reader toolbar buttons */&lt;br /&gt;
#gr-static-bar .gr-btn,&lt;br /&gt;
#gr-static-bar .gr-icon-btn {&lt;br /&gt;
  -webkit-touch-callout: none;&lt;br /&gt;
  user-select: none;&lt;br /&gt;
  touch-action: manipulation;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* siteNav FAB buttons */&lt;br /&gt;
#se-docnav-btn,&lt;br /&gt;
#se-scrolltop {&lt;br /&gt;
  -webkit-touch-callout: none;&lt;br /&gt;
  user-select: none;&lt;br /&gt;
  touch-action: manipulation;&lt;br /&gt;
}&lt;br /&gt;
Template style fixes for Mobile&lt;br /&gt;
.mw-parser-output h2, .mw-parser-output .mw-heading2 h2 {&lt;br /&gt;
  margin-top: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Spacing fixes for headings */&lt;br /&gt;
.skin-minerva .mw-parser-output h2,&lt;br /&gt;
.skin-minerva .mw-parser-output .mw-heading2 h2,&lt;br /&gt;
.skin-minerva .mw-parser-output .mw-heading2 {&lt;br /&gt;
    margin-top: 8px !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .mw-parser-output .mw-heading2 + p,&lt;br /&gt;
.skin-minerva .mw-parser-output h2 + p {&lt;br /&gt;
    margin-top: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Also reduce Minerva&#039;s paragraph bottom margin inside content */&lt;br /&gt;
.skin-minerva .mw-parser-output p {&lt;br /&gt;
    padding-bottom: 0.25em !important;&lt;br /&gt;
    margin: 0 0 0.25em 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .section-heading,&lt;br /&gt;
.skin-minerva .collapsible-heading {&lt;br /&gt;
    margin: 0 !important;&lt;br /&gt;
    padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.page-Special_UserLogin .navigation-drawer,&lt;br /&gt;
.page-Special_UserLogin .header-container .toggle-list__checkbox,&lt;br /&gt;
.page-Special_UserLogin #mw-mf-main-menu-button,&lt;br /&gt;
.page-Special_CreateAccount .navigation-drawer,&lt;br /&gt;
.page-Special_CreateAccount #mw-mf-main-menu-button {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.css&amp;diff=6190</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Common.css&amp;diff=6190"/>
		<updated>2026-06-11T08:30:24Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ═══════════════════════════════════════════════════════════════════&lt;br /&gt;
   MediaWiki:Common.css — Anandamakaranda&lt;br /&gt;
   Clean rebuild — works on Vector (desktop) + Minerva (mobile)&lt;br /&gt;
   ═══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
&lt;br /&gt;
/* ── 1. CSS VARIABLES ──────────────────────────────────────────── */&lt;br /&gt;
:root {&lt;br /&gt;
  --maroon:       #be100e;&lt;br /&gt;
  --orange:       #e65100;&lt;br /&gt;
  --light-orange: #f57c00;&lt;br /&gt;
  --dark-gray:    #555;&lt;br /&gt;
  --light-gray:   #eee;&lt;br /&gt;
  --muted-gray:   #888;&lt;br /&gt;
  --text:         #1a1a1a;&lt;br /&gt;
  --brown:        #a07040;&lt;br /&gt;
  --light-brown:  #e8d4a0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 2. FONTS ──────────────────────────────────────────────────── */&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;Adishila&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/adishila/Adishila.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: normal; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;Adishila&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/adishila/AdishilaBold.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: bold; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;AdishilaDev&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/AdishilaDev.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: normal; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;AdishilaDev&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/AdishilaDeBv.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: bold; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;AdishilaDevGuru&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/AdishilaDevGuru.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: bold; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &amp;quot;Noto Sans Devanagari&amp;quot;;&lt;br /&gt;
  src: url(&amp;quot;/resources/fonts/Noto_Sans_Devanagari/NotoSansDevanagari.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;);&lt;br /&gt;
  font-weight: normal; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-content-text {&lt;br /&gt;
  font-family: &#039;Adishila&#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output {&lt;br /&gt;
  font-size: 22px;&lt;br /&gt;
  line-height: 1.7;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  max-width: 100%;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  margin: 0; padding: 0;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Danda marks wrap issue&lt;br /&gt;
.mw-parser-output { overflow-wrap: anywhere; }&lt;br /&gt;
&lt;br /&gt;
/* ── 4. HIDE ELEMENTS (both skins) ────────────────────────────── */&lt;br /&gt;
/* Page title */&lt;br /&gt;
h1.firstHeading, #firstHeading, .mw-page-title-main { display: none !important; }&lt;br /&gt;
/* Footer */&lt;br /&gt;
#footer, .mw-footer, .vector-footer, .vector-footer-container,&lt;br /&gt;
footer, .minerva-footer { display: none !important; }&lt;br /&gt;
/* Categories */&lt;br /&gt;
.catlinks, #catlinks, .mw-normal-catlinks, .mw-hidden-catlinks { display: none !important; }&lt;br /&gt;
/* Edit section links */&lt;br /&gt;
.mw-editsection, .mw-editsection-bracket { display: none !important; }&lt;br /&gt;
/* Site notice */&lt;br /&gt;
#siteNotice { display: none !important; }&lt;br /&gt;
/* Watchlist */&lt;br /&gt;
li#pt-watchlist, li#pt-watchlist-kbd { display: none !important; }&lt;br /&gt;
/* Appearance panel */&lt;br /&gt;
#vector-appearance, #vector-appearance-pinned-container,&lt;br /&gt;
#vector-appearance-unpinned-container, .mw-portlet-appearance,&lt;br /&gt;
#p-appearance, [aria-controls=&amp;quot;vector-appearance&amp;quot;] { display: none !important; }&lt;br /&gt;
/* Vector hamburger + sidebar */&lt;br /&gt;
#mw-sidebar-button, .vector-main-menu, .vector-main-menu-container,&lt;br /&gt;
.vector-main-menu-landmark, #vector-main-menu-dropdown { display: none !important; }&lt;br /&gt;
/* Vector search box (we use our own) */&lt;br /&gt;
#p-search, .vector-search-box, .vector-search-box-vue,&lt;br /&gt;
.vector-search-box-collapses { display: none !important; }&lt;br /&gt;
/* Vector page toolbar */&lt;br /&gt;
.vector-page-toolbar, .vector-page-toolbar-container { display: none !important; }&lt;br /&gt;
/* Vector page tools */&lt;br /&gt;
.vector-page-tools { display: none !important; }&lt;br /&gt;
/* Empty paragraphs */&lt;br /&gt;
.mw-parser-output p:empty,&lt;br /&gt;
.mw-parser-output &amp;gt; div &amp;gt; p:empty,&lt;br /&gt;
.mw-heading + p:empty,&lt;br /&gt;
.adhyaya-block + p:empty,&lt;br /&gt;
.verse-block + p:empty { display: none !important; margin: 0 !important; }&lt;br /&gt;
/* Empty divs */&lt;br /&gt;
.adhyaya-block:empty, .mw-parser-output div:empty { display: none !important; }&lt;br /&gt;
/* Cargo hidden */&lt;br /&gt;
.cargo-store-only { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 5. VECTOR HEADER (desktop only) ──────────────────────────── */&lt;br /&gt;
.vector-header-container {&lt;br /&gt;
  background: #b5451b !important;&lt;br /&gt;
  border-bottom: 1px solid rgba(255,255,255,0.12);&lt;br /&gt;
}&lt;br /&gt;
.vector-header {&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  justify-content: space-between !important;&lt;br /&gt;
  padding-left: 20px !important;&lt;br /&gt;
  padding-right: 20px !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-header-start {&lt;br /&gt;
  flex: 0 0 auto !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  gap: 12px;&lt;br /&gt;
}&lt;br /&gt;
.vector-header-end {&lt;br /&gt;
  flex: 0 0 auto !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  margin-left: auto;&lt;br /&gt;
}&lt;br /&gt;
.mw-logo { display: flex !important; align-items: center; opacity: 1 !important; }&lt;br /&gt;
.mw-logo-icon { width: 24px; height: 24px; }&lt;br /&gt;
&lt;br /&gt;
/* Site name */&lt;br /&gt;
.mw-logo-wordmark {&lt;br /&gt;
  font-size: 0 !important;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  flex-direction: column !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-logo-wordmark::before {&lt;br /&gt;
  content: &#039;Anandamakaranda&#039;;&lt;br /&gt;
  font-size: 17px;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-family: system-ui, -apple-system, sans-serif;&lt;br /&gt;
  letter-spacing: -0.01em;&lt;br /&gt;
}&lt;br /&gt;
.mw-logo-wordmark::after {&lt;br /&gt;
  content: &amp;quot;A Digital Archive of Dvaita Vedanta Literature&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  font-weight: 400;&lt;br /&gt;
  color: rgba(255,255,255,0.85);&lt;br /&gt;
  letter-spacing: 0.3px;&lt;br /&gt;
  margin-top: 1px;&lt;br /&gt;
  font-family: sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Header right links */&lt;br /&gt;
.vector-header-end &amp;gt; *:not(#p-search) { color: rgba(255,255,255,0.9) !important; }&lt;br /&gt;
.vector-user-links a { color: rgba(255,255,255,0.9) !important; }&lt;br /&gt;
&lt;br /&gt;
/* User icon white */&lt;br /&gt;
.vector-user-menu-container .vector-icon svg,&lt;br /&gt;
.vector-user-menu-container .vector-icon svg path,&lt;br /&gt;
.vector-user-menu-container .vector-icon svg circle {&lt;br /&gt;
  fill: #fff !important; stroke: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-user-links .vector-user-menu-chevron .vector-icon svg,&lt;br /&gt;
.vector-user-links .vector-user-menu-chevron .vector-icon svg path {&lt;br /&gt;
  fill: rgba(255,255,255,0.9) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* User dropdown — dark text on white card */&lt;br /&gt;
.vector-user-menu .mw-list-item a,&lt;br /&gt;
.vector-user-menu .vector-menu-content-list a,&lt;br /&gt;
#p-personal .vector-menu-content a,&lt;br /&gt;
.mw-portlet-personal .vector-menu-content a { color: #202122 !important; }&lt;br /&gt;
.vector-user-menu .mw-list-item a:hover { color: var(--light-orange) !important; }&lt;br /&gt;
&lt;br /&gt;
/* Suppress Vector sticky header clone */&lt;br /&gt;
.vector-sticky-header { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* Suppress body top padding that Vector adds */&lt;br /&gt;
.mw-body { margin-top: 0 !important; padding-top: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 6. VECTOR TOC (desktop sidebar) ──────────────────────────── */&lt;br /&gt;
.vector-toc .vector-toc-numb { display: none !important; }&lt;br /&gt;
.vector-toc .vector-toc-title {&lt;br /&gt;
  font-size: 0.72em !important; font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase; letter-spacing: 0.08em;&lt;br /&gt;
  color: var(--text) !important;&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, system-ui, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-toc .vector-toc-text {&lt;br /&gt;
  white-space: normal !important; word-break: break-word !important;&lt;br /&gt;
  overflow-wrap: anywhere !important; display: inline !important;&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, system-ui, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-toc a, .vector-toc .vector-toc-link {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, system-ui, sans-serif !important;&lt;br /&gt;
  color: var(--text) !important; text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-toc a:hover { color: var(--light-orange) !important; }&lt;br /&gt;
.vector-toc .vector-toc-list-item-active .vector-toc-link,&lt;br /&gt;
.vector-toc .vector-toc-list-item-active .vector-toc-link * {&lt;br /&gt;
  color: var(--light-orange) !important; font-weight: 700 !important;&lt;br /&gt;
}&lt;br /&gt;
.vector-toc .cdx-button.vector-toc-toggle {&lt;br /&gt;
  background: none !important; border: none !important;&lt;br /&gt;
  box-shadow: none !important; color: var(--text) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 7. HEADINGS ───────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output h1, .mw-parser-output h2, .mw-parser-output h3, .mw-parser-output h4,&lt;br /&gt;
.mw-parser-output .mw-heading h1, .mw-parser-output .mw-heading h2,&lt;br /&gt;
.mw-parser-output .mw-heading h3 {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  border: none !important; padding: 0 !important; background: none !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output .mw-heading { border: none !important; margin: 0; padding: 0; }&lt;br /&gt;
&lt;br /&gt;
.mw-heading, .mw-heading2, .mw-heading3 { text-align:center; }&lt;br /&gt;
.mw-parser-output h2, .mw-parser-output .mw-heading2 h2 {&lt;br /&gt;
  font-size: 1.2em !important; font-weight: 500 !important;&lt;br /&gt;
  color: var(--maroon) !important; line-height: 1.8;&lt;br /&gt;
  margin: 24px 0 4px !important;&lt;br /&gt;
  border-bottom: 2px dotted var(--maroon) !important;&lt;br /&gt;
  width: 75%; font-family: &#039;AdishilaDev&#039;; text-align: center;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output h3, .mw-parser-output .mw-heading3 h3 {&lt;br /&gt;
  font-size: 1em !important; font-weight: 500 !important;&lt;br /&gt;
  color: var(--orange) !important; line-height: 1.5;&lt;br /&gt;
  margin: 24px 0 8px !important;&lt;br /&gt;
  border-bottom: 1px dotted var(--orange) !important;&lt;br /&gt;
  width: 55%; font-family: &#039;AdishilaDev&#039;; text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 8. PARAGRAPHS ─────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output p { margin: 0 0 0.35rem !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 9. DOCUMENT TITLE ─────────────────────────────────────────── */&lt;br /&gt;
.gr-doc-title {&lt;br /&gt;
  font-size: 2em; font-weight: 500; color: var(--maroon);&lt;br /&gt;
  line-height: 1.4; margin: 0 0 16px; border: none !important;&lt;br /&gt;
  text-align:center; font-family: &#039;AdishilaDev&#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 10. VERSE BLOCKS ──────────────────────────────────────────── */&lt;br /&gt;
.shloka-block { display: block; text-align: left; margin: 3px 0 0; padding-bottom: 0.5em; }&lt;br /&gt;
.shloka-line { display: block; font-style: normal; color: #333; line-height: 1.35; margin: 0; }&lt;br /&gt;
.verse-block { display: block; margin: 6px 0 0; text-align: left; }&lt;br /&gt;
.verse-block .shloka-block { text-align: left; margin: 0; }&lt;br /&gt;
.verse-block .shloka-line {&lt;br /&gt;
  display: block; font-style: italic; color: #c65;&lt;br /&gt;
  font-weight: 500; line-height: 1.35; margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.verse-block + p { display: none !important; margin: 0 !important; }&lt;br /&gt;
.mw-parser-output .verse-block,&lt;br /&gt;
.mw-parser-output .shloka-block { margin-top: 2px !important; margin-bottom: 2px !important; }&lt;br /&gt;
&lt;br /&gt;
.gr-verse-text, .verse-line, .verse-text {&lt;br /&gt;
  color: #b5451b; font-style: italic; line-height: 1.5; display: block; margin: 0.1em 0;&lt;br /&gt;
}&lt;br /&gt;
.gr-verse-type-sutra .gr-verse-text,&lt;br /&gt;
.verse-block[data-type=&amp;quot;sutra&amp;quot;] .verse-line { font-style: normal; font-weight: 600; color: #b5451b; }&lt;br /&gt;
&lt;br /&gt;
/* ── 11. UVACHA ────────────────────────────────────────────────── */&lt;br /&gt;
.uvacha-block {&lt;br /&gt;
  display: block; font-weight: bold; color: #c65;&lt;br /&gt;
  margin: 0.5rem 0 0; padding: 2px 0 2px 12px;&lt;br /&gt;
  border-left: 3px solid #c65; font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
.uvacha-block + .verse-block { margin-top: 2px; }&lt;br /&gt;
.gr-uvaaca, .uvaaca {&lt;br /&gt;
  color: #b5451b; font-weight: 600; font-size: 0.92em; margin: 0.5em 0 0.2em 0; display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 12. BHASHYAM ──────────────────────────────────────────────── */&lt;br /&gt;
.bhashyam-block {&lt;br /&gt;
  display: block; font-size: 1em; line-height: 1.6; color: #555;&lt;br /&gt;
  margin: 0.25em 0 0.35em 48px; padding: 0; border: none; background: transparent;&lt;br /&gt;
}&lt;br /&gt;
.gr-bhashyam, .commentary-bhashyam {&lt;br /&gt;
  color: #222; font-style: normal; line-height: 1.75; margin: 0.3em 0 0.5em 0;&lt;br /&gt;
}&lt;br /&gt;
.gr-leading-bhashya { font-style: italic; color: #555; margin: 0.4em 0 0.5em 0; }&lt;br /&gt;
&lt;br /&gt;
/* ── 13. PADYA ─────────────────────────────────────────────────── */&lt;br /&gt;
.padya-block {&lt;br /&gt;
  display: block; font-size: 1em; line-height: 1.75; color: #c65 !important;&lt;br /&gt;
  font-style: italic; font-weight: 500; margin: 0.4em 0 0.6em 60px;&lt;br /&gt;
}&lt;br /&gt;
.gr-padapatha { font-size: 0.9em; color: #555; margin: 0.2em 0 0.3em 0.8em; }&lt;br /&gt;
&lt;br /&gt;
/* ── 14. TEEKA ─────────────────────────────────────────────────── */&lt;br /&gt;
.teeka-block {&lt;br /&gt;
  padding: 6px 10px 8px; margin: 0.3em 0; line-height: 1.6; color: #555;&lt;br /&gt;
}&lt;br /&gt;
.teeka-title {&lt;br /&gt;
  font-family: &#039;AdishilaDev&#039;;, sans-serif !important;&lt;br /&gt;
  font-size: 1.75em; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase;&lt;br /&gt;
  margin-bottom: 4px; padding-bottom: 3px;&lt;br /&gt;
}&lt;br /&gt;
.teeka-body .shloka-block {&lt;br /&gt;
  margin: 0.4em 0; padding: 0.3em 0.6em; font-family: &#039;AdishilaDev&#039;;&lt;br /&gt;
}&lt;br /&gt;
.teeka-body .shloka-line { font-style: italic; font-size: 0.97em; font-family: &#039;AdishilaDev&#039;; }&lt;br /&gt;
&lt;br /&gt;
/* ── 15. PRATEEKA / MOOLA ──────────────────────────────────────── */&lt;br /&gt;
.gr-prateeka { font-weight: bold; font-style: normal; color: #333; }&lt;br /&gt;
.gr-mulaprateeka-block {&lt;br /&gt;
  display: block; font-weight: bold; font-style: normal;&lt;br /&gt;
  text-align: center; color: #333; margin: 0.7em 0 0.3em; line-height: 1.5;&lt;br /&gt;
}&lt;br /&gt;
.gr-moola { font-weight: bold; font-style: italic; color: #c65; }&lt;br /&gt;
&lt;br /&gt;
/* ── 16. ADHYAYA ───────────────────────────────────────────────── */&lt;br /&gt;
.adhyaya-block { margin: 0 0 4px; }&lt;br /&gt;
.adhyaya-trans { font-size: 0.9em; color: #666; margin: 2px 0 0; }&lt;br /&gt;
.adhyaya-intro { margin-top: 8px; line-height: 1.75; color: #555; }&lt;br /&gt;
.introduction p { color: var(--dark-gray); font-weight: 400; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.introduction { padding-bottom: 0.5em; text-align: justify; }&lt;br /&gt;
&lt;br /&gt;
/* ── 17. NYAYA / PRASNA ────────────────────────────────────────── */&lt;br /&gt;
.nyaya-block { margin: 32px 0; padding-top: 12px; border-top: 1px solid #eee; }&lt;br /&gt;
.nyaya-title {&lt;br /&gt;
  font-size: 1em; font-weight: 500; color: var(--orange);&lt;br /&gt;
  margin-bottom: 0.4rem; border-bottom: 1px dotted var(--orange); width: 50%;&lt;br /&gt;
}&lt;br /&gt;
.nyaya-body { color: #555; line-height: 1.75; margin-top: 0.5rem; }&lt;br /&gt;
.prasna-block { margin: 32px 0; padding-top: 12px; border-top: 1px solid #eee; }&lt;br /&gt;
.prasna-title {&lt;br /&gt;
  font-size: 1em; font-weight: 500; color: var(--orange);&lt;br /&gt;
  margin-bottom: 0.4rem; border-bottom: 1px dotted var(--orange); width: 50%;&lt;br /&gt;
}&lt;br /&gt;
.prasna-question, .prasna-answer { color: #555; line-height: 1.75; margin-top: 0.5rem; }&lt;br /&gt;
.prasna-answer { margin-left: 60px; }&lt;br /&gt;
&lt;br /&gt;
/* ── 18. VYAKHYA ELEMENTS ──────────────────────────────────────── */&lt;br /&gt;
.gr-vyakhya-head, .gr-section-head {&lt;br /&gt;
  font-size: 0.9em; font-weight: 700; color: #6a3e00;&lt;br /&gt;
  margin: 0.35em 0 0.15em; font-family: inherit; border: none; padding: 0;&lt;br /&gt;
}&lt;br /&gt;
.gr-avataranika {&lt;br /&gt;
  font-style: italic; color: #444; margin: 0.2em 0 0.5em 0.5em;&lt;br /&gt;
  padding-left: 0.6em; border-left: 2px solid #c9a96e; line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
.gr-vyakhya-pada {&lt;br /&gt;
  font-size: 0.88em; color: #555; background: #fafafa;&lt;br /&gt;
  border: 1px solid #e8e0d0; border-radius: 4px; padding: 0.5em 0.8em;&lt;br /&gt;
  margin: 0.5em 0; line-height: 1.5; white-space: pre-wrap;&lt;br /&gt;
}&lt;br /&gt;
.gr-vyakhya-gadya {&lt;br /&gt;
  font-weight: bold; font-size: 0.95em; text-align: center;&lt;br /&gt;
  color: #8b1a1a; margin: 0.2em 0; line-height: 1.6; letter-spacing: 0.03em;&lt;br /&gt;
}&lt;br /&gt;
.gr-vyakhya-para { margin: 0 0 0.5em 0; line-height: 1.65; color: #444; }&lt;br /&gt;
.gr-embedded-bhashya { margin: 0.2em 0 0.2em 1em; line-height: 1.6; }&lt;br /&gt;
.gr-gadya {&lt;br /&gt;
  display: block !important; font-size: 0.96em !important; font-weight: 600 !important;&lt;br /&gt;
  font-style: normal !important; color: #555 !important; margin: 16px 0 4px !important;&lt;br /&gt;
  border-bottom: 1px solid #ddd !important; width: 60%; line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
.gr-author-note {&lt;br /&gt;
  font-style: italic; color: var(--maroon); text-align: center; font-size: 0.9em;&lt;br /&gt;
  margin: 0.8em 0 0.4em 0; border-top: 1px solid #ddd; padding-top: 0.4em; font-family: &#039;AdishilaDev&#039;&lt;br /&gt;
}&lt;br /&gt;
.gr-devatachandas { font-size: 0.82em; color: #777; margin: 0.4em 0 0.2em 0; }&lt;br /&gt;
.gr-vargikarana   { font-size: 0.82em; color: #888; margin: 0.5em 0 0.1em 0; }&lt;br /&gt;
&lt;br /&gt;
/* ── 20. BHASHYA COLLECTION ────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output .bhashya-collection { margin: 0; padding: 0; }&lt;br /&gt;
.mw-parser-output .bhashya + p:empty,&lt;br /&gt;
.mw-parser-output .verse + p:empty,&lt;br /&gt;
.mw-parser-output .bhashya-collection + p:empty,&lt;br /&gt;
.mw-parser-output .pramana + p:empty,&lt;br /&gt;
.mw-parser-output .author-note + p:empty { display: none !important; margin: 0 !important; height: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 21. VERSE ACTIONS ─────────────────────────────────────────── */&lt;br /&gt;
.verse-actions {&lt;br /&gt;
  display: flex; flex-direction: row; align-items: center;&lt;br /&gt;
  gap: 6px; margin-top: 4px; justify-content: center;&lt;br /&gt;
}&lt;br /&gt;
.verse-action-btn {&lt;br /&gt;
  display: inline-flex; align-items: center; justify-content: center;&lt;br /&gt;
  padding: 4px; border-radius: 6px; cursor: pointer; opacity: 0.75; transition: all 0.2s;&lt;br /&gt;
}&lt;br /&gt;
.verse-action-btn:hover { opacity: 1; background-color: rgba(0,0,0,0.05); }&lt;br /&gt;
.icon { display: inline-block; width: 18px; height: 18px; background-repeat: no-repeat; background-position: center; background-size: contain; }&lt;br /&gt;
.icon-copy       { background-image: url(&#039;/images/copy.svg&#039;); }&lt;br /&gt;
.icon-commentary { background-image: url(&#039;/images/commentary.svg&#039;); }&lt;br /&gt;
.copy-tooltip {&lt;br /&gt;
  position: absolute; bottom: calc(100% + 8px); left: 50%;&lt;br /&gt;
  transform: translateX(-50%) translateY(4px);&lt;br /&gt;
  white-space: nowrap; pointer-events: none; z-index: 9999;&lt;br /&gt;
  display: inline-flex; align-items: center; padding: 2px 8px; border-radius: 999px;&lt;br /&gt;
  font-size: 0.75rem; font-weight: 500; background: rgba(30,30,30,0.82); color: #fff;&lt;br /&gt;
  opacity: 0; transition: opacity 0.2s, transform 0.2s;&lt;br /&gt;
}&lt;br /&gt;
.copy-tooltip.copy-tooltip-visible { opacity: 1; transform: translateX(-50%) translateY(0); }&lt;br /&gt;
&lt;br /&gt;
/* ── 22. CODE / PRE ────────────────────────────────────────────── */&lt;br /&gt;
pre, code, .mw-code, tt, kbd {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif ;&lt;br /&gt;
  background-color: transparent !important; border: none !important; padding: 0.3em 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-collapsible, .mw-collapsible-content, blockquote, .quotebox {&lt;br /&gt;
  background-color: transparent !important; border: none !important;&lt;br /&gt;
  font-style: normal !important; padding: 0 !important; margin-left: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 23. INLINE TOC BOX (wikitext __TOC__) ─────────────────────── */&lt;br /&gt;
.toc {&lt;br /&gt;
  display: block !important; background: #fffdf5; border: 1px solid #e8c88a;&lt;br /&gt;
  border-radius: 8px; padding: 12px 16px; margin: 0 0 24px 0;&lt;br /&gt;
  width: fit-content; min-width: 220px; max-width: 420px;&lt;br /&gt;
  font-size: 0.9em; line-height: 2;&lt;br /&gt;
}&lt;br /&gt;
.toc h2, .toc .toctitle {&lt;br /&gt;
  font-size: 0.85em !important; font-weight: 600 !important; color: var(--text) !important;&lt;br /&gt;
  border: none !important; margin: 0 0 6px !important; text-transform: uppercase; letter-spacing: 0.05em;&lt;br /&gt;
}&lt;br /&gt;
.toc ul { margin: 0 !important; padding-left: 1.2em !important; list-style: none !important; }&lt;br /&gt;
.toc li { margin: 0; padding: 0; }&lt;br /&gt;
.toc a { color: var(--text) !important; text-decoration: none !important; }&lt;br /&gt;
.toc a:hover { color: var(--light-orange) !important; }&lt;br /&gt;
.toc .toclevel-1 &amp;gt; a { font-weight: 600; }&lt;br /&gt;
.tocnumber { display: none; }&lt;br /&gt;
&lt;br /&gt;
/* ── 24. DOC TEEKAS + TOC NAV ──────────────────────────────────── */&lt;br /&gt;
.gr-doc-teekas { margin-bottom: 1em; }&lt;br /&gt;
.gr-doc-teekas + p:empty { display: none !important; margin: 0 !important; height: 0 !important; }&lt;br /&gt;
.toc-main-links { display: flex; gap: 6px; padding: 5px; align-items: center; margin-bottom: 4px; }&lt;br /&gt;
.toc-main-link-item {&lt;br /&gt;
  font-size: 0.9em; color: var(--text); text-decoration: none; padding: 4px 8px;&lt;br /&gt;
  border-radius: 6px; background: rgba(0,0,0,0.05); transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.toc-main-link-item:hover { background: rgba(0,0,0,0.10) !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 25. MAIN PAGE ─────────────────────────────────────────────── */&lt;br /&gt;
body.page-Main_Page #mw-panel,&lt;br /&gt;
body.page-Main_Page .vector-sidebar-container { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
.gr-home { max-width: 1080px; margin: 0 auto; padding: 0; }&lt;br /&gt;
.gr-home-page-title {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif !important;&lt;br /&gt;
  text-align: center; font-size: 1.8em; font-weight: 500; color: #1a2e40; margin: 24px 0 32px;&lt;br /&gt;
}&lt;br /&gt;
.gr-home-grid { display: flex; flex-wrap: wrap; gap: 20px; margin-bottom: 32px; }&lt;br /&gt;
.gr-home-card {&lt;br /&gt;
  background: #fff; border: 1px solid #e8e4df; border-radius: 10px;&lt;br /&gt;
  box-shadow: 0 2px 8px rgba(0,0,0,0.07);&lt;br /&gt;
  padding: 18px 20px 20px; flex: 1 1 280px; min-width: 240px; max-width: 360px;&lt;br /&gt;
}&lt;br /&gt;
.gr-home-card-title {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif !important;&lt;br /&gt;
  font-size: 1em; font-weight: 600; color: #1a2e40; text-align: center;&lt;br /&gt;
  padding-bottom: 10px; margin-bottom: 12px; border-bottom: 1.5px solid #c0392b;&lt;br /&gt;
}&lt;br /&gt;
.gr-home-card ol { margin: 0; padding-left: 1.4em; list-style: decimal; }&lt;br /&gt;
.gr-home-card li { font-size: 0.95em; line-height: 1.85; color: #333; }&lt;br /&gt;
.gr-home-card li a { color: #c0392b; text-decoration: none; }&lt;br /&gt;
.gr-home-card li a:hover { text-decoration: underline; }&lt;br /&gt;
.gr-home-card li a.new { color: #c08080; }&lt;br /&gt;
.gr-home-note { font-size: 0.82em; color: #888; }&lt;br /&gt;
.gr-home-group-label {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif !important;&lt;br /&gt;
  font-size: 1.1em; font-weight: 600; color: #1a2e40; text-align: center;&lt;br /&gt;
  margin: 36px 0 16px; padding-bottom: 8px; border-bottom: 2px solid #c0392b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 26. TOGGLE BUTTONS ────────────────────────────────────────── */&lt;br /&gt;
.gr-home-toggle { display: flex; gap: 8px; margin: 0 0 24px; justify-content: center; }&lt;br /&gt;
.gr-toggle-btn {&lt;br /&gt;
  font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  font-size: 0.88em; padding: 6px 20px; border: 1.5px solid #c0392b; border-radius: 20px;&lt;br /&gt;
  background: transparent; color: #c0392b; cursor: pointer; user-select: none; transition: background 0.15s, color 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gr-toggle-btn:hover { background: #fdf0ed; }&lt;br /&gt;
.gr-toggle-btn.gr-toggle-active { background: #c0392b; color: #fff; }&lt;br /&gt;
&lt;br /&gt;
/* ── 27. SCRIPT BAR ────────────────────────────────────────────── */&lt;br /&gt;
.gr-script-bar { margin: 0 0 20px; font-size: 0.8em; color: #888; display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }&lt;br /&gt;
.gr-script-label { font-family: system-ui, sans-serif; color: #aaa; }&lt;br /&gt;
.gr-script-btn { font-family: &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif; color: #c0392b !important; text-decoration: underline dotted !important; cursor: pointer; }&lt;br /&gt;
.gr-script-btn.active { color: #888 !important; text-decoration: none !important; cursor: default; }&lt;br /&gt;
&lt;br /&gt;
/* ── 28. MODALS ────────────────────────────────────────────────── */&lt;br /&gt;
.grantha-modal { position: fixed; inset: 0; background: rgba(0,0,0,0.35); display: flex; align-items: center; justify-content: center; z-index: 10000; }&lt;br /&gt;
.grantha-modal-box { background: white; padding: 20px; border-radius: 10px; width: 300px; }&lt;br /&gt;
.gm-title { font-weight: bold; margin-bottom: 10px; }&lt;br /&gt;
.gm-actions { display: flex; justify-content: flex-end; gap: 10px; margin-top: 12px; }&lt;br /&gt;
&lt;br /&gt;
/* ── 29. LOGIN PAGE ────────────────────────────────────────────── */&lt;br /&gt;
body.page-Special_UserLogin .vector-search-box,&lt;br /&gt;
body.page-Special_UserLogin #p-search { display: none !important; }&lt;br /&gt;
body.page-Special_UserLogin #content { max-width: 420px; margin: 40px auto !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 30. SPECIAL PAGES ─────────────────────────────────────────── */&lt;br /&gt;
body.ns-special #footer, body.ns-special .mw-footer,&lt;br /&gt;
body.ns-special .vector-footer { display: none !important; }&lt;br /&gt;
body.ns-special .vector-page-tools { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 31. MINERVA (mobile) ──────────────────────────────────────── */&lt;br /&gt;
.skin-minerva .mw-parser-output {&lt;br /&gt;
  font-size: 18px !important;&lt;br /&gt;
  line-height: 1.8 !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .mw-parser-output h2,&lt;br /&gt;
.skin-minerva .mw-parser-output .mw-heading2 h2 {&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .mw-parser-output h3,&lt;br /&gt;
.skin-minerva .mw-parser-output .mw-heading3 h3 {&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .bhashyam-block { margin-left: 16px !important; }&lt;br /&gt;
.skin-minerva .prasna-answer  { margin-left: 16px !important; }&lt;br /&gt;
.skin-minerva .padya-block    { margin-left: 16px !important; }&lt;br /&gt;
/* Home grid single column on Minerva */&lt;br /&gt;
.skin-minerva .gr-home-grid {&lt;br /&gt;
  flex-direction: column !important;&lt;br /&gt;
  flex-wrap: nowrap !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .gr-home-card {&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
  min-width: unset !important;&lt;br /&gt;
  flex: 0 0 auto !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
/* Hide things that should be hidden on mobile too */&lt;br /&gt;
.skin-minerva .catlinks,&lt;br /&gt;
.skin-minerva #catlinks { display: none !important; }&lt;br /&gt;
.skin-minerva .mw-editsection { display: none !important; }&lt;br /&gt;
/* Minerva already has its own TOC — hide our inline .toc */&lt;br /&gt;
.skin-minerva .toc { display: none !important; }&lt;br /&gt;
/* ReaderToolbar on Minerva */&lt;br /&gt;
.skin-minerva #gr-static-bar {&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  min-height: 52px !important;&lt;br /&gt;
  overflow-x: auto !important;&lt;br /&gt;
  overflow-y: hidden !important;&lt;br /&gt;
  scrollbar-width: none !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva #gr-static-bar::-webkit-scrollbar { display: none !important; }&lt;br /&gt;
.skin-minerva .gr-controls .gr-btn {&lt;br /&gt;
  height: 44px !important;&lt;br /&gt;
  min-width: 44px !important;&lt;br /&gt;
  font-size: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .gr-btn-staging { display: none !important; }&lt;br /&gt;
.skin-minerva .gr-controls .gr-sep { display: none !important; }&lt;br /&gt;
/* Minerva already shows page title — don&#039;t double-hide */&lt;br /&gt;
.skin-minerva h1.firstHeading { display: block !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── 32. PRINT ─────────────────────────────────────────────────── */&lt;br /&gt;
@media print {&lt;br /&gt;
  #gr-static-bar, .gr-controls, .vector-header-container { display: none !important; }&lt;br /&gt;
  .mw-parser-output { font-size: 11pt !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 33. TYPOGRAPHY CLASSES ────────────────────────────────────── */&lt;br /&gt;
&lt;br /&gt;
/* Heading — center, maroon, AdishilaDevGuru */&lt;br /&gt;
.gr-heading {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  font-size: 1.09em;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  color: #be100e;&lt;br /&gt;
  font-family: &#039;AdishilaDevGuru&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  line-height: 1.4;&lt;br /&gt;
  margin: 0.45em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Sub-heading — center, orange, AdishilaDevGuru */&lt;br /&gt;
.gr-sub-heading {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  font-size: 0.73em;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  color: #e65100;&lt;br /&gt;
  font-family: &#039;AdishilaDevGuru&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
  margin: 0.5em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Chapter Heading — center, maroon, AdishilaDevGuru */&lt;br /&gt;
.gr-chapter-heading {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  font-size: 0.82em;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  color: #be100e;&lt;br /&gt;
  font-family: &#039;AdishilaDevGuru&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
  margin: 0.5em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* M.Veda Shloka — left, bold, maroon, AdishilaVed, 5mm indent */&lt;br /&gt;
.gr-mv-shloka {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: left;&lt;br /&gt;
  font-size: 0.82em;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  color: #be100e;&lt;br /&gt;
  font-family: &#039;AdishilaVed&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  padding-left: 0.86em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.75;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* M.Veda Gadya — justify, bold, maroon, AdishilaVed */&lt;br /&gt;
.gr-mv-gadya {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: justify;&lt;br /&gt;
  font-size: 0.82em;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  color: #be100e;&lt;br /&gt;
  font-family: &#039;AdishilaVed&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  text-indent: 1.18em;&lt;br /&gt;
  padding-left: 0.36em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.75;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* M.Shloka — left, bold, orange, AdishilaDev, 5mm indent */&lt;br /&gt;
.gr-m-shloka {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: left;&lt;br /&gt;
  font-size: 0.82em;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  color: #e65100;&lt;br /&gt;
  font-family: &#039;AdishilaDev&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  padding-left: 0.86em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.75;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* B.Shloka / TK.Shloka / TP.Shloka — left, black, AdishilaDev, 10mm indent */&lt;br /&gt;
.gr-b-shloka,&lt;br /&gt;
.gr-tp-shloka {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: left;&lt;br /&gt;
  font-size: 0.73em;&lt;br /&gt;
  font-weight: normal;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  font-family: &#039;AdishilaDev&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
  padding-left: 1.73em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.75;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Reference — orange, AdishilaDev */&lt;br /&gt;
.gr-reference {&lt;br /&gt;
  color: #e65100;&lt;br /&gt;
  font-family: &#039;AdishilaDev&#039;, &#039;Adishila&#039;, &#039;Noto Serif Devanagari&#039;, serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Custom tag span — subtle dashed underline only */&lt;br /&gt;
.gr-custom {&lt;br /&gt;
  border-bottom: 1px dashed #b5451b;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 34. MINERVA HEADER — orange theme + sticky ────────────────── */&lt;br /&gt;
&lt;br /&gt;
/* Kill space above header */&lt;br /&gt;
.skin-minerva body { margin-top: 0 !important; padding-top: 0 !important; }&lt;br /&gt;
.skin-minerva #mw-mf-viewport,&lt;br /&gt;
.skin-minerva #mw-mf-page-center { margin-top: 0 !important; padding-top: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* Header — orange, sticky */&lt;br /&gt;
.skin-minerva header.header-container {&lt;br /&gt;
  background: #b5451b !important;&lt;br /&gt;
  position: sticky !important;&lt;br /&gt;
  top: 0 !important;&lt;br /&gt;
  z-index: 200 !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  color: #ffffff;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .minerva-header {&lt;br /&gt;
  background: #b5451b !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  min-height: 54px !important;&lt;br /&gt;
  padding: 0 12px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.minerva-icon {&lt;br /&gt;
 &lt;br /&gt;
 filter: brightness(0) saturate(100%) invert(100%) sepia(4%) saturate(1%) hue-rotate(296deg) brightness(104%) contrast(100%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Site name text */&lt;br /&gt;
.skin-minerva .branding-box { background: transparent !important; }&lt;br /&gt;
.skin-minerva .branding-box a {&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .branding-box a span {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-size: 18px !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  font-family: system-ui, -apple-system, sans-serif !important;&lt;br /&gt;
  white-space: nowrap !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hamburger + search icons — white */&lt;br /&gt;
.skin-minerva .minerva-header label,&lt;br /&gt;
.skin-minerva .minerva-header .search-toggle {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .minerva-header svg path,&lt;br /&gt;
.skin-minerva .minerva-header svg rect,&lt;br /&gt;
.skin-minerva .minerva-header svg circle {&lt;br /&gt;
  fill: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .minerva-header .mw-ui-icon:before {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  filter: brightness(10) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Reader toolbar below Minerva header */&lt;br /&gt;
.skin-minerva #gr-static-bar {&lt;br /&gt;
  position: sticky !important;&lt;br /&gt;
  top: 54px !important;&lt;br /&gt;
  z-index: 100 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── 35. MINERVA — auto-expand sections ────────────────────────── */&lt;br /&gt;
.skin-minerva .collapsible-block,&lt;br /&gt;
.skin-minerva .collapsible-heading + .collapsible-block {&lt;br /&gt;
  display: block !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .mf-section-0,&lt;br /&gt;
.skin-minerva .mf-section-1,&lt;br /&gt;
.skin-minerva .mf-section-2,&lt;br /&gt;
.skin-minerva .mf-section-3,&lt;br /&gt;
.skin-minerva .mf-section-4,&lt;br /&gt;
.skin-minerva .mf-section-5,&lt;br /&gt;
.skin-minerva .mf-section-6,&lt;br /&gt;
.skin-minerva .mf-section-7,&lt;br /&gt;
.skin-minerva .mf-section-8,&lt;br /&gt;
.skin-minerva .mf-section-9 {&lt;br /&gt;
  display: block !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .section-heading {&lt;br /&gt;
  pointer-events: none !important;&lt;br /&gt;
}&lt;br /&gt;
.skin-minerva .section-heading .indicator {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Gadget-GrAnnotations.js&amp;diff=6189</id>
		<title>MediaWiki:Gadget-GrAnnotations.js</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Gadget-GrAnnotations.js&amp;diff=6189"/>
		<updated>2026-06-11T07:57:14Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/**&lt;br /&gt;
 * gr_annotations.js  —  grantha.io inline Notes + Bookmarks + Feedback  (v6 + Strategy B)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* global mw, $ */&lt;br /&gt;
( function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  var CONTENT_SEL   = &#039;#mw-content-text&#039;;&lt;br /&gt;
  var BM_LS_KEY     = &#039;grantha_bm_&#039;  + ( ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039; ) ) || &#039;&#039; );&lt;br /&gt;
  var NT_LS_KEY     = &#039;grantha_nt_&#039;  + ( ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039; ) ) || &#039;&#039; );&lt;br /&gt;
  var pageTitle     = ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039; ) ) || &#039;&#039;;&lt;br /&gt;
  var currentUser   = ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgUserName&#039; ) ) || &#039;&#039;;&lt;br /&gt;
  var userInitial   = currentUser ? currentUser.charAt( 0 ).toUpperCase() : &#039;?&#039;;&lt;br /&gt;
  var currentUserEmail = &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  if ( currentUser &amp;amp;&amp;amp; window.mw ) {&lt;br /&gt;
    new mw.Api().get({ action: &#039;query&#039;, meta: &#039;userinfo&#039;, uiprop: &#039;email&#039;, formatversion: 2 })&lt;br /&gt;
      .then( function (data) {&lt;br /&gt;
        var info = data &amp;amp;&amp;amp; data.query &amp;amp;&amp;amp; data.query.userinfo;&lt;br /&gt;
        if ( info &amp;amp;&amp;amp; info.email ) currentUserEmail = info.email;&lt;br /&gt;
      } ).catch( function () {} );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ( window.mw ) {&lt;br /&gt;
    var ns = mw.config.get( &#039;wgNamespaceNumber&#039; );&lt;br /&gt;
    if ( ns &amp;lt; 0 ) return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var _selRange   = null;&lt;br /&gt;
  var _selText    = &#039;&#039;;&lt;br /&gt;
  var _selRect    = null;&lt;br /&gt;
  var _notes      = [];&lt;br /&gt;
  var _bookmarks  = [];&lt;br /&gt;
  var _activeTab  = &#039;notes&#039;;&lt;br /&gt;
  var _selVersion = 0;&lt;br /&gt;
  var _fabSelVer  = -1;&lt;br /&gt;
  var _mobile     = window.innerWidth &amp;lt; 768 || &#039;ontouchstart&#039; in window;&lt;br /&gt;
  var _fabTouched = false;  // flag to prevent hideActions when tapping fab&lt;br /&gt;
&lt;br /&gt;
  function uid() { return &#039;gra_&#039; + Date.now() + &#039;_&#039; + Math.random().toString(36).slice(2,7); }&lt;br /&gt;
  function esc(s) {&lt;br /&gt;
    return String(s||&#039;&#039;).replace(/&amp;amp;/g,&#039;&amp;amp;amp;&#039;).replace(/&amp;lt;/g,&#039;&amp;amp;lt;&#039;)&lt;br /&gt;
                        .replace(/&amp;gt;/g,&#039;&amp;amp;gt;&#039;).replace(/&amp;quot;/g,&#039;&amp;amp;quot;&#039;);&lt;br /&gt;
  }&lt;br /&gt;
  function nowIso() { return new Date().toISOString().replace(/\.\d{3}Z$/,&#039;Z&#039;); }&lt;br /&gt;
  function fmtTs(ts) {&lt;br /&gt;
    try {&lt;br /&gt;
      var d = new Date(ts);&lt;br /&gt;
      return d.toLocaleDateString(&#039;en-IN&#039;,{day:&#039;numeric&#039;,month:&#039;short&#039;,year:&#039;numeric&#039;})&lt;br /&gt;
           + &#039; &#039; + d.toLocaleTimeString(&#039;en-IN&#039;,{hour:&#039;2-digit&#039;,minute:&#039;2-digit&#039;,hour12:false});&lt;br /&gt;
    } catch(e){ return ts; }&lt;br /&gt;
  }&lt;br /&gt;
  function clamp(v,lo,hi){ return Math.max(lo,Math.min(hi,v)); }&lt;br /&gt;
  function isMobile() { return _mobile; }&lt;br /&gt;
&lt;br /&gt;
  var $fab, $mobileBar, $panel, $backdrop;&lt;br /&gt;
  var $ntComposer, $ntInput, $ntSubmit;&lt;br /&gt;
  var $bmComposer, $bmInput, $bmSubmit;&lt;br /&gt;
  var $fbComposer, $fbIssueType, $fbText, $fbEmail, $fbSubmit, $fbQuote;&lt;br /&gt;
  var $tabNotes, $tabBookmarks, $paneNotes, $paneBookmarks;&lt;br /&gt;
&lt;br /&gt;
  function buildDom() {&lt;br /&gt;
    $fab = $( [&lt;br /&gt;
      &#039;&amp;lt;div id=&amp;quot;gra-fab&amp;quot; role=&amp;quot;toolbar&amp;quot; aria-label=&amp;quot;Feedback / Notes / Bookmark&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;button class=&amp;quot;gra-fab-btn&amp;quot; id=&amp;quot;gra-fab-note&amp;quot; type=&amp;quot;button&amp;quot; aria-label=&amp;quot;Note&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-icon gra-icon-note&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-fab-btn-label&amp;quot;&amp;gt;Note&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;button class=&amp;quot;gra-fab-btn&amp;quot; id=&amp;quot;gra-fab-bookmark&amp;quot; type=&amp;quot;button&amp;quot; aria-label=&amp;quot;Mark&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-icon gra-icon-bookmark&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-fab-btn-label&amp;quot;&amp;gt;Mark&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;button class=&amp;quot;gra-fab-btn&amp;quot; id=&amp;quot;gra-fab-feedback&amp;quot; type=&amp;quot;button&amp;quot; aria-label=&amp;quot;Feedback&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-icon gra-icon-feedback&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-fab-btn-label&amp;quot;&amp;gt;Feedback&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;button class=&amp;quot;gra-fab-btn&amp;quot; id=&amp;quot;gra-fab-search&amp;quot; type=&amp;quot;button&amp;quot; aria-label=&amp;quot;Search&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-icon gra-icon-search&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-fab-btn-label&amp;quot;&amp;gt;Search&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;button class=&amp;quot;gra-fab-btn gra-fab-btn-dismiss&amp;quot; id=&amp;quot;gra-fab-dismiss&amp;quot; type=&amp;quot;button&amp;quot; aria-label=&amp;quot;Dismiss&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-icon gra-icon-dismiss&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-fab-btn-label&amp;quot;&amp;gt;Close&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
    ].join(&#039;&#039;) );&lt;br /&gt;
    $(&#039;body&#039;).append($fab);&lt;br /&gt;
&lt;br /&gt;
    $mobileBar = $(&#039;&amp;lt;div id=&amp;quot;gra-mobile-bar&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
    $(&#039;body&#039;).append($mobileBar);&lt;br /&gt;
&lt;br /&gt;
    $fbComposer = $( [&lt;br /&gt;
      &#039;&amp;lt;div class=&amp;quot;gra-composer&amp;quot; id=&amp;quot;gra-fb-composer&amp;quot; role=&amp;quot;dialog&amp;quot; aria-label=&amp;quot;Send feedback&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-composer-header&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-icon gra-icon-feedback&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;strong&amp;gt;Feedback&amp;lt;/strong&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button class=&amp;quot;gra-btn-x&amp;quot; id=&amp;quot;gra-fb-close&amp;quot; title=&amp;quot;Close&amp;quot;&amp;gt;✕&amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-fb-quote-label&amp;quot;&amp;gt;Selected text:&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-fb-quote&amp;quot; id=&amp;quot;gra-fb-quote&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-fb-field-label&amp;quot;&amp;gt;Issue type&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;select class=&amp;quot;gra-fb-select&amp;quot; id=&amp;quot;gra-fb-issue&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;option value=&amp;quot;&amp;quot;&amp;gt;— Choose —&amp;lt;/option&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;option value=&amp;quot;wrong_text&amp;quot;&amp;gt;Formatting error&amp;lt;/option&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;option value=&amp;quot;reference_issue&amp;quot;&amp;gt;Reference issue&amp;lt;/option&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;option value=&amp;quot;spelling_mistake&amp;quot;&amp;gt;Spelling mistake&amp;lt;/option&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;option value=&amp;quot;other&amp;quot;&amp;gt;Other&amp;lt;/option&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/select&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-fb-field-label&amp;quot;&amp;gt;Details (optional)&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;textarea class=&amp;quot;gra-composer-input&amp;quot; id=&amp;quot;gra-fb-text&amp;quot; placeholder=&amp;quot;Describe the issue…&amp;quot; rows=&amp;quot;3&amp;quot;&amp;gt;&amp;lt;/textarea&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-fb-field-label&amp;quot;&amp;gt;Your email (optional)&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;input class=&amp;quot;gra-composer-input gra-fb-email-input&amp;quot; id=&amp;quot;gra-fb-email&amp;quot; type=&amp;quot;email&amp;quot; placeholder=&amp;quot;you@example.com&amp;quot; autocomplete=&amp;quot;email&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-composer-actions&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button class=&amp;quot;gra-btn-cancel&amp;quot; id=&amp;quot;gra-fb-cancel&amp;quot;&amp;gt;Cancel&amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button class=&amp;quot;gra-btn-submit&amp;quot; id=&amp;quot;gra-fb-submit&amp;quot; disabled&amp;gt;Send&amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-fb-status&amp;quot; id=&amp;quot;gra-fb-status&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
    ].join(&#039;&#039;) );&lt;br /&gt;
    $(&#039;body&#039;).append($fbComposer);&lt;br /&gt;
&lt;br /&gt;
    $ntComposer = $( [&lt;br /&gt;
      &#039;&amp;lt;div class=&amp;quot;gra-composer&amp;quot; id=&amp;quot;gra-nt-composer&amp;quot; role=&amp;quot;dialog&amp;quot; aria-label=&amp;quot;Add note&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-composer-user&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;div class=&amp;quot;gra-avatar&amp;quot;&amp;gt;&#039; + esc(currentUser ? userInitial : &#039;✎&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;div class=&amp;quot;gra-composer-uname&amp;quot;&amp;gt;&#039; + esc(currentUser || &#039;Notes&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;textarea class=&amp;quot;gra-composer-input&amp;quot; id=&amp;quot;gra-nt-input&amp;quot; placeholder=&amp;quot;Write a note…&amp;quot; rows=&amp;quot;3&amp;quot;&amp;gt;&amp;lt;/textarea&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-composer-actions&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button class=&amp;quot;gra-btn-cancel&amp;quot; id=&amp;quot;gra-nt-cancel&amp;quot;&amp;gt;Cancel&amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button class=&amp;quot;gra-btn-submit&amp;quot; id=&amp;quot;gra-nt-submit&amp;quot; disabled&amp;gt;Save Note&amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
    ].join(&#039;&#039;) );&lt;br /&gt;
    $(&#039;body&#039;).append($ntComposer);&lt;br /&gt;
&lt;br /&gt;
    $bmComposer = $( [&lt;br /&gt;
      &#039;&amp;lt;div class=&amp;quot;gra-bm-composer&amp;quot; id=&amp;quot;gra-bm-composer&amp;quot; role=&amp;quot;dialog&amp;quot; aria-label=&amp;quot;Bookmark&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-bm-composer-label&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-icon gra-icon-bookmark&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;    Save bookmark&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;input class=&amp;quot;gra-composer-input&amp;quot; id=&amp;quot;gra-bm-input&amp;quot; type=&amp;quot;text&amp;quot; placeholder=&amp;quot;Name this bookmark…&amp;quot; autocomplete=&amp;quot;off&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-composer-actions&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button class=&amp;quot;gra-btn-cancel&amp;quot; id=&amp;quot;gra-bm-cancel&amp;quot;&amp;gt;Cancel&amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button class=&amp;quot;gra-btn-submit&amp;quot; id=&amp;quot;gra-bm-submit&amp;quot;&amp;gt;Save&amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
    ].join(&#039;&#039;) );&lt;br /&gt;
    $(&#039;body&#039;).append($bmComposer);&lt;br /&gt;
&lt;br /&gt;
    $panel = $( [&lt;br /&gt;
      &#039;&amp;lt;div id=&amp;quot;gra-panel&amp;quot; role=&amp;quot;complementary&amp;quot; aria-label=&amp;quot;Notes&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div id=&amp;quot;gra-panel-head&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;div id=&amp;quot;gra-panel-title&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button id=&amp;quot;gra-panel-close&amp;quot; title=&amp;quot;Close&amp;quot;&amp;gt;✕&amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div id=&amp;quot;gra-tabs&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button class=&amp;quot;gra-tab gra-tab-active&amp;quot; id=&amp;quot;gra-tab-notes&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;      &amp;lt;span class=&amp;quot;gra-icon gra-icon-note&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; Notes&#039;,&lt;br /&gt;
      &#039;    &amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button class=&amp;quot;gra-tab&amp;quot; id=&amp;quot;gra-tab-bookmarks&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;      &amp;lt;span class=&amp;quot;gra-icon gra-icon-bookmark&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; Bookmarks&#039;,&lt;br /&gt;
      &#039;    &amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div id=&amp;quot;gra-panel-body&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;div class=&amp;quot;gra-pane gra-pane-active&amp;quot; id=&amp;quot;gra-pane-notes&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;div class=&amp;quot;gra-pane&amp;quot; id=&amp;quot;gra-pane-bookmarks&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
    ].join(&#039;&#039;) );&lt;br /&gt;
    $(&#039;body&#039;).append($panel);&lt;br /&gt;
&lt;br /&gt;
    $backdrop = $(&#039;&amp;lt;div id=&amp;quot;gra-backdrop&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
    $(&#039;body&#039;).append($backdrop);&lt;br /&gt;
&lt;br /&gt;
    var $toggle = $( [&lt;br /&gt;
      &#039;&amp;lt;button id=&amp;quot;gra-toggle&amp;quot; aria-label=&amp;quot;Notes&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;span class=&amp;quot;gra-icon gra-icon-note&amp;quot; id=&amp;quot;gra-toggle-icon&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;span id=&amp;quot;gra-toggle-badge&amp;quot; aria-live=&amp;quot;polite&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;&amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
    ].join(&#039;&#039;) );&lt;br /&gt;
    $(&#039;body&#039;).append($toggle);&lt;br /&gt;
    $toggle.on(&#039;click&#039;, function() {&lt;br /&gt;
      $panel.hasClass(&#039;gra-panel-open&#039;) ? closePanel() : openPanel(_activeTab);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    $(&#039;#gra-panel-title&#039;).text(pageTitle.replace(/_/g,&#039; &#039;).split(&#039;/&#039;)[0].slice(0,30));&lt;br /&gt;
    $tabNotes     = $(&#039;#gra-tab-notes&#039;);&lt;br /&gt;
    $tabBookmarks = $(&#039;#gra-tab-bookmarks&#039;);&lt;br /&gt;
    $paneNotes    = $(&#039;#gra-pane-notes&#039;);&lt;br /&gt;
    $paneBookmarks= $(&#039;#gra-pane-bookmarks&#039;);&lt;br /&gt;
    $ntInput      = $(&#039;#gra-nt-input&#039;);&lt;br /&gt;
    $ntSubmit     = $(&#039;#gra-nt-submit&#039;);&lt;br /&gt;
    $bmInput      = $(&#039;#gra-bm-input&#039;);&lt;br /&gt;
    $bmSubmit     = $(&#039;#gra-bm-submit&#039;);&lt;br /&gt;
    $fbIssueType  = $(&#039;#gra-fb-issue&#039;);&lt;br /&gt;
    $fbText       = $(&#039;#gra-fb-text&#039;);&lt;br /&gt;
    $fbEmail      = $(&#039;#gra-fb-email&#039;);&lt;br /&gt;
    $fbSubmit     = $(&#039;#gra-fb-submit&#039;);&lt;br /&gt;
    $fbQuote      = $(&#039;#gra-fb-quote&#039;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function captureSelection() {&lt;br /&gt;
    var sel = window.getSelection();&lt;br /&gt;
    if (!sel || sel.isCollapsed || !sel.rangeCount) return false;&lt;br /&gt;
    var range = sel.getRangeAt(0);&lt;br /&gt;
    var text  = sel.toString().trim();&lt;br /&gt;
    if (!text || text.length &amp;lt; 2) return false;&lt;br /&gt;
    var contentEl = document.querySelector(CONTENT_SEL);&lt;br /&gt;
    if (!contentEl) return false;&lt;br /&gt;
    var ancestor = range.commonAncestorContainer;&lt;br /&gt;
    if (ancestor.nodeType === 3) ancestor = ancestor.parentNode;&lt;br /&gt;
    if (!ancestor || !contentEl.contains(ancestor)) return false;&lt;br /&gt;
    var _editorEl = document.getElementById(&#039;se-surface&#039;) ||&lt;br /&gt;
                    document.querySelector(&#039;.se-outer&#039;);&lt;br /&gt;
    if ( _editorEl &amp;amp;&amp;amp; _editorEl.contains(ancestor) ) return false;&lt;br /&gt;
    _selText  = text;&lt;br /&gt;
    _selRect  = range.getBoundingClientRect();&lt;br /&gt;
    try { _selRange = range.cloneRange(); }&lt;br /&gt;
    catch(e){ _selRange = null; }&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function reCaptureFromDOM() {&lt;br /&gt;
    if (!_selText) return false;&lt;br /&gt;
    var contentEl = document.querySelector(CONTENT_SEL);&lt;br /&gt;
    if (!contentEl) return false;&lt;br /&gt;
    var found = findTextInContent(contentEl, _selText.slice(0,80).replace(/…$/,&#039;&#039;).trim());&lt;br /&gt;
    if (!found) return false;&lt;br /&gt;
    _selRange = found;&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function tryShowActions() {&lt;br /&gt;
    if ($fbComposer &amp;amp;&amp;amp; $fbComposer.hasClass(&#039;gra-composer-visible&#039;)) return;&lt;br /&gt;
    if ($ntComposer &amp;amp;&amp;amp; $ntComposer.hasClass(&#039;gra-composer-visible&#039;)) return;&lt;br /&gt;
    if ($bmComposer &amp;amp;&amp;amp; $bmComposer.hasClass(&#039;gra-composer-visible&#039;)) return;&lt;br /&gt;
    if (!captureSelection()) { hideActions(); return; }&lt;br /&gt;
    _fabSelVer = _selVersion;&lt;br /&gt;
    showFab(_selRect);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function showFab(rect) {&lt;br /&gt;
    if (!rect) return;&lt;br /&gt;
    var fabW, fabH, top, left;&lt;br /&gt;
    if (_mobile) {&lt;br /&gt;
      /* Docked as a fixed bar below the reader toolbar.&lt;br /&gt;
         All positioning is handled by CSS via .gra-fab-mobile-docked,&lt;br /&gt;
         so it never collides with the native selection menu and never&lt;br /&gt;
         clips at screen edges or causes horizontal scroll. */&lt;br /&gt;
      $fab.css({ position: &#039;&#039;, top: &#039;&#039;, left: &#039;&#039;, visibility: &#039;&#039; })&lt;br /&gt;
          .addClass(&#039;gra-fab-visible gra-fab-mobile-docked&#039;);&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    fabW = 46; fabH = 126;&lt;br /&gt;
    top  = rect.top + (rect.height / 2) - (fabH / 2);&lt;br /&gt;
    left = rect.right + 10;&lt;br /&gt;
    if (left + fabW &amp;gt; window.innerWidth - 8) left = rect.left - fabW - 10;&lt;br /&gt;
    top  = clamp(top,  8, window.innerHeight - fabH - 8);&lt;br /&gt;
    left = clamp(left, 8, window.innerWidth  - fabW - 8);&lt;br /&gt;
    $fab.css({ top: top + &#039;px&#039;, left: left + &#039;px&#039; }).addClass(&#039;gra-fab-visible&#039;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function hideFab() { $fab.removeClass(&#039;gra-fab-visible gra-fab-mobile-docked&#039;); }&lt;br /&gt;
  function hideActions() { hideFab(); }&lt;br /&gt;
&lt;br /&gt;
  function wrapSelection(id, cssClass) {&lt;br /&gt;
    var range = _selRange;&lt;br /&gt;
    _selRange = null;&lt;br /&gt;
    if (!range) return null;&lt;br /&gt;
    try {&lt;br /&gt;
      if (!document.contains(range.startContainer) ||&lt;br /&gt;
          !document.contains(range.endContainer)) return null;&lt;br /&gt;
    } catch(e) { return null; }&lt;br /&gt;
    function makeSpan() {&lt;br /&gt;
      var sp = document.createElement(&#039;span&#039;);&lt;br /&gt;
      sp.className = cssClass;&lt;br /&gt;
      sp.setAttribute(&#039;data-gra-id&#039;, id);&lt;br /&gt;
      return sp;&lt;br /&gt;
    }&lt;br /&gt;
    try {&lt;br /&gt;
      var span = makeSpan();&lt;br /&gt;
      range.surroundContents(span);&lt;br /&gt;
      if (span.parentNode) return span;&lt;br /&gt;
    } catch(e) {}&lt;br /&gt;
    try {&lt;br /&gt;
      var frag = range.extractContents();&lt;br /&gt;
      var sp2  = makeSpan();&lt;br /&gt;
      sp2.appendChild(frag);&lt;br /&gt;
      range.insertNode(sp2);&lt;br /&gt;
      if (sp2 &amp;amp;&amp;amp; sp2.parentNode) return sp2;&lt;br /&gt;
    } catch(e2) {}&lt;br /&gt;
    return null;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function openFeedbackComposer() {&lt;br /&gt;
    hideActions();&lt;br /&gt;
    $fbQuote.text(_selText.slice(0,200) + (_selText.length &amp;gt; 200 ? &#039;…&#039; : &#039;&#039;));&lt;br /&gt;
    $fbIssueType.val(&#039;&#039;);&lt;br /&gt;
    $fbText.val(&#039;&#039;);&lt;br /&gt;
    $fbSubmit.prop(&#039;disabled&#039;, true);&lt;br /&gt;
    $(&#039;#gra-fb-status&#039;).text(&#039;&#039;).removeClass(&#039;gra-fb-ok gra-fb-err&#039;);&lt;br /&gt;
    if (currentUserEmail) $fbEmail.val(currentUserEmail);&lt;br /&gt;
    else $fbEmail.val(&#039;&#039;);&lt;br /&gt;
    if (!_mobile) $fbComposer.css({top:&#039;&#039;, left:&#039;&#039;, transform:&#039;&#039;});&lt;br /&gt;
    $fbComposer.addClass(&#039;gra-composer-visible&#039;);&lt;br /&gt;
    $backdrop.addClass(&#039;gra-backdrop-visible&#039;);&lt;br /&gt;
    setTimeout(function(){ $fbIssueType.focus(); }, isMobile() ? 300 : 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function closeFeedbackComposer() {&lt;br /&gt;
    $fbComposer.removeClass(&#039;gra-composer-visible&#039;);&lt;br /&gt;
    $backdrop.removeClass(&#039;gra-backdrop-visible&#039;);&lt;br /&gt;
    _selRange = null; _selText = &#039;&#039;; _selRect = null;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function submitFeedback() {&lt;br /&gt;
    var issueType = $fbIssueType.val();&lt;br /&gt;
    var details   = $fbText.val().trim();&lt;br /&gt;
    var email     = $fbEmail.val().trim();&lt;br /&gt;
    var quote     = $fbQuote.text();&lt;br /&gt;
    if (!issueType) return;&lt;br /&gt;
    $fbSubmit.prop(&#039;disabled&#039;, true).text(&#039;Sending…&#039;);&lt;br /&gt;
    $(&#039;#gra-fb-status&#039;).text(&#039;&#039;).removeClass(&#039;gra-fb-ok gra-fb-err&#039;);&lt;br /&gt;
    var issueLabels = {&lt;br /&gt;
      wrong_text: &#039;Formatting error&#039;, reference_issue: &#039;Reference issue&#039;,&lt;br /&gt;
      spelling_mistake: &#039;Spelling mistake&#039;, other: &#039;Other&#039;&lt;br /&gt;
    };&lt;br /&gt;
    var payload = new FormData();&lt;br /&gt;
    payload.append(&#039;issue_type&#039;,    issueLabels[issueType] || issueType);&lt;br /&gt;
    payload.append(&#039;page&#039;,          pageTitle.replace(/_/g,&#039; &#039;));&lt;br /&gt;
    payload.append(&#039;url&#039;,           window.location.href);&lt;br /&gt;
    payload.append(&#039;selected_text&#039;, quote);&lt;br /&gt;
    payload.append(&#039;details&#039;,       details || &#039;&#039;);&lt;br /&gt;
    payload.append(&#039;user_email&#039;,    email || currentUserEmail || &#039;&#039;);&lt;br /&gt;
    payload.append(&#039;wiki_user&#039;,     currentUser || &#039;anonymous&#039;);&lt;br /&gt;
    fetch(&#039;/feedback.php&#039;, {method:&#039;POST&#039;, body:payload})&lt;br /&gt;
      .then(function(r){ return r.json(); })&lt;br /&gt;
      .then(function(data){&lt;br /&gt;
        if (data &amp;amp;&amp;amp; data.ok) showFeedbackSuccess();&lt;br /&gt;
        else showFeedbackError(data &amp;amp;&amp;amp; data.error ? data.error : &#039;Could not send.&#039;);&lt;br /&gt;
      })&lt;br /&gt;
      .catch(function(){ showFeedbackError(&#039;Network error. Please try again.&#039;); });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function showFeedbackSuccess() {&lt;br /&gt;
    $fbSubmit.prop(&#039;disabled&#039;, false).text(&#039;Send&#039;);&lt;br /&gt;
    $(&#039;#gra-fb-status&#039;).text(&#039;✓ Feedback sent. Thank you!&#039;).addClass(&#039;gra-fb-ok&#039;);&lt;br /&gt;
    setTimeout(closeFeedbackComposer, 2500);&lt;br /&gt;
  }&lt;br /&gt;
  function showFeedbackError(msg) {&lt;br /&gt;
    $fbSubmit.prop(&#039;disabled&#039;, false).text(&#039;Send&#039;);&lt;br /&gt;
    $(&#039;#gra-fb-status&#039;).text(&#039;✗ &#039; + msg).addClass(&#039;gra-fb-err&#039;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function openNoteComposer() {&lt;br /&gt;
    hideActions();&lt;br /&gt;
    if (!_mobile) $ntComposer.css({ top: &#039;&#039;, left: &#039;&#039;, transform: &#039;&#039; });&lt;br /&gt;
    $ntComposer.addClass(&#039;gra-composer-visible&#039;);&lt;br /&gt;
    $backdrop.addClass(&#039;gra-backdrop-visible&#039;);&lt;br /&gt;
    setTimeout(function(){ $ntInput.focus(); }, isMobile() ? 300 : 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function closeNoteComposer() {&lt;br /&gt;
    $ntComposer.removeClass(&#039;gra-composer-visible&#039;);&lt;br /&gt;
    $backdrop.removeClass(&#039;gra-backdrop-visible&#039;);&lt;br /&gt;
    $ntInput.val(&#039;&#039;);&lt;br /&gt;
    $ntSubmit.prop(&#039;disabled&#039;, true);&lt;br /&gt;
    _selRange = null; _selText = &#039;&#039;; _selRect = null;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function submitNote() {&lt;br /&gt;
    var text = $ntInput.val().trim();&lt;br /&gt;
    if (!text) return;&lt;br /&gt;
    var id    = uid();&lt;br /&gt;
    var ts    = nowIso();&lt;br /&gt;
    var quote = _selText.slice(0,120) + (_selText.length &amp;gt; 120 ? &#039;…&#039; : &#039;&#039;);&lt;br /&gt;
    if (!_selRange &amp;amp;&amp;amp; _selText) reCaptureFromDOM();&lt;br /&gt;
    var span  = wrapSelection(id, &#039;gra-note-highlight&#039;);&lt;br /&gt;
    if (span) span.setAttribute(&#039;data-gra-quote&#039;, quote);&lt;br /&gt;
    _notes.push({id:id, ts:ts, quote:quote, text:text});&lt;br /&gt;
    persistNotes();&lt;br /&gt;
    persistNoteHighlight(id, quote);&lt;br /&gt;
    renderNoteCards();&lt;br /&gt;
    closeNoteComposer();&lt;br /&gt;
    openPanel(&#039;notes&#039;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function persistNotes() {&lt;br /&gt;
    try { localStorage.setItem(NT_LS_KEY, JSON.stringify(_notes)); } catch(e){}&lt;br /&gt;
  }&lt;br /&gt;
  function loadNotes() {&lt;br /&gt;
    try { var r = localStorage.getItem(NT_LS_KEY); if (r) _notes = JSON.parse(r)||[]; } catch(e){}&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function openBookmarkComposer() {&lt;br /&gt;
    hideActions();&lt;br /&gt;
    if (!_mobile) $bmComposer.css({ top: &#039;&#039;, left: &#039;&#039;, transform: &#039;&#039; });&lt;br /&gt;
    $bmComposer.addClass(&#039;gra-composer-visible&#039;);&lt;br /&gt;
    $backdrop.addClass(&#039;gra-backdrop-visible&#039;);&lt;br /&gt;
    setTimeout(function(){ $bmInput.focus(); }, isMobile() ? 300 : 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function closeBookmarkComposer() {&lt;br /&gt;
    $bmComposer.removeClass(&#039;gra-composer-visible&#039;);&lt;br /&gt;
    $backdrop.removeClass(&#039;gra-backdrop-visible&#039;);&lt;br /&gt;
    $bmInput.val(&#039;&#039;);&lt;br /&gt;
    _selRange = null; _selText = &#039;&#039;; _selRect = null;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function submitBookmark() {&lt;br /&gt;
    var name  = $bmInput.val().trim() || (&#039;Bookmark &#039; + (_bookmarks.length+1));&lt;br /&gt;
    var id    = uid();&lt;br /&gt;
    var quote = _selText.slice(0,120) + (_selText.length &amp;gt; 120 ? &#039;…&#039; : &#039;&#039;);&lt;br /&gt;
    if (!_selRange &amp;amp;&amp;amp; _selText) reCaptureFromDOM();&lt;br /&gt;
    var span  = wrapSelection(id, &#039;gra-bookmark-highlight&#039;);&lt;br /&gt;
    if (span) { span.setAttribute(&#039;data-gra-id&#039;, id); span.setAttribute(&#039;data-gra-name&#039;, name); }&lt;br /&gt;
    _bookmarks.push({id:id, name:name, quote:quote, ts:nowIso()});&lt;br /&gt;
    persistBookmarks();&lt;br /&gt;
    renderBookmarkCards();&lt;br /&gt;
    closeBookmarkComposer();&lt;br /&gt;
    openPanel(&#039;bookmarks&#039;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function deleteBookmark(id) {&lt;br /&gt;
    _bookmarks = _bookmarks.filter(function(b){ return b.id !== id; });&lt;br /&gt;
    var span = document.querySelector(&#039;[data-gra-id=&amp;quot;&#039;+id+&#039;&amp;quot;].gra-bookmark-highlight&#039;);&lt;br /&gt;
    if (span &amp;amp;&amp;amp; span.parentNode) {&lt;br /&gt;
      var p = span.parentNode;&lt;br /&gt;
      while (span.firstChild) p.insertBefore(span.firstChild, span);&lt;br /&gt;
      p.removeChild(span);&lt;br /&gt;
    }&lt;br /&gt;
    persistBookmarks(); renderBookmarkCards();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function persistBookmarks() {&lt;br /&gt;
    try { localStorage.setItem(BM_LS_KEY, JSON.stringify(_bookmarks)); } catch(e){}&lt;br /&gt;
  }&lt;br /&gt;
  function loadBookmarks() {&lt;br /&gt;
    try { var r = localStorage.getItem(BM_LS_KEY); if (r) _bookmarks = JSON.parse(r)||[]; } catch(e){}&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function openPanel(tab) {&lt;br /&gt;
    _activeTab = tab || _activeTab;&lt;br /&gt;
    switchTab(_activeTab);&lt;br /&gt;
    $panel.addClass(&#039;gra-panel-open&#039;);&lt;br /&gt;
    $backdrop.addClass(&#039;gra-backdrop-visible&#039;);&lt;br /&gt;
  }&lt;br /&gt;
  function closePanel() {&lt;br /&gt;
    $panel.removeClass(&#039;gra-panel-open&#039;);&lt;br /&gt;
    $backdrop.removeClass(&#039;gra-backdrop-visible&#039;);&lt;br /&gt;
  }&lt;br /&gt;
  function switchTab(tab) {&lt;br /&gt;
    _activeTab = tab;&lt;br /&gt;
    $tabNotes.toggleClass(&#039;gra-tab-active&#039;, tab===&#039;notes&#039;);&lt;br /&gt;
    $tabBookmarks.toggleClass(&#039;gra-tab-active&#039;, tab===&#039;bookmarks&#039;);&lt;br /&gt;
    $paneNotes.toggleClass(&#039;gra-pane-active&#039;, tab===&#039;notes&#039;);&lt;br /&gt;
    $paneBookmarks.toggleClass(&#039;gra-pane-active&#039;, tab===&#039;bookmarks&#039;);&lt;br /&gt;
    if (tab===&#039;notes&#039;) renderNoteCards();&lt;br /&gt;
    else renderBookmarkCards();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function renderNoteCards() {&lt;br /&gt;
    if (!_notes.length) {&lt;br /&gt;
      $paneNotes.html(&#039;&amp;lt;div class=&amp;quot;gra-empty-state&amp;quot;&amp;gt;No notes yet.&amp;lt;br&amp;gt;Select text and tap ✎ to add one.&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    var html = &#039;&#039;;&lt;br /&gt;
    _notes.slice().reverse().forEach(function(n){&lt;br /&gt;
      html += &#039;&amp;lt;div class=&amp;quot;gra-note-card&amp;quot; data-gra-id=&amp;quot;&#039;+esc(n.id)+&#039;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;div class=&amp;quot;gra-card-header&amp;quot;&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;div class=&amp;quot;gra-avatar&amp;quot;&amp;gt;✎&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;div class=&amp;quot;gra-card-meta&amp;quot;&amp;gt;&#039;&lt;br /&gt;
            + (n.ts ? &#039;&amp;lt;div class=&amp;quot;gra-card-ts&amp;quot;&amp;gt;&#039;+esc(fmtTs(n.ts))+&#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039;)&lt;br /&gt;
            + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;button class=&amp;quot;gra-note-del&amp;quot; data-del-id=&amp;quot;&#039;+esc(n.id)+&#039;&amp;quot; title=&amp;quot;Delete&amp;quot;&amp;gt;×&amp;lt;/button&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
            + (n.quote ? &#039;&amp;lt;div class=&amp;quot;gra-card-quote&amp;quot;&amp;gt;&#039;+esc(n.quote)+&#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039;)&lt;br /&gt;
            + &#039;&amp;lt;div class=&amp;quot;gra-card-text&amp;quot;&amp;gt;&#039;+esc(n.text)+&#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    });&lt;br /&gt;
    $paneNotes.html(html);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function deleteNote(id) {&lt;br /&gt;
    _notes = _notes.filter(function(n){ return n.id !== id; });&lt;br /&gt;
    var span = document.querySelector(&#039;[data-gra-id=&amp;quot;&#039;+id+&#039;&amp;quot;].gra-note-highlight&#039;);&lt;br /&gt;
    if (span &amp;amp;&amp;amp; span.parentNode) {&lt;br /&gt;
      var p = span.parentNode;&lt;br /&gt;
      while (span.firstChild) p.insertBefore(span.firstChild, span);&lt;br /&gt;
      p.removeChild(span);&lt;br /&gt;
    }&lt;br /&gt;
    try {&lt;br /&gt;
      var s = JSON.parse(localStorage.getItem(NT_LS_KEY+&#039;_hl&#039;)||&#039;[]&#039;);&lt;br /&gt;
      s = s.filter(function(h){ return h.id !== id; });&lt;br /&gt;
      localStorage.setItem(NT_LS_KEY+&#039;_hl&#039;, JSON.stringify(s));&lt;br /&gt;
    } catch(e){}&lt;br /&gt;
    persistNotes(); renderNoteCards();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function renderBookmarkCards() {&lt;br /&gt;
    if (!_bookmarks.length) {&lt;br /&gt;
      $paneBookmarks.html(&#039;&amp;lt;div class=&amp;quot;gra-empty-state&amp;quot;&amp;gt;No bookmarks yet.&amp;lt;br&amp;gt;Select text and tap 🔖 to save one.&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    var html = &#039;&#039;;&lt;br /&gt;
    _bookmarks.slice().reverse().forEach(function(b){&lt;br /&gt;
      html += &#039;&amp;lt;div class=&amp;quot;gra-bookmark-card&amp;quot; data-gra-id=&amp;quot;&#039;+esc(b.id)+&#039;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;span class=&amp;quot;gra-icon gra-icon-bookmark&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;div class=&amp;quot;gra-bookmark-info&amp;quot;&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;div class=&amp;quot;gra-bookmark-name&amp;quot;&amp;gt;&#039;+esc(b.name)+&#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
            + (b.quote ? &#039;&amp;lt;div class=&amp;quot;gra-bookmark-quote&amp;quot;&amp;gt;&#039;+esc(b.quote)+&#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039;)&lt;br /&gt;
            + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;button class=&amp;quot;gra-bookmark-del&amp;quot; data-del-id=&amp;quot;&#039;+esc(b.id)+&#039;&amp;quot; title=&amp;quot;Remove&amp;quot;&amp;gt;×&amp;lt;/button&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    });&lt;br /&gt;
    $paneBookmarks.html(html);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function scrollToHighlight(id) {&lt;br /&gt;
    var el = document.querySelector(&#039;[data-gra-id=&amp;quot;&#039;+id+&#039;&amp;quot;]&#039;);&lt;br /&gt;
    if (!el) return;&lt;br /&gt;
    el.scrollIntoView({behavior:&#039;smooth&#039;, block:&#039;center&#039;});&lt;br /&gt;
    el.classList.add(&#039;gra-hl-active&#039;);&lt;br /&gt;
    setTimeout(function(){ el.classList.remove(&#039;gra-hl-active&#039;); }, 2000);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function wireEvents() {&lt;br /&gt;
&lt;br /&gt;
    /* Suppress native context menu inside article content (Android/desktop) */&lt;br /&gt;
    document.addEventListener(&#039;contextmenu&#039;, function(e) {&lt;br /&gt;
      var tag = e.target.tagName;&lt;br /&gt;
      if (tag === &#039;INPUT&#039; || tag === &#039;TEXTAREA&#039; || tag === &#039;SELECT&#039;) return;&lt;br /&gt;
      var c = document.querySelector(CONTENT_SEL);&lt;br /&gt;
      if (c &amp;amp;&amp;amp; c.contains(e.target)) e.preventDefault();&lt;br /&gt;
    }, { passive: false });&lt;br /&gt;
&lt;br /&gt;
    /* Desktop mouseup */&lt;br /&gt;
    $(document).on(&#039;mouseup&#039;, function(e){&lt;br /&gt;
      if (e.button !== 0) return;&lt;br /&gt;
      if (_mobile) return;&lt;br /&gt;
      setTimeout(tryShowActions, 20);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    /* Separate timers so mobile + desktop never clobber each other */&lt;br /&gt;
    var _selTimer    = null;  /* desktop debounce */&lt;br /&gt;
    var _mobShowTimer = null; /* mobile show-on-touchend */&lt;br /&gt;
&lt;br /&gt;
    /* Mobile: show fab quickly after finger lifts (selection settled).&lt;br /&gt;
       180ms feels instant while still letting the range stabilise. */&lt;br /&gt;
    document.addEventListener(&#039;touchend&#039;, function(e) {&lt;br /&gt;
      if (!_mobile) return;&lt;br /&gt;
      if ($fab[0] &amp;amp;&amp;amp; $fab[0].contains(e.target)) return;&lt;br /&gt;
      clearTimeout(_mobShowTimer);&lt;br /&gt;
      _mobShowTimer = setTimeout(function() {&lt;br /&gt;
        var sel = window.getSelection();&lt;br /&gt;
        if (!sel || sel.isCollapsed || !sel.toString().trim()) return;&lt;br /&gt;
        tryShowActions();&lt;br /&gt;
      }, 180);&lt;br /&gt;
    }, { passive: true });&lt;br /&gt;
&lt;br /&gt;
    /* Mobile: only HIDE the fab when selection is cleared while it&#039;s visible.&lt;br /&gt;
       (Reposition isn&#039;t needed now that the bar is docked, and re-running&lt;br /&gt;
       showFab here was causing the lag/flicker.) */&lt;br /&gt;
    document.addEventListener(&#039;selectionchange&#039;, function() {&lt;br /&gt;
      if (!_mobile) return;&lt;br /&gt;
      if (!$fab.hasClass(&#039;gra-fab-visible&#039;)) return;&lt;br /&gt;
      var sel = window.getSelection();&lt;br /&gt;
      if (!sel || sel.isCollapsed || !sel.toString().trim()) {&lt;br /&gt;
        clearTimeout(_mobShowTimer);&lt;br /&gt;
        hideActions();&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    /* selectionchange debounced (desktop only) */&lt;br /&gt;
    document.addEventListener(&#039;selectionchange&#039;, function() {&lt;br /&gt;
      if (_mobile) return;&lt;br /&gt;
      _selVersion++;&lt;br /&gt;
      clearTimeout(_selTimer);&lt;br /&gt;
      var v = _selVersion;&lt;br /&gt;
      _selTimer = setTimeout(function(){&lt;br /&gt;
        if (v !== _selVersion) return;&lt;br /&gt;
        if (_fabSelVer === v) return;&lt;br /&gt;
        tryShowActions();&lt;br /&gt;
      }, 600);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    /* ── KEY FIX: fab touchstart sets flag to prevent hideActions ── */&lt;br /&gt;
    $fab[0].addEventListener(&#039;touchstart&#039;, function(e) {&lt;br /&gt;
      _fabTouched = true;&lt;br /&gt;
      /* Don&#039;t propagate to document handler */&lt;br /&gt;
      e.stopPropagation();&lt;br /&gt;
    }, { passive: true });&lt;br /&gt;
&lt;br /&gt;
    /* Click outside → hide actions (blocked if fab was touched) */&lt;br /&gt;
    $(document).on(&#039;mousedown touchstart&#039;, function(e){&lt;br /&gt;
      if (_fabTouched) { _fabTouched = false; return; }&lt;br /&gt;
      var t = e.target;&lt;br /&gt;
      if ($fab[0]        &amp;amp;&amp;amp; $fab[0].contains(t))        return;&lt;br /&gt;
      if ($fbComposer[0] &amp;amp;&amp;amp; $fbComposer[0].contains(t)) return;&lt;br /&gt;
      if ($ntComposer[0] &amp;amp;&amp;amp; $ntComposer[0].contains(t)) return;&lt;br /&gt;
      if ($bmComposer[0] &amp;amp;&amp;amp; $bmComposer[0].contains(t)) return;&lt;br /&gt;
      hideActions();&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    /* ── FAB buttons — use touchend for mobile, click for desktop ── */&lt;br /&gt;
    function fabAction(btnId, action) {&lt;br /&gt;
      var el = document.getElementById(btnId);&lt;br /&gt;
      if (!el) return;&lt;br /&gt;
      /* touchend: fires before document touchstart clears _selRange */&lt;br /&gt;
      el.addEventListener(&#039;touchend&#039;, function(e) {&lt;br /&gt;
        e.preventDefault();&lt;br /&gt;
        e.stopPropagation();&lt;br /&gt;
        if (!_selRange &amp;amp;&amp;amp; !reCaptureFromDOM()) return;&lt;br /&gt;
        action();&lt;br /&gt;
      }, { passive: false });&lt;br /&gt;
      /* click: for desktop */&lt;br /&gt;
      el.addEventListener(&#039;click&#039;, function(e) {&lt;br /&gt;
        e.preventDefault();&lt;br /&gt;
        e.stopPropagation();&lt;br /&gt;
        if (!_selRange &amp;amp;&amp;amp; !reCaptureFromDOM()) return;&lt;br /&gt;
        action();&lt;br /&gt;
      });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    fabAction(&#039;gra-fab-note&#039;,     openNoteComposer);&lt;br /&gt;
    fabAction(&#039;gra-fab-bookmark&#039;, openBookmarkComposer);&lt;br /&gt;
    fabAction(&#039;gra-fab-feedback&#039;, openFeedbackComposer);&lt;br /&gt;
&lt;br /&gt;
    document.getElementById(&#039;gra-fab-search&#039;).addEventListener(&#039;touchend&#039;, function(e) {&lt;br /&gt;
      e.preventDefault(); e.stopPropagation();&lt;br /&gt;
      var q = _selText;&lt;br /&gt;
      hideActions();&lt;br /&gt;
      _selRange = null; _selText = &#039;&#039;; _selRect = null;&lt;br /&gt;
      if (q &amp;amp;&amp;amp; window.showSearchDialog) { window.showSearchDialog(q); }&lt;br /&gt;
    }, { passive: false });&lt;br /&gt;
    document.getElementById(&#039;gra-fab-search&#039;).addEventListener(&#039;click&#039;, function(e) {&lt;br /&gt;
      e.preventDefault(); e.stopPropagation();&lt;br /&gt;
      var q = _selText;&lt;br /&gt;
      hideActions();&lt;br /&gt;
      _selRange = null; _selText = &#039;&#039;; _selRect = null;&lt;br /&gt;
      if (q &amp;amp;&amp;amp; window.showSearchDialog) { window.showSearchDialog(q); }&lt;br /&gt;
      else if (q) { $(document).trigger($.Event(&#039;keydown&#039;, {ctrlKey:true, key:&#039;k&#039;, keyCode:75})); }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    /* ── Dismiss button: hide toolbar + clear selection (mobile) ── */&lt;br /&gt;
    (function () {&lt;br /&gt;
      var dismissEl = document.getElementById(&#039;gra-fab-dismiss&#039;);&lt;br /&gt;
      if (!dismissEl) return;&lt;br /&gt;
      function doDismiss(e) {&lt;br /&gt;
        e.preventDefault(); e.stopPropagation();&lt;br /&gt;
        hideActions();&lt;br /&gt;
        _selRange = null; _selText = &#039;&#039;; _selRect = null;&lt;br /&gt;
        if (window.getSelection) {&lt;br /&gt;
          var s = window.getSelection();&lt;br /&gt;
          if (s &amp;amp;&amp;amp; s.removeAllRanges) s.removeAllRanges();&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      dismissEl.addEventListener(&#039;touchend&#039;, doDismiss, { passive: false });&lt;br /&gt;
      dismissEl.addEventListener(&#039;click&#039;, doDismiss);&lt;br /&gt;
    }());&lt;br /&gt;
&lt;br /&gt;
    /* Feedback composer */&lt;br /&gt;
    $fbIssueType.on(&#039;change&#039;, function(){ $fbSubmit.prop(&#039;disabled&#039;, !$(this).val()); });&lt;br /&gt;
    $(&#039;#gra-fb-cancel, #gra-fb-close&#039;).on(&#039;click&#039;, closeFeedbackComposer);&lt;br /&gt;
    $fbSubmit.on(&#039;click&#039;, submitFeedback);&lt;br /&gt;
    $fbText.on(&#039;keydown&#039;, function(e){ if(e.key===&#039;Escape&#039;) closeFeedbackComposer(); });&lt;br /&gt;
&lt;br /&gt;
    /* Note composer */&lt;br /&gt;
    $ntInput.on(&#039;input&#039;, function(){ $ntSubmit.prop(&#039;disabled&#039;, !$(this).val().trim()); });&lt;br /&gt;
    $(&#039;#gra-nt-cancel&#039;).on(&#039;click&#039;, closeNoteComposer);&lt;br /&gt;
    $ntSubmit.on(&#039;click&#039;, submitNote);&lt;br /&gt;
    $ntInput.on(&#039;keydown&#039;, function(e){&lt;br /&gt;
      if ((e.ctrlKey||e.metaKey) &amp;amp;&amp;amp; e.key===&#039;Enter&#039;) submitNote();&lt;br /&gt;
      if (e.key===&#039;Escape&#039;) closeNoteComposer();&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    /* Bookmark composer */&lt;br /&gt;
    $(&#039;#gra-bm-cancel&#039;).on(&#039;click&#039;, closeBookmarkComposer);&lt;br /&gt;
    $bmSubmit.on(&#039;click&#039;, submitBookmark);&lt;br /&gt;
    $bmInput.on(&#039;keydown&#039;, function(e){&lt;br /&gt;
      if (e.key===&#039;Enter&#039;) submitBookmark();&lt;br /&gt;
      if (e.key===&#039;Escape&#039;) closeBookmarkComposer();&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    /* Panel */&lt;br /&gt;
    $(&#039;#gra-panel-close&#039;).on(&#039;click&#039;, closePanel);&lt;br /&gt;
    $backdrop.on(&#039;click touchend&#039;, function(e){&lt;br /&gt;
      e.preventDefault();&lt;br /&gt;
      if ($fbComposer.hasClass(&#039;gra-composer-visible&#039;)) closeFeedbackComposer();&lt;br /&gt;
      else if ($ntComposer.hasClass(&#039;gra-composer-visible&#039;)) closeNoteComposer();&lt;br /&gt;
      else if ($bmComposer.hasClass(&#039;gra-composer-visible&#039;)) closeBookmarkComposer();&lt;br /&gt;
      else closePanel();&lt;br /&gt;
    });&lt;br /&gt;
    $tabNotes.on(&#039;click&#039;, function(){ switchTab(&#039;notes&#039;); });&lt;br /&gt;
    $tabBookmarks.on(&#039;click&#039;, function(){ switchTab(&#039;bookmarks&#039;); });&lt;br /&gt;
&lt;br /&gt;
    $paneNotes.on(&#039;click&#039;, &#039;.gra-note-card&#039;, function(e){&lt;br /&gt;
      if ($(e.target).hasClass(&#039;gra-note-del&#039;)) return;&lt;br /&gt;
      var id = $(this).attr(&#039;data-gra-id&#039;);&lt;br /&gt;
      if (id) { closePanel(); scrollToHighlight(id); }&lt;br /&gt;
    });&lt;br /&gt;
    $paneNotes.on(&#039;click&#039;, &#039;.gra-note-del&#039;, function(e){&lt;br /&gt;
      e.stopPropagation();&lt;br /&gt;
      var id = $(this).attr(&#039;data-del-id&#039;);&lt;br /&gt;
      if (id) deleteNote(id);&lt;br /&gt;
    });&lt;br /&gt;
    $paneBookmarks.on(&#039;click&#039;, &#039;.gra-bookmark-card&#039;, function(e){&lt;br /&gt;
      if ($(e.target).hasClass(&#039;gra-bookmark-del&#039;)) return;&lt;br /&gt;
      var id = $(this).attr(&#039;data-gra-id&#039;);&lt;br /&gt;
      if (id) { closePanel(); scrollToHighlight(id); }&lt;br /&gt;
    });&lt;br /&gt;
    $paneBookmarks.on(&#039;click&#039;, &#039;.gra-bookmark-del&#039;, function(e){&lt;br /&gt;
      e.stopPropagation();&lt;br /&gt;
      var id = $(this).attr(&#039;data-del-id&#039;);&lt;br /&gt;
      if (id) deleteBookmark(id);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    $(CONTENT_SEL).on(&#039;click&#039;, &#039;.gra-note-highlight&#039;, function(){&lt;br /&gt;
      var id = $(this).attr(&#039;data-gra-id&#039;);&lt;br /&gt;
      openPanel(&#039;notes&#039;);&lt;br /&gt;
      setTimeout(function(){&lt;br /&gt;
        var $card = $paneNotes.find(&#039;[data-gra-id=&amp;quot;&#039;+id+&#039;&amp;quot;]&#039;);&lt;br /&gt;
        if ($card.length) {&lt;br /&gt;
          $card.addClass(&#039;gra-card-active&#039;);&lt;br /&gt;
          $card[0].scrollIntoView({behavior:&#039;smooth&#039;, block:&#039;nearest&#039;});&lt;br /&gt;
          setTimeout(function(){ $card.removeClass(&#039;gra-card-active&#039;); }, 2000);&lt;br /&gt;
        }&lt;br /&gt;
      }, 100);&lt;br /&gt;
    });&lt;br /&gt;
    $(CONTENT_SEL).on(&#039;click&#039;, &#039;.gra-bookmark-highlight&#039;, function(){&lt;br /&gt;
      var id = $(this).attr(&#039;data-gra-id&#039;);&lt;br /&gt;
      openPanel(&#039;bookmarks&#039;);&lt;br /&gt;
      setTimeout(function(){&lt;br /&gt;
        var $card = $paneBookmarks.find(&#039;[data-gra-id=&amp;quot;&#039;+id+&#039;&amp;quot;]&#039;);&lt;br /&gt;
        if ($card.length) $card[0].scrollIntoView({behavior:&#039;smooth&#039;, block:&#039;nearest&#039;});&lt;br /&gt;
      }, 100);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    $(document).on(&#039;keydown&#039;, function(e){&lt;br /&gt;
      if (e.key !== &#039;Escape&#039;) return;&lt;br /&gt;
      if ($fbComposer.hasClass(&#039;gra-composer-visible&#039;)) closeFeedbackComposer();&lt;br /&gt;
      else if ($ntComposer.hasClass(&#039;gra-composer-visible&#039;)) closeNoteComposer();&lt;br /&gt;
      else if ($bmComposer.hasClass(&#039;gra-composer-visible&#039;)) closeBookmarkComposer();&lt;br /&gt;
      else closePanel();&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function persistNoteHighlight(id, quote) {&lt;br /&gt;
    try {&lt;br /&gt;
      var s = JSON.parse(localStorage.getItem(NT_LS_KEY+&#039;_hl&#039;)||&#039;[]&#039;);&lt;br /&gt;
      s = s.filter(function(h){ return h.id !== id; });&lt;br /&gt;
      s.push({id:id, quote:quote});&lt;br /&gt;
      localStorage.setItem(NT_LS_KEY+&#039;_hl&#039;, JSON.stringify(s));&lt;br /&gt;
    } catch(e){}&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function restoreNoteHighlights() {&lt;br /&gt;
    var s = [];&lt;br /&gt;
    try { s = JSON.parse(localStorage.getItem(NT_LS_KEY+&#039;_hl&#039;)||&#039;[]&#039;); } catch(e){}&lt;br /&gt;
    s.forEach(function(h){&lt;br /&gt;
      if (!h.quote || !h.id) return;&lt;br /&gt;
      if (document.querySelector(&#039;[data-gra-id=&amp;quot;&#039;+h.id+&#039;&amp;quot;].gra-note-highlight&#039;)) return;&lt;br /&gt;
      var needle = h.quote.replace(/…$/,&#039;&#039;).trim().slice(0,80);&lt;br /&gt;
      if (!needle) return;&lt;br /&gt;
      var range = findTextInContent(document.querySelector(CONTENT_SEL), needle);&lt;br /&gt;
      if (!range) return;&lt;br /&gt;
      var sp = document.createElement(&#039;span&#039;);&lt;br /&gt;
      sp.className = &#039;gra-note-highlight&#039;;&lt;br /&gt;
      sp.setAttribute(&#039;data-gra-id&#039;, h.id);&lt;br /&gt;
      try { range.surroundContents(sp); } catch(e){}&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function restoreBookmarkHighlights() {&lt;br /&gt;
    _bookmarks.forEach(function(b){&lt;br /&gt;
      if (!b.quote) return;&lt;br /&gt;
      if (document.querySelector(&#039;[data-gra-id=&amp;quot;&#039;+b.id+&#039;&amp;quot;].gra-bookmark-highlight&#039;)) return;&lt;br /&gt;
      var needle = b.quote.replace(/…$/,&#039;&#039;).trim().slice(0,60);&lt;br /&gt;
      if (!needle) return;&lt;br /&gt;
      var found = findTextInContent(document.querySelector(CONTENT_SEL), needle);&lt;br /&gt;
      if (!found) return;&lt;br /&gt;
      var sp = document.createElement(&#039;span&#039;);&lt;br /&gt;
      sp.className = &#039;gra-bookmark-highlight&#039;;&lt;br /&gt;
      sp.setAttribute(&#039;data-gra-id&#039;, b.id);&lt;br /&gt;
      sp.setAttribute(&#039;data-gra-name&#039;, b.name);&lt;br /&gt;
      try { found.surroundContents(sp); } catch(e){}&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function findTextInContent(root, needle) {&lt;br /&gt;
    if (!root || !needle) return null;&lt;br /&gt;
    var text = root.textContent || &#039;&#039;;&lt;br /&gt;
    var idx  = text.indexOf(needle);&lt;br /&gt;
    if (idx &amp;lt; 0) return null;&lt;br /&gt;
    var iter = document.createNodeIterator(root, NodeFilter.SHOW_TEXT, null, false);&lt;br /&gt;
    var pos = 0, node, startNode, startOffset, endNode, endOffset;&lt;br /&gt;
    while ((node = iter.nextNode())) {&lt;br /&gt;
      var len = node.nodeValue.length;&lt;br /&gt;
      if (!startNode &amp;amp;&amp;amp; pos + len &amp;gt; idx) { startNode = node; startOffset = idx - pos; }&lt;br /&gt;
      var endIdx = idx + needle.length;&lt;br /&gt;
      if (startNode &amp;amp;&amp;amp; pos + len &amp;gt;= endIdx) { endNode = node; endOffset = endIdx - pos; break; }&lt;br /&gt;
      pos += len;&lt;br /&gt;
    }&lt;br /&gt;
    if (!startNode || !endNode) return null;&lt;br /&gt;
    try {&lt;br /&gt;
      var r = document.createRange();&lt;br /&gt;
      r.setStart(startNode, startOffset);&lt;br /&gt;
      r.setEnd(endNode, endOffset);&lt;br /&gt;
      return r;&lt;br /&gt;
    } catch(e){ return null; }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  $(function() {&lt;br /&gt;
    _mobile = window.innerWidth &amp;lt; 768 || &#039;ontouchstart&#039; in window;&lt;br /&gt;
    window.addEventListener(&#039;resize&#039;, function(){&lt;br /&gt;
      _mobile = window.innerWidth &amp;lt; 768 || &#039;ontouchstart&#039; in window;&lt;br /&gt;
    });&lt;br /&gt;
    buildDom();&lt;br /&gt;
    wireEvents();&lt;br /&gt;
    loadNotes();&lt;br /&gt;
    loadBookmarks();&lt;br /&gt;
    setTimeout(function(){&lt;br /&gt;
      try { restoreNoteHighlights(); } catch(e){}&lt;br /&gt;
      try { restoreBookmarkHighlights(); } catch(e){}&lt;br /&gt;
    }, 500);&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Gadget-GrAnnotations.js&amp;diff=6188</id>
		<title>MediaWiki:Gadget-GrAnnotations.js</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Gadget-GrAnnotations.js&amp;diff=6188"/>
		<updated>2026-06-11T07:55:43Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/**&lt;br /&gt;
 * gr_annotations.js  —  grantha.io inline Notes + Bookmarks + Feedback  (v6 + Strategy B)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* global mw, $ */&lt;br /&gt;
( function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  var CONTENT_SEL   = &#039;#mw-content-text&#039;;&lt;br /&gt;
  var BM_LS_KEY     = &#039;grantha_bm_&#039;  + ( ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039; ) ) || &#039;&#039; );&lt;br /&gt;
  var NT_LS_KEY     = &#039;grantha_nt_&#039;  + ( ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039; ) ) || &#039;&#039; );&lt;br /&gt;
  var pageTitle     = ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039; ) ) || &#039;&#039;;&lt;br /&gt;
  var currentUser   = ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgUserName&#039; ) ) || &#039;&#039;;&lt;br /&gt;
  var userInitial   = currentUser ? currentUser.charAt( 0 ).toUpperCase() : &#039;?&#039;;&lt;br /&gt;
  var currentUserEmail = &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  if ( currentUser &amp;amp;&amp;amp; window.mw ) {&lt;br /&gt;
    new mw.Api().get({ action: &#039;query&#039;, meta: &#039;userinfo&#039;, uiprop: &#039;email&#039;, formatversion: 2 })&lt;br /&gt;
      .then( function (data) {&lt;br /&gt;
        var info = data &amp;amp;&amp;amp; data.query &amp;amp;&amp;amp; data.query.userinfo;&lt;br /&gt;
        if ( info &amp;amp;&amp;amp; info.email ) currentUserEmail = info.email;&lt;br /&gt;
      } ).catch( function () {} );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ( window.mw ) {&lt;br /&gt;
    var ns = mw.config.get( &#039;wgNamespaceNumber&#039; );&lt;br /&gt;
    if ( ns &amp;lt; 0 ) return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var _selRange   = null;&lt;br /&gt;
  var _selText    = &#039;&#039;;&lt;br /&gt;
  var _selRect    = null;&lt;br /&gt;
  var _notes      = [];&lt;br /&gt;
  var _bookmarks  = [];&lt;br /&gt;
  var _activeTab  = &#039;notes&#039;;&lt;br /&gt;
  var _selVersion = 0;&lt;br /&gt;
  var _fabSelVer  = -1;&lt;br /&gt;
  var _mobile     = window.innerWidth &amp;lt; 768 || &#039;ontouchstart&#039; in window;&lt;br /&gt;
  var _fabTouched = false;  // flag to prevent hideActions when tapping fab&lt;br /&gt;
&lt;br /&gt;
  function uid() { return &#039;gra_&#039; + Date.now() + &#039;_&#039; + Math.random().toString(36).slice(2,7); }&lt;br /&gt;
  function esc(s) {&lt;br /&gt;
    return String(s||&#039;&#039;).replace(/&amp;amp;/g,&#039;&amp;amp;amp;&#039;).replace(/&amp;lt;/g,&#039;&amp;amp;lt;&#039;)&lt;br /&gt;
                        .replace(/&amp;gt;/g,&#039;&amp;amp;gt;&#039;).replace(/&amp;quot;/g,&#039;&amp;amp;quot;&#039;);&lt;br /&gt;
  }&lt;br /&gt;
  function nowIso() { return new Date().toISOString().replace(/\.\d{3}Z$/,&#039;Z&#039;); }&lt;br /&gt;
  function fmtTs(ts) {&lt;br /&gt;
    try {&lt;br /&gt;
      var d = new Date(ts);&lt;br /&gt;
      return d.toLocaleDateString(&#039;en-IN&#039;,{day:&#039;numeric&#039;,month:&#039;short&#039;,year:&#039;numeric&#039;})&lt;br /&gt;
           + &#039; &#039; + d.toLocaleTimeString(&#039;en-IN&#039;,{hour:&#039;2-digit&#039;,minute:&#039;2-digit&#039;,hour12:false});&lt;br /&gt;
    } catch(e){ return ts; }&lt;br /&gt;
  }&lt;br /&gt;
  function clamp(v,lo,hi){ return Math.max(lo,Math.min(hi,v)); }&lt;br /&gt;
  function isMobile() { return _mobile; }&lt;br /&gt;
&lt;br /&gt;
  var $fab, $mobileBar, $panel, $backdrop;&lt;br /&gt;
  var $ntComposer, $ntInput, $ntSubmit;&lt;br /&gt;
  var $bmComposer, $bmInput, $bmSubmit;&lt;br /&gt;
  var $fbComposer, $fbIssueType, $fbText, $fbEmail, $fbSubmit, $fbQuote;&lt;br /&gt;
  var $tabNotes, $tabBookmarks, $paneNotes, $paneBookmarks;&lt;br /&gt;
&lt;br /&gt;
  function buildDom() {&lt;br /&gt;
    $fab = $( [&lt;br /&gt;
      &#039;&amp;lt;div id=&amp;quot;gra-fab&amp;quot; role=&amp;quot;toolbar&amp;quot; aria-label=&amp;quot;Feedback / Notes / Bookmark&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;button class=&amp;quot;gra-fab-btn&amp;quot; id=&amp;quot;gra-fab-note&amp;quot; type=&amp;quot;button&amp;quot; aria-label=&amp;quot;Note&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-icon gra-icon-note&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-fab-btn-label&amp;quot;&amp;gt;Note&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;button class=&amp;quot;gra-fab-btn&amp;quot; id=&amp;quot;gra-fab-bookmark&amp;quot; type=&amp;quot;button&amp;quot; aria-label=&amp;quot;Mark&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-icon gra-icon-bookmark&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-fab-btn-label&amp;quot;&amp;gt;Mark&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;button class=&amp;quot;gra-fab-btn&amp;quot; id=&amp;quot;gra-fab-feedback&amp;quot; type=&amp;quot;button&amp;quot; aria-label=&amp;quot;Feedback&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-icon gra-icon-feedback&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-fab-btn-label&amp;quot;&amp;gt;Feedback&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;button class=&amp;quot;gra-fab-btn&amp;quot; id=&amp;quot;gra-fab-search&amp;quot; type=&amp;quot;button&amp;quot; aria-label=&amp;quot;Search&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-icon gra-icon-search&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-fab-btn-label&amp;quot;&amp;gt;Search&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;button class=&amp;quot;gra-fab-btn gra-fab-btn-dismiss&amp;quot; id=&amp;quot;gra-fab-dismiss&amp;quot; type=&amp;quot;button&amp;quot; aria-label=&amp;quot;Dismiss&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-icon gra-icon-dismiss&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;\u2715&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-fab-btn-label&amp;quot;&amp;gt;Close&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
    ].join(&#039;&#039;) );&lt;br /&gt;
    $(&#039;body&#039;).append($fab);&lt;br /&gt;
&lt;br /&gt;
    $mobileBar = $(&#039;&amp;lt;div id=&amp;quot;gra-mobile-bar&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
    $(&#039;body&#039;).append($mobileBar);&lt;br /&gt;
&lt;br /&gt;
    $fbComposer = $( [&lt;br /&gt;
      &#039;&amp;lt;div class=&amp;quot;gra-composer&amp;quot; id=&amp;quot;gra-fb-composer&amp;quot; role=&amp;quot;dialog&amp;quot; aria-label=&amp;quot;Send feedback&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-composer-header&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-icon gra-icon-feedback&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;strong&amp;gt;Feedback&amp;lt;/strong&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button class=&amp;quot;gra-btn-x&amp;quot; id=&amp;quot;gra-fb-close&amp;quot; title=&amp;quot;Close&amp;quot;&amp;gt;✕&amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-fb-quote-label&amp;quot;&amp;gt;Selected text:&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-fb-quote&amp;quot; id=&amp;quot;gra-fb-quote&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-fb-field-label&amp;quot;&amp;gt;Issue type&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;select class=&amp;quot;gra-fb-select&amp;quot; id=&amp;quot;gra-fb-issue&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;option value=&amp;quot;&amp;quot;&amp;gt;— Choose —&amp;lt;/option&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;option value=&amp;quot;wrong_text&amp;quot;&amp;gt;Formatting error&amp;lt;/option&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;option value=&amp;quot;reference_issue&amp;quot;&amp;gt;Reference issue&amp;lt;/option&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;option value=&amp;quot;spelling_mistake&amp;quot;&amp;gt;Spelling mistake&amp;lt;/option&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;option value=&amp;quot;other&amp;quot;&amp;gt;Other&amp;lt;/option&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/select&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-fb-field-label&amp;quot;&amp;gt;Details (optional)&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;textarea class=&amp;quot;gra-composer-input&amp;quot; id=&amp;quot;gra-fb-text&amp;quot; placeholder=&amp;quot;Describe the issue…&amp;quot; rows=&amp;quot;3&amp;quot;&amp;gt;&amp;lt;/textarea&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-fb-field-label&amp;quot;&amp;gt;Your email (optional)&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;input class=&amp;quot;gra-composer-input gra-fb-email-input&amp;quot; id=&amp;quot;gra-fb-email&amp;quot; type=&amp;quot;email&amp;quot; placeholder=&amp;quot;you@example.com&amp;quot; autocomplete=&amp;quot;email&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-composer-actions&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button class=&amp;quot;gra-btn-cancel&amp;quot; id=&amp;quot;gra-fb-cancel&amp;quot;&amp;gt;Cancel&amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button class=&amp;quot;gra-btn-submit&amp;quot; id=&amp;quot;gra-fb-submit&amp;quot; disabled&amp;gt;Send&amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-fb-status&amp;quot; id=&amp;quot;gra-fb-status&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
    ].join(&#039;&#039;) );&lt;br /&gt;
    $(&#039;body&#039;).append($fbComposer);&lt;br /&gt;
&lt;br /&gt;
    $ntComposer = $( [&lt;br /&gt;
      &#039;&amp;lt;div class=&amp;quot;gra-composer&amp;quot; id=&amp;quot;gra-nt-composer&amp;quot; role=&amp;quot;dialog&amp;quot; aria-label=&amp;quot;Add note&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-composer-user&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;div class=&amp;quot;gra-avatar&amp;quot;&amp;gt;&#039; + esc(currentUser ? userInitial : &#039;✎&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;div class=&amp;quot;gra-composer-uname&amp;quot;&amp;gt;&#039; + esc(currentUser || &#039;Notes&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;textarea class=&amp;quot;gra-composer-input&amp;quot; id=&amp;quot;gra-nt-input&amp;quot; placeholder=&amp;quot;Write a note…&amp;quot; rows=&amp;quot;3&amp;quot;&amp;gt;&amp;lt;/textarea&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-composer-actions&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button class=&amp;quot;gra-btn-cancel&amp;quot; id=&amp;quot;gra-nt-cancel&amp;quot;&amp;gt;Cancel&amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button class=&amp;quot;gra-btn-submit&amp;quot; id=&amp;quot;gra-nt-submit&amp;quot; disabled&amp;gt;Save Note&amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
    ].join(&#039;&#039;) );&lt;br /&gt;
    $(&#039;body&#039;).append($ntComposer);&lt;br /&gt;
&lt;br /&gt;
    $bmComposer = $( [&lt;br /&gt;
      &#039;&amp;lt;div class=&amp;quot;gra-bm-composer&amp;quot; id=&amp;quot;gra-bm-composer&amp;quot; role=&amp;quot;dialog&amp;quot; aria-label=&amp;quot;Bookmark&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-bm-composer-label&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-icon gra-icon-bookmark&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;    Save bookmark&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;input class=&amp;quot;gra-composer-input&amp;quot; id=&amp;quot;gra-bm-input&amp;quot; type=&amp;quot;text&amp;quot; placeholder=&amp;quot;Name this bookmark…&amp;quot; autocomplete=&amp;quot;off&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-composer-actions&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button class=&amp;quot;gra-btn-cancel&amp;quot; id=&amp;quot;gra-bm-cancel&amp;quot;&amp;gt;Cancel&amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button class=&amp;quot;gra-btn-submit&amp;quot; id=&amp;quot;gra-bm-submit&amp;quot;&amp;gt;Save&amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
    ].join(&#039;&#039;) );&lt;br /&gt;
    $(&#039;body&#039;).append($bmComposer);&lt;br /&gt;
&lt;br /&gt;
    $panel = $( [&lt;br /&gt;
      &#039;&amp;lt;div id=&amp;quot;gra-panel&amp;quot; role=&amp;quot;complementary&amp;quot; aria-label=&amp;quot;Notes&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div id=&amp;quot;gra-panel-head&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;div id=&amp;quot;gra-panel-title&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button id=&amp;quot;gra-panel-close&amp;quot; title=&amp;quot;Close&amp;quot;&amp;gt;✕&amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div id=&amp;quot;gra-tabs&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button class=&amp;quot;gra-tab gra-tab-active&amp;quot; id=&amp;quot;gra-tab-notes&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;      &amp;lt;span class=&amp;quot;gra-icon gra-icon-note&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; Notes&#039;,&lt;br /&gt;
      &#039;    &amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button class=&amp;quot;gra-tab&amp;quot; id=&amp;quot;gra-tab-bookmarks&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;      &amp;lt;span class=&amp;quot;gra-icon gra-icon-bookmark&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; Bookmarks&#039;,&lt;br /&gt;
      &#039;    &amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div id=&amp;quot;gra-panel-body&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;div class=&amp;quot;gra-pane gra-pane-active&amp;quot; id=&amp;quot;gra-pane-notes&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;div class=&amp;quot;gra-pane&amp;quot; id=&amp;quot;gra-pane-bookmarks&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
    ].join(&#039;&#039;) );&lt;br /&gt;
    $(&#039;body&#039;).append($panel);&lt;br /&gt;
&lt;br /&gt;
    $backdrop = $(&#039;&amp;lt;div id=&amp;quot;gra-backdrop&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
    $(&#039;body&#039;).append($backdrop);&lt;br /&gt;
&lt;br /&gt;
    var $toggle = $( [&lt;br /&gt;
      &#039;&amp;lt;button id=&amp;quot;gra-toggle&amp;quot; aria-label=&amp;quot;Notes&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;span class=&amp;quot;gra-icon gra-icon-note&amp;quot; id=&amp;quot;gra-toggle-icon&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;span id=&amp;quot;gra-toggle-badge&amp;quot; aria-live=&amp;quot;polite&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;&amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
    ].join(&#039;&#039;) );&lt;br /&gt;
    $(&#039;body&#039;).append($toggle);&lt;br /&gt;
    $toggle.on(&#039;click&#039;, function() {&lt;br /&gt;
      $panel.hasClass(&#039;gra-panel-open&#039;) ? closePanel() : openPanel(_activeTab);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    $(&#039;#gra-panel-title&#039;).text(pageTitle.replace(/_/g,&#039; &#039;).split(&#039;/&#039;)[0].slice(0,30));&lt;br /&gt;
    $tabNotes     = $(&#039;#gra-tab-notes&#039;);&lt;br /&gt;
    $tabBookmarks = $(&#039;#gra-tab-bookmarks&#039;);&lt;br /&gt;
    $paneNotes    = $(&#039;#gra-pane-notes&#039;);&lt;br /&gt;
    $paneBookmarks= $(&#039;#gra-pane-bookmarks&#039;);&lt;br /&gt;
    $ntInput      = $(&#039;#gra-nt-input&#039;);&lt;br /&gt;
    $ntSubmit     = $(&#039;#gra-nt-submit&#039;);&lt;br /&gt;
    $bmInput      = $(&#039;#gra-bm-input&#039;);&lt;br /&gt;
    $bmSubmit     = $(&#039;#gra-bm-submit&#039;);&lt;br /&gt;
    $fbIssueType  = $(&#039;#gra-fb-issue&#039;);&lt;br /&gt;
    $fbText       = $(&#039;#gra-fb-text&#039;);&lt;br /&gt;
    $fbEmail      = $(&#039;#gra-fb-email&#039;);&lt;br /&gt;
    $fbSubmit     = $(&#039;#gra-fb-submit&#039;);&lt;br /&gt;
    $fbQuote      = $(&#039;#gra-fb-quote&#039;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function captureSelection() {&lt;br /&gt;
    var sel = window.getSelection();&lt;br /&gt;
    if (!sel || sel.isCollapsed || !sel.rangeCount) return false;&lt;br /&gt;
    var range = sel.getRangeAt(0);&lt;br /&gt;
    var text  = sel.toString().trim();&lt;br /&gt;
    if (!text || text.length &amp;lt; 2) return false;&lt;br /&gt;
    var contentEl = document.querySelector(CONTENT_SEL);&lt;br /&gt;
    if (!contentEl) return false;&lt;br /&gt;
    var ancestor = range.commonAncestorContainer;&lt;br /&gt;
    if (ancestor.nodeType === 3) ancestor = ancestor.parentNode;&lt;br /&gt;
    if (!ancestor || !contentEl.contains(ancestor)) return false;&lt;br /&gt;
    var _editorEl = document.getElementById(&#039;se-surface&#039;) ||&lt;br /&gt;
                    document.querySelector(&#039;.se-outer&#039;);&lt;br /&gt;
    if ( _editorEl &amp;amp;&amp;amp; _editorEl.contains(ancestor) ) return false;&lt;br /&gt;
    _selText  = text;&lt;br /&gt;
    _selRect  = range.getBoundingClientRect();&lt;br /&gt;
    try { _selRange = range.cloneRange(); }&lt;br /&gt;
    catch(e){ _selRange = null; }&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function reCaptureFromDOM() {&lt;br /&gt;
    if (!_selText) return false;&lt;br /&gt;
    var contentEl = document.querySelector(CONTENT_SEL);&lt;br /&gt;
    if (!contentEl) return false;&lt;br /&gt;
    var found = findTextInContent(contentEl, _selText.slice(0,80).replace(/…$/,&#039;&#039;).trim());&lt;br /&gt;
    if (!found) return false;&lt;br /&gt;
    _selRange = found;&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function tryShowActions() {&lt;br /&gt;
    if ($fbComposer &amp;amp;&amp;amp; $fbComposer.hasClass(&#039;gra-composer-visible&#039;)) return;&lt;br /&gt;
    if ($ntComposer &amp;amp;&amp;amp; $ntComposer.hasClass(&#039;gra-composer-visible&#039;)) return;&lt;br /&gt;
    if ($bmComposer &amp;amp;&amp;amp; $bmComposer.hasClass(&#039;gra-composer-visible&#039;)) return;&lt;br /&gt;
    if (!captureSelection()) { hideActions(); return; }&lt;br /&gt;
    _fabSelVer = _selVersion;&lt;br /&gt;
    showFab(_selRect);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function showFab(rect) {&lt;br /&gt;
    if (!rect) return;&lt;br /&gt;
    var fabW, fabH, top, left;&lt;br /&gt;
    if (_mobile) {&lt;br /&gt;
      /* Docked as a fixed bar below the reader toolbar.&lt;br /&gt;
         All positioning is handled by CSS via .gra-fab-mobile-docked,&lt;br /&gt;
         so it never collides with the native selection menu and never&lt;br /&gt;
         clips at screen edges or causes horizontal scroll. */&lt;br /&gt;
      $fab.css({ position: &#039;&#039;, top: &#039;&#039;, left: &#039;&#039;, visibility: &#039;&#039; })&lt;br /&gt;
          .addClass(&#039;gra-fab-visible gra-fab-mobile-docked&#039;);&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    fabW = 46; fabH = 126;&lt;br /&gt;
    top  = rect.top + (rect.height / 2) - (fabH / 2);&lt;br /&gt;
    left = rect.right + 10;&lt;br /&gt;
    if (left + fabW &amp;gt; window.innerWidth - 8) left = rect.left - fabW - 10;&lt;br /&gt;
    top  = clamp(top,  8, window.innerHeight - fabH - 8);&lt;br /&gt;
    left = clamp(left, 8, window.innerWidth  - fabW - 8);&lt;br /&gt;
    $fab.css({ top: top + &#039;px&#039;, left: left + &#039;px&#039; }).addClass(&#039;gra-fab-visible&#039;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function hideFab() { $fab.removeClass(&#039;gra-fab-visible gra-fab-mobile-docked&#039;); }&lt;br /&gt;
  function hideActions() { hideFab(); }&lt;br /&gt;
&lt;br /&gt;
  function wrapSelection(id, cssClass) {&lt;br /&gt;
    var range = _selRange;&lt;br /&gt;
    _selRange = null;&lt;br /&gt;
    if (!range) return null;&lt;br /&gt;
    try {&lt;br /&gt;
      if (!document.contains(range.startContainer) ||&lt;br /&gt;
          !document.contains(range.endContainer)) return null;&lt;br /&gt;
    } catch(e) { return null; }&lt;br /&gt;
    function makeSpan() {&lt;br /&gt;
      var sp = document.createElement(&#039;span&#039;);&lt;br /&gt;
      sp.className = cssClass;&lt;br /&gt;
      sp.setAttribute(&#039;data-gra-id&#039;, id);&lt;br /&gt;
      return sp;&lt;br /&gt;
    }&lt;br /&gt;
    try {&lt;br /&gt;
      var span = makeSpan();&lt;br /&gt;
      range.surroundContents(span);&lt;br /&gt;
      if (span.parentNode) return span;&lt;br /&gt;
    } catch(e) {}&lt;br /&gt;
    try {&lt;br /&gt;
      var frag = range.extractContents();&lt;br /&gt;
      var sp2  = makeSpan();&lt;br /&gt;
      sp2.appendChild(frag);&lt;br /&gt;
      range.insertNode(sp2);&lt;br /&gt;
      if (sp2 &amp;amp;&amp;amp; sp2.parentNode) return sp2;&lt;br /&gt;
    } catch(e2) {}&lt;br /&gt;
    return null;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function openFeedbackComposer() {&lt;br /&gt;
    hideActions();&lt;br /&gt;
    $fbQuote.text(_selText.slice(0,200) + (_selText.length &amp;gt; 200 ? &#039;…&#039; : &#039;&#039;));&lt;br /&gt;
    $fbIssueType.val(&#039;&#039;);&lt;br /&gt;
    $fbText.val(&#039;&#039;);&lt;br /&gt;
    $fbSubmit.prop(&#039;disabled&#039;, true);&lt;br /&gt;
    $(&#039;#gra-fb-status&#039;).text(&#039;&#039;).removeClass(&#039;gra-fb-ok gra-fb-err&#039;);&lt;br /&gt;
    if (currentUserEmail) $fbEmail.val(currentUserEmail);&lt;br /&gt;
    else $fbEmail.val(&#039;&#039;);&lt;br /&gt;
    if (!_mobile) $fbComposer.css({top:&#039;&#039;, left:&#039;&#039;, transform:&#039;&#039;});&lt;br /&gt;
    $fbComposer.addClass(&#039;gra-composer-visible&#039;);&lt;br /&gt;
    $backdrop.addClass(&#039;gra-backdrop-visible&#039;);&lt;br /&gt;
    setTimeout(function(){ $fbIssueType.focus(); }, isMobile() ? 300 : 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function closeFeedbackComposer() {&lt;br /&gt;
    $fbComposer.removeClass(&#039;gra-composer-visible&#039;);&lt;br /&gt;
    $backdrop.removeClass(&#039;gra-backdrop-visible&#039;);&lt;br /&gt;
    _selRange = null; _selText = &#039;&#039;; _selRect = null;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function submitFeedback() {&lt;br /&gt;
    var issueType = $fbIssueType.val();&lt;br /&gt;
    var details   = $fbText.val().trim();&lt;br /&gt;
    var email     = $fbEmail.val().trim();&lt;br /&gt;
    var quote     = $fbQuote.text();&lt;br /&gt;
    if (!issueType) return;&lt;br /&gt;
    $fbSubmit.prop(&#039;disabled&#039;, true).text(&#039;Sending…&#039;);&lt;br /&gt;
    $(&#039;#gra-fb-status&#039;).text(&#039;&#039;).removeClass(&#039;gra-fb-ok gra-fb-err&#039;);&lt;br /&gt;
    var issueLabels = {&lt;br /&gt;
      wrong_text: &#039;Formatting error&#039;, reference_issue: &#039;Reference issue&#039;,&lt;br /&gt;
      spelling_mistake: &#039;Spelling mistake&#039;, other: &#039;Other&#039;&lt;br /&gt;
    };&lt;br /&gt;
    var payload = new FormData();&lt;br /&gt;
    payload.append(&#039;issue_type&#039;,    issueLabels[issueType] || issueType);&lt;br /&gt;
    payload.append(&#039;page&#039;,          pageTitle.replace(/_/g,&#039; &#039;));&lt;br /&gt;
    payload.append(&#039;url&#039;,           window.location.href);&lt;br /&gt;
    payload.append(&#039;selected_text&#039;, quote);&lt;br /&gt;
    payload.append(&#039;details&#039;,       details || &#039;&#039;);&lt;br /&gt;
    payload.append(&#039;user_email&#039;,    email || currentUserEmail || &#039;&#039;);&lt;br /&gt;
    payload.append(&#039;wiki_user&#039;,     currentUser || &#039;anonymous&#039;);&lt;br /&gt;
    fetch(&#039;/feedback.php&#039;, {method:&#039;POST&#039;, body:payload})&lt;br /&gt;
      .then(function(r){ return r.json(); })&lt;br /&gt;
      .then(function(data){&lt;br /&gt;
        if (data &amp;amp;&amp;amp; data.ok) showFeedbackSuccess();&lt;br /&gt;
        else showFeedbackError(data &amp;amp;&amp;amp; data.error ? data.error : &#039;Could not send.&#039;);&lt;br /&gt;
      })&lt;br /&gt;
      .catch(function(){ showFeedbackError(&#039;Network error. Please try again.&#039;); });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function showFeedbackSuccess() {&lt;br /&gt;
    $fbSubmit.prop(&#039;disabled&#039;, false).text(&#039;Send&#039;);&lt;br /&gt;
    $(&#039;#gra-fb-status&#039;).text(&#039;✓ Feedback sent. Thank you!&#039;).addClass(&#039;gra-fb-ok&#039;);&lt;br /&gt;
    setTimeout(closeFeedbackComposer, 2500);&lt;br /&gt;
  }&lt;br /&gt;
  function showFeedbackError(msg) {&lt;br /&gt;
    $fbSubmit.prop(&#039;disabled&#039;, false).text(&#039;Send&#039;);&lt;br /&gt;
    $(&#039;#gra-fb-status&#039;).text(&#039;✗ &#039; + msg).addClass(&#039;gra-fb-err&#039;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function openNoteComposer() {&lt;br /&gt;
    hideActions();&lt;br /&gt;
    if (!_mobile) $ntComposer.css({ top: &#039;&#039;, left: &#039;&#039;, transform: &#039;&#039; });&lt;br /&gt;
    $ntComposer.addClass(&#039;gra-composer-visible&#039;);&lt;br /&gt;
    $backdrop.addClass(&#039;gra-backdrop-visible&#039;);&lt;br /&gt;
    setTimeout(function(){ $ntInput.focus(); }, isMobile() ? 300 : 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function closeNoteComposer() {&lt;br /&gt;
    $ntComposer.removeClass(&#039;gra-composer-visible&#039;);&lt;br /&gt;
    $backdrop.removeClass(&#039;gra-backdrop-visible&#039;);&lt;br /&gt;
    $ntInput.val(&#039;&#039;);&lt;br /&gt;
    $ntSubmit.prop(&#039;disabled&#039;, true);&lt;br /&gt;
    _selRange = null; _selText = &#039;&#039;; _selRect = null;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function submitNote() {&lt;br /&gt;
    var text = $ntInput.val().trim();&lt;br /&gt;
    if (!text) return;&lt;br /&gt;
    var id    = uid();&lt;br /&gt;
    var ts    = nowIso();&lt;br /&gt;
    var quote = _selText.slice(0,120) + (_selText.length &amp;gt; 120 ? &#039;…&#039; : &#039;&#039;);&lt;br /&gt;
    if (!_selRange &amp;amp;&amp;amp; _selText) reCaptureFromDOM();&lt;br /&gt;
    var span  = wrapSelection(id, &#039;gra-note-highlight&#039;);&lt;br /&gt;
    if (span) span.setAttribute(&#039;data-gra-quote&#039;, quote);&lt;br /&gt;
    _notes.push({id:id, ts:ts, quote:quote, text:text});&lt;br /&gt;
    persistNotes();&lt;br /&gt;
    persistNoteHighlight(id, quote);&lt;br /&gt;
    renderNoteCards();&lt;br /&gt;
    closeNoteComposer();&lt;br /&gt;
    openPanel(&#039;notes&#039;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function persistNotes() {&lt;br /&gt;
    try { localStorage.setItem(NT_LS_KEY, JSON.stringify(_notes)); } catch(e){}&lt;br /&gt;
  }&lt;br /&gt;
  function loadNotes() {&lt;br /&gt;
    try { var r = localStorage.getItem(NT_LS_KEY); if (r) _notes = JSON.parse(r)||[]; } catch(e){}&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function openBookmarkComposer() {&lt;br /&gt;
    hideActions();&lt;br /&gt;
    if (!_mobile) $bmComposer.css({ top: &#039;&#039;, left: &#039;&#039;, transform: &#039;&#039; });&lt;br /&gt;
    $bmComposer.addClass(&#039;gra-composer-visible&#039;);&lt;br /&gt;
    $backdrop.addClass(&#039;gra-backdrop-visible&#039;);&lt;br /&gt;
    setTimeout(function(){ $bmInput.focus(); }, isMobile() ? 300 : 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function closeBookmarkComposer() {&lt;br /&gt;
    $bmComposer.removeClass(&#039;gra-composer-visible&#039;);&lt;br /&gt;
    $backdrop.removeClass(&#039;gra-backdrop-visible&#039;);&lt;br /&gt;
    $bmInput.val(&#039;&#039;);&lt;br /&gt;
    _selRange = null; _selText = &#039;&#039;; _selRect = null;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function submitBookmark() {&lt;br /&gt;
    var name  = $bmInput.val().trim() || (&#039;Bookmark &#039; + (_bookmarks.length+1));&lt;br /&gt;
    var id    = uid();&lt;br /&gt;
    var quote = _selText.slice(0,120) + (_selText.length &amp;gt; 120 ? &#039;…&#039; : &#039;&#039;);&lt;br /&gt;
    if (!_selRange &amp;amp;&amp;amp; _selText) reCaptureFromDOM();&lt;br /&gt;
    var span  = wrapSelection(id, &#039;gra-bookmark-highlight&#039;);&lt;br /&gt;
    if (span) { span.setAttribute(&#039;data-gra-id&#039;, id); span.setAttribute(&#039;data-gra-name&#039;, name); }&lt;br /&gt;
    _bookmarks.push({id:id, name:name, quote:quote, ts:nowIso()});&lt;br /&gt;
    persistBookmarks();&lt;br /&gt;
    renderBookmarkCards();&lt;br /&gt;
    closeBookmarkComposer();&lt;br /&gt;
    openPanel(&#039;bookmarks&#039;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function deleteBookmark(id) {&lt;br /&gt;
    _bookmarks = _bookmarks.filter(function(b){ return b.id !== id; });&lt;br /&gt;
    var span = document.querySelector(&#039;[data-gra-id=&amp;quot;&#039;+id+&#039;&amp;quot;].gra-bookmark-highlight&#039;);&lt;br /&gt;
    if (span &amp;amp;&amp;amp; span.parentNode) {&lt;br /&gt;
      var p = span.parentNode;&lt;br /&gt;
      while (span.firstChild) p.insertBefore(span.firstChild, span);&lt;br /&gt;
      p.removeChild(span);&lt;br /&gt;
    }&lt;br /&gt;
    persistBookmarks(); renderBookmarkCards();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function persistBookmarks() {&lt;br /&gt;
    try { localStorage.setItem(BM_LS_KEY, JSON.stringify(_bookmarks)); } catch(e){}&lt;br /&gt;
  }&lt;br /&gt;
  function loadBookmarks() {&lt;br /&gt;
    try { var r = localStorage.getItem(BM_LS_KEY); if (r) _bookmarks = JSON.parse(r)||[]; } catch(e){}&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function openPanel(tab) {&lt;br /&gt;
    _activeTab = tab || _activeTab;&lt;br /&gt;
    switchTab(_activeTab);&lt;br /&gt;
    $panel.addClass(&#039;gra-panel-open&#039;);&lt;br /&gt;
    $backdrop.addClass(&#039;gra-backdrop-visible&#039;);&lt;br /&gt;
  }&lt;br /&gt;
  function closePanel() {&lt;br /&gt;
    $panel.removeClass(&#039;gra-panel-open&#039;);&lt;br /&gt;
    $backdrop.removeClass(&#039;gra-backdrop-visible&#039;);&lt;br /&gt;
  }&lt;br /&gt;
  function switchTab(tab) {&lt;br /&gt;
    _activeTab = tab;&lt;br /&gt;
    $tabNotes.toggleClass(&#039;gra-tab-active&#039;, tab===&#039;notes&#039;);&lt;br /&gt;
    $tabBookmarks.toggleClass(&#039;gra-tab-active&#039;, tab===&#039;bookmarks&#039;);&lt;br /&gt;
    $paneNotes.toggleClass(&#039;gra-pane-active&#039;, tab===&#039;notes&#039;);&lt;br /&gt;
    $paneBookmarks.toggleClass(&#039;gra-pane-active&#039;, tab===&#039;bookmarks&#039;);&lt;br /&gt;
    if (tab===&#039;notes&#039;) renderNoteCards();&lt;br /&gt;
    else renderBookmarkCards();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function renderNoteCards() {&lt;br /&gt;
    if (!_notes.length) {&lt;br /&gt;
      $paneNotes.html(&#039;&amp;lt;div class=&amp;quot;gra-empty-state&amp;quot;&amp;gt;No notes yet.&amp;lt;br&amp;gt;Select text and tap ✎ to add one.&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    var html = &#039;&#039;;&lt;br /&gt;
    _notes.slice().reverse().forEach(function(n){&lt;br /&gt;
      html += &#039;&amp;lt;div class=&amp;quot;gra-note-card&amp;quot; data-gra-id=&amp;quot;&#039;+esc(n.id)+&#039;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;div class=&amp;quot;gra-card-header&amp;quot;&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;div class=&amp;quot;gra-avatar&amp;quot;&amp;gt;✎&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;div class=&amp;quot;gra-card-meta&amp;quot;&amp;gt;&#039;&lt;br /&gt;
            + (n.ts ? &#039;&amp;lt;div class=&amp;quot;gra-card-ts&amp;quot;&amp;gt;&#039;+esc(fmtTs(n.ts))+&#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039;)&lt;br /&gt;
            + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;button class=&amp;quot;gra-note-del&amp;quot; data-del-id=&amp;quot;&#039;+esc(n.id)+&#039;&amp;quot; title=&amp;quot;Delete&amp;quot;&amp;gt;×&amp;lt;/button&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
            + (n.quote ? &#039;&amp;lt;div class=&amp;quot;gra-card-quote&amp;quot;&amp;gt;&#039;+esc(n.quote)+&#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039;)&lt;br /&gt;
            + &#039;&amp;lt;div class=&amp;quot;gra-card-text&amp;quot;&amp;gt;&#039;+esc(n.text)+&#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    });&lt;br /&gt;
    $paneNotes.html(html);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function deleteNote(id) {&lt;br /&gt;
    _notes = _notes.filter(function(n){ return n.id !== id; });&lt;br /&gt;
    var span = document.querySelector(&#039;[data-gra-id=&amp;quot;&#039;+id+&#039;&amp;quot;].gra-note-highlight&#039;);&lt;br /&gt;
    if (span &amp;amp;&amp;amp; span.parentNode) {&lt;br /&gt;
      var p = span.parentNode;&lt;br /&gt;
      while (span.firstChild) p.insertBefore(span.firstChild, span);&lt;br /&gt;
      p.removeChild(span);&lt;br /&gt;
    }&lt;br /&gt;
    try {&lt;br /&gt;
      var s = JSON.parse(localStorage.getItem(NT_LS_KEY+&#039;_hl&#039;)||&#039;[]&#039;);&lt;br /&gt;
      s = s.filter(function(h){ return h.id !== id; });&lt;br /&gt;
      localStorage.setItem(NT_LS_KEY+&#039;_hl&#039;, JSON.stringify(s));&lt;br /&gt;
    } catch(e){}&lt;br /&gt;
    persistNotes(); renderNoteCards();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function renderBookmarkCards() {&lt;br /&gt;
    if (!_bookmarks.length) {&lt;br /&gt;
      $paneBookmarks.html(&#039;&amp;lt;div class=&amp;quot;gra-empty-state&amp;quot;&amp;gt;No bookmarks yet.&amp;lt;br&amp;gt;Select text and tap 🔖 to save one.&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    var html = &#039;&#039;;&lt;br /&gt;
    _bookmarks.slice().reverse().forEach(function(b){&lt;br /&gt;
      html += &#039;&amp;lt;div class=&amp;quot;gra-bookmark-card&amp;quot; data-gra-id=&amp;quot;&#039;+esc(b.id)+&#039;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;span class=&amp;quot;gra-icon gra-icon-bookmark&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;div class=&amp;quot;gra-bookmark-info&amp;quot;&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;div class=&amp;quot;gra-bookmark-name&amp;quot;&amp;gt;&#039;+esc(b.name)+&#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
            + (b.quote ? &#039;&amp;lt;div class=&amp;quot;gra-bookmark-quote&amp;quot;&amp;gt;&#039;+esc(b.quote)+&#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039;)&lt;br /&gt;
            + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;button class=&amp;quot;gra-bookmark-del&amp;quot; data-del-id=&amp;quot;&#039;+esc(b.id)+&#039;&amp;quot; title=&amp;quot;Remove&amp;quot;&amp;gt;×&amp;lt;/button&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    });&lt;br /&gt;
    $paneBookmarks.html(html);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function scrollToHighlight(id) {&lt;br /&gt;
    var el = document.querySelector(&#039;[data-gra-id=&amp;quot;&#039;+id+&#039;&amp;quot;]&#039;);&lt;br /&gt;
    if (!el) return;&lt;br /&gt;
    el.scrollIntoView({behavior:&#039;smooth&#039;, block:&#039;center&#039;});&lt;br /&gt;
    el.classList.add(&#039;gra-hl-active&#039;);&lt;br /&gt;
    setTimeout(function(){ el.classList.remove(&#039;gra-hl-active&#039;); }, 2000);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function wireEvents() {&lt;br /&gt;
&lt;br /&gt;
    /* Suppress native context menu inside article content (Android/desktop) */&lt;br /&gt;
    document.addEventListener(&#039;contextmenu&#039;, function(e) {&lt;br /&gt;
      var tag = e.target.tagName;&lt;br /&gt;
      if (tag === &#039;INPUT&#039; || tag === &#039;TEXTAREA&#039; || tag === &#039;SELECT&#039;) return;&lt;br /&gt;
      var c = document.querySelector(CONTENT_SEL);&lt;br /&gt;
      if (c &amp;amp;&amp;amp; c.contains(e.target)) e.preventDefault();&lt;br /&gt;
    }, { passive: false });&lt;br /&gt;
&lt;br /&gt;
    /* Desktop mouseup */&lt;br /&gt;
    $(document).on(&#039;mouseup&#039;, function(e){&lt;br /&gt;
      if (e.button !== 0) return;&lt;br /&gt;
      if (_mobile) return;&lt;br /&gt;
      setTimeout(tryShowActions, 20);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    /* Separate timers so mobile + desktop never clobber each other */&lt;br /&gt;
    var _selTimer    = null;  /* desktop debounce */&lt;br /&gt;
    var _mobShowTimer = null; /* mobile show-on-touchend */&lt;br /&gt;
&lt;br /&gt;
    /* Mobile: show fab quickly after finger lifts (selection settled).&lt;br /&gt;
       180ms feels instant while still letting the range stabilise. */&lt;br /&gt;
    document.addEventListener(&#039;touchend&#039;, function(e) {&lt;br /&gt;
      if (!_mobile) return;&lt;br /&gt;
      if ($fab[0] &amp;amp;&amp;amp; $fab[0].contains(e.target)) return;&lt;br /&gt;
      clearTimeout(_mobShowTimer);&lt;br /&gt;
      _mobShowTimer = setTimeout(function() {&lt;br /&gt;
        var sel = window.getSelection();&lt;br /&gt;
        if (!sel || sel.isCollapsed || !sel.toString().trim()) return;&lt;br /&gt;
        tryShowActions();&lt;br /&gt;
      }, 180);&lt;br /&gt;
    }, { passive: true });&lt;br /&gt;
&lt;br /&gt;
    /* Mobile: only HIDE the fab when selection is cleared while it&#039;s visible.&lt;br /&gt;
       (Reposition isn&#039;t needed now that the bar is docked, and re-running&lt;br /&gt;
       showFab here was causing the lag/flicker.) */&lt;br /&gt;
    document.addEventListener(&#039;selectionchange&#039;, function() {&lt;br /&gt;
      if (!_mobile) return;&lt;br /&gt;
      if (!$fab.hasClass(&#039;gra-fab-visible&#039;)) return;&lt;br /&gt;
      var sel = window.getSelection();&lt;br /&gt;
      if (!sel || sel.isCollapsed || !sel.toString().trim()) {&lt;br /&gt;
        clearTimeout(_mobShowTimer);&lt;br /&gt;
        hideActions();&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    /* selectionchange debounced (desktop only) */&lt;br /&gt;
    document.addEventListener(&#039;selectionchange&#039;, function() {&lt;br /&gt;
      if (_mobile) return;&lt;br /&gt;
      _selVersion++;&lt;br /&gt;
      clearTimeout(_selTimer);&lt;br /&gt;
      var v = _selVersion;&lt;br /&gt;
      _selTimer = setTimeout(function(){&lt;br /&gt;
        if (v !== _selVersion) return;&lt;br /&gt;
        if (_fabSelVer === v) return;&lt;br /&gt;
        tryShowActions();&lt;br /&gt;
      }, 600);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    /* ── KEY FIX: fab touchstart sets flag to prevent hideActions ── */&lt;br /&gt;
    $fab[0].addEventListener(&#039;touchstart&#039;, function(e) {&lt;br /&gt;
      _fabTouched = true;&lt;br /&gt;
      /* Don&#039;t propagate to document handler */&lt;br /&gt;
      e.stopPropagation();&lt;br /&gt;
    }, { passive: true });&lt;br /&gt;
&lt;br /&gt;
    /* Click outside → hide actions (blocked if fab was touched) */&lt;br /&gt;
    $(document).on(&#039;mousedown touchstart&#039;, function(e){&lt;br /&gt;
      if (_fabTouched) { _fabTouched = false; return; }&lt;br /&gt;
      var t = e.target;&lt;br /&gt;
      if ($fab[0]        &amp;amp;&amp;amp; $fab[0].contains(t))        return;&lt;br /&gt;
      if ($fbComposer[0] &amp;amp;&amp;amp; $fbComposer[0].contains(t)) return;&lt;br /&gt;
      if ($ntComposer[0] &amp;amp;&amp;amp; $ntComposer[0].contains(t)) return;&lt;br /&gt;
      if ($bmComposer[0] &amp;amp;&amp;amp; $bmComposer[0].contains(t)) return;&lt;br /&gt;
      hideActions();&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    /* ── FAB buttons — use touchend for mobile, click for desktop ── */&lt;br /&gt;
    function fabAction(btnId, action) {&lt;br /&gt;
      var el = document.getElementById(btnId);&lt;br /&gt;
      if (!el) return;&lt;br /&gt;
      /* touchend: fires before document touchstart clears _selRange */&lt;br /&gt;
      el.addEventListener(&#039;touchend&#039;, function(e) {&lt;br /&gt;
        e.preventDefault();&lt;br /&gt;
        e.stopPropagation();&lt;br /&gt;
        if (!_selRange &amp;amp;&amp;amp; !reCaptureFromDOM()) return;&lt;br /&gt;
        action();&lt;br /&gt;
      }, { passive: false });&lt;br /&gt;
      /* click: for desktop */&lt;br /&gt;
      el.addEventListener(&#039;click&#039;, function(e) {&lt;br /&gt;
        e.preventDefault();&lt;br /&gt;
        e.stopPropagation();&lt;br /&gt;
        if (!_selRange &amp;amp;&amp;amp; !reCaptureFromDOM()) return;&lt;br /&gt;
        action();&lt;br /&gt;
      });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    fabAction(&#039;gra-fab-note&#039;,     openNoteComposer);&lt;br /&gt;
    fabAction(&#039;gra-fab-bookmark&#039;, openBookmarkComposer);&lt;br /&gt;
    fabAction(&#039;gra-fab-feedback&#039;, openFeedbackComposer);&lt;br /&gt;
&lt;br /&gt;
    document.getElementById(&#039;gra-fab-search&#039;).addEventListener(&#039;touchend&#039;, function(e) {&lt;br /&gt;
      e.preventDefault(); e.stopPropagation();&lt;br /&gt;
      var q = _selText;&lt;br /&gt;
      hideActions();&lt;br /&gt;
      _selRange = null; _selText = &#039;&#039;; _selRect = null;&lt;br /&gt;
      if (q &amp;amp;&amp;amp; window.showSearchDialog) { window.showSearchDialog(q); }&lt;br /&gt;
    }, { passive: false });&lt;br /&gt;
    document.getElementById(&#039;gra-fab-search&#039;).addEventListener(&#039;click&#039;, function(e) {&lt;br /&gt;
      e.preventDefault(); e.stopPropagation();&lt;br /&gt;
      var q = _selText;&lt;br /&gt;
      hideActions();&lt;br /&gt;
      _selRange = null; _selText = &#039;&#039;; _selRect = null;&lt;br /&gt;
      if (q &amp;amp;&amp;amp; window.showSearchDialog) { window.showSearchDialog(q); }&lt;br /&gt;
      else if (q) { $(document).trigger($.Event(&#039;keydown&#039;, {ctrlKey:true, key:&#039;k&#039;, keyCode:75})); }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    /* ── Dismiss button: hide toolbar + clear selection (mobile) ── */&lt;br /&gt;
    (function () {&lt;br /&gt;
      var dismissEl = document.getElementById(&#039;gra-fab-dismiss&#039;);&lt;br /&gt;
      if (!dismissEl) return;&lt;br /&gt;
      function doDismiss(e) {&lt;br /&gt;
        e.preventDefault(); e.stopPropagation();&lt;br /&gt;
        hideActions();&lt;br /&gt;
        _selRange = null; _selText = &#039;&#039;; _selRect = null;&lt;br /&gt;
        if (window.getSelection) {&lt;br /&gt;
          var s = window.getSelection();&lt;br /&gt;
          if (s &amp;amp;&amp;amp; s.removeAllRanges) s.removeAllRanges();&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      dismissEl.addEventListener(&#039;touchend&#039;, doDismiss, { passive: false });&lt;br /&gt;
      dismissEl.addEventListener(&#039;click&#039;, doDismiss);&lt;br /&gt;
    }());&lt;br /&gt;
&lt;br /&gt;
    /* Feedback composer */&lt;br /&gt;
    $fbIssueType.on(&#039;change&#039;, function(){ $fbSubmit.prop(&#039;disabled&#039;, !$(this).val()); });&lt;br /&gt;
    $(&#039;#gra-fb-cancel, #gra-fb-close&#039;).on(&#039;click&#039;, closeFeedbackComposer);&lt;br /&gt;
    $fbSubmit.on(&#039;click&#039;, submitFeedback);&lt;br /&gt;
    $fbText.on(&#039;keydown&#039;, function(e){ if(e.key===&#039;Escape&#039;) closeFeedbackComposer(); });&lt;br /&gt;
&lt;br /&gt;
    /* Note composer */&lt;br /&gt;
    $ntInput.on(&#039;input&#039;, function(){ $ntSubmit.prop(&#039;disabled&#039;, !$(this).val().trim()); });&lt;br /&gt;
    $(&#039;#gra-nt-cancel&#039;).on(&#039;click&#039;, closeNoteComposer);&lt;br /&gt;
    $ntSubmit.on(&#039;click&#039;, submitNote);&lt;br /&gt;
    $ntInput.on(&#039;keydown&#039;, function(e){&lt;br /&gt;
      if ((e.ctrlKey||e.metaKey) &amp;amp;&amp;amp; e.key===&#039;Enter&#039;) submitNote();&lt;br /&gt;
      if (e.key===&#039;Escape&#039;) closeNoteComposer();&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    /* Bookmark composer */&lt;br /&gt;
    $(&#039;#gra-bm-cancel&#039;).on(&#039;click&#039;, closeBookmarkComposer);&lt;br /&gt;
    $bmSubmit.on(&#039;click&#039;, submitBookmark);&lt;br /&gt;
    $bmInput.on(&#039;keydown&#039;, function(e){&lt;br /&gt;
      if (e.key===&#039;Enter&#039;) submitBookmark();&lt;br /&gt;
      if (e.key===&#039;Escape&#039;) closeBookmarkComposer();&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    /* Panel */&lt;br /&gt;
    $(&#039;#gra-panel-close&#039;).on(&#039;click&#039;, closePanel);&lt;br /&gt;
    $backdrop.on(&#039;click touchend&#039;, function(e){&lt;br /&gt;
      e.preventDefault();&lt;br /&gt;
      if ($fbComposer.hasClass(&#039;gra-composer-visible&#039;)) closeFeedbackComposer();&lt;br /&gt;
      else if ($ntComposer.hasClass(&#039;gra-composer-visible&#039;)) closeNoteComposer();&lt;br /&gt;
      else if ($bmComposer.hasClass(&#039;gra-composer-visible&#039;)) closeBookmarkComposer();&lt;br /&gt;
      else closePanel();&lt;br /&gt;
    });&lt;br /&gt;
    $tabNotes.on(&#039;click&#039;, function(){ switchTab(&#039;notes&#039;); });&lt;br /&gt;
    $tabBookmarks.on(&#039;click&#039;, function(){ switchTab(&#039;bookmarks&#039;); });&lt;br /&gt;
&lt;br /&gt;
    $paneNotes.on(&#039;click&#039;, &#039;.gra-note-card&#039;, function(e){&lt;br /&gt;
      if ($(e.target).hasClass(&#039;gra-note-del&#039;)) return;&lt;br /&gt;
      var id = $(this).attr(&#039;data-gra-id&#039;);&lt;br /&gt;
      if (id) { closePanel(); scrollToHighlight(id); }&lt;br /&gt;
    });&lt;br /&gt;
    $paneNotes.on(&#039;click&#039;, &#039;.gra-note-del&#039;, function(e){&lt;br /&gt;
      e.stopPropagation();&lt;br /&gt;
      var id = $(this).attr(&#039;data-del-id&#039;);&lt;br /&gt;
      if (id) deleteNote(id);&lt;br /&gt;
    });&lt;br /&gt;
    $paneBookmarks.on(&#039;click&#039;, &#039;.gra-bookmark-card&#039;, function(e){&lt;br /&gt;
      if ($(e.target).hasClass(&#039;gra-bookmark-del&#039;)) return;&lt;br /&gt;
      var id = $(this).attr(&#039;data-gra-id&#039;);&lt;br /&gt;
      if (id) { closePanel(); scrollToHighlight(id); }&lt;br /&gt;
    });&lt;br /&gt;
    $paneBookmarks.on(&#039;click&#039;, &#039;.gra-bookmark-del&#039;, function(e){&lt;br /&gt;
      e.stopPropagation();&lt;br /&gt;
      var id = $(this).attr(&#039;data-del-id&#039;);&lt;br /&gt;
      if (id) deleteBookmark(id);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    $(CONTENT_SEL).on(&#039;click&#039;, &#039;.gra-note-highlight&#039;, function(){&lt;br /&gt;
      var id = $(this).attr(&#039;data-gra-id&#039;);&lt;br /&gt;
      openPanel(&#039;notes&#039;);&lt;br /&gt;
      setTimeout(function(){&lt;br /&gt;
        var $card = $paneNotes.find(&#039;[data-gra-id=&amp;quot;&#039;+id+&#039;&amp;quot;]&#039;);&lt;br /&gt;
        if ($card.length) {&lt;br /&gt;
          $card.addClass(&#039;gra-card-active&#039;);&lt;br /&gt;
          $card[0].scrollIntoView({behavior:&#039;smooth&#039;, block:&#039;nearest&#039;});&lt;br /&gt;
          setTimeout(function(){ $card.removeClass(&#039;gra-card-active&#039;); }, 2000);&lt;br /&gt;
        }&lt;br /&gt;
      }, 100);&lt;br /&gt;
    });&lt;br /&gt;
    $(CONTENT_SEL).on(&#039;click&#039;, &#039;.gra-bookmark-highlight&#039;, function(){&lt;br /&gt;
      var id = $(this).attr(&#039;data-gra-id&#039;);&lt;br /&gt;
      openPanel(&#039;bookmarks&#039;);&lt;br /&gt;
      setTimeout(function(){&lt;br /&gt;
        var $card = $paneBookmarks.find(&#039;[data-gra-id=&amp;quot;&#039;+id+&#039;&amp;quot;]&#039;);&lt;br /&gt;
        if ($card.length) $card[0].scrollIntoView({behavior:&#039;smooth&#039;, block:&#039;nearest&#039;});&lt;br /&gt;
      }, 100);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    $(document).on(&#039;keydown&#039;, function(e){&lt;br /&gt;
      if (e.key !== &#039;Escape&#039;) return;&lt;br /&gt;
      if ($fbComposer.hasClass(&#039;gra-composer-visible&#039;)) closeFeedbackComposer();&lt;br /&gt;
      else if ($ntComposer.hasClass(&#039;gra-composer-visible&#039;)) closeNoteComposer();&lt;br /&gt;
      else if ($bmComposer.hasClass(&#039;gra-composer-visible&#039;)) closeBookmarkComposer();&lt;br /&gt;
      else closePanel();&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function persistNoteHighlight(id, quote) {&lt;br /&gt;
    try {&lt;br /&gt;
      var s = JSON.parse(localStorage.getItem(NT_LS_KEY+&#039;_hl&#039;)||&#039;[]&#039;);&lt;br /&gt;
      s = s.filter(function(h){ return h.id !== id; });&lt;br /&gt;
      s.push({id:id, quote:quote});&lt;br /&gt;
      localStorage.setItem(NT_LS_KEY+&#039;_hl&#039;, JSON.stringify(s));&lt;br /&gt;
    } catch(e){}&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function restoreNoteHighlights() {&lt;br /&gt;
    var s = [];&lt;br /&gt;
    try { s = JSON.parse(localStorage.getItem(NT_LS_KEY+&#039;_hl&#039;)||&#039;[]&#039;); } catch(e){}&lt;br /&gt;
    s.forEach(function(h){&lt;br /&gt;
      if (!h.quote || !h.id) return;&lt;br /&gt;
      if (document.querySelector(&#039;[data-gra-id=&amp;quot;&#039;+h.id+&#039;&amp;quot;].gra-note-highlight&#039;)) return;&lt;br /&gt;
      var needle = h.quote.replace(/…$/,&#039;&#039;).trim().slice(0,80);&lt;br /&gt;
      if (!needle) return;&lt;br /&gt;
      var range = findTextInContent(document.querySelector(CONTENT_SEL), needle);&lt;br /&gt;
      if (!range) return;&lt;br /&gt;
      var sp = document.createElement(&#039;span&#039;);&lt;br /&gt;
      sp.className = &#039;gra-note-highlight&#039;;&lt;br /&gt;
      sp.setAttribute(&#039;data-gra-id&#039;, h.id);&lt;br /&gt;
      try { range.surroundContents(sp); } catch(e){}&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function restoreBookmarkHighlights() {&lt;br /&gt;
    _bookmarks.forEach(function(b){&lt;br /&gt;
      if (!b.quote) return;&lt;br /&gt;
      if (document.querySelector(&#039;[data-gra-id=&amp;quot;&#039;+b.id+&#039;&amp;quot;].gra-bookmark-highlight&#039;)) return;&lt;br /&gt;
      var needle = b.quote.replace(/…$/,&#039;&#039;).trim().slice(0,60);&lt;br /&gt;
      if (!needle) return;&lt;br /&gt;
      var found = findTextInContent(document.querySelector(CONTENT_SEL), needle);&lt;br /&gt;
      if (!found) return;&lt;br /&gt;
      var sp = document.createElement(&#039;span&#039;);&lt;br /&gt;
      sp.className = &#039;gra-bookmark-highlight&#039;;&lt;br /&gt;
      sp.setAttribute(&#039;data-gra-id&#039;, b.id);&lt;br /&gt;
      sp.setAttribute(&#039;data-gra-name&#039;, b.name);&lt;br /&gt;
      try { found.surroundContents(sp); } catch(e){}&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function findTextInContent(root, needle) {&lt;br /&gt;
    if (!root || !needle) return null;&lt;br /&gt;
    var text = root.textContent || &#039;&#039;;&lt;br /&gt;
    var idx  = text.indexOf(needle);&lt;br /&gt;
    if (idx &amp;lt; 0) return null;&lt;br /&gt;
    var iter = document.createNodeIterator(root, NodeFilter.SHOW_TEXT, null, false);&lt;br /&gt;
    var pos = 0, node, startNode, startOffset, endNode, endOffset;&lt;br /&gt;
    while ((node = iter.nextNode())) {&lt;br /&gt;
      var len = node.nodeValue.length;&lt;br /&gt;
      if (!startNode &amp;amp;&amp;amp; pos + len &amp;gt; idx) { startNode = node; startOffset = idx - pos; }&lt;br /&gt;
      var endIdx = idx + needle.length;&lt;br /&gt;
      if (startNode &amp;amp;&amp;amp; pos + len &amp;gt;= endIdx) { endNode = node; endOffset = endIdx - pos; break; }&lt;br /&gt;
      pos += len;&lt;br /&gt;
    }&lt;br /&gt;
    if (!startNode || !endNode) return null;&lt;br /&gt;
    try {&lt;br /&gt;
      var r = document.createRange();&lt;br /&gt;
      r.setStart(startNode, startOffset);&lt;br /&gt;
      r.setEnd(endNode, endOffset);&lt;br /&gt;
      return r;&lt;br /&gt;
    } catch(e){ return null; }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  $(function() {&lt;br /&gt;
    _mobile = window.innerWidth &amp;lt; 768 || &#039;ontouchstart&#039; in window;&lt;br /&gt;
    window.addEventListener(&#039;resize&#039;, function(){&lt;br /&gt;
      _mobile = window.innerWidth &amp;lt; 768 || &#039;ontouchstart&#039; in window;&lt;br /&gt;
    });&lt;br /&gt;
    buildDom();&lt;br /&gt;
    wireEvents();&lt;br /&gt;
    loadNotes();&lt;br /&gt;
    loadBookmarks();&lt;br /&gt;
    setTimeout(function(){&lt;br /&gt;
      try { restoreNoteHighlights(); } catch(e){}&lt;br /&gt;
      try { restoreBookmarkHighlights(); } catch(e){}&lt;br /&gt;
    }, 500);&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Gadget-GrAnnotations.css&amp;diff=6187</id>
		<title>MediaWiki:Gadget-GrAnnotations.css</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Gadget-GrAnnotations.css&amp;diff=6187"/>
		<updated>2026-06-10T19:55:01Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/*&lt;br /&gt;
 * gr_annotations.css  —  grantha.io inline Notes + Bookmarks + Feedback  (v3)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* ── Icon base ──────────────────────────────────────────────────── */&lt;br /&gt;
.gra-icon {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  width:  20px;&lt;br /&gt;
  height: 20px;&lt;br /&gt;
  background-size: contain;&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  background-position: center;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
/* comment.svg → Feedback (flag/report)  */&lt;br /&gt;
.gra-icon-feedback { background-image: url(&#039;/images/feedback.svg&#039;); }&lt;br /&gt;
/* notes.svg   → Notes                  */&lt;br /&gt;
.gra-icon-note     { background-image: url(&#039;/images/notes.svg&#039;); }&lt;br /&gt;
.gra-icon-bookmark { background-image: url(&#039;/images/bookmark.svg&#039;); }&lt;br /&gt;
.gra-icon-copy     { background-image: url(&#039;/images/copy.svg&#039;); }&lt;br /&gt;
.gra-icon-search { background-image: url(&#039;/images/search.svg&#039;); }&lt;br /&gt;
.gra-icon-dismiss { background-image: url(&#039;/images/close.svg&#039;); }&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   1. FLOATING ACTION STRIP  (desktop only)&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
#gra-fab {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  z-index: 10200;&lt;br /&gt;
  display: none;&lt;br /&gt;
  flex-direction: row;&lt;br /&gt;
  background: #B14A2E !important;&lt;br /&gt;
    border: none !important;&lt;br /&gt;
    border-radius: 12px !important;&lt;br /&gt;
    padding: 5px 4px !important;&lt;br /&gt;
    box-shadow: 0 3px 14px rgba(0, 0, 0, 0.08) !important;&lt;br /&gt;
    gap: 20px !important;&lt;br /&gt;
}&lt;br /&gt;
#gra-fab.gra-fab-visible { display: flex; }&lt;br /&gt;
&lt;br /&gt;
.gra-fab-btn {&lt;br /&gt;
  height: 48px;&lt;br /&gt;
  width: 48px;&lt;br /&gt;
  border: none;&lt;br /&gt;
  background: transparent;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  position: relative;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.gra-fab-btn-label {&lt;br /&gt;
 font-family: &#039;Noto Sans Devanagari&#039;;&lt;br /&gt;
font-weight: 400;&lt;br /&gt;
font-size: 10px;&lt;br /&gt;
line-height: 100%;&lt;br /&gt;
letter-spacing: 0%;&lt;br /&gt;
color: #ffffff;&lt;br /&gt;
padding: 5px 0;&lt;br /&gt;
}&lt;br /&gt;
.gra-fab-btn:hover { &lt;br /&gt;
background: rgba(255, 255, 255, 0.12) !important; border-radius: 12px;&lt;br /&gt;
}&lt;br /&gt;
.gra-fab-btn:hover .gra-fab-tooltip { opacity: 1; transform: translateX(0) translateY(-50%); }&lt;br /&gt;
&lt;br /&gt;
.gra-fab-tooltip {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  right: calc(100% + 8px);&lt;br /&gt;
  top: 50%;&lt;br /&gt;
  transform: translateX(4px) translateY(-50%);&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  background: rgba(30,30,30,0.82);&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  padding: 3px 9px;&lt;br /&gt;
  border-radius: 999px;&lt;br /&gt;
  pointer-events: none;&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
  transition: opacity 0.18s, transform 0.18s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   2. RIGHT PANEL&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
#gra-panel {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  right: -360px;&lt;br /&gt;
  width: 340px;&lt;br /&gt;
  height: 100vh;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  box-shadow: -3px 0 20px rgba(0,0,0,0.15);&lt;br /&gt;
  z-index: 10100;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  transition: right 0.28s cubic-bezier(0.4,0,0.2,1);&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
}&lt;br /&gt;
#gra-panel.gra-panel-open { right: 0; }&lt;br /&gt;
&lt;br /&gt;
#gra-backdrop {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  inset: 0;&lt;br /&gt;
  background: rgba(0,0,0,0.18);&lt;br /&gt;
  z-index: 10099;&lt;br /&gt;
  display: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
#gra-backdrop.gra-backdrop-visible { display: block; }&lt;br /&gt;
&lt;br /&gt;
#gra-panel-head {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: space-between;&lt;br /&gt;
  padding: 14px 16px 0;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
#gra-panel-close {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  font-size: 18px;&lt;br /&gt;
  color: #666;&lt;br /&gt;
  padding: 2px 6px;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
#gra-panel-close:hover { background: #f5f5f5; color: #222; }&lt;br /&gt;
&lt;br /&gt;
#gra-tabs {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  border-bottom: 2px solid #f0f0f0;&lt;br /&gt;
  margin: 10px 16px 0;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
.gra-tab {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  padding: 8px 4px;&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  font-family: inherit;&lt;br /&gt;
  color: #777;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  border-bottom: 2px solid transparent;&lt;br /&gt;
  margin-bottom: -2px;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  gap: 6px;&lt;br /&gt;
  transition: color 0.15s, border-color 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-tab .gra-icon { width: 16px; height: 16px; opacity: 0.5; }&lt;br /&gt;
.gra-tab:hover { color: #333; }&lt;br /&gt;
.gra-tab.gra-tab-active { color: #B14A2E; border-bottom-color: #B14A2E; }&lt;br /&gt;
.gra-tab.gra-tab-active .gra-icon {&lt;br /&gt;
  opacity: 1;&lt;br /&gt;
  filter: invert(33%) sepia(52%) saturate(1104%) hue-rotate(333deg) brightness(93%) contrast(90%);}&lt;br /&gt;
&lt;br /&gt;
#gra-panel-body {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  overflow-y: auto;&lt;br /&gt;
  padding: 12px 16px 16px;&lt;br /&gt;
}&lt;br /&gt;
.gra-pane { display: none; }&lt;br /&gt;
.gra-pane.gra-pane-active { display: block; }&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   3. FEEDBACK COMPOSER  — centered modal&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
.gra-composer {&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 12px;&lt;br /&gt;
  box-shadow: 0 8px 40px rgba(0,0,0,0.22);&lt;br /&gt;
  width: 420px;&lt;br /&gt;
  max-width: calc(100vw - 32px);&lt;br /&gt;
  padding: 20px 24px 16px;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  /* Centered on screen */&lt;br /&gt;
  top: 50% !important;&lt;br /&gt;
  left: 50% !important;&lt;br /&gt;
  transform: translate(-50%, -50%) !important;&lt;br /&gt;
  z-index: 10150;&lt;br /&gt;
  display: none;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  gap: 12px;&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
}&lt;br /&gt;
.gra-composer.gra-composer-visible { display: flex; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Feedback composer header row */&lt;br /&gt;
.gra-composer-header {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 8px;&lt;br /&gt;
}&lt;br /&gt;
.gra-composer-header strong {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
  color: #1C1A17;&lt;br /&gt;
  font-size: 16px; &lt;br /&gt;
  font-family: &amp;quot;Noto Sans Devanagari&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
.gra-btn-x {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  font-size: 16px;&lt;br /&gt;
  color: #666;&lt;br /&gt;
  padding: 2px 5px;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
.gra-btn-x:hover { background: #f5f5f5; color: #222; }&lt;br /&gt;
&lt;br /&gt;
/* Feedback field labels */&lt;br /&gt;
.gra-fb-field-label {&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
  color: #5f6368;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  letter-spacing: 0.4px;&lt;br /&gt;
  margin-bottom: -6px;   /* tighten gap to input below */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Selected text quote preview */&lt;br /&gt;
.gra-fb-quote-label {&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  color: #9aa0a6;&lt;br /&gt;
  margin-bottom: -4px;&lt;br /&gt;
}&lt;br /&gt;
.gra-fb-quote {&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #5f6368;&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  background: #fafafa;&lt;br /&gt;
  border-left: 3px solid #fbbc04;&lt;br /&gt;
  border-radius: 0 4px 4px 0;&lt;br /&gt;
  padding: 6px 10px;&lt;br /&gt;
  line-height: 1.45;&lt;br /&gt;
  max-height: 56px;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  display: -webkit-box;&lt;br /&gt;
  -webkit-line-clamp: 3;&lt;br /&gt;
  -webkit-box-orient: vertical;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Issue type dropdown */&lt;br /&gt;
.gra-fb-select {&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  padding: 7px 10px;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  font-family: inherit;&lt;br /&gt;
  color: #202124;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  outline: none;&lt;br /&gt;
  transition: border-color 0.15s;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
.gra-fb-select:focus { border-color: #1a73e8; }&lt;br /&gt;
&lt;br /&gt;
/* Email input */&lt;br /&gt;
.gra-fb-email-input {&lt;br /&gt;
  min-height: unset !important;&lt;br /&gt;
  height: 36px;&lt;br /&gt;
  padding: 6px 10px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Status message */&lt;br /&gt;
.gra-fb-status {&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  min-height: 16px;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
.gra-fb-status.gra-fb-ok  { color: #34a853; }&lt;br /&gt;
.gra-fb-status.gra-fb-err { color: #ea4335; }&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   4. NOTE COMPOSER  (local only)&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
.gra-composer-user {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 10px;&lt;br /&gt;
}&lt;br /&gt;
.gra-avatar {&lt;br /&gt;
  width: 32px;&lt;br /&gt;
  height: 32px;&lt;br /&gt;
  border-radius: 50%;&lt;br /&gt;
  background: #1a73e8;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
.gra-composer-uname { font-weight: 600; color: #202124; font-size: 13px; }&lt;br /&gt;
&lt;br /&gt;
.gra-composer-input {&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  padding: 8px 10px;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  font-family: inherit;&lt;br /&gt;
  resize: none;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
  min-height: 56px;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
  color: #202124;&lt;br /&gt;
  outline: none;&lt;br /&gt;
  transition: border-color 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-composer-input::placeholder { color: #aaa; }&lt;br /&gt;
.gra-composer-input:focus { border-color: #B14A2E; }&lt;br /&gt;
&lt;br /&gt;
.gra-composer-actions {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: flex-end;&lt;br /&gt;
  gap: 8px;&lt;br /&gt;
}&lt;br /&gt;
.gra-btn-cancel {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  color: #5f6368;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  font-family:&amp;quot;Noto Sans Devanagari&amp;quot;;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  padding: 8px 12px;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
}&lt;br /&gt;
.gra-btn-cancel:hover { background: #f5f5f5; }&lt;br /&gt;
.gra-btn-submit {&lt;br /&gt;
  background: transparent;&lt;br /&gt;
  color: #B14A2E;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  font-family:&amp;quot;Noto Sans Devanagari&amp;quot;;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  padding: 8px 12px;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  gap: 8px;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-btn-submit:hover { color: #8A351F; }&lt;br /&gt;
.gra-btn-submit:disabled { opacity: 0.4;&lt;br /&gt;
  cursor: not-allowed; }&lt;br /&gt;
&lt;br /&gt;
/* ── Note cards ── */&lt;br /&gt;
.gra-note-card {&lt;br /&gt;
  border: 1px solid #e8eaed;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 10px 12px;&lt;br /&gt;
  margin-bottom: 10px;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  box-shadow: 0 1px 3px rgba(0,0,0,0.07);&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: box-shadow 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-note-card:hover { box-shadow: 0 2px 8px rgba(0,0,0,0.12); }&lt;br /&gt;
.gra-note-card.gra-card-active {&lt;br /&gt;
  border-color: #34a853;&lt;br /&gt;
  box-shadow: 0 0 0 2px rgba(52,168,83,0.25);&lt;br /&gt;
}&lt;br /&gt;
.gra-card-header {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 8px;&lt;br /&gt;
  margin-bottom: 6px;&lt;br /&gt;
}&lt;br /&gt;
.gra-card-meta { flex: 1; }&lt;br /&gt;
.gra-card-ts { font-size: 11px; color: #80868b; }&lt;br /&gt;
.gra-card-quote {&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #5f6368;&lt;br /&gt;
  border-left: 3px solid #34a853;&lt;br /&gt;
  padding-left: 8px;&lt;br /&gt;
  margin-bottom: 6px;&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  line-height: 1.4;&lt;br /&gt;
  display: -webkit-box;&lt;br /&gt;
  -webkit-line-clamp: 2;&lt;br /&gt;
  -webkit-box-orient: vertical;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
}&lt;br /&gt;
.gra-card-text { font-size: 13px; color: #202124; line-height: 1.5; }&lt;br /&gt;
&lt;br /&gt;
.gra-note-del {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  color: #ccc;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  padding: 0 2px;&lt;br /&gt;
  line-height: 1;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
  margin-left: auto;&lt;br /&gt;
}&lt;br /&gt;
.gra-note-del:hover { color: #e53935; }&lt;br /&gt;
&lt;br /&gt;
.gra-empty-state {&lt;br /&gt;
  color: #9aa0a6;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  padding: 32px 16px;&lt;br /&gt;
  line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   5. BOOKMARK CARDS + COMPOSER&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
.gra-bookmark-card {&lt;br /&gt;
  border: 1px solid #e8eaed;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 10px 12px;&lt;br /&gt;
  margin-bottom: 10px;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  box-shadow: 0 1px 3px rgba(0,0,0,0.07);&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: flex-start;&lt;br /&gt;
  gap: 10px;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: box-shadow 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-bookmark-card:hover { box-shadow: 0 2px 8px rgba(0,0,0,0.12); }&lt;br /&gt;
.gra-bookmark-card .gra-icon { margin-top: 2px; flex-shrink: 0; }&lt;br /&gt;
.gra-bookmark-info { flex: 1; min-width: 0; }&lt;br /&gt;
.gra-bookmark-name {&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
  color: #202124;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  text-overflow: ellipsis;&lt;br /&gt;
}&lt;br /&gt;
.gra-bookmark-quote {&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  color: #80868b;&lt;br /&gt;
  margin-top: 2px;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  text-overflow: ellipsis;&lt;br /&gt;
}&lt;br /&gt;
.gra-bookmark-del {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  color: #ccc;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  padding: 0 2px;&lt;br /&gt;
  line-height: 1;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
.gra-bookmark-del:hover { color: #e53935; }&lt;br /&gt;
&lt;br /&gt;
.gra-bm-composer {&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 12px;&lt;br /&gt;
  box-shadow: 0 8px 40px rgba(0,0,0,0.22);&lt;br /&gt;
  width: 420px;&lt;br /&gt;
  max-width: calc(100vw - 32px);&lt;br /&gt;
  padding: 20px 24px 16px;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  /* Centered on screen — same as feedback composer */&lt;br /&gt;
  top: 50% !important;&lt;br /&gt;
  left: 50% !important;&lt;br /&gt;
  transform: translate(-50%, -50%) !important;&lt;br /&gt;
  z-index: 10150;&lt;br /&gt;
  display: none;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  gap: 10px;&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
}&lt;br /&gt;
.gra-bm-composer.gra-composer-visible { display: flex; }&lt;br /&gt;
.gra-bm-composer-label {&lt;br /&gt;
  color: #1C1A17;&lt;br /&gt;
  font-size: 16px;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 8px;&lt;br /&gt;
}&lt;br /&gt;
.gra-bm-composer-label .gra-icon, .gra-composer-header .gra-icon, .gra-tab .gra-icon, .gra-note-card .gra-icon, .gra-bookmark-card .gra-icon {filter: brightness(0) saturate(100%) invert(7%) sepia(8%) saturate(894%) hue-rotate(357deg) brightness(97%) contrast(92%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   6. ANCHOR HIGHLIGHTS&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
/* Note highlight — green tint */&lt;br /&gt;
.gra-note-highlight {&lt;br /&gt;
  background: rgba(52, 168, 83, 0.18);&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-note-highlight:hover,&lt;br /&gt;
.gra-note-highlight.gra-hl-active {&lt;br /&gt;
  background: rgba(52, 168, 83, 0.4);&lt;br /&gt;
  outline: 1.5px solid #34a853;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Bookmark highlight — blue underline */&lt;br /&gt;
.gra-bookmark-highlight {&lt;br /&gt;
  background: rgba(26, 115, 232, 0.12);&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  border-bottom: 1.5px solid #1a73e8;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-bookmark-highlight:hover { background: rgba(26, 115, 232, 0.22); }&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   7. PERSISTENT TOGGLE BUTTON&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
#gra-toggle {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  bottom: 78px;&lt;br /&gt;
  right: 20px;&lt;br /&gt;
  width: 48px;&lt;br /&gt;
  height: 48px;&lt;br /&gt;
  border-radius: 50%;&lt;br /&gt;
  background: #c0521a;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  z-index: 9998;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  box-shadow: 0 3px 12px rgba(0,0,0,0.22);&lt;br /&gt;
  transition: background 0.15s, transform 0.15s;&lt;br /&gt;
}&lt;br /&gt;
#gra-toggle:hover { background: #a0410e; transform: scale(1.07); }&lt;br /&gt;
#gra-toggle .gra-icon {&lt;br /&gt;
  width: 22px;&lt;br /&gt;
  height: 22px;&lt;br /&gt;
  filter: brightness(0) invert(1);&lt;br /&gt;
}&lt;br /&gt;
#gra-toggle-badge {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  top: -4px;&lt;br /&gt;
  right: -4px;&lt;br /&gt;
  background: #e53935;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-size: 10px;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  min-width: 16px;&lt;br /&gt;
  height: 16px;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 0 4px;&lt;br /&gt;
  line-height: 16px;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  display: none;&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  pointer-events: none;&lt;br /&gt;
}&lt;br /&gt;
#gra-panel.gra-panel-open ~ #gra-toggle {&lt;br /&gt;
  right: 356px;&lt;br /&gt;
  transition: right 0.28s cubic-bezier(0.4,0,0.2,1), background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   MOBILE BOTTOM ACTION BAR&lt;br /&gt;
   Slides up from bottom — avoids clashing with browser copy menu.&lt;br /&gt;
   Large tap targets (56px height buttons) with text labels.&lt;br /&gt;
   Only shown on mobile (JS sets _mobile flag).&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
#gra-mobile-bar {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  bottom: 0;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  right: 0;&lt;br /&gt;
  z-index: 10200;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  transform: translateY(100%);&lt;br /&gt;
  transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);&lt;br /&gt;
  pointer-events: none;&lt;br /&gt;
}&lt;br /&gt;
#gra-mobile-bar.gra-mobile-bar-visible {&lt;br /&gt;
  transform: translateY(0);&lt;br /&gt;
  pointer-events: auto;&lt;br /&gt;
}&lt;br /&gt;
#gra-mobile-bar-inner {&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  border-top: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 16px 16px 0 0;&lt;br /&gt;
  box-shadow: 0 -4px 20px rgba(0,0,0,0.18);&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: stretch;&lt;br /&gt;
  padding-bottom: env(safe-area-inset-bottom, 0px);&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-btn {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  gap: 5px;&lt;br /&gt;
  padding: 14px 8px;&lt;br /&gt;
  min-height: 72px;&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  border-right: 1px solid #f0f0f0;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  color: #444;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  -webkit-tap-highlight-color: rgba(0,0,0,0.06);&lt;br /&gt;
  transition: background 0.12s;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-btn:last-child { border-right: none; }&lt;br /&gt;
.gra-mob-btn:active { background: #f5f5f5; }&lt;br /&gt;
.gra-mob-btn .gra-icon { width: 24px; height: 24px; }&lt;br /&gt;
.gra-mob-label { font-size: 11px; line-height: 1.2; text-align: center; }&lt;br /&gt;
.gra-mob-dismiss { color: #999; }&lt;br /&gt;
.gra-mob-dismiss:active { background: #fff0f0; color: #e53935; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   8. RESPONSIVE&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
@media (max-width: 768px) {&lt;br /&gt;
  #gra-panel { width: 100vw; right: -100vw; }&lt;br /&gt;
  .gra-composer {&lt;br /&gt;
    width: calc(100vw - 32px) !important;&lt;br /&gt;
    max-width: 420px;&lt;br /&gt;
    /* Override centering for note/bookmark on mobile — keep centered */&lt;br /&gt;
    top: 50% !important;&lt;br /&gt;
    left: 50% !important;&lt;br /&gt;
    transform: translate(-50%, -50%) !important;&lt;br /&gt;
  }&lt;br /&gt;
  /* bm-composer already centered via its base CSS */&lt;br /&gt;
}&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   REPLACE the entire additions block at the bottom of&lt;br /&gt;
   MediaWiki:Gadget-GrAnnotations.css with this content.&lt;br /&gt;
&lt;br /&gt;
   FAB stack (right:20px desktop, right:16px mobile):&lt;br /&gt;
     22px   [📚] #se-docnav-btn   docs navigator&lt;br /&gt;
     78px   [↑]  #se-scrolltop    scroll to top&lt;br /&gt;
     134px  [✎]  #gra-toggle      notes panel   ← was wrongly 78px&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
&lt;br /&gt;
/* ── #gra-toggle: sits above both siteNav FABs ─────────────────── */&lt;br /&gt;
#gra-toggle {&lt;br /&gt;
  bottom: 78px !important;&lt;br /&gt;
  right: 20px !important;&lt;br /&gt;
}&lt;br /&gt;
#gra-panel.gra-panel-open ~ #gra-toggle {&lt;br /&gt;
  right: 356px !important;&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 768px) {&lt;br /&gt;
  #gra-toggle {&lt;br /&gt;
    bottom: 78px !important;&lt;br /&gt;
    right: 16px !important;&lt;br /&gt;
    width: 44px !important;&lt;br /&gt;
    height: 44px !important;&lt;br /&gt;
  }&lt;br /&gt;
  #gra-panel.gra-panel-open ~ #gra-toggle {&lt;br /&gt;
    right: calc(100vw + 4px) !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Mobile annotation bar above all Minerva overlays ──────────── */&lt;br /&gt;
#gra-mobile-bar {&lt;br /&gt;
  z-index: 99999 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── CSS custom property fallbacks ─────────────────────────────── */&lt;br /&gt;
/* readerToolbar.js writes these at runtime; these are initial values */&lt;br /&gt;
:root {&lt;br /&gt;
  --gr-header-height: 50px;&lt;br /&gt;
  --gr-bar-h: 48px;&lt;br /&gt;
  --gr-bar-top: 50px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Scroll-margin: TOC anchor links clear the fixed bar ────────── */&lt;br /&gt;
/* Vector: header + bar both fixed */&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h1[id],&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h2[id],&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h3[id],&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h4[id],&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h5[id],&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h6[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h1[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h2[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h3[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h4[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h5[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h6[id] {&lt;br /&gt;
  scroll-margin-top: calc(var(--gr-header-height) + var(--gr-bar-h) + 12px);&lt;br /&gt;
}&lt;br /&gt;
/* Minerva: only bar is fixed once header scrolls away */&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h1[id],&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h2[id],&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h3[id],&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h4[id],&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h5[id],&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h6[id] {&lt;br /&gt;
  scroll-margin-top: calc(var(--gr-bar-h) + 12px);&lt;br /&gt;
}&lt;br /&gt;
#mw-content-text .mw-parser-output &amp;gt; *:first-child {&lt;br /&gt;
  scroll-margin-top: calc(var(--gr-header-height) + var(--gr-bar-h) + 8px);&lt;br /&gt;
}&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output &amp;gt; *:first-child {&lt;br /&gt;
  scroll-margin-top: calc(var(--gr-bar-h) + 8px);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
/* Search icon in FAB using an inline SVG data-URI */&lt;br /&gt;
.gra-icon-search {&lt;br /&gt;
  background-image: url(&amp;quot;data:image/svg+xml,%3Csvg xmlns=&#039;http://www.w3.org/2000/svg&#039; viewBox=&#039;0 0 24 24&#039; fill=&#039;none&#039; stroke=&#039;%23ffffff&#039; stroke-width=&#039;2.2&#039; stroke-linecap=&#039;round&#039; stroke-linejoin=&#039;round&#039;%3E%3Ccircle cx=&#039;11&#039; cy=&#039;11&#039; r=&#039;7&#039;/%3E%3Cline x1=&#039;16.5&#039; y1=&#039;16.5&#039; x2=&#039;22&#039; y2=&#039;22&#039;/%3E%3C/svg%3E&amp;quot;) !important;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   MOBILE BOTTOM BAR — terracotta theme&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
#gra-mobile-bar-inner {&lt;br /&gt;
  background: #b5451b !important;&lt;br /&gt;
  border-top: none !important;&lt;br /&gt;
  border-radius: 16px 16px 0 0 !important;&lt;br /&gt;
  box-shadow: 0 -4px 20px rgba(181,69,27,0.35) !important;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
.gra-mob-btn {&lt;br /&gt;
  color: rgba(255,255,255,0.92) !important;&lt;br /&gt;
  border-right-color: rgba(255,255,255,0.18) !important;&lt;br /&gt;
  min-height: 76px !important;&lt;br /&gt;
  padding: 16px 8px !important;&lt;br /&gt;
  font-size: 12px !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-btn:active {&lt;br /&gt;
  background: rgba(0,0,0,0.12) !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-btn .gra-icon {&lt;br /&gt;
  width: 26px !important;&lt;br /&gt;
  height: 26px !important;&lt;br /&gt;
  filter: brightness(0) invert(1) !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-label {&lt;br /&gt;
  color: rgba(255,255,255,0.88) !important;&lt;br /&gt;
  font-size: 11px !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-dismiss {&lt;br /&gt;
  color: rgba(255,255,255,0.70) !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-dismiss .gra-mob-label {&lt;br /&gt;
  color: rgba(255,255,255,0.60) !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-dismiss span[style] {&lt;br /&gt;
  color: rgba(255,255,255,0.70) !important;&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 767px) {&lt;br /&gt;
&lt;br /&gt;
  /* Bottom sheet — pinned to bottom via inset, animated via transform */&lt;br /&gt;
  #gra-fb-composer.gra-composer,&lt;br /&gt;
  #gra-nt-composer.gra-composer,&lt;br /&gt;
  #gra-bm-composer.gra-bm-composer {&lt;br /&gt;
    position: fixed !important;&lt;br /&gt;
    inset: auto 0 0 0 !important;          /* top:auto right:0 bottom:0 left:0 */&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    max-width: 100% !important;&lt;br /&gt;
    margin: 0 !important;&lt;br /&gt;
    border-radius: 16px 16px 0 0 !important;&lt;br /&gt;
    box-shadow: 0 -4px 24px rgba(0,0,0,0.18) !important;&lt;br /&gt;
    padding: 20px 20px calc(20px + env(safe-area-inset-bottom)) !important;&lt;br /&gt;
    box-sizing: border-box !important;&lt;br /&gt;
    transform: translateY(100%) !important;&lt;br /&gt;
    transition: transform 0.28s cubic-bezier(0.32,0.72,0,1) !important;&lt;br /&gt;
    z-index: 10600 !important;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* Slide up when visible */&lt;br /&gt;
  #gra-fb-composer.gra-composer-visible,&lt;br /&gt;
  #gra-nt-composer.gra-composer-visible,&lt;br /&gt;
  #gra-bm-composer.gra-composer-visible {&lt;br /&gt;
    transform: translateY(0) !important;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* Grab handle */&lt;br /&gt;
  #gra-fb-composer::before,&lt;br /&gt;
  #gra-nt-composer::before,&lt;br /&gt;
  #gra-bm-composer::before {&lt;br /&gt;
    content: &amp;quot;&amp;quot;;&lt;br /&gt;
    display: block;&lt;br /&gt;
    width: 36px; height: 4px;&lt;br /&gt;
    border-radius: 2px;&lt;br /&gt;
    background: #d0d0d0;&lt;br /&gt;
    margin: -6px auto 14px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .gra-composer .gra-composer-input,&lt;br /&gt;
  .gra-bm-composer .gra-composer-input {&lt;br /&gt;
    font-size: 16px !important;   /* no iOS zoom on focus */&lt;br /&gt;
  }&lt;br /&gt;
  .gra-composer-actions { display: flex; gap: 10px; }&lt;br /&gt;
  .gra-composer-actions .gra-btn-submit,&lt;br /&gt;
  .gra-composer-actions .gra-btn-cancel { flex: 1; min-height: 44px; }&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 767px) {&lt;br /&gt;
  /* Docked toolbar below the reader header */&lt;br /&gt;
  #gra-fab.gra-fab-mobile-docked {&lt;br /&gt;
    position: fixed !important;&lt;br /&gt;
    top: var(--gr-toc-top, 99px) !important;  /* sits just below reader toolbar */&lt;br /&gt;
    left: 0 !important;&lt;br /&gt;
    right: 0 !important;&lt;br /&gt;
    height: 52px !important;&lt;br /&gt;
    flex-direction: row !important;&lt;br /&gt;
    align-items: center !important;&lt;br /&gt;
    justify-content: space-around !important;&lt;br /&gt;
    border-radius: 0 !important;&lt;br /&gt;
    box-shadow: 0 2px 8px rgba(0,0,0,0.15) !important;&lt;br /&gt;
    z-index: 2147483646 !important;       /* below native menu, above content */&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #gra-fab.gra-fab-mobile-docked .gra-fab-btn {&lt;br /&gt;
    flex: 1;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    height: 44px;&lt;br /&gt;
    background: transparent !important;&lt;br /&gt;
    touch-action: manipulation;&lt;br /&gt;
    -webkit-tap-highlight-color: transparent;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #gra-fab.gra-fab-mobile-docked .gra-fab-btn-label {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-size: 10px;&lt;br /&gt;
    margin-top: 2px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Gadget-GrAnnotations.css&amp;diff=6186</id>
		<title>MediaWiki:Gadget-GrAnnotations.css</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Gadget-GrAnnotations.css&amp;diff=6186"/>
		<updated>2026-06-10T19:54:29Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/*&lt;br /&gt;
 * gr_annotations.css  —  grantha.io inline Notes + Bookmarks + Feedback  (v3)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* ── Icon base ──────────────────────────────────────────────────── */&lt;br /&gt;
.gra-icon {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  width:  20px;&lt;br /&gt;
  height: 20px;&lt;br /&gt;
  background-size: contain;&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  background-position: center;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
/* comment.svg → Feedback (flag/report)  */&lt;br /&gt;
.gra-icon-feedback { background-image: url(&#039;/images/feedback.svg&#039;); }&lt;br /&gt;
/* notes.svg   → Notes                  */&lt;br /&gt;
.gra-icon-note     { background-image: url(&#039;/images/notes.svg&#039;); }&lt;br /&gt;
.gra-icon-bookmark { background-image: url(&#039;/images/bookmark.svg&#039;); }&lt;br /&gt;
.gra-icon-copy     { background-image: url(&#039;/images/copy.svg&#039;); }&lt;br /&gt;
.gra-icon-search { background-image: url(&#039;/images/search.svg&#039;); }&lt;br /&gt;
.gra-icon-dismiss { background-image: url(&#039;/images/close.svg&#039;); }&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   1. FLOATING ACTION STRIP  (desktop only)&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
#gra-fab {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  z-index: 10200;&lt;br /&gt;
  display: none;&lt;br /&gt;
  flex-direction: row;&lt;br /&gt;
  background: #B14A2E !important;&lt;br /&gt;
    border: none !important;&lt;br /&gt;
    border-radius: 12px !important;&lt;br /&gt;
    padding: 5px 4px !important;&lt;br /&gt;
    box-shadow: 0 3px 14px rgba(0, 0, 0, 0.08) !important;&lt;br /&gt;
    gap: 20px !important;&lt;br /&gt;
}&lt;br /&gt;
#gra-fab.gra-fab-visible { display: flex; }&lt;br /&gt;
&lt;br /&gt;
.gra-fab-btn {&lt;br /&gt;
  height: 48px;&lt;br /&gt;
  width: 48px;&lt;br /&gt;
  border: none;&lt;br /&gt;
  background: transparent;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  position: relative;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.gra-fab-btn-label {&lt;br /&gt;
 font-family: &#039;Noto Sans Devanagari&#039;;&lt;br /&gt;
font-weight: 400;&lt;br /&gt;
font-size: 10px;&lt;br /&gt;
line-height: 100%;&lt;br /&gt;
letter-spacing: 0%;&lt;br /&gt;
color: #ffffff;&lt;br /&gt;
padding: 5px 0;&lt;br /&gt;
}&lt;br /&gt;
.gra-fab-btn:hover { &lt;br /&gt;
background: rgba(255, 255, 255, 0.12) !important; border-radius: 12px;&lt;br /&gt;
}&lt;br /&gt;
.gra-fab-btn:hover .gra-fab-tooltip { opacity: 1; transform: translateX(0) translateY(-50%); }&lt;br /&gt;
&lt;br /&gt;
.gra-fab-tooltip {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  right: calc(100% + 8px);&lt;br /&gt;
  top: 50%;&lt;br /&gt;
  transform: translateX(4px) translateY(-50%);&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  background: rgba(30,30,30,0.82);&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  padding: 3px 9px;&lt;br /&gt;
  border-radius: 999px;&lt;br /&gt;
  pointer-events: none;&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
  transition: opacity 0.18s, transform 0.18s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   2. RIGHT PANEL&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
#gra-panel {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  right: -360px;&lt;br /&gt;
  width: 340px;&lt;br /&gt;
  height: 100vh;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  box-shadow: -3px 0 20px rgba(0,0,0,0.15);&lt;br /&gt;
  z-index: 10100;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  transition: right 0.28s cubic-bezier(0.4,0,0.2,1);&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
}&lt;br /&gt;
#gra-panel.gra-panel-open { right: 0; }&lt;br /&gt;
&lt;br /&gt;
#gra-backdrop {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  inset: 0;&lt;br /&gt;
  background: rgba(0,0,0,0.18);&lt;br /&gt;
  z-index: 10099;&lt;br /&gt;
  display: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
#gra-backdrop.gra-backdrop-visible { display: block; }&lt;br /&gt;
&lt;br /&gt;
#gra-panel-head {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: space-between;&lt;br /&gt;
  padding: 14px 16px 0;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
#gra-panel-close {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  font-size: 18px;&lt;br /&gt;
  color: #666;&lt;br /&gt;
  padding: 2px 6px;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
#gra-panel-close:hover { background: #f5f5f5; color: #222; }&lt;br /&gt;
&lt;br /&gt;
#gra-tabs {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  border-bottom: 2px solid #f0f0f0;&lt;br /&gt;
  margin: 10px 16px 0;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
.gra-tab {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  padding: 8px 4px;&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  font-family: inherit;&lt;br /&gt;
  color: #777;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  border-bottom: 2px solid transparent;&lt;br /&gt;
  margin-bottom: -2px;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  gap: 6px;&lt;br /&gt;
  transition: color 0.15s, border-color 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-tab .gra-icon { width: 16px; height: 16px; opacity: 0.5; }&lt;br /&gt;
.gra-tab:hover { color: #333; }&lt;br /&gt;
.gra-tab.gra-tab-active { color: #B14A2E; border-bottom-color: #B14A2E; }&lt;br /&gt;
.gra-tab.gra-tab-active .gra-icon {&lt;br /&gt;
  opacity: 1;&lt;br /&gt;
  filter: invert(33%) sepia(52%) saturate(1104%) hue-rotate(333deg) brightness(93%) contrast(90%);}&lt;br /&gt;
&lt;br /&gt;
#gra-panel-body {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  overflow-y: auto;&lt;br /&gt;
  padding: 12px 16px 16px;&lt;br /&gt;
}&lt;br /&gt;
.gra-pane { display: none; }&lt;br /&gt;
.gra-pane.gra-pane-active { display: block; }&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   3. FEEDBACK COMPOSER  — centered modal&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
.gra-composer {&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 12px;&lt;br /&gt;
  box-shadow: 0 8px 40px rgba(0,0,0,0.22);&lt;br /&gt;
  width: 420px;&lt;br /&gt;
  max-width: calc(100vw - 32px);&lt;br /&gt;
  padding: 20px 24px 16px;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  /* Centered on screen */&lt;br /&gt;
  top: 50% !important;&lt;br /&gt;
  left: 50% !important;&lt;br /&gt;
  transform: translate(-50%, -50%) !important;&lt;br /&gt;
  z-index: 10150;&lt;br /&gt;
  display: none;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  gap: 12px;&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
}&lt;br /&gt;
.gra-composer.gra-composer-visible { display: flex; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Feedback composer header row */&lt;br /&gt;
.gra-composer-header {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 8px;&lt;br /&gt;
}&lt;br /&gt;
.gra-composer-header strong {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
  color: #1C1A17;&lt;br /&gt;
  font-size: 16px; &lt;br /&gt;
  font-family: &amp;quot;Noto Sans Devanagari&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
.gra-btn-x {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  font-size: 16px;&lt;br /&gt;
  color: #666;&lt;br /&gt;
  padding: 2px 5px;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
.gra-btn-x:hover { background: #f5f5f5; color: #222; }&lt;br /&gt;
&lt;br /&gt;
/* Feedback field labels */&lt;br /&gt;
.gra-fb-field-label {&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
  color: #5f6368;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  letter-spacing: 0.4px;&lt;br /&gt;
  margin-bottom: -6px;   /* tighten gap to input below */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Selected text quote preview */&lt;br /&gt;
.gra-fb-quote-label {&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  color: #9aa0a6;&lt;br /&gt;
  margin-bottom: -4px;&lt;br /&gt;
}&lt;br /&gt;
.gra-fb-quote {&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #5f6368;&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  background: #fafafa;&lt;br /&gt;
  border-left: 3px solid #fbbc04;&lt;br /&gt;
  border-radius: 0 4px 4px 0;&lt;br /&gt;
  padding: 6px 10px;&lt;br /&gt;
  line-height: 1.45;&lt;br /&gt;
  max-height: 56px;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  display: -webkit-box;&lt;br /&gt;
  -webkit-line-clamp: 3;&lt;br /&gt;
  -webkit-box-orient: vertical;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Issue type dropdown */&lt;br /&gt;
.gra-fb-select {&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  padding: 7px 10px;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  font-family: inherit;&lt;br /&gt;
  color: #202124;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  outline: none;&lt;br /&gt;
  transition: border-color 0.15s;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
.gra-fb-select:focus { border-color: #1a73e8; }&lt;br /&gt;
&lt;br /&gt;
/* Email input */&lt;br /&gt;
.gra-fb-email-input {&lt;br /&gt;
  min-height: unset !important;&lt;br /&gt;
  height: 36px;&lt;br /&gt;
  padding: 6px 10px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Status message */&lt;br /&gt;
.gra-fb-status {&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  min-height: 16px;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
.gra-fb-status.gra-fb-ok  { color: #34a853; }&lt;br /&gt;
.gra-fb-status.gra-fb-err { color: #ea4335; }&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   4. NOTE COMPOSER  (local only)&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
.gra-composer-user {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 10px;&lt;br /&gt;
}&lt;br /&gt;
.gra-avatar {&lt;br /&gt;
  width: 32px;&lt;br /&gt;
  height: 32px;&lt;br /&gt;
  border-radius: 50%;&lt;br /&gt;
  background: #1a73e8;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
.gra-composer-uname { font-weight: 600; color: #202124; font-size: 13px; }&lt;br /&gt;
&lt;br /&gt;
.gra-composer-input {&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  padding: 8px 10px;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  font-family: inherit;&lt;br /&gt;
  resize: none;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
  min-height: 56px;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
  color: #202124;&lt;br /&gt;
  outline: none;&lt;br /&gt;
  transition: border-color 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-composer-input::placeholder { color: #aaa; }&lt;br /&gt;
.gra-composer-input:focus { border-color: #B14A2E; }&lt;br /&gt;
&lt;br /&gt;
.gra-composer-actions {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: flex-end;&lt;br /&gt;
  gap: 8px;&lt;br /&gt;
}&lt;br /&gt;
.gra-btn-cancel {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  color: #5f6368;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  font-family:&amp;quot;Noto Sans Devanagari&amp;quot;;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  padding: 8px 12px;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
}&lt;br /&gt;
.gra-btn-cancel:hover { background: #f5f5f5; }&lt;br /&gt;
.gra-btn-submit {&lt;br /&gt;
  background: transparent;&lt;br /&gt;
  color: #B14A2E;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  font-family:&amp;quot;Noto Sans Devanagari&amp;quot;;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  padding: 8px 12px;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  gap: 8px;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-btn-submit:hover { color: #8A351F; }&lt;br /&gt;
.gra-btn-submit:disabled { opacity: 0.4;&lt;br /&gt;
  cursor: not-allowed; }&lt;br /&gt;
&lt;br /&gt;
/* ── Note cards ── */&lt;br /&gt;
.gra-note-card {&lt;br /&gt;
  border: 1px solid #e8eaed;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 10px 12px;&lt;br /&gt;
  margin-bottom: 10px;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  box-shadow: 0 1px 3px rgba(0,0,0,0.07);&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: box-shadow 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-note-card:hover { box-shadow: 0 2px 8px rgba(0,0,0,0.12); }&lt;br /&gt;
.gra-note-card.gra-card-active {&lt;br /&gt;
  border-color: #34a853;&lt;br /&gt;
  box-shadow: 0 0 0 2px rgba(52,168,83,0.25);&lt;br /&gt;
}&lt;br /&gt;
.gra-card-header {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 8px;&lt;br /&gt;
  margin-bottom: 6px;&lt;br /&gt;
}&lt;br /&gt;
.gra-card-meta { flex: 1; }&lt;br /&gt;
.gra-card-ts { font-size: 11px; color: #80868b; }&lt;br /&gt;
.gra-card-quote {&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #5f6368;&lt;br /&gt;
  border-left: 3px solid #34a853;&lt;br /&gt;
  padding-left: 8px;&lt;br /&gt;
  margin-bottom: 6px;&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  line-height: 1.4;&lt;br /&gt;
  display: -webkit-box;&lt;br /&gt;
  -webkit-line-clamp: 2;&lt;br /&gt;
  -webkit-box-orient: vertical;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
}&lt;br /&gt;
.gra-card-text { font-size: 13px; color: #202124; line-height: 1.5; }&lt;br /&gt;
&lt;br /&gt;
.gra-note-del {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  color: #ccc;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  padding: 0 2px;&lt;br /&gt;
  line-height: 1;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
  margin-left: auto;&lt;br /&gt;
}&lt;br /&gt;
.gra-note-del:hover { color: #e53935; }&lt;br /&gt;
&lt;br /&gt;
.gra-empty-state {&lt;br /&gt;
  color: #9aa0a6;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  padding: 32px 16px;&lt;br /&gt;
  line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   5. BOOKMARK CARDS + COMPOSER&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
.gra-bookmark-card {&lt;br /&gt;
  border: 1px solid #e8eaed;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 10px 12px;&lt;br /&gt;
  margin-bottom: 10px;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  box-shadow: 0 1px 3px rgba(0,0,0,0.07);&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: flex-start;&lt;br /&gt;
  gap: 10px;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: box-shadow 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-bookmark-card:hover { box-shadow: 0 2px 8px rgba(0,0,0,0.12); }&lt;br /&gt;
.gra-bookmark-card .gra-icon { margin-top: 2px; flex-shrink: 0; }&lt;br /&gt;
.gra-bookmark-info { flex: 1; min-width: 0; }&lt;br /&gt;
.gra-bookmark-name {&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
  color: #202124;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  text-overflow: ellipsis;&lt;br /&gt;
}&lt;br /&gt;
.gra-bookmark-quote {&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  color: #80868b;&lt;br /&gt;
  margin-top: 2px;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  text-overflow: ellipsis;&lt;br /&gt;
}&lt;br /&gt;
.gra-bookmark-del {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  color: #ccc;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  padding: 0 2px;&lt;br /&gt;
  line-height: 1;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
.gra-bookmark-del:hover { color: #e53935; }&lt;br /&gt;
&lt;br /&gt;
.gra-bm-composer {&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 12px;&lt;br /&gt;
  box-shadow: 0 8px 40px rgba(0,0,0,0.22);&lt;br /&gt;
  width: 420px;&lt;br /&gt;
  max-width: calc(100vw - 32px);&lt;br /&gt;
  padding: 20px 24px 16px;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  /* Centered on screen — same as feedback composer */&lt;br /&gt;
  top: 50% !important;&lt;br /&gt;
  left: 50% !important;&lt;br /&gt;
  transform: translate(-50%, -50%) !important;&lt;br /&gt;
  z-index: 10150;&lt;br /&gt;
  display: none;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  gap: 10px;&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
}&lt;br /&gt;
.gra-bm-composer.gra-composer-visible { display: flex; }&lt;br /&gt;
.gra-bm-composer-label {&lt;br /&gt;
  color: #1C1A17;&lt;br /&gt;
  font-size: 16px;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 8px;&lt;br /&gt;
}&lt;br /&gt;
.gra-bm-composer-label .gra-icon, .gra-composer-header .gra-icon, .gra-tab .gra-icon, .gra-note-card .gra-icon, .gra-bookmark-card .gra-icon {&lt;br /&gt;
margin-top: -3px;&lt;br /&gt;
filter: brightness(0) saturate(100%) invert(7%) sepia(8%) saturate(894%) hue-rotate(357deg) brightness(97%) contrast(92%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   6. ANCHOR HIGHLIGHTS&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
/* Note highlight — green tint */&lt;br /&gt;
.gra-note-highlight {&lt;br /&gt;
  background: rgba(52, 168, 83, 0.18);&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-note-highlight:hover,&lt;br /&gt;
.gra-note-highlight.gra-hl-active {&lt;br /&gt;
  background: rgba(52, 168, 83, 0.4);&lt;br /&gt;
  outline: 1.5px solid #34a853;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Bookmark highlight — blue underline */&lt;br /&gt;
.gra-bookmark-highlight {&lt;br /&gt;
  background: rgba(26, 115, 232, 0.12);&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  border-bottom: 1.5px solid #1a73e8;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-bookmark-highlight:hover { background: rgba(26, 115, 232, 0.22); }&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   7. PERSISTENT TOGGLE BUTTON&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
#gra-toggle {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  bottom: 78px;&lt;br /&gt;
  right: 20px;&lt;br /&gt;
  width: 48px;&lt;br /&gt;
  height: 48px;&lt;br /&gt;
  border-radius: 50%;&lt;br /&gt;
  background: #c0521a;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  z-index: 9998;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  box-shadow: 0 3px 12px rgba(0,0,0,0.22);&lt;br /&gt;
  transition: background 0.15s, transform 0.15s;&lt;br /&gt;
}&lt;br /&gt;
#gra-toggle:hover { background: #a0410e; transform: scale(1.07); }&lt;br /&gt;
#gra-toggle .gra-icon {&lt;br /&gt;
  width: 22px;&lt;br /&gt;
  height: 22px;&lt;br /&gt;
  filter: brightness(0) invert(1);&lt;br /&gt;
}&lt;br /&gt;
#gra-toggle-badge {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  top: -4px;&lt;br /&gt;
  right: -4px;&lt;br /&gt;
  background: #e53935;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-size: 10px;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  min-width: 16px;&lt;br /&gt;
  height: 16px;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 0 4px;&lt;br /&gt;
  line-height: 16px;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  display: none;&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  pointer-events: none;&lt;br /&gt;
}&lt;br /&gt;
#gra-panel.gra-panel-open ~ #gra-toggle {&lt;br /&gt;
  right: 356px;&lt;br /&gt;
  transition: right 0.28s cubic-bezier(0.4,0,0.2,1), background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   MOBILE BOTTOM ACTION BAR&lt;br /&gt;
   Slides up from bottom — avoids clashing with browser copy menu.&lt;br /&gt;
   Large tap targets (56px height buttons) with text labels.&lt;br /&gt;
   Only shown on mobile (JS sets _mobile flag).&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
#gra-mobile-bar {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  bottom: 0;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  right: 0;&lt;br /&gt;
  z-index: 10200;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  transform: translateY(100%);&lt;br /&gt;
  transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);&lt;br /&gt;
  pointer-events: none;&lt;br /&gt;
}&lt;br /&gt;
#gra-mobile-bar.gra-mobile-bar-visible {&lt;br /&gt;
  transform: translateY(0);&lt;br /&gt;
  pointer-events: auto;&lt;br /&gt;
}&lt;br /&gt;
#gra-mobile-bar-inner {&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  border-top: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 16px 16px 0 0;&lt;br /&gt;
  box-shadow: 0 -4px 20px rgba(0,0,0,0.18);&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: stretch;&lt;br /&gt;
  padding-bottom: env(safe-area-inset-bottom, 0px);&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-btn {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  gap: 5px;&lt;br /&gt;
  padding: 14px 8px;&lt;br /&gt;
  min-height: 72px;&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  border-right: 1px solid #f0f0f0;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  color: #444;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  -webkit-tap-highlight-color: rgba(0,0,0,0.06);&lt;br /&gt;
  transition: background 0.12s;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-btn:last-child { border-right: none; }&lt;br /&gt;
.gra-mob-btn:active { background: #f5f5f5; }&lt;br /&gt;
.gra-mob-btn .gra-icon { width: 24px; height: 24px; }&lt;br /&gt;
.gra-mob-label { font-size: 11px; line-height: 1.2; text-align: center; }&lt;br /&gt;
.gra-mob-dismiss { color: #999; }&lt;br /&gt;
.gra-mob-dismiss:active { background: #fff0f0; color: #e53935; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   8. RESPONSIVE&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
@media (max-width: 768px) {&lt;br /&gt;
  #gra-panel { width: 100vw; right: -100vw; }&lt;br /&gt;
  .gra-composer {&lt;br /&gt;
    width: calc(100vw - 32px) !important;&lt;br /&gt;
    max-width: 420px;&lt;br /&gt;
    /* Override centering for note/bookmark on mobile — keep centered */&lt;br /&gt;
    top: 50% !important;&lt;br /&gt;
    left: 50% !important;&lt;br /&gt;
    transform: translate(-50%, -50%) !important;&lt;br /&gt;
  }&lt;br /&gt;
  /* bm-composer already centered via its base CSS */&lt;br /&gt;
}&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   REPLACE the entire additions block at the bottom of&lt;br /&gt;
   MediaWiki:Gadget-GrAnnotations.css with this content.&lt;br /&gt;
&lt;br /&gt;
   FAB stack (right:20px desktop, right:16px mobile):&lt;br /&gt;
     22px   [📚] #se-docnav-btn   docs navigator&lt;br /&gt;
     78px   [↑]  #se-scrolltop    scroll to top&lt;br /&gt;
     134px  [✎]  #gra-toggle      notes panel   ← was wrongly 78px&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
&lt;br /&gt;
/* ── #gra-toggle: sits above both siteNav FABs ─────────────────── */&lt;br /&gt;
#gra-toggle {&lt;br /&gt;
  bottom: 78px !important;&lt;br /&gt;
  right: 20px !important;&lt;br /&gt;
}&lt;br /&gt;
#gra-panel.gra-panel-open ~ #gra-toggle {&lt;br /&gt;
  right: 356px !important;&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 768px) {&lt;br /&gt;
  #gra-toggle {&lt;br /&gt;
    bottom: 78px !important;&lt;br /&gt;
    right: 16px !important;&lt;br /&gt;
    width: 44px !important;&lt;br /&gt;
    height: 44px !important;&lt;br /&gt;
  }&lt;br /&gt;
  #gra-panel.gra-panel-open ~ #gra-toggle {&lt;br /&gt;
    right: calc(100vw + 4px) !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Mobile annotation bar above all Minerva overlays ──────────── */&lt;br /&gt;
#gra-mobile-bar {&lt;br /&gt;
  z-index: 99999 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── CSS custom property fallbacks ─────────────────────────────── */&lt;br /&gt;
/* readerToolbar.js writes these at runtime; these are initial values */&lt;br /&gt;
:root {&lt;br /&gt;
  --gr-header-height: 50px;&lt;br /&gt;
  --gr-bar-h: 48px;&lt;br /&gt;
  --gr-bar-top: 50px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Scroll-margin: TOC anchor links clear the fixed bar ────────── */&lt;br /&gt;
/* Vector: header + bar both fixed */&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h1[id],&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h2[id],&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h3[id],&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h4[id],&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h5[id],&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h6[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h1[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h2[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h3[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h4[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h5[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h6[id] {&lt;br /&gt;
  scroll-margin-top: calc(var(--gr-header-height) + var(--gr-bar-h) + 12px);&lt;br /&gt;
}&lt;br /&gt;
/* Minerva: only bar is fixed once header scrolls away */&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h1[id],&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h2[id],&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h3[id],&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h4[id],&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h5[id],&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h6[id] {&lt;br /&gt;
  scroll-margin-top: calc(var(--gr-bar-h) + 12px);&lt;br /&gt;
}&lt;br /&gt;
#mw-content-text .mw-parser-output &amp;gt; *:first-child {&lt;br /&gt;
  scroll-margin-top: calc(var(--gr-header-height) + var(--gr-bar-h) + 8px);&lt;br /&gt;
}&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output &amp;gt; *:first-child {&lt;br /&gt;
  scroll-margin-top: calc(var(--gr-bar-h) + 8px);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
/* Search icon in FAB using an inline SVG data-URI */&lt;br /&gt;
.gra-icon-search {&lt;br /&gt;
  background-image: url(&amp;quot;data:image/svg+xml,%3Csvg xmlns=&#039;http://www.w3.org/2000/svg&#039; viewBox=&#039;0 0 24 24&#039; fill=&#039;none&#039; stroke=&#039;%23ffffff&#039; stroke-width=&#039;2.2&#039; stroke-linecap=&#039;round&#039; stroke-linejoin=&#039;round&#039;%3E%3Ccircle cx=&#039;11&#039; cy=&#039;11&#039; r=&#039;7&#039;/%3E%3Cline x1=&#039;16.5&#039; y1=&#039;16.5&#039; x2=&#039;22&#039; y2=&#039;22&#039;/%3E%3C/svg%3E&amp;quot;) !important;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   MOBILE BOTTOM BAR — terracotta theme&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
#gra-mobile-bar-inner {&lt;br /&gt;
  background: #b5451b !important;&lt;br /&gt;
  border-top: none !important;&lt;br /&gt;
  border-radius: 16px 16px 0 0 !important;&lt;br /&gt;
  box-shadow: 0 -4px 20px rgba(181,69,27,0.35) !important;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
.gra-mob-btn {&lt;br /&gt;
  color: rgba(255,255,255,0.92) !important;&lt;br /&gt;
  border-right-color: rgba(255,255,255,0.18) !important;&lt;br /&gt;
  min-height: 76px !important;&lt;br /&gt;
  padding: 16px 8px !important;&lt;br /&gt;
  font-size: 12px !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-btn:active {&lt;br /&gt;
  background: rgba(0,0,0,0.12) !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-btn .gra-icon {&lt;br /&gt;
  width: 26px !important;&lt;br /&gt;
  height: 26px !important;&lt;br /&gt;
  filter: brightness(0) invert(1) !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-label {&lt;br /&gt;
  color: rgba(255,255,255,0.88) !important;&lt;br /&gt;
  font-size: 11px !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-dismiss {&lt;br /&gt;
  color: rgba(255,255,255,0.70) !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-dismiss .gra-mob-label {&lt;br /&gt;
  color: rgba(255,255,255,0.60) !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-dismiss span[style] {&lt;br /&gt;
  color: rgba(255,255,255,0.70) !important;&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 767px) {&lt;br /&gt;
&lt;br /&gt;
  /* Bottom sheet — pinned to bottom via inset, animated via transform */&lt;br /&gt;
  #gra-fb-composer.gra-composer,&lt;br /&gt;
  #gra-nt-composer.gra-composer,&lt;br /&gt;
  #gra-bm-composer.gra-bm-composer {&lt;br /&gt;
    position: fixed !important;&lt;br /&gt;
    inset: auto 0 0 0 !important;          /* top:auto right:0 bottom:0 left:0 */&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    max-width: 100% !important;&lt;br /&gt;
    margin: 0 !important;&lt;br /&gt;
    border-radius: 16px 16px 0 0 !important;&lt;br /&gt;
    box-shadow: 0 -4px 24px rgba(0,0,0,0.18) !important;&lt;br /&gt;
    padding: 20px 20px calc(20px + env(safe-area-inset-bottom)) !important;&lt;br /&gt;
    box-sizing: border-box !important;&lt;br /&gt;
    transform: translateY(100%) !important;&lt;br /&gt;
    transition: transform 0.28s cubic-bezier(0.32,0.72,0,1) !important;&lt;br /&gt;
    z-index: 10600 !important;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* Slide up when visible */&lt;br /&gt;
  #gra-fb-composer.gra-composer-visible,&lt;br /&gt;
  #gra-nt-composer.gra-composer-visible,&lt;br /&gt;
  #gra-bm-composer.gra-composer-visible {&lt;br /&gt;
    transform: translateY(0) !important;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* Grab handle */&lt;br /&gt;
  #gra-fb-composer::before,&lt;br /&gt;
  #gra-nt-composer::before,&lt;br /&gt;
  #gra-bm-composer::before {&lt;br /&gt;
    content: &amp;quot;&amp;quot;;&lt;br /&gt;
    display: block;&lt;br /&gt;
    width: 36px; height: 4px;&lt;br /&gt;
    border-radius: 2px;&lt;br /&gt;
    background: #d0d0d0;&lt;br /&gt;
    margin: -6px auto 14px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .gra-composer .gra-composer-input,&lt;br /&gt;
  .gra-bm-composer .gra-composer-input {&lt;br /&gt;
    font-size: 16px !important;   /* no iOS zoom on focus */&lt;br /&gt;
  }&lt;br /&gt;
  .gra-composer-actions { display: flex; gap: 10px; }&lt;br /&gt;
  .gra-composer-actions .gra-btn-submit,&lt;br /&gt;
  .gra-composer-actions .gra-btn-cancel { flex: 1; min-height: 44px; }&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 767px) {&lt;br /&gt;
  /* Docked toolbar below the reader header */&lt;br /&gt;
  #gra-fab.gra-fab-mobile-docked {&lt;br /&gt;
    position: fixed !important;&lt;br /&gt;
    top: var(--gr-toc-top, 99px) !important;  /* sits just below reader toolbar */&lt;br /&gt;
    left: 0 !important;&lt;br /&gt;
    right: 0 !important;&lt;br /&gt;
    height: 52px !important;&lt;br /&gt;
    flex-direction: row !important;&lt;br /&gt;
    align-items: center !important;&lt;br /&gt;
    justify-content: space-around !important;&lt;br /&gt;
    border-radius: 0 !important;&lt;br /&gt;
    box-shadow: 0 2px 8px rgba(0,0,0,0.15) !important;&lt;br /&gt;
    z-index: 2147483646 !important;       /* below native menu, above content */&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #gra-fab.gra-fab-mobile-docked .gra-fab-btn {&lt;br /&gt;
    flex: 1;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    height: 44px;&lt;br /&gt;
    background: transparent !important;&lt;br /&gt;
    touch-action: manipulation;&lt;br /&gt;
    -webkit-tap-highlight-color: transparent;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #gra-fab.gra-fab-mobile-docked .gra-fab-btn-label {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-size: 10px;&lt;br /&gt;
    margin-top: 2px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Gadget-GrAnnotations.css&amp;diff=6185</id>
		<title>MediaWiki:Gadget-GrAnnotations.css</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Gadget-GrAnnotations.css&amp;diff=6185"/>
		<updated>2026-06-10T19:52:12Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/*&lt;br /&gt;
 * gr_annotations.css  —  grantha.io inline Notes + Bookmarks + Feedback  (v3)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* ── Icon base ──────────────────────────────────────────────────── */&lt;br /&gt;
.gra-icon {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  width:  20px;&lt;br /&gt;
  height: 20px;&lt;br /&gt;
  background-size: contain;&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  background-position: center;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
/* comment.svg → Feedback (flag/report)  */&lt;br /&gt;
.gra-icon-feedback { background-image: url(&#039;/images/feedback.svg&#039;); }&lt;br /&gt;
/* notes.svg   → Notes                  */&lt;br /&gt;
.gra-icon-note     { background-image: url(&#039;/images/notes.svg&#039;); }&lt;br /&gt;
.gra-icon-bookmark { background-image: url(&#039;/images/bookmark.svg&#039;); }&lt;br /&gt;
.gra-icon-copy     { background-image: url(&#039;/images/copy.svg&#039;); }&lt;br /&gt;
.gra-icon-search { background-image: url(&#039;/images/search.svg&#039;); }&lt;br /&gt;
.gra-icon-dismiss { background-image: url(&#039;/images/close.svg&#039;); }&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   1. FLOATING ACTION STRIP  (desktop only)&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
#gra-fab {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  z-index: 10200;&lt;br /&gt;
  display: none;&lt;br /&gt;
  flex-direction: row;&lt;br /&gt;
  background: #B14A2E !important;&lt;br /&gt;
    border: none !important;&lt;br /&gt;
    border-radius: 12px !important;&lt;br /&gt;
    padding: 5px 4px !important;&lt;br /&gt;
    box-shadow: 0 3px 14px rgba(0, 0, 0, 0.08) !important;&lt;br /&gt;
    gap: 20px !important;&lt;br /&gt;
}&lt;br /&gt;
#gra-fab.gra-fab-visible { display: flex; }&lt;br /&gt;
&lt;br /&gt;
.gra-fab-btn {&lt;br /&gt;
  height: 48px;&lt;br /&gt;
  width: 48px;&lt;br /&gt;
  border: none;&lt;br /&gt;
  background: transparent;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  position: relative;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.gra-fab-btn-label {&lt;br /&gt;
 font-family: &#039;Noto Sans Devanagari&#039;;&lt;br /&gt;
font-weight: 400;&lt;br /&gt;
font-size: 10px;&lt;br /&gt;
line-height: 100%;&lt;br /&gt;
letter-spacing: 0%;&lt;br /&gt;
color: #ffffff;&lt;br /&gt;
padding: 5px 0;&lt;br /&gt;
}&lt;br /&gt;
.gra-fab-btn:hover { &lt;br /&gt;
background: rgba(255, 255, 255, 0.12) !important; border-radius: 12px;&lt;br /&gt;
}&lt;br /&gt;
.gra-fab-btn:hover .gra-fab-tooltip { opacity: 1; transform: translateX(0) translateY(-50%); }&lt;br /&gt;
&lt;br /&gt;
.gra-fab-tooltip {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  right: calc(100% + 8px);&lt;br /&gt;
  top: 50%;&lt;br /&gt;
  transform: translateX(4px) translateY(-50%);&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  background: rgba(30,30,30,0.82);&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  padding: 3px 9px;&lt;br /&gt;
  border-radius: 999px;&lt;br /&gt;
  pointer-events: none;&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
  transition: opacity 0.18s, transform 0.18s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   2. RIGHT PANEL&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
#gra-panel {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  right: -360px;&lt;br /&gt;
  width: 340px;&lt;br /&gt;
  height: 100vh;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  box-shadow: -3px 0 20px rgba(0,0,0,0.15);&lt;br /&gt;
  z-index: 10100;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  transition: right 0.28s cubic-bezier(0.4,0,0.2,1);&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
}&lt;br /&gt;
#gra-panel.gra-panel-open { right: 0; }&lt;br /&gt;
&lt;br /&gt;
#gra-backdrop {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  inset: 0;&lt;br /&gt;
  background: rgba(0,0,0,0.18);&lt;br /&gt;
  z-index: 10099;&lt;br /&gt;
  display: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
#gra-backdrop.gra-backdrop-visible { display: block; }&lt;br /&gt;
&lt;br /&gt;
#gra-panel-head {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: space-between;&lt;br /&gt;
  padding: 14px 16px 0;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
#gra-panel-close {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  font-size: 18px;&lt;br /&gt;
  color: #666;&lt;br /&gt;
  padding: 2px 6px;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
#gra-panel-close:hover { background: #f5f5f5; color: #222; }&lt;br /&gt;
&lt;br /&gt;
#gra-tabs {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  border-bottom: 2px solid #f0f0f0;&lt;br /&gt;
  margin: 10px 16px 0;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
.gra-tab {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  padding: 8px 4px;&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  font-family: inherit;&lt;br /&gt;
  color: #777;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  border-bottom: 2px solid transparent;&lt;br /&gt;
  margin-bottom: -2px;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  gap: 6px;&lt;br /&gt;
  transition: color 0.15s, border-color 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-tab .gra-icon { width: 16px; height: 16px; opacity: 0.5; }&lt;br /&gt;
.gra-tab:hover { color: #333; }&lt;br /&gt;
.gra-tab.gra-tab-active { color: #B14A2E; border-bottom-color: #B14A2E; }&lt;br /&gt;
.gra-tab.gra-tab-active .gra-icon {&lt;br /&gt;
  opacity: 1;&lt;br /&gt;
  filter: invert(33%) sepia(52%) saturate(1104%) hue-rotate(333deg) brightness(93%) contrast(90%);}&lt;br /&gt;
&lt;br /&gt;
#gra-panel-body {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  overflow-y: auto;&lt;br /&gt;
  padding: 12px 16px 16px;&lt;br /&gt;
}&lt;br /&gt;
.gra-pane { display: none; }&lt;br /&gt;
.gra-pane.gra-pane-active { display: block; }&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   3. FEEDBACK COMPOSER  — centered modal&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
.gra-composer {&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 12px;&lt;br /&gt;
  box-shadow: 0 8px 40px rgba(0,0,0,0.22);&lt;br /&gt;
  width: 420px;&lt;br /&gt;
  max-width: calc(100vw - 32px);&lt;br /&gt;
  padding: 20px 24px 16px;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  /* Centered on screen */&lt;br /&gt;
  top: 50% !important;&lt;br /&gt;
  left: 50% !important;&lt;br /&gt;
  transform: translate(-50%, -50%) !important;&lt;br /&gt;
  z-index: 10150;&lt;br /&gt;
  display: none;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  gap: 12px;&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
}&lt;br /&gt;
.gra-composer.gra-composer-visible { display: flex; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Feedback composer header row */&lt;br /&gt;
.gra-composer-header {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 8px;&lt;br /&gt;
}&lt;br /&gt;
.gra-composer-header strong {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
  color: #1C1A17;&lt;br /&gt;
  font-size: 16px; &lt;br /&gt;
  font-family: &amp;quot;Noto Sans Devanagari&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
.gra-btn-x {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  font-size: 16px;&lt;br /&gt;
  color: #666;&lt;br /&gt;
  padding: 2px 5px;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
.gra-btn-x:hover { background: #f5f5f5; color: #222; }&lt;br /&gt;
&lt;br /&gt;
/* Feedback field labels */&lt;br /&gt;
.gra-fb-field-label {&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
  color: #5f6368;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  letter-spacing: 0.4px;&lt;br /&gt;
  margin-bottom: -6px;   /* tighten gap to input below */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Selected text quote preview */&lt;br /&gt;
.gra-fb-quote-label {&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  color: #9aa0a6;&lt;br /&gt;
  margin-bottom: -4px;&lt;br /&gt;
}&lt;br /&gt;
.gra-fb-quote {&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #5f6368;&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  background: #fafafa;&lt;br /&gt;
  border-left: 3px solid #fbbc04;&lt;br /&gt;
  border-radius: 0 4px 4px 0;&lt;br /&gt;
  padding: 6px 10px;&lt;br /&gt;
  line-height: 1.45;&lt;br /&gt;
  max-height: 56px;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  display: -webkit-box;&lt;br /&gt;
  -webkit-line-clamp: 3;&lt;br /&gt;
  -webkit-box-orient: vertical;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Issue type dropdown */&lt;br /&gt;
.gra-fb-select {&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  padding: 7px 10px;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  font-family: inherit;&lt;br /&gt;
  color: #202124;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  outline: none;&lt;br /&gt;
  transition: border-color 0.15s;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
.gra-fb-select:focus { border-color: #1a73e8; }&lt;br /&gt;
&lt;br /&gt;
/* Email input */&lt;br /&gt;
.gra-fb-email-input {&lt;br /&gt;
  min-height: unset !important;&lt;br /&gt;
  height: 36px;&lt;br /&gt;
  padding: 6px 10px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Status message */&lt;br /&gt;
.gra-fb-status {&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  min-height: 16px;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
.gra-fb-status.gra-fb-ok  { color: #34a853; }&lt;br /&gt;
.gra-fb-status.gra-fb-err { color: #ea4335; }&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   4. NOTE COMPOSER  (local only)&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
.gra-composer-user {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 10px;&lt;br /&gt;
}&lt;br /&gt;
.gra-avatar {&lt;br /&gt;
  width: 32px;&lt;br /&gt;
  height: 32px;&lt;br /&gt;
  border-radius: 50%;&lt;br /&gt;
  background: #1a73e8;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
.gra-composer-uname { font-weight: 600; color: #202124; font-size: 13px; }&lt;br /&gt;
&lt;br /&gt;
.gra-composer-input {&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  padding: 8px 10px;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  font-family: inherit;&lt;br /&gt;
  resize: none;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
  min-height: 56px;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
  color: #202124;&lt;br /&gt;
  outline: none;&lt;br /&gt;
  transition: border-color 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-composer-input::placeholder { color: #aaa; }&lt;br /&gt;
.gra-composer-input:focus { border-color: #B14A2E; }&lt;br /&gt;
&lt;br /&gt;
.gra-composer-actions {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: flex-end;&lt;br /&gt;
  gap: 8px;&lt;br /&gt;
}&lt;br /&gt;
.gra-btn-cancel {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  color: #5f6368;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  font-family:&amp;quot;Noto Sans Devanagari&amp;quot;;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  padding: 8px 12px;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
}&lt;br /&gt;
.gra-btn-cancel:hover { background: #f5f5f5; }&lt;br /&gt;
.gra-btn-submit {&lt;br /&gt;
  background: transparent;&lt;br /&gt;
  color: #B14A2E;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  font-family:&amp;quot;Noto Sans Devanagari&amp;quot;;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  padding: 8px 12px;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  gap: 8px;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-btn-submit:hover { color: #8A351F; }&lt;br /&gt;
.gra-btn-submit:disabled { opacity: 0.4;&lt;br /&gt;
  cursor: not-allowed; }&lt;br /&gt;
&lt;br /&gt;
/* ── Note cards ── */&lt;br /&gt;
.gra-note-card {&lt;br /&gt;
  border: 1px solid #e8eaed;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 10px 12px;&lt;br /&gt;
  margin-bottom: 10px;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  box-shadow: 0 1px 3px rgba(0,0,0,0.07);&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: box-shadow 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-note-card:hover { box-shadow: 0 2px 8px rgba(0,0,0,0.12); }&lt;br /&gt;
.gra-note-card.gra-card-active {&lt;br /&gt;
  border-color: #34a853;&lt;br /&gt;
  box-shadow: 0 0 0 2px rgba(52,168,83,0.25);&lt;br /&gt;
}&lt;br /&gt;
.gra-card-header {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 8px;&lt;br /&gt;
  margin-bottom: 6px;&lt;br /&gt;
}&lt;br /&gt;
.gra-card-meta { flex: 1; }&lt;br /&gt;
.gra-card-ts { font-size: 11px; color: #80868b; }&lt;br /&gt;
.gra-card-quote {&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #5f6368;&lt;br /&gt;
  border-left: 3px solid #34a853;&lt;br /&gt;
  padding-left: 8px;&lt;br /&gt;
  margin-bottom: 6px;&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  line-height: 1.4;&lt;br /&gt;
  display: -webkit-box;&lt;br /&gt;
  -webkit-line-clamp: 2;&lt;br /&gt;
  -webkit-box-orient: vertical;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
}&lt;br /&gt;
.gra-card-text { font-size: 13px; color: #202124; line-height: 1.5; }&lt;br /&gt;
&lt;br /&gt;
.gra-note-del {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  color: #ccc;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  padding: 0 2px;&lt;br /&gt;
  line-height: 1;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
  margin-left: auto;&lt;br /&gt;
}&lt;br /&gt;
.gra-note-del:hover { color: #e53935; }&lt;br /&gt;
&lt;br /&gt;
.gra-empty-state {&lt;br /&gt;
  color: #9aa0a6;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  padding: 32px 16px;&lt;br /&gt;
  line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   5. BOOKMARK CARDS + COMPOSER&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
.gra-bookmark-card {&lt;br /&gt;
  border: 1px solid #e8eaed;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 10px 12px;&lt;br /&gt;
  margin-bottom: 10px;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  box-shadow: 0 1px 3px rgba(0,0,0,0.07);&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: flex-start;&lt;br /&gt;
  gap: 10px;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: box-shadow 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-bookmark-card:hover { box-shadow: 0 2px 8px rgba(0,0,0,0.12); }&lt;br /&gt;
.gra-bookmark-card .gra-icon { margin-top: 2px; flex-shrink: 0; }&lt;br /&gt;
.gra-bookmark-info { flex: 1; min-width: 0; }&lt;br /&gt;
.gra-bookmark-name {&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
  color: #202124;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  text-overflow: ellipsis;&lt;br /&gt;
}&lt;br /&gt;
.gra-bookmark-quote {&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  color: #80868b;&lt;br /&gt;
  margin-top: 2px;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  text-overflow: ellipsis;&lt;br /&gt;
}&lt;br /&gt;
.gra-bookmark-del {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  color: #ccc;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  padding: 0 2px;&lt;br /&gt;
  line-height: 1;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
.gra-bookmark-del:hover { color: #e53935; }&lt;br /&gt;
&lt;br /&gt;
.gra-bm-composer {&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 12px;&lt;br /&gt;
  box-shadow: 0 8px 40px rgba(0,0,0,0.22);&lt;br /&gt;
  width: 420px;&lt;br /&gt;
  max-width: calc(100vw - 32px);&lt;br /&gt;
  padding: 20px 24px 16px;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  /* Centered on screen — same as feedback composer */&lt;br /&gt;
  top: 50% !important;&lt;br /&gt;
  left: 50% !important;&lt;br /&gt;
  transform: translate(-50%, -50%) !important;&lt;br /&gt;
  z-index: 10150;&lt;br /&gt;
  display: none;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  gap: 10px;&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
}&lt;br /&gt;
.gra-bm-composer.gra-composer-visible { display: flex; }&lt;br /&gt;
.gra-bm-composer-label {&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
  color: #1C1A17;&lt;br /&gt;
  font-size: 16px;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 8px;&lt;br /&gt;
  font-family: &amp;quot;Noto Sans Devanagari&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
.gra-bm-composer-label .gra-icon, .gra-composer-header .gra-icon, .gra-tab .gra-icon, .gra-note-card .gra-icon, .gra-bookmark-card .gra-icon {&lt;br /&gt;
margin-top: -3px;&lt;br /&gt;
filter: brightness(0) saturate(100%) invert(7%) sepia(8%) saturate(894%) hue-rotate(357deg) brightness(97%) contrast(92%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   6. ANCHOR HIGHLIGHTS&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
/* Note highlight — green tint */&lt;br /&gt;
.gra-note-highlight {&lt;br /&gt;
  background: rgba(52, 168, 83, 0.18);&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-note-highlight:hover,&lt;br /&gt;
.gra-note-highlight.gra-hl-active {&lt;br /&gt;
  background: rgba(52, 168, 83, 0.4);&lt;br /&gt;
  outline: 1.5px solid #34a853;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Bookmark highlight — blue underline */&lt;br /&gt;
.gra-bookmark-highlight {&lt;br /&gt;
  background: rgba(26, 115, 232, 0.12);&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  border-bottom: 1.5px solid #1a73e8;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-bookmark-highlight:hover { background: rgba(26, 115, 232, 0.22); }&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   7. PERSISTENT TOGGLE BUTTON&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
#gra-toggle {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  bottom: 78px;&lt;br /&gt;
  right: 20px;&lt;br /&gt;
  width: 48px;&lt;br /&gt;
  height: 48px;&lt;br /&gt;
  border-radius: 50%;&lt;br /&gt;
  background: #c0521a;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  z-index: 9998;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  box-shadow: 0 3px 12px rgba(0,0,0,0.22);&lt;br /&gt;
  transition: background 0.15s, transform 0.15s;&lt;br /&gt;
}&lt;br /&gt;
#gra-toggle:hover { background: #a0410e; transform: scale(1.07); }&lt;br /&gt;
#gra-toggle .gra-icon {&lt;br /&gt;
  width: 22px;&lt;br /&gt;
  height: 22px;&lt;br /&gt;
  filter: brightness(0) invert(1);&lt;br /&gt;
}&lt;br /&gt;
#gra-toggle-badge {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  top: -4px;&lt;br /&gt;
  right: -4px;&lt;br /&gt;
  background: #e53935;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-size: 10px;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  min-width: 16px;&lt;br /&gt;
  height: 16px;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 0 4px;&lt;br /&gt;
  line-height: 16px;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  display: none;&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  pointer-events: none;&lt;br /&gt;
}&lt;br /&gt;
#gra-panel.gra-panel-open ~ #gra-toggle {&lt;br /&gt;
  right: 356px;&lt;br /&gt;
  transition: right 0.28s cubic-bezier(0.4,0,0.2,1), background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   MOBILE BOTTOM ACTION BAR&lt;br /&gt;
   Slides up from bottom — avoids clashing with browser copy menu.&lt;br /&gt;
   Large tap targets (56px height buttons) with text labels.&lt;br /&gt;
   Only shown on mobile (JS sets _mobile flag).&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
#gra-mobile-bar {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  bottom: 0;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  right: 0;&lt;br /&gt;
  z-index: 10200;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  transform: translateY(100%);&lt;br /&gt;
  transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);&lt;br /&gt;
  pointer-events: none;&lt;br /&gt;
}&lt;br /&gt;
#gra-mobile-bar.gra-mobile-bar-visible {&lt;br /&gt;
  transform: translateY(0);&lt;br /&gt;
  pointer-events: auto;&lt;br /&gt;
}&lt;br /&gt;
#gra-mobile-bar-inner {&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  border-top: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 16px 16px 0 0;&lt;br /&gt;
  box-shadow: 0 -4px 20px rgba(0,0,0,0.18);&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: stretch;&lt;br /&gt;
  padding-bottom: env(safe-area-inset-bottom, 0px);&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-btn {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  gap: 5px;&lt;br /&gt;
  padding: 14px 8px;&lt;br /&gt;
  min-height: 72px;&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  border-right: 1px solid #f0f0f0;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  color: #444;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  -webkit-tap-highlight-color: rgba(0,0,0,0.06);&lt;br /&gt;
  transition: background 0.12s;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-btn:last-child { border-right: none; }&lt;br /&gt;
.gra-mob-btn:active { background: #f5f5f5; }&lt;br /&gt;
.gra-mob-btn .gra-icon { width: 24px; height: 24px; }&lt;br /&gt;
.gra-mob-label { font-size: 11px; line-height: 1.2; text-align: center; }&lt;br /&gt;
.gra-mob-dismiss { color: #999; }&lt;br /&gt;
.gra-mob-dismiss:active { background: #fff0f0; color: #e53935; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   8. RESPONSIVE&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
@media (max-width: 768px) {&lt;br /&gt;
  #gra-panel { width: 100vw; right: -100vw; }&lt;br /&gt;
  .gra-composer {&lt;br /&gt;
    width: calc(100vw - 32px) !important;&lt;br /&gt;
    max-width: 420px;&lt;br /&gt;
    /* Override centering for note/bookmark on mobile — keep centered */&lt;br /&gt;
    top: 50% !important;&lt;br /&gt;
    left: 50% !important;&lt;br /&gt;
    transform: translate(-50%, -50%) !important;&lt;br /&gt;
  }&lt;br /&gt;
  /* bm-composer already centered via its base CSS */&lt;br /&gt;
}&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   REPLACE the entire additions block at the bottom of&lt;br /&gt;
   MediaWiki:Gadget-GrAnnotations.css with this content.&lt;br /&gt;
&lt;br /&gt;
   FAB stack (right:20px desktop, right:16px mobile):&lt;br /&gt;
     22px   [📚] #se-docnav-btn   docs navigator&lt;br /&gt;
     78px   [↑]  #se-scrolltop    scroll to top&lt;br /&gt;
     134px  [✎]  #gra-toggle      notes panel   ← was wrongly 78px&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
&lt;br /&gt;
/* ── #gra-toggle: sits above both siteNav FABs ─────────────────── */&lt;br /&gt;
#gra-toggle {&lt;br /&gt;
  bottom: 78px !important;&lt;br /&gt;
  right: 20px !important;&lt;br /&gt;
}&lt;br /&gt;
#gra-panel.gra-panel-open ~ #gra-toggle {&lt;br /&gt;
  right: 356px !important;&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 768px) {&lt;br /&gt;
  #gra-toggle {&lt;br /&gt;
    bottom: 78px !important;&lt;br /&gt;
    right: 16px !important;&lt;br /&gt;
    width: 44px !important;&lt;br /&gt;
    height: 44px !important;&lt;br /&gt;
  }&lt;br /&gt;
  #gra-panel.gra-panel-open ~ #gra-toggle {&lt;br /&gt;
    right: calc(100vw + 4px) !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Mobile annotation bar above all Minerva overlays ──────────── */&lt;br /&gt;
#gra-mobile-bar {&lt;br /&gt;
  z-index: 99999 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── CSS custom property fallbacks ─────────────────────────────── */&lt;br /&gt;
/* readerToolbar.js writes these at runtime; these are initial values */&lt;br /&gt;
:root {&lt;br /&gt;
  --gr-header-height: 50px;&lt;br /&gt;
  --gr-bar-h: 48px;&lt;br /&gt;
  --gr-bar-top: 50px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Scroll-margin: TOC anchor links clear the fixed bar ────────── */&lt;br /&gt;
/* Vector: header + bar both fixed */&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h1[id],&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h2[id],&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h3[id],&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h4[id],&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h5[id],&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h6[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h1[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h2[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h3[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h4[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h5[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h6[id] {&lt;br /&gt;
  scroll-margin-top: calc(var(--gr-header-height) + var(--gr-bar-h) + 12px);&lt;br /&gt;
}&lt;br /&gt;
/* Minerva: only bar is fixed once header scrolls away */&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h1[id],&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h2[id],&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h3[id],&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h4[id],&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h5[id],&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h6[id] {&lt;br /&gt;
  scroll-margin-top: calc(var(--gr-bar-h) + 12px);&lt;br /&gt;
}&lt;br /&gt;
#mw-content-text .mw-parser-output &amp;gt; *:first-child {&lt;br /&gt;
  scroll-margin-top: calc(var(--gr-header-height) + var(--gr-bar-h) + 8px);&lt;br /&gt;
}&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output &amp;gt; *:first-child {&lt;br /&gt;
  scroll-margin-top: calc(var(--gr-bar-h) + 8px);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
/* Search icon in FAB using an inline SVG data-URI */&lt;br /&gt;
.gra-icon-search {&lt;br /&gt;
  background-image: url(&amp;quot;data:image/svg+xml,%3Csvg xmlns=&#039;http://www.w3.org/2000/svg&#039; viewBox=&#039;0 0 24 24&#039; fill=&#039;none&#039; stroke=&#039;%23ffffff&#039; stroke-width=&#039;2.2&#039; stroke-linecap=&#039;round&#039; stroke-linejoin=&#039;round&#039;%3E%3Ccircle cx=&#039;11&#039; cy=&#039;11&#039; r=&#039;7&#039;/%3E%3Cline x1=&#039;16.5&#039; y1=&#039;16.5&#039; x2=&#039;22&#039; y2=&#039;22&#039;/%3E%3C/svg%3E&amp;quot;) !important;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   MOBILE BOTTOM BAR — terracotta theme&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
#gra-mobile-bar-inner {&lt;br /&gt;
  background: #b5451b !important;&lt;br /&gt;
  border-top: none !important;&lt;br /&gt;
  border-radius: 16px 16px 0 0 !important;&lt;br /&gt;
  box-shadow: 0 -4px 20px rgba(181,69,27,0.35) !important;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
.gra-mob-btn {&lt;br /&gt;
  color: rgba(255,255,255,0.92) !important;&lt;br /&gt;
  border-right-color: rgba(255,255,255,0.18) !important;&lt;br /&gt;
  min-height: 76px !important;&lt;br /&gt;
  padding: 16px 8px !important;&lt;br /&gt;
  font-size: 12px !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-btn:active {&lt;br /&gt;
  background: rgba(0,0,0,0.12) !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-btn .gra-icon {&lt;br /&gt;
  width: 26px !important;&lt;br /&gt;
  height: 26px !important;&lt;br /&gt;
  filter: brightness(0) invert(1) !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-label {&lt;br /&gt;
  color: rgba(255,255,255,0.88) !important;&lt;br /&gt;
  font-size: 11px !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-dismiss {&lt;br /&gt;
  color: rgba(255,255,255,0.70) !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-dismiss .gra-mob-label {&lt;br /&gt;
  color: rgba(255,255,255,0.60) !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-dismiss span[style] {&lt;br /&gt;
  color: rgba(255,255,255,0.70) !important;&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 767px) {&lt;br /&gt;
&lt;br /&gt;
  /* Bottom sheet — pinned to bottom via inset, animated via transform */&lt;br /&gt;
  #gra-fb-composer.gra-composer,&lt;br /&gt;
  #gra-nt-composer.gra-composer,&lt;br /&gt;
  #gra-bm-composer.gra-bm-composer {&lt;br /&gt;
    position: fixed !important;&lt;br /&gt;
    inset: auto 0 0 0 !important;          /* top:auto right:0 bottom:0 left:0 */&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    max-width: 100% !important;&lt;br /&gt;
    margin: 0 !important;&lt;br /&gt;
    border-radius: 16px 16px 0 0 !important;&lt;br /&gt;
    box-shadow: 0 -4px 24px rgba(0,0,0,0.18) !important;&lt;br /&gt;
    padding: 20px 20px calc(20px + env(safe-area-inset-bottom)) !important;&lt;br /&gt;
    box-sizing: border-box !important;&lt;br /&gt;
    transform: translateY(100%) !important;&lt;br /&gt;
    transition: transform 0.28s cubic-bezier(0.32,0.72,0,1) !important;&lt;br /&gt;
    z-index: 10600 !important;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* Slide up when visible */&lt;br /&gt;
  #gra-fb-composer.gra-composer-visible,&lt;br /&gt;
  #gra-nt-composer.gra-composer-visible,&lt;br /&gt;
  #gra-bm-composer.gra-composer-visible {&lt;br /&gt;
    transform: translateY(0) !important;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* Grab handle */&lt;br /&gt;
  #gra-fb-composer::before,&lt;br /&gt;
  #gra-nt-composer::before,&lt;br /&gt;
  #gra-bm-composer::before {&lt;br /&gt;
    content: &amp;quot;&amp;quot;;&lt;br /&gt;
    display: block;&lt;br /&gt;
    width: 36px; height: 4px;&lt;br /&gt;
    border-radius: 2px;&lt;br /&gt;
    background: #d0d0d0;&lt;br /&gt;
    margin: -6px auto 14px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .gra-composer .gra-composer-input,&lt;br /&gt;
  .gra-bm-composer .gra-composer-input {&lt;br /&gt;
    font-size: 16px !important;   /* no iOS zoom on focus */&lt;br /&gt;
  }&lt;br /&gt;
  .gra-composer-actions { display: flex; gap: 10px; }&lt;br /&gt;
  .gra-composer-actions .gra-btn-submit,&lt;br /&gt;
  .gra-composer-actions .gra-btn-cancel { flex: 1; min-height: 44px; }&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 767px) {&lt;br /&gt;
  /* Docked toolbar below the reader header */&lt;br /&gt;
  #gra-fab.gra-fab-mobile-docked {&lt;br /&gt;
    position: fixed !important;&lt;br /&gt;
    top: var(--gr-toc-top, 99px) !important;  /* sits just below reader toolbar */&lt;br /&gt;
    left: 0 !important;&lt;br /&gt;
    right: 0 !important;&lt;br /&gt;
    height: 52px !important;&lt;br /&gt;
    flex-direction: row !important;&lt;br /&gt;
    align-items: center !important;&lt;br /&gt;
    justify-content: space-around !important;&lt;br /&gt;
    border-radius: 0 !important;&lt;br /&gt;
    box-shadow: 0 2px 8px rgba(0,0,0,0.15) !important;&lt;br /&gt;
    z-index: 2147483646 !important;       /* below native menu, above content */&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #gra-fab.gra-fab-mobile-docked .gra-fab-btn {&lt;br /&gt;
    flex: 1;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    height: 44px;&lt;br /&gt;
    background: transparent !important;&lt;br /&gt;
    touch-action: manipulation;&lt;br /&gt;
    -webkit-tap-highlight-color: transparent;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #gra-fab.gra-fab-mobile-docked .gra-fab-btn-label {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-size: 10px;&lt;br /&gt;
    margin-top: 2px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Gadget-GrAnnotations.css&amp;diff=6184</id>
		<title>MediaWiki:Gadget-GrAnnotations.css</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Gadget-GrAnnotations.css&amp;diff=6184"/>
		<updated>2026-06-10T19:51:03Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/*&lt;br /&gt;
 * gr_annotations.css  —  grantha.io inline Notes + Bookmarks + Feedback  (v3)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* ── Icon base ──────────────────────────────────────────────────── */&lt;br /&gt;
.gra-icon {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  width:  20px;&lt;br /&gt;
  height: 20px;&lt;br /&gt;
  background-size: contain;&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  background-position: center;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
/* comment.svg → Feedback (flag/report)  */&lt;br /&gt;
.gra-icon-feedback { background-image: url(&#039;/images/feedback.svg&#039;); }&lt;br /&gt;
/* notes.svg   → Notes                  */&lt;br /&gt;
.gra-icon-note     { background-image: url(&#039;/images/notes.svg&#039;); }&lt;br /&gt;
.gra-icon-bookmark { background-image: url(&#039;/images/bookmark.svg&#039;); }&lt;br /&gt;
.gra-icon-copy     { background-image: url(&#039;/images/copy.svg&#039;); }&lt;br /&gt;
.gra-icon-search { background-image: url(&#039;/images/search.svg&#039;); }&lt;br /&gt;
.gra-icon-dismiss { background-image: url(&#039;/images/close.svg&#039;); }&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   1. FLOATING ACTION STRIP  (desktop only)&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
#gra-fab {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  z-index: 10200;&lt;br /&gt;
  display: none;&lt;br /&gt;
  flex-direction: row;&lt;br /&gt;
  background: #B14A2E !important;&lt;br /&gt;
    border: none !important;&lt;br /&gt;
    border-radius: 12px !important;&lt;br /&gt;
    padding: 5px 4px !important;&lt;br /&gt;
    box-shadow: 0 3px 14px rgba(0, 0, 0, 0.08) !important;&lt;br /&gt;
    gap: 20px !important;&lt;br /&gt;
}&lt;br /&gt;
#gra-fab.gra-fab-visible { display: flex; }&lt;br /&gt;
&lt;br /&gt;
.gra-fab-btn {&lt;br /&gt;
  height: 48px;&lt;br /&gt;
  width: 48px;&lt;br /&gt;
  border: none;&lt;br /&gt;
  background: transparent;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  position: relative;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.gra-fab-btn-label {&lt;br /&gt;
 font-family: &#039;Noto Sans Devanagari&#039;;&lt;br /&gt;
font-weight: 400;&lt;br /&gt;
font-size: 10px;&lt;br /&gt;
line-height: 100%;&lt;br /&gt;
letter-spacing: 0%;&lt;br /&gt;
color: #ffffff;&lt;br /&gt;
padding: 5px 0;&lt;br /&gt;
}&lt;br /&gt;
.gra-fab-btn:hover { &lt;br /&gt;
background: rgba(255, 255, 255, 0.12) !important; border-radius: 12px;&lt;br /&gt;
}&lt;br /&gt;
.gra-fab-btn:hover .gra-fab-tooltip { opacity: 1; transform: translateX(0) translateY(-50%); }&lt;br /&gt;
&lt;br /&gt;
.gra-fab-tooltip {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  right: calc(100% + 8px);&lt;br /&gt;
  top: 50%;&lt;br /&gt;
  transform: translateX(4px) translateY(-50%);&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  background: rgba(30,30,30,0.82);&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  padding: 3px 9px;&lt;br /&gt;
  border-radius: 999px;&lt;br /&gt;
  pointer-events: none;&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
  transition: opacity 0.18s, transform 0.18s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   2. RIGHT PANEL&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
#gra-panel {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  right: -360px;&lt;br /&gt;
  width: 340px;&lt;br /&gt;
  height: 100vh;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  box-shadow: -3px 0 20px rgba(0,0,0,0.15);&lt;br /&gt;
  z-index: 10100;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  transition: right 0.28s cubic-bezier(0.4,0,0.2,1);&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
}&lt;br /&gt;
#gra-panel.gra-panel-open { right: 0; }&lt;br /&gt;
&lt;br /&gt;
#gra-backdrop {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  inset: 0;&lt;br /&gt;
  background: rgba(0,0,0,0.18);&lt;br /&gt;
  z-index: 10099;&lt;br /&gt;
  display: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
#gra-backdrop.gra-backdrop-visible { display: block; }&lt;br /&gt;
&lt;br /&gt;
#gra-panel-head {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: space-between;&lt;br /&gt;
  padding: 14px 16px 0;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
#gra-panel-close {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  font-size: 18px;&lt;br /&gt;
  color: #666;&lt;br /&gt;
  padding: 2px 6px;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
#gra-panel-close:hover { background: #f5f5f5; color: #222; }&lt;br /&gt;
&lt;br /&gt;
#gra-tabs {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  border-bottom: 2px solid #f0f0f0;&lt;br /&gt;
  margin: 10px 16px 0;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
.gra-tab {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  padding: 8px 4px;&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  font-family: inherit;&lt;br /&gt;
  color: #777;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  border-bottom: 2px solid transparent;&lt;br /&gt;
  margin-bottom: -2px;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  gap: 6px;&lt;br /&gt;
  transition: color 0.15s, border-color 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-tab .gra-icon { width: 16px; height: 16px; opacity: 0.5; }&lt;br /&gt;
.gra-tab:hover { color: #333; }&lt;br /&gt;
.gra-tab.gra-tab-active { color: #B14A2E; border-bottom-color: #B14A2E; }&lt;br /&gt;
.gra-tab.gra-tab-active .gra-icon {&lt;br /&gt;
  opacity: 1;&lt;br /&gt;
  filter: invert(33%) sepia(52%) saturate(1104%) hue-rotate(333deg) brightness(93%) contrast(90%);}&lt;br /&gt;
&lt;br /&gt;
#gra-panel-body {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  overflow-y: auto;&lt;br /&gt;
  padding: 12px 16px 16px;&lt;br /&gt;
}&lt;br /&gt;
.gra-pane { display: none; }&lt;br /&gt;
.gra-pane.gra-pane-active { display: block; }&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   3. FEEDBACK COMPOSER  — centered modal&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
.gra-composer {&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 12px;&lt;br /&gt;
  box-shadow: 0 8px 40px rgba(0,0,0,0.22);&lt;br /&gt;
  width: 420px;&lt;br /&gt;
  max-width: calc(100vw - 32px);&lt;br /&gt;
  padding: 20px 24px 16px;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  /* Centered on screen */&lt;br /&gt;
  top: 50% !important;&lt;br /&gt;
  left: 50% !important;&lt;br /&gt;
  transform: translate(-50%, -50%) !important;&lt;br /&gt;
  z-index: 10150;&lt;br /&gt;
  display: none;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  gap: 12px;&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
}&lt;br /&gt;
.gra-composer.gra-composer-visible { display: flex; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Feedback composer header row */&lt;br /&gt;
.gra-composer-header {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 8px;&lt;br /&gt;
}&lt;br /&gt;
.gra-composer-header strong {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
  color: #1C1A17;&lt;br /&gt;
  font-size: 16px; &lt;br /&gt;
  font-family: &amp;quot;Noto Sans Devanagari&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
.gra-btn-x {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  font-size: 16px;&lt;br /&gt;
  color: #666;&lt;br /&gt;
  padding: 2px 5px;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
.gra-btn-x:hover { background: #f5f5f5; color: #222; }&lt;br /&gt;
&lt;br /&gt;
/* Feedback field labels */&lt;br /&gt;
.gra-fb-field-label {&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
  color: #5f6368;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  letter-spacing: 0.4px;&lt;br /&gt;
  margin-bottom: -6px;   /* tighten gap to input below */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Selected text quote preview */&lt;br /&gt;
.gra-fb-quote-label {&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  color: #9aa0a6;&lt;br /&gt;
  margin-bottom: -4px;&lt;br /&gt;
}&lt;br /&gt;
.gra-fb-quote {&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #5f6368;&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  background: #fafafa;&lt;br /&gt;
  border-left: 3px solid #fbbc04;&lt;br /&gt;
  border-radius: 0 4px 4px 0;&lt;br /&gt;
  padding: 6px 10px;&lt;br /&gt;
  line-height: 1.45;&lt;br /&gt;
  max-height: 56px;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  display: -webkit-box;&lt;br /&gt;
  -webkit-line-clamp: 3;&lt;br /&gt;
  -webkit-box-orient: vertical;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Issue type dropdown */&lt;br /&gt;
.gra-fb-select {&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  padding: 7px 10px;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  font-family: inherit;&lt;br /&gt;
  color: #202124;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  outline: none;&lt;br /&gt;
  transition: border-color 0.15s;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
.gra-fb-select:focus { border-color: #1a73e8; }&lt;br /&gt;
&lt;br /&gt;
/* Email input */&lt;br /&gt;
.gra-fb-email-input {&lt;br /&gt;
  min-height: unset !important;&lt;br /&gt;
  height: 36px;&lt;br /&gt;
  padding: 6px 10px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Status message */&lt;br /&gt;
.gra-fb-status {&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  min-height: 16px;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
.gra-fb-status.gra-fb-ok  { color: #34a853; }&lt;br /&gt;
.gra-fb-status.gra-fb-err { color: #ea4335; }&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   4. NOTE COMPOSER  (local only)&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
.gra-composer-user {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 10px;&lt;br /&gt;
}&lt;br /&gt;
.gra-avatar {&lt;br /&gt;
  width: 32px;&lt;br /&gt;
  height: 32px;&lt;br /&gt;
  border-radius: 50%;&lt;br /&gt;
  background: #1a73e8;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
.gra-composer-uname { font-weight: 600; color: #202124; font-size: 13px; }&lt;br /&gt;
&lt;br /&gt;
.gra-composer-input {&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  padding: 8px 10px;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  font-family: inherit;&lt;br /&gt;
  resize: none;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
  min-height: 56px;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
  color: #202124;&lt;br /&gt;
  outline: none;&lt;br /&gt;
  transition: border-color 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-composer-input::placeholder { color: #aaa; }&lt;br /&gt;
.gra-composer-input:focus { border-color: #B14A2E; }&lt;br /&gt;
&lt;br /&gt;
.gra-composer-actions {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: flex-end;&lt;br /&gt;
  gap: 8px;&lt;br /&gt;
}&lt;br /&gt;
.gra-btn-cancel {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  color: #5f6368;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  font-family:&amp;quot;Noto Sans Devanagari&amp;quot;;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  padding: 8px 12px;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
}&lt;br /&gt;
.gra-btn-cancel:hover { background: #f5f5f5; }&lt;br /&gt;
.gra-btn-submit {&lt;br /&gt;
  background: transparent;&lt;br /&gt;
  color: #B14A2E;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  font-family:&amp;quot;Noto Sans Devanagari&amp;quot;;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  padding: 8px 12px;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  gap: 8px;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-btn-submit:hover { color: #8A351F; }&lt;br /&gt;
.gra-btn-submit:disabled { opacity: 0.4;&lt;br /&gt;
  cursor: not-allowed; }&lt;br /&gt;
&lt;br /&gt;
/* ── Note cards ── */&lt;br /&gt;
.gra-note-card {&lt;br /&gt;
  border: 1px solid #e8eaed;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 10px 12px;&lt;br /&gt;
  margin-bottom: 10px;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  box-shadow: 0 1px 3px rgba(0,0,0,0.07);&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: box-shadow 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-note-card:hover { box-shadow: 0 2px 8px rgba(0,0,0,0.12); }&lt;br /&gt;
.gra-note-card.gra-card-active {&lt;br /&gt;
  border-color: #34a853;&lt;br /&gt;
  box-shadow: 0 0 0 2px rgba(52,168,83,0.25);&lt;br /&gt;
}&lt;br /&gt;
.gra-card-header {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 8px;&lt;br /&gt;
  margin-bottom: 6px;&lt;br /&gt;
}&lt;br /&gt;
.gra-card-meta { flex: 1; }&lt;br /&gt;
.gra-card-ts { font-size: 11px; color: #80868b; }&lt;br /&gt;
.gra-card-quote {&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #5f6368;&lt;br /&gt;
  border-left: 3px solid #34a853;&lt;br /&gt;
  padding-left: 8px;&lt;br /&gt;
  margin-bottom: 6px;&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  line-height: 1.4;&lt;br /&gt;
  display: -webkit-box;&lt;br /&gt;
  -webkit-line-clamp: 2;&lt;br /&gt;
  -webkit-box-orient: vertical;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
}&lt;br /&gt;
.gra-card-text { font-size: 13px; color: #202124; line-height: 1.5; }&lt;br /&gt;
&lt;br /&gt;
.gra-note-del {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  color: #ccc;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  padding: 0 2px;&lt;br /&gt;
  line-height: 1;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
  margin-left: auto;&lt;br /&gt;
}&lt;br /&gt;
.gra-note-del:hover { color: #e53935; }&lt;br /&gt;
&lt;br /&gt;
.gra-empty-state {&lt;br /&gt;
  color: #9aa0a6;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  padding: 32px 16px;&lt;br /&gt;
  line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   5. BOOKMARK CARDS + COMPOSER&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
.gra-bookmark-card {&lt;br /&gt;
  border: 1px solid #e8eaed;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 10px 12px;&lt;br /&gt;
  margin-bottom: 10px;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  box-shadow: 0 1px 3px rgba(0,0,0,0.07);&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: flex-start;&lt;br /&gt;
  gap: 10px;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: box-shadow 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-bookmark-card:hover { box-shadow: 0 2px 8px rgba(0,0,0,0.12); }&lt;br /&gt;
.gra-bookmark-card .gra-icon { margin-top: 2px; flex-shrink: 0; }&lt;br /&gt;
.gra-bookmark-info { flex: 1; min-width: 0; }&lt;br /&gt;
.gra-bookmark-name {&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
  color: #202124;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  text-overflow: ellipsis;&lt;br /&gt;
}&lt;br /&gt;
.gra-bookmark-quote {&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  color: #80868b;&lt;br /&gt;
  margin-top: 2px;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  text-overflow: ellipsis;&lt;br /&gt;
}&lt;br /&gt;
.gra-bookmark-del {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  color: #ccc;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  padding: 0 2px;&lt;br /&gt;
  line-height: 1;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
.gra-bookmark-del:hover { color: #e53935; }&lt;br /&gt;
&lt;br /&gt;
.gra-bm-composer {&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 12px;&lt;br /&gt;
  box-shadow: 0 8px 40px rgba(0,0,0,0.22);&lt;br /&gt;
  width: 420px;&lt;br /&gt;
  max-width: calc(100vw - 32px);&lt;br /&gt;
  padding: 20px 24px 16px;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  /* Centered on screen — same as feedback composer */&lt;br /&gt;
  top: 50% !important;&lt;br /&gt;
  left: 50% !important;&lt;br /&gt;
  transform: translate(-50%, -50%) !important;&lt;br /&gt;
  z-index: 10150;&lt;br /&gt;
  display: none;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  gap: 10px;&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
}&lt;br /&gt;
.gra-bm-composer.gra-composer-visible { display: flex; }&lt;br /&gt;
.gra-bm-composer-label {&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
  color: #1C1A17;&lt;br /&gt;
  font-size: 16px;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 8px;&lt;br /&gt;
  font-family: &amp;quot;Noto Sans Devanagari&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
.gra-bm-composer-label .gra-icon, .gra-composer-header .gra-icon, .gra-tab .gra-icon, .gra-note-card .gra-icon {&lt;br /&gt;
margin-top: -3px;&lt;br /&gt;
filter: brightness(0) saturate(100%) invert(7%) sepia(8%) saturate(894%) hue-rotate(357deg) brightness(97%) contrast(92%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   6. ANCHOR HIGHLIGHTS&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
/* Note highlight — green tint */&lt;br /&gt;
.gra-note-highlight {&lt;br /&gt;
  background: rgba(52, 168, 83, 0.18);&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-note-highlight:hover,&lt;br /&gt;
.gra-note-highlight.gra-hl-active {&lt;br /&gt;
  background: rgba(52, 168, 83, 0.4);&lt;br /&gt;
  outline: 1.5px solid #34a853;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Bookmark highlight — blue underline */&lt;br /&gt;
.gra-bookmark-highlight {&lt;br /&gt;
  background: rgba(26, 115, 232, 0.12);&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  border-bottom: 1.5px solid #1a73e8;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-bookmark-highlight:hover { background: rgba(26, 115, 232, 0.22); }&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   7. PERSISTENT TOGGLE BUTTON&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
#gra-toggle {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  bottom: 78px;&lt;br /&gt;
  right: 20px;&lt;br /&gt;
  width: 48px;&lt;br /&gt;
  height: 48px;&lt;br /&gt;
  border-radius: 50%;&lt;br /&gt;
  background: #c0521a;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  z-index: 9998;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  box-shadow: 0 3px 12px rgba(0,0,0,0.22);&lt;br /&gt;
  transition: background 0.15s, transform 0.15s;&lt;br /&gt;
}&lt;br /&gt;
#gra-toggle:hover { background: #a0410e; transform: scale(1.07); }&lt;br /&gt;
#gra-toggle .gra-icon {&lt;br /&gt;
  width: 22px;&lt;br /&gt;
  height: 22px;&lt;br /&gt;
  filter: brightness(0) invert(1);&lt;br /&gt;
}&lt;br /&gt;
#gra-toggle-badge {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  top: -4px;&lt;br /&gt;
  right: -4px;&lt;br /&gt;
  background: #e53935;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-size: 10px;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  min-width: 16px;&lt;br /&gt;
  height: 16px;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 0 4px;&lt;br /&gt;
  line-height: 16px;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  display: none;&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  pointer-events: none;&lt;br /&gt;
}&lt;br /&gt;
#gra-panel.gra-panel-open ~ #gra-toggle {&lt;br /&gt;
  right: 356px;&lt;br /&gt;
  transition: right 0.28s cubic-bezier(0.4,0,0.2,1), background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   MOBILE BOTTOM ACTION BAR&lt;br /&gt;
   Slides up from bottom — avoids clashing with browser copy menu.&lt;br /&gt;
   Large tap targets (56px height buttons) with text labels.&lt;br /&gt;
   Only shown on mobile (JS sets _mobile flag).&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
#gra-mobile-bar {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  bottom: 0;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  right: 0;&lt;br /&gt;
  z-index: 10200;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  transform: translateY(100%);&lt;br /&gt;
  transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);&lt;br /&gt;
  pointer-events: none;&lt;br /&gt;
}&lt;br /&gt;
#gra-mobile-bar.gra-mobile-bar-visible {&lt;br /&gt;
  transform: translateY(0);&lt;br /&gt;
  pointer-events: auto;&lt;br /&gt;
}&lt;br /&gt;
#gra-mobile-bar-inner {&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  border-top: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 16px 16px 0 0;&lt;br /&gt;
  box-shadow: 0 -4px 20px rgba(0,0,0,0.18);&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: stretch;&lt;br /&gt;
  padding-bottom: env(safe-area-inset-bottom, 0px);&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-btn {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  gap: 5px;&lt;br /&gt;
  padding: 14px 8px;&lt;br /&gt;
  min-height: 72px;&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  border-right: 1px solid #f0f0f0;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  color: #444;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  -webkit-tap-highlight-color: rgba(0,0,0,0.06);&lt;br /&gt;
  transition: background 0.12s;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-btn:last-child { border-right: none; }&lt;br /&gt;
.gra-mob-btn:active { background: #f5f5f5; }&lt;br /&gt;
.gra-mob-btn .gra-icon { width: 24px; height: 24px; }&lt;br /&gt;
.gra-mob-label { font-size: 11px; line-height: 1.2; text-align: center; }&lt;br /&gt;
.gra-mob-dismiss { color: #999; }&lt;br /&gt;
.gra-mob-dismiss:active { background: #fff0f0; color: #e53935; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   8. RESPONSIVE&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
@media (max-width: 768px) {&lt;br /&gt;
  #gra-panel { width: 100vw; right: -100vw; }&lt;br /&gt;
  .gra-composer {&lt;br /&gt;
    width: calc(100vw - 32px) !important;&lt;br /&gt;
    max-width: 420px;&lt;br /&gt;
    /* Override centering for note/bookmark on mobile — keep centered */&lt;br /&gt;
    top: 50% !important;&lt;br /&gt;
    left: 50% !important;&lt;br /&gt;
    transform: translate(-50%, -50%) !important;&lt;br /&gt;
  }&lt;br /&gt;
  /* bm-composer already centered via its base CSS */&lt;br /&gt;
}&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   REPLACE the entire additions block at the bottom of&lt;br /&gt;
   MediaWiki:Gadget-GrAnnotations.css with this content.&lt;br /&gt;
&lt;br /&gt;
   FAB stack (right:20px desktop, right:16px mobile):&lt;br /&gt;
     22px   [📚] #se-docnav-btn   docs navigator&lt;br /&gt;
     78px   [↑]  #se-scrolltop    scroll to top&lt;br /&gt;
     134px  [✎]  #gra-toggle      notes panel   ← was wrongly 78px&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
&lt;br /&gt;
/* ── #gra-toggle: sits above both siteNav FABs ─────────────────── */&lt;br /&gt;
#gra-toggle {&lt;br /&gt;
  bottom: 78px !important;&lt;br /&gt;
  right: 20px !important;&lt;br /&gt;
}&lt;br /&gt;
#gra-panel.gra-panel-open ~ #gra-toggle {&lt;br /&gt;
  right: 356px !important;&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 768px) {&lt;br /&gt;
  #gra-toggle {&lt;br /&gt;
    bottom: 78px !important;&lt;br /&gt;
    right: 16px !important;&lt;br /&gt;
    width: 44px !important;&lt;br /&gt;
    height: 44px !important;&lt;br /&gt;
  }&lt;br /&gt;
  #gra-panel.gra-panel-open ~ #gra-toggle {&lt;br /&gt;
    right: calc(100vw + 4px) !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Mobile annotation bar above all Minerva overlays ──────────── */&lt;br /&gt;
#gra-mobile-bar {&lt;br /&gt;
  z-index: 99999 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── CSS custom property fallbacks ─────────────────────────────── */&lt;br /&gt;
/* readerToolbar.js writes these at runtime; these are initial values */&lt;br /&gt;
:root {&lt;br /&gt;
  --gr-header-height: 50px;&lt;br /&gt;
  --gr-bar-h: 48px;&lt;br /&gt;
  --gr-bar-top: 50px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Scroll-margin: TOC anchor links clear the fixed bar ────────── */&lt;br /&gt;
/* Vector: header + bar both fixed */&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h1[id],&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h2[id],&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h3[id],&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h4[id],&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h5[id],&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h6[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h1[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h2[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h3[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h4[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h5[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h6[id] {&lt;br /&gt;
  scroll-margin-top: calc(var(--gr-header-height) + var(--gr-bar-h) + 12px);&lt;br /&gt;
}&lt;br /&gt;
/* Minerva: only bar is fixed once header scrolls away */&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h1[id],&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h2[id],&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h3[id],&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h4[id],&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h5[id],&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h6[id] {&lt;br /&gt;
  scroll-margin-top: calc(var(--gr-bar-h) + 12px);&lt;br /&gt;
}&lt;br /&gt;
#mw-content-text .mw-parser-output &amp;gt; *:first-child {&lt;br /&gt;
  scroll-margin-top: calc(var(--gr-header-height) + var(--gr-bar-h) + 8px);&lt;br /&gt;
}&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output &amp;gt; *:first-child {&lt;br /&gt;
  scroll-margin-top: calc(var(--gr-bar-h) + 8px);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
/* Search icon in FAB using an inline SVG data-URI */&lt;br /&gt;
.gra-icon-search {&lt;br /&gt;
  background-image: url(&amp;quot;data:image/svg+xml,%3Csvg xmlns=&#039;http://www.w3.org/2000/svg&#039; viewBox=&#039;0 0 24 24&#039; fill=&#039;none&#039; stroke=&#039;%23ffffff&#039; stroke-width=&#039;2.2&#039; stroke-linecap=&#039;round&#039; stroke-linejoin=&#039;round&#039;%3E%3Ccircle cx=&#039;11&#039; cy=&#039;11&#039; r=&#039;7&#039;/%3E%3Cline x1=&#039;16.5&#039; y1=&#039;16.5&#039; x2=&#039;22&#039; y2=&#039;22&#039;/%3E%3C/svg%3E&amp;quot;) !important;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   MOBILE BOTTOM BAR — terracotta theme&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
#gra-mobile-bar-inner {&lt;br /&gt;
  background: #b5451b !important;&lt;br /&gt;
  border-top: none !important;&lt;br /&gt;
  border-radius: 16px 16px 0 0 !important;&lt;br /&gt;
  box-shadow: 0 -4px 20px rgba(181,69,27,0.35) !important;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
.gra-mob-btn {&lt;br /&gt;
  color: rgba(255,255,255,0.92) !important;&lt;br /&gt;
  border-right-color: rgba(255,255,255,0.18) !important;&lt;br /&gt;
  min-height: 76px !important;&lt;br /&gt;
  padding: 16px 8px !important;&lt;br /&gt;
  font-size: 12px !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-btn:active {&lt;br /&gt;
  background: rgba(0,0,0,0.12) !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-btn .gra-icon {&lt;br /&gt;
  width: 26px !important;&lt;br /&gt;
  height: 26px !important;&lt;br /&gt;
  filter: brightness(0) invert(1) !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-label {&lt;br /&gt;
  color: rgba(255,255,255,0.88) !important;&lt;br /&gt;
  font-size: 11px !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-dismiss {&lt;br /&gt;
  color: rgba(255,255,255,0.70) !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-dismiss .gra-mob-label {&lt;br /&gt;
  color: rgba(255,255,255,0.60) !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-dismiss span[style] {&lt;br /&gt;
  color: rgba(255,255,255,0.70) !important;&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 767px) {&lt;br /&gt;
&lt;br /&gt;
  /* Bottom sheet — pinned to bottom via inset, animated via transform */&lt;br /&gt;
  #gra-fb-composer.gra-composer,&lt;br /&gt;
  #gra-nt-composer.gra-composer,&lt;br /&gt;
  #gra-bm-composer.gra-bm-composer {&lt;br /&gt;
    position: fixed !important;&lt;br /&gt;
    inset: auto 0 0 0 !important;          /* top:auto right:0 bottom:0 left:0 */&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    max-width: 100% !important;&lt;br /&gt;
    margin: 0 !important;&lt;br /&gt;
    border-radius: 16px 16px 0 0 !important;&lt;br /&gt;
    box-shadow: 0 -4px 24px rgba(0,0,0,0.18) !important;&lt;br /&gt;
    padding: 20px 20px calc(20px + env(safe-area-inset-bottom)) !important;&lt;br /&gt;
    box-sizing: border-box !important;&lt;br /&gt;
    transform: translateY(100%) !important;&lt;br /&gt;
    transition: transform 0.28s cubic-bezier(0.32,0.72,0,1) !important;&lt;br /&gt;
    z-index: 10600 !important;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* Slide up when visible */&lt;br /&gt;
  #gra-fb-composer.gra-composer-visible,&lt;br /&gt;
  #gra-nt-composer.gra-composer-visible,&lt;br /&gt;
  #gra-bm-composer.gra-composer-visible {&lt;br /&gt;
    transform: translateY(0) !important;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* Grab handle */&lt;br /&gt;
  #gra-fb-composer::before,&lt;br /&gt;
  #gra-nt-composer::before,&lt;br /&gt;
  #gra-bm-composer::before {&lt;br /&gt;
    content: &amp;quot;&amp;quot;;&lt;br /&gt;
    display: block;&lt;br /&gt;
    width: 36px; height: 4px;&lt;br /&gt;
    border-radius: 2px;&lt;br /&gt;
    background: #d0d0d0;&lt;br /&gt;
    margin: -6px auto 14px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .gra-composer .gra-composer-input,&lt;br /&gt;
  .gra-bm-composer .gra-composer-input {&lt;br /&gt;
    font-size: 16px !important;   /* no iOS zoom on focus */&lt;br /&gt;
  }&lt;br /&gt;
  .gra-composer-actions { display: flex; gap: 10px; }&lt;br /&gt;
  .gra-composer-actions .gra-btn-submit,&lt;br /&gt;
  .gra-composer-actions .gra-btn-cancel { flex: 1; min-height: 44px; }&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 767px) {&lt;br /&gt;
  /* Docked toolbar below the reader header */&lt;br /&gt;
  #gra-fab.gra-fab-mobile-docked {&lt;br /&gt;
    position: fixed !important;&lt;br /&gt;
    top: var(--gr-toc-top, 99px) !important;  /* sits just below reader toolbar */&lt;br /&gt;
    left: 0 !important;&lt;br /&gt;
    right: 0 !important;&lt;br /&gt;
    height: 52px !important;&lt;br /&gt;
    flex-direction: row !important;&lt;br /&gt;
    align-items: center !important;&lt;br /&gt;
    justify-content: space-around !important;&lt;br /&gt;
    border-radius: 0 !important;&lt;br /&gt;
    box-shadow: 0 2px 8px rgba(0,0,0,0.15) !important;&lt;br /&gt;
    z-index: 2147483646 !important;       /* below native menu, above content */&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #gra-fab.gra-fab-mobile-docked .gra-fab-btn {&lt;br /&gt;
    flex: 1;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    height: 44px;&lt;br /&gt;
    background: transparent !important;&lt;br /&gt;
    touch-action: manipulation;&lt;br /&gt;
    -webkit-tap-highlight-color: transparent;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #gra-fab.gra-fab-mobile-docked .gra-fab-btn-label {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-size: 10px;&lt;br /&gt;
    margin-top: 2px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Gadget-GrAnnotations.js&amp;diff=6183</id>
		<title>MediaWiki:Gadget-GrAnnotations.js</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Gadget-GrAnnotations.js&amp;diff=6183"/>
		<updated>2026-06-10T19:50:07Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/**&lt;br /&gt;
 * gr_annotations.js  —  grantha.io inline Notes + Bookmarks + Feedback  (v6 + Strategy B)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* global mw, $ */&lt;br /&gt;
( function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  var CONTENT_SEL   = &#039;#mw-content-text&#039;;&lt;br /&gt;
  var BM_LS_KEY     = &#039;grantha_bm_&#039;  + ( ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039; ) ) || &#039;&#039; );&lt;br /&gt;
  var NT_LS_KEY     = &#039;grantha_nt_&#039;  + ( ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039; ) ) || &#039;&#039; );&lt;br /&gt;
  var pageTitle     = ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgPageName&#039; ) ) || &#039;&#039;;&lt;br /&gt;
  var currentUser   = ( window.mw &amp;amp;&amp;amp; mw.config.get( &#039;wgUserName&#039; ) ) || &#039;&#039;;&lt;br /&gt;
  var userInitial   = currentUser ? currentUser.charAt( 0 ).toUpperCase() : &#039;?&#039;;&lt;br /&gt;
  var currentUserEmail = &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  if ( currentUser &amp;amp;&amp;amp; window.mw ) {&lt;br /&gt;
    new mw.Api().get({ action: &#039;query&#039;, meta: &#039;userinfo&#039;, uiprop: &#039;email&#039;, formatversion: 2 })&lt;br /&gt;
      .then( function (data) {&lt;br /&gt;
        var info = data &amp;amp;&amp;amp; data.query &amp;amp;&amp;amp; data.query.userinfo;&lt;br /&gt;
        if ( info &amp;amp;&amp;amp; info.email ) currentUserEmail = info.email;&lt;br /&gt;
      } ).catch( function () {} );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ( window.mw ) {&lt;br /&gt;
    var ns = mw.config.get( &#039;wgNamespaceNumber&#039; );&lt;br /&gt;
    if ( ns &amp;lt; 0 ) return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var _selRange   = null;&lt;br /&gt;
  var _selText    = &#039;&#039;;&lt;br /&gt;
  var _selRect    = null;&lt;br /&gt;
  var _notes      = [];&lt;br /&gt;
  var _bookmarks  = [];&lt;br /&gt;
  var _activeTab  = &#039;notes&#039;;&lt;br /&gt;
  var _selVersion = 0;&lt;br /&gt;
  var _fabSelVer  = -1;&lt;br /&gt;
  var _mobile     = window.innerWidth &amp;lt; 768 || &#039;ontouchstart&#039; in window;&lt;br /&gt;
  var _fabTouched = false;  // flag to prevent hideActions when tapping fab&lt;br /&gt;
&lt;br /&gt;
  function uid() { return &#039;gra_&#039; + Date.now() + &#039;_&#039; + Math.random().toString(36).slice(2,7); }&lt;br /&gt;
  function esc(s) {&lt;br /&gt;
    return String(s||&#039;&#039;).replace(/&amp;amp;/g,&#039;&amp;amp;amp;&#039;).replace(/&amp;lt;/g,&#039;&amp;amp;lt;&#039;)&lt;br /&gt;
                        .replace(/&amp;gt;/g,&#039;&amp;amp;gt;&#039;).replace(/&amp;quot;/g,&#039;&amp;amp;quot;&#039;);&lt;br /&gt;
  }&lt;br /&gt;
  function nowIso() { return new Date().toISOString().replace(/\.\d{3}Z$/,&#039;Z&#039;); }&lt;br /&gt;
  function fmtTs(ts) {&lt;br /&gt;
    try {&lt;br /&gt;
      var d = new Date(ts);&lt;br /&gt;
      return d.toLocaleDateString(&#039;en-IN&#039;,{day:&#039;numeric&#039;,month:&#039;short&#039;,year:&#039;numeric&#039;})&lt;br /&gt;
           + &#039; &#039; + d.toLocaleTimeString(&#039;en-IN&#039;,{hour:&#039;2-digit&#039;,minute:&#039;2-digit&#039;,hour12:false});&lt;br /&gt;
    } catch(e){ return ts; }&lt;br /&gt;
  }&lt;br /&gt;
  function clamp(v,lo,hi){ return Math.max(lo,Math.min(hi,v)); }&lt;br /&gt;
  function isMobile() { return _mobile; }&lt;br /&gt;
&lt;br /&gt;
  var $fab, $mobileBar, $panel, $backdrop;&lt;br /&gt;
  var $ntComposer, $ntInput, $ntSubmit;&lt;br /&gt;
  var $bmComposer, $bmInput, $bmSubmit;&lt;br /&gt;
  var $fbComposer, $fbIssueType, $fbText, $fbEmail, $fbSubmit, $fbQuote;&lt;br /&gt;
  var $tabNotes, $tabBookmarks, $paneNotes, $paneBookmarks;&lt;br /&gt;
&lt;br /&gt;
  function buildDom() {&lt;br /&gt;
    $fab = $( [&lt;br /&gt;
      &#039;&amp;lt;div id=&amp;quot;gra-fab&amp;quot; role=&amp;quot;toolbar&amp;quot; aria-label=&amp;quot;Feedback / Notes / Bookmark&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;button class=&amp;quot;gra-fab-btn&amp;quot; id=&amp;quot;gra-fab-note&amp;quot; type=&amp;quot;button&amp;quot; aria-label=&amp;quot;Note&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-icon gra-icon-note&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-fab-btn-label&amp;quot;&amp;gt;Note&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;button class=&amp;quot;gra-fab-btn&amp;quot; id=&amp;quot;gra-fab-bookmark&amp;quot; type=&amp;quot;button&amp;quot; aria-label=&amp;quot;Mark&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-icon gra-icon-bookmark&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-fab-btn-label&amp;quot;&amp;gt;Mark&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;button class=&amp;quot;gra-fab-btn&amp;quot; id=&amp;quot;gra-fab-feedback&amp;quot; type=&amp;quot;button&amp;quot; aria-label=&amp;quot;Feedback&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-icon gra-icon-feedback&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-fab-btn-label&amp;quot;&amp;gt;Feedback&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;button class=&amp;quot;gra-fab-btn&amp;quot; id=&amp;quot;gra-fab-search&amp;quot; type=&amp;quot;button&amp;quot; aria-label=&amp;quot;Search&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-icon gra-icon-search&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-fab-btn-label&amp;quot;&amp;gt;Search&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;button class=&amp;quot;gra-fab-btn gra-fab-btn-dismiss&amp;quot; id=&amp;quot;gra-fab-dismiss&amp;quot; type=&amp;quot;button&amp;quot; aria-label=&amp;quot;Dismiss&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-icon gra-icon-dismiss&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-fab-btn-label&amp;quot;&amp;gt;Close&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
    ].join(&#039;&#039;) );&lt;br /&gt;
    $(&#039;body&#039;).append($fab);&lt;br /&gt;
&lt;br /&gt;
    $mobileBar = $(&#039;&amp;lt;div id=&amp;quot;gra-mobile-bar&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
    $(&#039;body&#039;).append($mobileBar);&lt;br /&gt;
&lt;br /&gt;
    $fbComposer = $( [&lt;br /&gt;
      &#039;&amp;lt;div class=&amp;quot;gra-composer&amp;quot; id=&amp;quot;gra-fb-composer&amp;quot; role=&amp;quot;dialog&amp;quot; aria-label=&amp;quot;Send feedback&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-composer-header&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-icon gra-icon-feedback&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;strong&amp;gt;Feedback&amp;lt;/strong&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button class=&amp;quot;gra-btn-x&amp;quot; id=&amp;quot;gra-fb-close&amp;quot; title=&amp;quot;Close&amp;quot;&amp;gt;✕&amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-fb-quote-label&amp;quot;&amp;gt;Selected text:&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-fb-quote&amp;quot; id=&amp;quot;gra-fb-quote&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-fb-field-label&amp;quot;&amp;gt;Issue type&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;select class=&amp;quot;gra-fb-select&amp;quot; id=&amp;quot;gra-fb-issue&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;option value=&amp;quot;&amp;quot;&amp;gt;— Choose —&amp;lt;/option&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;option value=&amp;quot;wrong_text&amp;quot;&amp;gt;Formatting error&amp;lt;/option&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;option value=&amp;quot;reference_issue&amp;quot;&amp;gt;Reference issue&amp;lt;/option&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;option value=&amp;quot;spelling_mistake&amp;quot;&amp;gt;Spelling mistake&amp;lt;/option&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;option value=&amp;quot;other&amp;quot;&amp;gt;Other&amp;lt;/option&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/select&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-fb-field-label&amp;quot;&amp;gt;Details (optional)&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;textarea class=&amp;quot;gra-composer-input&amp;quot; id=&amp;quot;gra-fb-text&amp;quot; placeholder=&amp;quot;Describe the issue…&amp;quot; rows=&amp;quot;3&amp;quot;&amp;gt;&amp;lt;/textarea&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-fb-field-label&amp;quot;&amp;gt;Your email (optional)&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;input class=&amp;quot;gra-composer-input gra-fb-email-input&amp;quot; id=&amp;quot;gra-fb-email&amp;quot; type=&amp;quot;email&amp;quot; placeholder=&amp;quot;you@example.com&amp;quot; autocomplete=&amp;quot;email&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-composer-actions&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button class=&amp;quot;gra-btn-cancel&amp;quot; id=&amp;quot;gra-fb-cancel&amp;quot;&amp;gt;Cancel&amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button class=&amp;quot;gra-btn-submit&amp;quot; id=&amp;quot;gra-fb-submit&amp;quot; disabled&amp;gt;Send&amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-fb-status&amp;quot; id=&amp;quot;gra-fb-status&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
    ].join(&#039;&#039;) );&lt;br /&gt;
    $(&#039;body&#039;).append($fbComposer);&lt;br /&gt;
&lt;br /&gt;
    $ntComposer = $( [&lt;br /&gt;
      &#039;&amp;lt;div class=&amp;quot;gra-composer&amp;quot; id=&amp;quot;gra-nt-composer&amp;quot; role=&amp;quot;dialog&amp;quot; aria-label=&amp;quot;Add note&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-bm-composer-label&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-icon gra-icon-note&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span&amp;gt; Add Note &amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;textarea class=&amp;quot;gra-composer-input&amp;quot; id=&amp;quot;gra-nt-input&amp;quot; placeholder=&amp;quot;Write a note…&amp;quot; rows=&amp;quot;3&amp;quot;&amp;gt;&amp;lt;/textarea&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-composer-actions&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button class=&amp;quot;gra-btn-cancel&amp;quot; id=&amp;quot;gra-nt-cancel&amp;quot;&amp;gt;Cancel&amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button class=&amp;quot;gra-btn-submit&amp;quot; id=&amp;quot;gra-nt-submit&amp;quot; disabled&amp;gt;Save&amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
    ].join(&#039;&#039;) );&lt;br /&gt;
    $(&#039;body&#039;).append($ntComposer);&lt;br /&gt;
&lt;br /&gt;
    $bmComposer = $( [&lt;br /&gt;
      &#039;&amp;lt;div class=&amp;quot;gra-bm-composer&amp;quot; id=&amp;quot;gra-bm-composer&amp;quot; role=&amp;quot;dialog&amp;quot; aria-label=&amp;quot;Bookmark&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-bm-composer-label&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span class=&amp;quot;gra-icon gra-icon-bookmark&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;span&amp;gt; Save bookmark &amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;input class=&amp;quot;gra-composer-input&amp;quot; id=&amp;quot;gra-bm-input&amp;quot; type=&amp;quot;text&amp;quot; placeholder=&amp;quot;Name this bookmark…&amp;quot; autocomplete=&amp;quot;off&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div class=&amp;quot;gra-composer-actions&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button class=&amp;quot;gra-btn-cancel&amp;quot; id=&amp;quot;gra-bm-cancel&amp;quot;&amp;gt;Cancel&amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button class=&amp;quot;gra-btn-submit&amp;quot; id=&amp;quot;gra-bm-submit&amp;quot;&amp;gt;Save&amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
    ].join(&#039;&#039;) );&lt;br /&gt;
    $(&#039;body&#039;).append($bmComposer);&lt;br /&gt;
&lt;br /&gt;
    $panel = $( [&lt;br /&gt;
      &#039;&amp;lt;div id=&amp;quot;gra-panel&amp;quot; role=&amp;quot;complementary&amp;quot; aria-label=&amp;quot;Notes&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div id=&amp;quot;gra-panel-head&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;div id=&amp;quot;gra-panel-title&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button id=&amp;quot;gra-panel-close&amp;quot; title=&amp;quot;Close&amp;quot;&amp;gt;✕&amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div id=&amp;quot;gra-tabs&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button class=&amp;quot;gra-tab gra-tab-active&amp;quot; id=&amp;quot;gra-tab-notes&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;      &amp;lt;span class=&amp;quot;gra-icon gra-icon-note&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; Notes&#039;,&lt;br /&gt;
      &#039;    &amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;button class=&amp;quot;gra-tab&amp;quot; id=&amp;quot;gra-tab-bookmarks&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;      &amp;lt;span class=&amp;quot;gra-icon gra-icon-bookmark&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; Bookmarks&#039;,&lt;br /&gt;
      &#039;    &amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;div id=&amp;quot;gra-panel-body&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;div class=&amp;quot;gra-pane gra-pane-active&amp;quot; id=&amp;quot;gra-pane-notes&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;    &amp;lt;div class=&amp;quot;gra-pane&amp;quot; id=&amp;quot;gra-pane-bookmarks&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
    ].join(&#039;&#039;) );&lt;br /&gt;
    $(&#039;body&#039;).append($panel);&lt;br /&gt;
&lt;br /&gt;
    $backdrop = $(&#039;&amp;lt;div id=&amp;quot;gra-backdrop&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
    $(&#039;body&#039;).append($backdrop);&lt;br /&gt;
&lt;br /&gt;
    var $toggle = $( [&lt;br /&gt;
      &#039;&amp;lt;button id=&amp;quot;gra-toggle&amp;quot; aria-label=&amp;quot;Notes&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;span class=&amp;quot;gra-icon gra-icon-note&amp;quot; id=&amp;quot;gra-toggle-icon&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;  &amp;lt;span id=&amp;quot;gra-toggle-badge&amp;quot; aria-live=&amp;quot;polite&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
      &#039;&amp;lt;/button&amp;gt;&#039;,&lt;br /&gt;
    ].join(&#039;&#039;) );&lt;br /&gt;
    $(&#039;body&#039;).append($toggle);&lt;br /&gt;
    $toggle.on(&#039;click&#039;, function() {&lt;br /&gt;
      $panel.hasClass(&#039;gra-panel-open&#039;) ? closePanel() : openPanel(_activeTab);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    $(&#039;#gra-panel-title&#039;).text(pageTitle.replace(/_/g,&#039; &#039;).split(&#039;/&#039;)[0].slice(0,30));&lt;br /&gt;
    $tabNotes     = $(&#039;#gra-tab-notes&#039;);&lt;br /&gt;
    $tabBookmarks = $(&#039;#gra-tab-bookmarks&#039;);&lt;br /&gt;
    $paneNotes    = $(&#039;#gra-pane-notes&#039;);&lt;br /&gt;
    $paneBookmarks= $(&#039;#gra-pane-bookmarks&#039;);&lt;br /&gt;
    $ntInput      = $(&#039;#gra-nt-input&#039;);&lt;br /&gt;
    $ntSubmit     = $(&#039;#gra-nt-submit&#039;);&lt;br /&gt;
    $bmInput      = $(&#039;#gra-bm-input&#039;);&lt;br /&gt;
    $bmSubmit     = $(&#039;#gra-bm-submit&#039;);&lt;br /&gt;
    $fbIssueType  = $(&#039;#gra-fb-issue&#039;);&lt;br /&gt;
    $fbText       = $(&#039;#gra-fb-text&#039;);&lt;br /&gt;
    $fbEmail      = $(&#039;#gra-fb-email&#039;);&lt;br /&gt;
    $fbSubmit     = $(&#039;#gra-fb-submit&#039;);&lt;br /&gt;
    $fbQuote      = $(&#039;#gra-fb-quote&#039;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function captureSelection() {&lt;br /&gt;
    var sel = window.getSelection();&lt;br /&gt;
    if (!sel || sel.isCollapsed || !sel.rangeCount) return false;&lt;br /&gt;
    var range = sel.getRangeAt(0);&lt;br /&gt;
    var text  = sel.toString().trim();&lt;br /&gt;
    if (!text || text.length &amp;lt; 2) return false;&lt;br /&gt;
    var contentEl = document.querySelector(CONTENT_SEL);&lt;br /&gt;
    if (!contentEl) return false;&lt;br /&gt;
    var ancestor = range.commonAncestorContainer;&lt;br /&gt;
    if (ancestor.nodeType === 3) ancestor = ancestor.parentNode;&lt;br /&gt;
    if (!ancestor || !contentEl.contains(ancestor)) return false;&lt;br /&gt;
    var _editorEl = document.getElementById(&#039;se-surface&#039;) ||&lt;br /&gt;
                    document.querySelector(&#039;.se-outer&#039;);&lt;br /&gt;
    if ( _editorEl &amp;amp;&amp;amp; _editorEl.contains(ancestor) ) return false;&lt;br /&gt;
    _selText  = text;&lt;br /&gt;
    _selRect  = range.getBoundingClientRect();&lt;br /&gt;
    try { _selRange = range.cloneRange(); }&lt;br /&gt;
    catch(e){ _selRange = null; }&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function reCaptureFromDOM() {&lt;br /&gt;
    if (!_selText) return false;&lt;br /&gt;
    var contentEl = document.querySelector(CONTENT_SEL);&lt;br /&gt;
    if (!contentEl) return false;&lt;br /&gt;
    var found = findTextInContent(contentEl, _selText.slice(0,80).replace(/…$/,&#039;&#039;).trim());&lt;br /&gt;
    if (!found) return false;&lt;br /&gt;
    _selRange = found;&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function tryShowActions() {&lt;br /&gt;
    if ($fbComposer &amp;amp;&amp;amp; $fbComposer.hasClass(&#039;gra-composer-visible&#039;)) return;&lt;br /&gt;
    if ($ntComposer &amp;amp;&amp;amp; $ntComposer.hasClass(&#039;gra-composer-visible&#039;)) return;&lt;br /&gt;
    if ($bmComposer &amp;amp;&amp;amp; $bmComposer.hasClass(&#039;gra-composer-visible&#039;)) return;&lt;br /&gt;
    if (!captureSelection()) { hideActions(); return; }&lt;br /&gt;
    _fabSelVer = _selVersion;&lt;br /&gt;
    showFab(_selRect);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function showFab(rect) {&lt;br /&gt;
    if (!rect) return;&lt;br /&gt;
    var fabW, fabH, top, left;&lt;br /&gt;
    if (_mobile) {&lt;br /&gt;
      /* Docked as a fixed bar below the reader toolbar.&lt;br /&gt;
         All positioning is handled by CSS via .gra-fab-mobile-docked,&lt;br /&gt;
         so it never collides with the native selection menu and never&lt;br /&gt;
         clips at screen edges or causes horizontal scroll. */&lt;br /&gt;
      $fab.css({ position: &#039;&#039;, top: &#039;&#039;, left: &#039;&#039;, visibility: &#039;&#039; })&lt;br /&gt;
          .addClass(&#039;gra-fab-visible gra-fab-mobile-docked&#039;);&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    fabW = 46; fabH = 126;&lt;br /&gt;
    top  = rect.top + (rect.height / 2) - (fabH / 2);&lt;br /&gt;
    left = rect.right + 10;&lt;br /&gt;
    if (left + fabW &amp;gt; window.innerWidth - 8) left = rect.left - fabW - 10;&lt;br /&gt;
    top  = clamp(top,  8, window.innerHeight - fabH - 8);&lt;br /&gt;
    left = clamp(left, 8, window.innerWidth  - fabW - 8);&lt;br /&gt;
    $fab.css({ top: top + &#039;px&#039;, left: left + &#039;px&#039; }).addClass(&#039;gra-fab-visible&#039;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function hideFab() { $fab.removeClass(&#039;gra-fab-visible gra-fab-mobile-docked&#039;); }&lt;br /&gt;
  function hideActions() { hideFab(); }&lt;br /&gt;
&lt;br /&gt;
  function wrapSelection(id, cssClass) {&lt;br /&gt;
    var range = _selRange;&lt;br /&gt;
    _selRange = null;&lt;br /&gt;
    if (!range) return null;&lt;br /&gt;
    try {&lt;br /&gt;
      if (!document.contains(range.startContainer) ||&lt;br /&gt;
          !document.contains(range.endContainer)) return null;&lt;br /&gt;
    } catch(e) { return null; }&lt;br /&gt;
    function makeSpan() {&lt;br /&gt;
      var sp = document.createElement(&#039;span&#039;);&lt;br /&gt;
      sp.className = cssClass;&lt;br /&gt;
      sp.setAttribute(&#039;data-gra-id&#039;, id);&lt;br /&gt;
      return sp;&lt;br /&gt;
    }&lt;br /&gt;
    try {&lt;br /&gt;
      var span = makeSpan();&lt;br /&gt;
      range.surroundContents(span);&lt;br /&gt;
      if (span.parentNode) return span;&lt;br /&gt;
    } catch(e) {}&lt;br /&gt;
    try {&lt;br /&gt;
      var frag = range.extractContents();&lt;br /&gt;
      var sp2  = makeSpan();&lt;br /&gt;
      sp2.appendChild(frag);&lt;br /&gt;
      range.insertNode(sp2);&lt;br /&gt;
      if (sp2 &amp;amp;&amp;amp; sp2.parentNode) return sp2;&lt;br /&gt;
    } catch(e2) {}&lt;br /&gt;
    return null;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function openFeedbackComposer() {&lt;br /&gt;
    hideActions();&lt;br /&gt;
    $fbQuote.text(_selText.slice(0,200) + (_selText.length &amp;gt; 200 ? &#039;…&#039; : &#039;&#039;));&lt;br /&gt;
    $fbIssueType.val(&#039;&#039;);&lt;br /&gt;
    $fbText.val(&#039;&#039;);&lt;br /&gt;
    $fbSubmit.prop(&#039;disabled&#039;, true);&lt;br /&gt;
    $(&#039;#gra-fb-status&#039;).text(&#039;&#039;).removeClass(&#039;gra-fb-ok gra-fb-err&#039;);&lt;br /&gt;
    if (currentUserEmail) $fbEmail.val(currentUserEmail);&lt;br /&gt;
    else $fbEmail.val(&#039;&#039;);&lt;br /&gt;
    if (!_mobile) $fbComposer.css({top:&#039;&#039;, left:&#039;&#039;, transform:&#039;&#039;});&lt;br /&gt;
    $fbComposer.addClass(&#039;gra-composer-visible&#039;);&lt;br /&gt;
    $backdrop.addClass(&#039;gra-backdrop-visible&#039;);&lt;br /&gt;
    setTimeout(function(){ $fbIssueType.focus(); }, isMobile() ? 300 : 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function closeFeedbackComposer() {&lt;br /&gt;
    $fbComposer.removeClass(&#039;gra-composer-visible&#039;);&lt;br /&gt;
    $backdrop.removeClass(&#039;gra-backdrop-visible&#039;);&lt;br /&gt;
    _selRange = null; _selText = &#039;&#039;; _selRect = null;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function submitFeedback() {&lt;br /&gt;
    var issueType = $fbIssueType.val();&lt;br /&gt;
    var details   = $fbText.val().trim();&lt;br /&gt;
    var email     = $fbEmail.val().trim();&lt;br /&gt;
    var quote     = $fbQuote.text();&lt;br /&gt;
    if (!issueType) return;&lt;br /&gt;
    $fbSubmit.prop(&#039;disabled&#039;, true).text(&#039;Sending…&#039;);&lt;br /&gt;
    $(&#039;#gra-fb-status&#039;).text(&#039;&#039;).removeClass(&#039;gra-fb-ok gra-fb-err&#039;);&lt;br /&gt;
    var issueLabels = {&lt;br /&gt;
      wrong_text: &#039;Formatting error&#039;, reference_issue: &#039;Reference issue&#039;,&lt;br /&gt;
      spelling_mistake: &#039;Spelling mistake&#039;, other: &#039;Other&#039;&lt;br /&gt;
    };&lt;br /&gt;
    var payload = new FormData();&lt;br /&gt;
    payload.append(&#039;issue_type&#039;,    issueLabels[issueType] || issueType);&lt;br /&gt;
    payload.append(&#039;page&#039;,          pageTitle.replace(/_/g,&#039; &#039;));&lt;br /&gt;
    payload.append(&#039;url&#039;,           window.location.href);&lt;br /&gt;
    payload.append(&#039;selected_text&#039;, quote);&lt;br /&gt;
    payload.append(&#039;details&#039;,       details || &#039;&#039;);&lt;br /&gt;
    payload.append(&#039;user_email&#039;,    email || currentUserEmail || &#039;&#039;);&lt;br /&gt;
    payload.append(&#039;wiki_user&#039;,     currentUser || &#039;anonymous&#039;);&lt;br /&gt;
    fetch(&#039;/feedback.php&#039;, {method:&#039;POST&#039;, body:payload})&lt;br /&gt;
      .then(function(r){ return r.json(); })&lt;br /&gt;
      .then(function(data){&lt;br /&gt;
        if (data &amp;amp;&amp;amp; data.ok) showFeedbackSuccess();&lt;br /&gt;
        else showFeedbackError(data &amp;amp;&amp;amp; data.error ? data.error : &#039;Could not send.&#039;);&lt;br /&gt;
      })&lt;br /&gt;
      .catch(function(){ showFeedbackError(&#039;Network error. Please try again.&#039;); });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function showFeedbackSuccess() {&lt;br /&gt;
    $fbSubmit.prop(&#039;disabled&#039;, false).text(&#039;Send&#039;);&lt;br /&gt;
    $(&#039;#gra-fb-status&#039;).text(&#039;✓ Feedback sent. Thank you!&#039;).addClass(&#039;gra-fb-ok&#039;);&lt;br /&gt;
    setTimeout(closeFeedbackComposer, 2500);&lt;br /&gt;
  }&lt;br /&gt;
  function showFeedbackError(msg) {&lt;br /&gt;
    $fbSubmit.prop(&#039;disabled&#039;, false).text(&#039;Send&#039;);&lt;br /&gt;
    $(&#039;#gra-fb-status&#039;).text(&#039;✗ &#039; + msg).addClass(&#039;gra-fb-err&#039;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function openNoteComposer() {&lt;br /&gt;
    hideActions();&lt;br /&gt;
    if (!_mobile) $ntComposer.css({ top: &#039;&#039;, left: &#039;&#039;, transform: &#039;&#039; });&lt;br /&gt;
    $ntComposer.addClass(&#039;gra-composer-visible&#039;);&lt;br /&gt;
    $backdrop.addClass(&#039;gra-backdrop-visible&#039;);&lt;br /&gt;
    setTimeout(function(){ $ntInput.focus(); }, isMobile() ? 300 : 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function closeNoteComposer() {&lt;br /&gt;
    $ntComposer.removeClass(&#039;gra-composer-visible&#039;);&lt;br /&gt;
    $backdrop.removeClass(&#039;gra-backdrop-visible&#039;);&lt;br /&gt;
    $ntInput.val(&#039;&#039;);&lt;br /&gt;
    $ntSubmit.prop(&#039;disabled&#039;, true);&lt;br /&gt;
    _selRange = null; _selText = &#039;&#039;; _selRect = null;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function submitNote() {&lt;br /&gt;
    var text = $ntInput.val().trim();&lt;br /&gt;
    if (!text) return;&lt;br /&gt;
    var id    = uid();&lt;br /&gt;
    var ts    = nowIso();&lt;br /&gt;
    var quote = _selText.slice(0,120) + (_selText.length &amp;gt; 120 ? &#039;…&#039; : &#039;&#039;);&lt;br /&gt;
    if (!_selRange &amp;amp;&amp;amp; _selText) reCaptureFromDOM();&lt;br /&gt;
    var span  = wrapSelection(id, &#039;gra-note-highlight&#039;);&lt;br /&gt;
    if (span) span.setAttribute(&#039;data-gra-quote&#039;, quote);&lt;br /&gt;
    _notes.push({id:id, ts:ts, quote:quote, text:text});&lt;br /&gt;
    persistNotes();&lt;br /&gt;
    persistNoteHighlight(id, quote);&lt;br /&gt;
    renderNoteCards();&lt;br /&gt;
    closeNoteComposer();&lt;br /&gt;
    openPanel(&#039;notes&#039;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function persistNotes() {&lt;br /&gt;
    try { localStorage.setItem(NT_LS_KEY, JSON.stringify(_notes)); } catch(e){}&lt;br /&gt;
  }&lt;br /&gt;
  function loadNotes() {&lt;br /&gt;
    try { var r = localStorage.getItem(NT_LS_KEY); if (r) _notes = JSON.parse(r)||[]; } catch(e){}&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function openBookmarkComposer() {&lt;br /&gt;
    hideActions();&lt;br /&gt;
    if (!_mobile) $bmComposer.css({ top: &#039;&#039;, left: &#039;&#039;, transform: &#039;&#039; });&lt;br /&gt;
    $bmComposer.addClass(&#039;gra-composer-visible&#039;);&lt;br /&gt;
    $backdrop.addClass(&#039;gra-backdrop-visible&#039;);&lt;br /&gt;
    setTimeout(function(){ $bmInput.focus(); }, isMobile() ? 300 : 0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function closeBookmarkComposer() {&lt;br /&gt;
    $bmComposer.removeClass(&#039;gra-composer-visible&#039;);&lt;br /&gt;
    $backdrop.removeClass(&#039;gra-backdrop-visible&#039;);&lt;br /&gt;
    $bmInput.val(&#039;&#039;);&lt;br /&gt;
    _selRange = null; _selText = &#039;&#039;; _selRect = null;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function submitBookmark() {&lt;br /&gt;
    var name  = $bmInput.val().trim() || (&#039;Bookmark &#039; + (_bookmarks.length+1));&lt;br /&gt;
    var id    = uid();&lt;br /&gt;
    var quote = _selText.slice(0,120) + (_selText.length &amp;gt; 120 ? &#039;…&#039; : &#039;&#039;);&lt;br /&gt;
    if (!_selRange &amp;amp;&amp;amp; _selText) reCaptureFromDOM();&lt;br /&gt;
    var span  = wrapSelection(id, &#039;gra-bookmark-highlight&#039;);&lt;br /&gt;
    if (span) { span.setAttribute(&#039;data-gra-id&#039;, id); span.setAttribute(&#039;data-gra-name&#039;, name); }&lt;br /&gt;
    _bookmarks.push({id:id, name:name, quote:quote, ts:nowIso()});&lt;br /&gt;
    persistBookmarks();&lt;br /&gt;
    renderBookmarkCards();&lt;br /&gt;
    closeBookmarkComposer();&lt;br /&gt;
    openPanel(&#039;bookmarks&#039;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function deleteBookmark(id) {&lt;br /&gt;
    _bookmarks = _bookmarks.filter(function(b){ return b.id !== id; });&lt;br /&gt;
    var span = document.querySelector(&#039;[data-gra-id=&amp;quot;&#039;+id+&#039;&amp;quot;].gra-bookmark-highlight&#039;);&lt;br /&gt;
    if (span &amp;amp;&amp;amp; span.parentNode) {&lt;br /&gt;
      var p = span.parentNode;&lt;br /&gt;
      while (span.firstChild) p.insertBefore(span.firstChild, span);&lt;br /&gt;
      p.removeChild(span);&lt;br /&gt;
    }&lt;br /&gt;
    persistBookmarks(); renderBookmarkCards();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function persistBookmarks() {&lt;br /&gt;
    try { localStorage.setItem(BM_LS_KEY, JSON.stringify(_bookmarks)); } catch(e){}&lt;br /&gt;
  }&lt;br /&gt;
  function loadBookmarks() {&lt;br /&gt;
    try { var r = localStorage.getItem(BM_LS_KEY); if (r) _bookmarks = JSON.parse(r)||[]; } catch(e){}&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function openPanel(tab) {&lt;br /&gt;
    _activeTab = tab || _activeTab;&lt;br /&gt;
    switchTab(_activeTab);&lt;br /&gt;
    $panel.addClass(&#039;gra-panel-open&#039;);&lt;br /&gt;
    $backdrop.addClass(&#039;gra-backdrop-visible&#039;);&lt;br /&gt;
  }&lt;br /&gt;
  function closePanel() {&lt;br /&gt;
    $panel.removeClass(&#039;gra-panel-open&#039;);&lt;br /&gt;
    $backdrop.removeClass(&#039;gra-backdrop-visible&#039;);&lt;br /&gt;
  }&lt;br /&gt;
  function switchTab(tab) {&lt;br /&gt;
    _activeTab = tab;&lt;br /&gt;
    $tabNotes.toggleClass(&#039;gra-tab-active&#039;, tab===&#039;notes&#039;);&lt;br /&gt;
    $tabBookmarks.toggleClass(&#039;gra-tab-active&#039;, tab===&#039;bookmarks&#039;);&lt;br /&gt;
    $paneNotes.toggleClass(&#039;gra-pane-active&#039;, tab===&#039;notes&#039;);&lt;br /&gt;
    $paneBookmarks.toggleClass(&#039;gra-pane-active&#039;, tab===&#039;bookmarks&#039;);&lt;br /&gt;
    if (tab===&#039;notes&#039;) renderNoteCards();&lt;br /&gt;
    else renderBookmarkCards();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function renderNoteCards() {&lt;br /&gt;
    if (!_notes.length) {&lt;br /&gt;
      $paneNotes.html(&#039;&amp;lt;div class=&amp;quot;gra-empty-state&amp;quot;&amp;gt;No notes yet.&amp;lt;br&amp;gt;Select text and tap ✎ to add one.&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    var html = &#039;&#039;;&lt;br /&gt;
    _notes.slice().reverse().forEach(function(n){&lt;br /&gt;
      html += &#039;&amp;lt;div class=&amp;quot;gra-note-card&amp;quot; data-gra-id=&amp;quot;&#039;+esc(n.id)+&#039;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;div class=&amp;quot;gra-card-header&amp;quot;&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;span class=&amp;quot;gra-icon gra-icon-note&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;div class=&amp;quot;gra-card-meta&amp;quot;&amp;gt;&#039;&lt;br /&gt;
            + (n.ts ? &#039;&amp;lt;div class=&amp;quot;gra-card-ts&amp;quot;&amp;gt;&#039;+esc(fmtTs(n.ts))+&#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039;)&lt;br /&gt;
            + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;button class=&amp;quot;gra-note-del&amp;quot; data-del-id=&amp;quot;&#039;+esc(n.id)+&#039;&amp;quot; title=&amp;quot;Delete&amp;quot;&amp;gt;×&amp;lt;/button&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
            + (n.quote ? &#039;&amp;lt;div class=&amp;quot;gra-card-quote&amp;quot;&amp;gt;&#039;+esc(n.quote)+&#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039;)&lt;br /&gt;
            + &#039;&amp;lt;div class=&amp;quot;gra-card-text&amp;quot;&amp;gt;&#039;+esc(n.text)+&#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    });&lt;br /&gt;
    $paneNotes.html(html);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function deleteNote(id) {&lt;br /&gt;
    _notes = _notes.filter(function(n){ return n.id !== id; });&lt;br /&gt;
    var span = document.querySelector(&#039;[data-gra-id=&amp;quot;&#039;+id+&#039;&amp;quot;].gra-note-highlight&#039;);&lt;br /&gt;
    if (span &amp;amp;&amp;amp; span.parentNode) {&lt;br /&gt;
      var p = span.parentNode;&lt;br /&gt;
      while (span.firstChild) p.insertBefore(span.firstChild, span);&lt;br /&gt;
      p.removeChild(span);&lt;br /&gt;
    }&lt;br /&gt;
    try {&lt;br /&gt;
      var s = JSON.parse(localStorage.getItem(NT_LS_KEY+&#039;_hl&#039;)||&#039;[]&#039;);&lt;br /&gt;
      s = s.filter(function(h){ return h.id !== id; });&lt;br /&gt;
      localStorage.setItem(NT_LS_KEY+&#039;_hl&#039;, JSON.stringify(s));&lt;br /&gt;
    } catch(e){}&lt;br /&gt;
    persistNotes(); renderNoteCards();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function renderBookmarkCards() {&lt;br /&gt;
    if (!_bookmarks.length) {&lt;br /&gt;
      $paneBookmarks.html(&#039;&amp;lt;div class=&amp;quot;gra-empty-state&amp;quot;&amp;gt;No bookmarks yet.&amp;lt;br&amp;gt;Select text and tap 🔖 to save one.&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    var html = &#039;&#039;;&lt;br /&gt;
    _bookmarks.slice().reverse().forEach(function(b){&lt;br /&gt;
      html += &#039;&amp;lt;div class=&amp;quot;gra-bookmark-card&amp;quot; data-gra-id=&amp;quot;&#039;+esc(b.id)+&#039;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;span class=&amp;quot;gra-icon gra-icon-bookmark&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;div class=&amp;quot;gra-bookmark-info&amp;quot;&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;div class=&amp;quot;gra-bookmark-name&amp;quot;&amp;gt;&#039;+esc(b.name)+&#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
            + (b.quote ? &#039;&amp;lt;div class=&amp;quot;gra-bookmark-quote&amp;quot;&amp;gt;&#039;+esc(b.quote)+&#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039;)&lt;br /&gt;
            + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;button class=&amp;quot;gra-bookmark-del&amp;quot; data-del-id=&amp;quot;&#039;+esc(b.id)+&#039;&amp;quot; title=&amp;quot;Remove&amp;quot;&amp;gt;×&amp;lt;/button&amp;gt;&#039;&lt;br /&gt;
            + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    });&lt;br /&gt;
    $paneBookmarks.html(html);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function scrollToHighlight(id) {&lt;br /&gt;
    var el = document.querySelector(&#039;[data-gra-id=&amp;quot;&#039;+id+&#039;&amp;quot;]&#039;);&lt;br /&gt;
    if (!el) return;&lt;br /&gt;
    el.scrollIntoView({behavior:&#039;smooth&#039;, block:&#039;center&#039;});&lt;br /&gt;
    el.classList.add(&#039;gra-hl-active&#039;);&lt;br /&gt;
    setTimeout(function(){ el.classList.remove(&#039;gra-hl-active&#039;); }, 2000);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function wireEvents() {&lt;br /&gt;
&lt;br /&gt;
    /* Suppress native context menu inside article content (Android/desktop) */&lt;br /&gt;
    document.addEventListener(&#039;contextmenu&#039;, function(e) {&lt;br /&gt;
      var tag = e.target.tagName;&lt;br /&gt;
      if (tag === &#039;INPUT&#039; || tag === &#039;TEXTAREA&#039; || tag === &#039;SELECT&#039;) return;&lt;br /&gt;
      var c = document.querySelector(CONTENT_SEL);&lt;br /&gt;
      if (c &amp;amp;&amp;amp; c.contains(e.target)) e.preventDefault();&lt;br /&gt;
    }, { passive: false });&lt;br /&gt;
&lt;br /&gt;
    /* Desktop mouseup */&lt;br /&gt;
    $(document).on(&#039;mouseup&#039;, function(e){&lt;br /&gt;
      if (e.button !== 0) return;&lt;br /&gt;
      if (_mobile) return;&lt;br /&gt;
      setTimeout(tryShowActions, 20);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    /* Mobile: show fab once selection settles (~350ms, alongside native menu).&lt;br /&gt;
       Strategy B: don&#039;t race the native menu — appear with it, in our own space. */&lt;br /&gt;
    var _lastTouchEnd = 0;&lt;br /&gt;
    document.addEventListener(&#039;touchend&#039;, function(e) {&lt;br /&gt;
      if (!_mobile) return;&lt;br /&gt;
      if ($fab[0] &amp;amp;&amp;amp; $fab[0].contains(e.target)) return;&lt;br /&gt;
      _lastTouchEnd = Date.now();&lt;br /&gt;
      clearTimeout(_selTimer);&lt;br /&gt;
      _selTimer = setTimeout(function() {&lt;br /&gt;
        var sel = window.getSelection();&lt;br /&gt;
        if (!sel || sel.isCollapsed || !sel.toString().trim()) return;&lt;br /&gt;
        tryShowActions();&lt;br /&gt;
      }, 350);&lt;br /&gt;
    }, { passive: true });&lt;br /&gt;
&lt;br /&gt;
    /* Mobile: reposition fab live while user drags the selection handles,&lt;br /&gt;
       hide it if selection is cleared */&lt;br /&gt;
    document.addEventListener(&#039;selectionchange&#039;, function() {&lt;br /&gt;
      if (!_mobile) return;&lt;br /&gt;
      if (!$fab.hasClass(&#039;gra-fab-visible&#039;)) return;&lt;br /&gt;
      clearTimeout(_selTimer);&lt;br /&gt;
      _selTimer = setTimeout(function() {&lt;br /&gt;
        var sel = window.getSelection();&lt;br /&gt;
        if (!sel || sel.isCollapsed || !sel.toString().trim()) { hideActions(); return; }&lt;br /&gt;
        if (captureSelection()) showFab(_selRect);&lt;br /&gt;
      }, 250);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    /* selectionchange debounced (desktop) */&lt;br /&gt;
    var _selTimer = null;&lt;br /&gt;
    document.addEventListener(&#039;selectionchange&#039;, function() {&lt;br /&gt;
      _selVersion++;&lt;br /&gt;
      clearTimeout(_selTimer);&lt;br /&gt;
      var v = _selVersion;&lt;br /&gt;
      _selTimer = setTimeout(function(){&lt;br /&gt;
        if (v !== _selVersion) return;&lt;br /&gt;
        if (_fabSelVer === v) return;&lt;br /&gt;
        if (_mobile) return; /* mobile uses touchend instead */&lt;br /&gt;
        tryShowActions();&lt;br /&gt;
      }, 600);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    /* ── KEY FIX: fab touchstart sets flag to prevent hideActions ── */&lt;br /&gt;
    $fab[0].addEventListener(&#039;touchstart&#039;, function(e) {&lt;br /&gt;
      _fabTouched = true;&lt;br /&gt;
      /* Don&#039;t propagate to document handler */&lt;br /&gt;
      e.stopPropagation();&lt;br /&gt;
    }, { passive: true });&lt;br /&gt;
&lt;br /&gt;
    /* Click outside → hide actions (blocked if fab was touched) */&lt;br /&gt;
    $(document).on(&#039;mousedown touchstart&#039;, function(e){&lt;br /&gt;
      if (_fabTouched) { _fabTouched = false; return; }&lt;br /&gt;
      var t = e.target;&lt;br /&gt;
      if ($fab[0]        &amp;amp;&amp;amp; $fab[0].contains(t))        return;&lt;br /&gt;
      if ($fbComposer[0] &amp;amp;&amp;amp; $fbComposer[0].contains(t)) return;&lt;br /&gt;
      if ($ntComposer[0] &amp;amp;&amp;amp; $ntComposer[0].contains(t)) return;&lt;br /&gt;
      if ($bmComposer[0] &amp;amp;&amp;amp; $bmComposer[0].contains(t)) return;&lt;br /&gt;
      hideActions();&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    /* ── FAB buttons — use touchend for mobile, click for desktop ── */&lt;br /&gt;
    function fabAction(btnId, action) {&lt;br /&gt;
      var el = document.getElementById(btnId);&lt;br /&gt;
      if (!el) return;&lt;br /&gt;
      /* touchend: fires before document touchstart clears _selRange */&lt;br /&gt;
      el.addEventListener(&#039;touchend&#039;, function(e) {&lt;br /&gt;
        e.preventDefault();&lt;br /&gt;
        e.stopPropagation();&lt;br /&gt;
        if (!_selRange &amp;amp;&amp;amp; !reCaptureFromDOM()) return;&lt;br /&gt;
        action();&lt;br /&gt;
      }, { passive: false });&lt;br /&gt;
      /* click: for desktop */&lt;br /&gt;
      el.addEventListener(&#039;click&#039;, function(e) {&lt;br /&gt;
        e.preventDefault();&lt;br /&gt;
        e.stopPropagation();&lt;br /&gt;
        if (!_selRange &amp;amp;&amp;amp; !reCaptureFromDOM()) return;&lt;br /&gt;
        action();&lt;br /&gt;
      });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    fabAction(&#039;gra-fab-note&#039;,     openNoteComposer);&lt;br /&gt;
    fabAction(&#039;gra-fab-bookmark&#039;, openBookmarkComposer);&lt;br /&gt;
    fabAction(&#039;gra-fab-feedback&#039;, openFeedbackComposer);&lt;br /&gt;
&lt;br /&gt;
    document.getElementById(&#039;gra-fab-search&#039;).addEventListener(&#039;touchend&#039;, function(e) {&lt;br /&gt;
      e.preventDefault(); e.stopPropagation();&lt;br /&gt;
      var q = _selText;&lt;br /&gt;
      hideActions();&lt;br /&gt;
      _selRange = null; _selText = &#039;&#039;; _selRect = null;&lt;br /&gt;
      if (q &amp;amp;&amp;amp; window.showSearchDialog) { window.showSearchDialog(q); }&lt;br /&gt;
    }, { passive: false });&lt;br /&gt;
    document.getElementById(&#039;gra-fab-search&#039;).addEventListener(&#039;click&#039;, function(e) {&lt;br /&gt;
      e.preventDefault(); e.stopPropagation();&lt;br /&gt;
      var q = _selText;&lt;br /&gt;
      hideActions();&lt;br /&gt;
      _selRange = null; _selText = &#039;&#039;; _selRect = null;&lt;br /&gt;
      if (q &amp;amp;&amp;amp; window.showSearchDialog) { window.showSearchDialog(q); }&lt;br /&gt;
      else if (q) { $(document).trigger($.Event(&#039;keydown&#039;, {ctrlKey:true, key:&#039;k&#039;, keyCode:75})); }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    /* ── Dismiss button: hide toolbar + clear selection (mobile) ── */&lt;br /&gt;
    (function () {&lt;br /&gt;
      var dismissEl = document.getElementById(&#039;gra-fab-dismiss&#039;);&lt;br /&gt;
      if (!dismissEl) return;&lt;br /&gt;
      function doDismiss(e) {&lt;br /&gt;
        e.preventDefault(); e.stopPropagation();&lt;br /&gt;
        hideActions();&lt;br /&gt;
        _selRange = null; _selText = &#039;&#039;; _selRect = null;&lt;br /&gt;
        if (window.getSelection) {&lt;br /&gt;
          var s = window.getSelection();&lt;br /&gt;
          if (s &amp;amp;&amp;amp; s.removeAllRanges) s.removeAllRanges();&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      dismissEl.addEventListener(&#039;touchend&#039;, doDismiss, { passive: false });&lt;br /&gt;
      dismissEl.addEventListener(&#039;click&#039;, doDismiss);&lt;br /&gt;
    }());&lt;br /&gt;
&lt;br /&gt;
    /* Feedback composer */&lt;br /&gt;
    $fbIssueType.on(&#039;change&#039;, function(){ $fbSubmit.prop(&#039;disabled&#039;, !$(this).val()); });&lt;br /&gt;
    $(&#039;#gra-fb-cancel, #gra-fb-close&#039;).on(&#039;click&#039;, closeFeedbackComposer);&lt;br /&gt;
    $fbSubmit.on(&#039;click&#039;, submitFeedback);&lt;br /&gt;
    $fbText.on(&#039;keydown&#039;, function(e){ if(e.key===&#039;Escape&#039;) closeFeedbackComposer(); });&lt;br /&gt;
&lt;br /&gt;
    /* Note composer */&lt;br /&gt;
    $ntInput.on(&#039;input&#039;, function(){ $ntSubmit.prop(&#039;disabled&#039;, !$(this).val().trim()); });&lt;br /&gt;
    $(&#039;#gra-nt-cancel&#039;).on(&#039;click&#039;, closeNoteComposer);&lt;br /&gt;
    $ntSubmit.on(&#039;click&#039;, submitNote);&lt;br /&gt;
    $ntInput.on(&#039;keydown&#039;, function(e){&lt;br /&gt;
      if ((e.ctrlKey||e.metaKey) &amp;amp;&amp;amp; e.key===&#039;Enter&#039;) submitNote();&lt;br /&gt;
      if (e.key===&#039;Escape&#039;) closeNoteComposer();&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    /* Bookmark composer */&lt;br /&gt;
    $(&#039;#gra-bm-cancel&#039;).on(&#039;click&#039;, closeBookmarkComposer);&lt;br /&gt;
    $bmSubmit.on(&#039;click&#039;, submitBookmark);&lt;br /&gt;
    $bmInput.on(&#039;keydown&#039;, function(e){&lt;br /&gt;
      if (e.key===&#039;Enter&#039;) submitBookmark();&lt;br /&gt;
      if (e.key===&#039;Escape&#039;) closeBookmarkComposer();&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    /* Panel */&lt;br /&gt;
    $(&#039;#gra-panel-close&#039;).on(&#039;click&#039;, closePanel);&lt;br /&gt;
    $backdrop.on(&#039;click touchend&#039;, function(e){&lt;br /&gt;
      e.preventDefault();&lt;br /&gt;
      if ($fbComposer.hasClass(&#039;gra-composer-visible&#039;)) closeFeedbackComposer();&lt;br /&gt;
      else if ($ntComposer.hasClass(&#039;gra-composer-visible&#039;)) closeNoteComposer();&lt;br /&gt;
      else if ($bmComposer.hasClass(&#039;gra-composer-visible&#039;)) closeBookmarkComposer();&lt;br /&gt;
      else closePanel();&lt;br /&gt;
    });&lt;br /&gt;
    $tabNotes.on(&#039;click&#039;, function(){ switchTab(&#039;notes&#039;); });&lt;br /&gt;
    $tabBookmarks.on(&#039;click&#039;, function(){ switchTab(&#039;bookmarks&#039;); });&lt;br /&gt;
&lt;br /&gt;
    $paneNotes.on(&#039;click&#039;, &#039;.gra-note-card&#039;, function(e){&lt;br /&gt;
      if ($(e.target).hasClass(&#039;gra-note-del&#039;)) return;&lt;br /&gt;
      var id = $(this).attr(&#039;data-gra-id&#039;);&lt;br /&gt;
      if (id) { closePanel(); scrollToHighlight(id); }&lt;br /&gt;
    });&lt;br /&gt;
    $paneNotes.on(&#039;click&#039;, &#039;.gra-note-del&#039;, function(e){&lt;br /&gt;
      e.stopPropagation();&lt;br /&gt;
      var id = $(this).attr(&#039;data-del-id&#039;);&lt;br /&gt;
      if (id) deleteNote(id);&lt;br /&gt;
    });&lt;br /&gt;
    $paneBookmarks.on(&#039;click&#039;, &#039;.gra-bookmark-card&#039;, function(e){&lt;br /&gt;
      if ($(e.target).hasClass(&#039;gra-bookmark-del&#039;)) return;&lt;br /&gt;
      var id = $(this).attr(&#039;data-gra-id&#039;);&lt;br /&gt;
      if (id) { closePanel(); scrollToHighlight(id); }&lt;br /&gt;
    });&lt;br /&gt;
    $paneBookmarks.on(&#039;click&#039;, &#039;.gra-bookmark-del&#039;, function(e){&lt;br /&gt;
      e.stopPropagation();&lt;br /&gt;
      var id = $(this).attr(&#039;data-del-id&#039;);&lt;br /&gt;
      if (id) deleteBookmark(id);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    $(CONTENT_SEL).on(&#039;click&#039;, &#039;.gra-note-highlight&#039;, function(){&lt;br /&gt;
      var id = $(this).attr(&#039;data-gra-id&#039;);&lt;br /&gt;
      openPanel(&#039;notes&#039;);&lt;br /&gt;
      setTimeout(function(){&lt;br /&gt;
        var $card = $paneNotes.find(&#039;[data-gra-id=&amp;quot;&#039;+id+&#039;&amp;quot;]&#039;);&lt;br /&gt;
        if ($card.length) {&lt;br /&gt;
          $card.addClass(&#039;gra-card-active&#039;);&lt;br /&gt;
          $card[0].scrollIntoView({behavior:&#039;smooth&#039;, block:&#039;nearest&#039;});&lt;br /&gt;
          setTimeout(function(){ $card.removeClass(&#039;gra-card-active&#039;); }, 2000);&lt;br /&gt;
        }&lt;br /&gt;
      }, 100);&lt;br /&gt;
    });&lt;br /&gt;
    $(CONTENT_SEL).on(&#039;click&#039;, &#039;.gra-bookmark-highlight&#039;, function(){&lt;br /&gt;
      var id = $(this).attr(&#039;data-gra-id&#039;);&lt;br /&gt;
      openPanel(&#039;bookmarks&#039;);&lt;br /&gt;
      setTimeout(function(){&lt;br /&gt;
        var $card = $paneBookmarks.find(&#039;[data-gra-id=&amp;quot;&#039;+id+&#039;&amp;quot;]&#039;);&lt;br /&gt;
        if ($card.length) $card[0].scrollIntoView({behavior:&#039;smooth&#039;, block:&#039;nearest&#039;});&lt;br /&gt;
      }, 100);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    $(document).on(&#039;keydown&#039;, function(e){&lt;br /&gt;
      if (e.key !== &#039;Escape&#039;) return;&lt;br /&gt;
      if ($fbComposer.hasClass(&#039;gra-composer-visible&#039;)) closeFeedbackComposer();&lt;br /&gt;
      else if ($ntComposer.hasClass(&#039;gra-composer-visible&#039;)) closeNoteComposer();&lt;br /&gt;
      else if ($bmComposer.hasClass(&#039;gra-composer-visible&#039;)) closeBookmarkComposer();&lt;br /&gt;
      else closePanel();&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function persistNoteHighlight(id, quote) {&lt;br /&gt;
    try {&lt;br /&gt;
      var s = JSON.parse(localStorage.getItem(NT_LS_KEY+&#039;_hl&#039;)||&#039;[]&#039;);&lt;br /&gt;
      s = s.filter(function(h){ return h.id !== id; });&lt;br /&gt;
      s.push({id:id, quote:quote});&lt;br /&gt;
      localStorage.setItem(NT_LS_KEY+&#039;_hl&#039;, JSON.stringify(s));&lt;br /&gt;
    } catch(e){}&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function restoreNoteHighlights() {&lt;br /&gt;
    var s = [];&lt;br /&gt;
    try { s = JSON.parse(localStorage.getItem(NT_LS_KEY+&#039;_hl&#039;)||&#039;[]&#039;); } catch(e){}&lt;br /&gt;
    s.forEach(function(h){&lt;br /&gt;
      if (!h.quote || !h.id) return;&lt;br /&gt;
      if (document.querySelector(&#039;[data-gra-id=&amp;quot;&#039;+h.id+&#039;&amp;quot;].gra-note-highlight&#039;)) return;&lt;br /&gt;
      var needle = h.quote.replace(/…$/,&#039;&#039;).trim().slice(0,80);&lt;br /&gt;
      if (!needle) return;&lt;br /&gt;
      var range = findTextInContent(document.querySelector(CONTENT_SEL), needle);&lt;br /&gt;
      if (!range) return;&lt;br /&gt;
      var sp = document.createElement(&#039;span&#039;);&lt;br /&gt;
      sp.className = &#039;gra-note-highlight&#039;;&lt;br /&gt;
      sp.setAttribute(&#039;data-gra-id&#039;, h.id);&lt;br /&gt;
      try { range.surroundContents(sp); } catch(e){}&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function restoreBookmarkHighlights() {&lt;br /&gt;
    _bookmarks.forEach(function(b){&lt;br /&gt;
      if (!b.quote) return;&lt;br /&gt;
      if (document.querySelector(&#039;[data-gra-id=&amp;quot;&#039;+b.id+&#039;&amp;quot;].gra-bookmark-highlight&#039;)) return;&lt;br /&gt;
      var needle = b.quote.replace(/…$/,&#039;&#039;).trim().slice(0,60);&lt;br /&gt;
      if (!needle) return;&lt;br /&gt;
      var found = findTextInContent(document.querySelector(CONTENT_SEL), needle);&lt;br /&gt;
      if (!found) return;&lt;br /&gt;
      var sp = document.createElement(&#039;span&#039;);&lt;br /&gt;
      sp.className = &#039;gra-bookmark-highlight&#039;;&lt;br /&gt;
      sp.setAttribute(&#039;data-gra-id&#039;, b.id);&lt;br /&gt;
      sp.setAttribute(&#039;data-gra-name&#039;, b.name);&lt;br /&gt;
      try { found.surroundContents(sp); } catch(e){}&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function findTextInContent(root, needle) {&lt;br /&gt;
    if (!root || !needle) return null;&lt;br /&gt;
    var text = root.textContent || &#039;&#039;;&lt;br /&gt;
    var idx  = text.indexOf(needle);&lt;br /&gt;
    if (idx &amp;lt; 0) return null;&lt;br /&gt;
    var iter = document.createNodeIterator(root, NodeFilter.SHOW_TEXT, null, false);&lt;br /&gt;
    var pos = 0, node, startNode, startOffset, endNode, endOffset;&lt;br /&gt;
    while ((node = iter.nextNode())) {&lt;br /&gt;
      var len = node.nodeValue.length;&lt;br /&gt;
      if (!startNode &amp;amp;&amp;amp; pos + len &amp;gt; idx) { startNode = node; startOffset = idx - pos; }&lt;br /&gt;
      var endIdx = idx + needle.length;&lt;br /&gt;
      if (startNode &amp;amp;&amp;amp; pos + len &amp;gt;= endIdx) { endNode = node; endOffset = endIdx - pos; break; }&lt;br /&gt;
      pos += len;&lt;br /&gt;
    }&lt;br /&gt;
    if (!startNode || !endNode) return null;&lt;br /&gt;
    try {&lt;br /&gt;
      var r = document.createRange();&lt;br /&gt;
      r.setStart(startNode, startOffset);&lt;br /&gt;
      r.setEnd(endNode, endOffset);&lt;br /&gt;
      return r;&lt;br /&gt;
    } catch(e){ return null; }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  $(function() {&lt;br /&gt;
    _mobile = window.innerWidth &amp;lt; 768 || &#039;ontouchstart&#039; in window;&lt;br /&gt;
    window.addEventListener(&#039;resize&#039;, function(){&lt;br /&gt;
      _mobile = window.innerWidth &amp;lt; 768 || &#039;ontouchstart&#039; in window;&lt;br /&gt;
    });&lt;br /&gt;
    buildDom();&lt;br /&gt;
    wireEvents();&lt;br /&gt;
    loadNotes();&lt;br /&gt;
    loadBookmarks();&lt;br /&gt;
    setTimeout(function(){&lt;br /&gt;
      try { restoreNoteHighlights(); } catch(e){}&lt;br /&gt;
      try { restoreBookmarkHighlights(); } catch(e){}&lt;br /&gt;
    }, 500);&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Gadget-GrAnnotations.css&amp;diff=6182</id>
		<title>MediaWiki:Gadget-GrAnnotations.css</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Gadget-GrAnnotations.css&amp;diff=6182"/>
		<updated>2026-06-10T19:48:05Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/*&lt;br /&gt;
 * gr_annotations.css  —  grantha.io inline Notes + Bookmarks + Feedback  (v3)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* ── Icon base ──────────────────────────────────────────────────── */&lt;br /&gt;
.gra-icon {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  width:  20px;&lt;br /&gt;
  height: 20px;&lt;br /&gt;
  background-size: contain;&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  background-position: center;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
/* comment.svg → Feedback (flag/report)  */&lt;br /&gt;
.gra-icon-feedback { background-image: url(&#039;/images/feedback.svg&#039;); }&lt;br /&gt;
/* notes.svg   → Notes                  */&lt;br /&gt;
.gra-icon-note     { background-image: url(&#039;/images/notes.svg&#039;); }&lt;br /&gt;
.gra-icon-bookmark { background-image: url(&#039;/images/bookmark.svg&#039;); }&lt;br /&gt;
.gra-icon-copy     { background-image: url(&#039;/images/copy.svg&#039;); }&lt;br /&gt;
.gra-icon-search { background-image: url(&#039;/images/search.svg&#039;); }&lt;br /&gt;
.gra-icon-dismiss { background-image: url(&#039;/images/close.svg&#039;); }&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   1. FLOATING ACTION STRIP  (desktop only)&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
#gra-fab {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  z-index: 10200;&lt;br /&gt;
  display: none;&lt;br /&gt;
  flex-direction: row;&lt;br /&gt;
  background: #B14A2E !important;&lt;br /&gt;
    border: none !important;&lt;br /&gt;
    border-radius: 12px !important;&lt;br /&gt;
    padding: 5px 4px !important;&lt;br /&gt;
    box-shadow: 0 3px 14px rgba(0, 0, 0, 0.08) !important;&lt;br /&gt;
    gap: 20px !important;&lt;br /&gt;
}&lt;br /&gt;
#gra-fab.gra-fab-visible { display: flex; }&lt;br /&gt;
&lt;br /&gt;
.gra-fab-btn {&lt;br /&gt;
  height: 48px;&lt;br /&gt;
  width: 48px;&lt;br /&gt;
  border: none;&lt;br /&gt;
  background: transparent;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  position: relative;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.gra-fab-btn-label {&lt;br /&gt;
 font-family: &#039;Noto Sans Devanagari&#039;;&lt;br /&gt;
font-weight: 400;&lt;br /&gt;
font-size: 10px;&lt;br /&gt;
line-height: 100%;&lt;br /&gt;
letter-spacing: 0%;&lt;br /&gt;
color: #ffffff;&lt;br /&gt;
padding: 5px 0;&lt;br /&gt;
}&lt;br /&gt;
.gra-fab-btn:hover { &lt;br /&gt;
background: rgba(255, 255, 255, 0.12) !important; border-radius: 12px;&lt;br /&gt;
}&lt;br /&gt;
.gra-fab-btn:hover .gra-fab-tooltip { opacity: 1; transform: translateX(0) translateY(-50%); }&lt;br /&gt;
&lt;br /&gt;
.gra-fab-tooltip {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  right: calc(100% + 8px);&lt;br /&gt;
  top: 50%;&lt;br /&gt;
  transform: translateX(4px) translateY(-50%);&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  background: rgba(30,30,30,0.82);&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  padding: 3px 9px;&lt;br /&gt;
  border-radius: 999px;&lt;br /&gt;
  pointer-events: none;&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
  transition: opacity 0.18s, transform 0.18s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   2. RIGHT PANEL&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
#gra-panel {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  right: -360px;&lt;br /&gt;
  width: 340px;&lt;br /&gt;
  height: 100vh;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  box-shadow: -3px 0 20px rgba(0,0,0,0.15);&lt;br /&gt;
  z-index: 10100;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  transition: right 0.28s cubic-bezier(0.4,0,0.2,1);&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
}&lt;br /&gt;
#gra-panel.gra-panel-open { right: 0; }&lt;br /&gt;
&lt;br /&gt;
#gra-backdrop {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  inset: 0;&lt;br /&gt;
  background: rgba(0,0,0,0.18);&lt;br /&gt;
  z-index: 10099;&lt;br /&gt;
  display: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
#gra-backdrop.gra-backdrop-visible { display: block; }&lt;br /&gt;
&lt;br /&gt;
#gra-panel-head {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: space-between;&lt;br /&gt;
  padding: 14px 16px 0;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
#gra-panel-close {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  font-size: 18px;&lt;br /&gt;
  color: #666;&lt;br /&gt;
  padding: 2px 6px;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
#gra-panel-close:hover { background: #f5f5f5; color: #222; }&lt;br /&gt;
&lt;br /&gt;
#gra-tabs {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  border-bottom: 2px solid #f0f0f0;&lt;br /&gt;
  margin: 10px 16px 0;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
.gra-tab {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  padding: 8px 4px;&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  font-family: inherit;&lt;br /&gt;
  color: #777;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  border-bottom: 2px solid transparent;&lt;br /&gt;
  margin-bottom: -2px;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  gap: 6px;&lt;br /&gt;
  transition: color 0.15s, border-color 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-tab .gra-icon { width: 16px; height: 16px; opacity: 0.5; }&lt;br /&gt;
.gra-tab:hover { color: #333; }&lt;br /&gt;
.gra-tab.gra-tab-active { color: #B14A2E; border-bottom-color: #B14A2E; }&lt;br /&gt;
.gra-tab.gra-tab-active .gra-icon {&lt;br /&gt;
  opacity: 1;&lt;br /&gt;
  filter: invert(33%) sepia(52%) saturate(1104%) hue-rotate(333deg) brightness(93%) contrast(90%);}&lt;br /&gt;
&lt;br /&gt;
#gra-panel-body {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  overflow-y: auto;&lt;br /&gt;
  padding: 12px 16px 16px;&lt;br /&gt;
}&lt;br /&gt;
.gra-pane { display: none; }&lt;br /&gt;
.gra-pane.gra-pane-active { display: block; }&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   3. FEEDBACK COMPOSER  — centered modal&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
.gra-composer {&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 12px;&lt;br /&gt;
  box-shadow: 0 8px 40px rgba(0,0,0,0.22);&lt;br /&gt;
  width: 420px;&lt;br /&gt;
  max-width: calc(100vw - 32px);&lt;br /&gt;
  padding: 20px 24px 16px;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  /* Centered on screen */&lt;br /&gt;
  top: 50% !important;&lt;br /&gt;
  left: 50% !important;&lt;br /&gt;
  transform: translate(-50%, -50%) !important;&lt;br /&gt;
  z-index: 10150;&lt;br /&gt;
  display: none;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  gap: 12px;&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
}&lt;br /&gt;
.gra-composer.gra-composer-visible { display: flex; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Feedback composer header row */&lt;br /&gt;
.gra-composer-header {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 8px;&lt;br /&gt;
}&lt;br /&gt;
.gra-composer-header strong {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
  color: #1C1A17;&lt;br /&gt;
  font-size: 16px; &lt;br /&gt;
  font-family: &amp;quot;Noto Sans Devanagari&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
.gra-btn-x {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  font-size: 16px;&lt;br /&gt;
  color: #666;&lt;br /&gt;
  padding: 2px 5px;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
.gra-btn-x:hover { background: #f5f5f5; color: #222; }&lt;br /&gt;
&lt;br /&gt;
/* Feedback field labels */&lt;br /&gt;
.gra-fb-field-label {&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
  color: #5f6368;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  letter-spacing: 0.4px;&lt;br /&gt;
  margin-bottom: -6px;   /* tighten gap to input below */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Selected text quote preview */&lt;br /&gt;
.gra-fb-quote-label {&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  color: #9aa0a6;&lt;br /&gt;
  margin-bottom: -4px;&lt;br /&gt;
}&lt;br /&gt;
.gra-fb-quote {&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #5f6368;&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  background: #fafafa;&lt;br /&gt;
  border-left: 3px solid #fbbc04;&lt;br /&gt;
  border-radius: 0 4px 4px 0;&lt;br /&gt;
  padding: 6px 10px;&lt;br /&gt;
  line-height: 1.45;&lt;br /&gt;
  max-height: 56px;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  display: -webkit-box;&lt;br /&gt;
  -webkit-line-clamp: 3;&lt;br /&gt;
  -webkit-box-orient: vertical;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Issue type dropdown */&lt;br /&gt;
.gra-fb-select {&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  padding: 7px 10px;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  font-family: inherit;&lt;br /&gt;
  color: #202124;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  outline: none;&lt;br /&gt;
  transition: border-color 0.15s;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
.gra-fb-select:focus { border-color: #1a73e8; }&lt;br /&gt;
&lt;br /&gt;
/* Email input */&lt;br /&gt;
.gra-fb-email-input {&lt;br /&gt;
  min-height: unset !important;&lt;br /&gt;
  height: 36px;&lt;br /&gt;
  padding: 6px 10px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Status message */&lt;br /&gt;
.gra-fb-status {&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  min-height: 16px;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
.gra-fb-status.gra-fb-ok  { color: #34a853; }&lt;br /&gt;
.gra-fb-status.gra-fb-err { color: #ea4335; }&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   4. NOTE COMPOSER  (local only)&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
.gra-composer-user {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 10px;&lt;br /&gt;
}&lt;br /&gt;
.gra-avatar {&lt;br /&gt;
  width: 32px;&lt;br /&gt;
  height: 32px;&lt;br /&gt;
  border-radius: 50%;&lt;br /&gt;
  background: #1a73e8;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
.gra-composer-uname { font-weight: 600; color: #202124; font-size: 13px; }&lt;br /&gt;
&lt;br /&gt;
.gra-composer-input {&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  padding: 8px 10px;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  font-family: inherit;&lt;br /&gt;
  resize: none;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
  min-height: 56px;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
  color: #202124;&lt;br /&gt;
  outline: none;&lt;br /&gt;
  transition: border-color 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-composer-input::placeholder { color: #aaa; }&lt;br /&gt;
.gra-composer-input:focus { border-color: #B14A2E; }&lt;br /&gt;
&lt;br /&gt;
.gra-composer-actions {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: flex-end;&lt;br /&gt;
  gap: 8px;&lt;br /&gt;
}&lt;br /&gt;
.gra-btn-cancel {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  color: #5f6368;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  font-family:&amp;quot;Noto Sans Devanagari&amp;quot;;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  padding: 8px 12px;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
}&lt;br /&gt;
.gra-btn-cancel:hover { background: #f5f5f5; }&lt;br /&gt;
.gra-btn-submit {&lt;br /&gt;
  background: transparent;&lt;br /&gt;
  color: #B14A2E;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  font-family:&amp;quot;Noto Sans Devanagari&amp;quot;;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  padding: 8px 12px;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  gap: 8px;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-btn-submit:hover { color: #8A351F; }&lt;br /&gt;
.gra-btn-submit:disabled { opacity: 0.4;&lt;br /&gt;
  cursor: not-allowed; }&lt;br /&gt;
&lt;br /&gt;
/* ── Note cards ── */&lt;br /&gt;
.gra-note-card {&lt;br /&gt;
  border: 1px solid #e8eaed;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 10px 12px;&lt;br /&gt;
  margin-bottom: 10px;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  box-shadow: 0 1px 3px rgba(0,0,0,0.07);&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: box-shadow 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-note-card:hover { box-shadow: 0 2px 8px rgba(0,0,0,0.12); }&lt;br /&gt;
.gra-note-card.gra-card-active {&lt;br /&gt;
  border-color: #34a853;&lt;br /&gt;
  box-shadow: 0 0 0 2px rgba(52,168,83,0.25);&lt;br /&gt;
}&lt;br /&gt;
.gra-card-header {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 8px;&lt;br /&gt;
  margin-bottom: 6px;&lt;br /&gt;
}&lt;br /&gt;
.gra-card-meta { flex: 1; }&lt;br /&gt;
.gra-card-ts { font-size: 11px; color: #80868b; }&lt;br /&gt;
.gra-card-quote {&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #5f6368;&lt;br /&gt;
  border-left: 3px solid #34a853;&lt;br /&gt;
  padding-left: 8px;&lt;br /&gt;
  margin-bottom: 6px;&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  line-height: 1.4;&lt;br /&gt;
  display: -webkit-box;&lt;br /&gt;
  -webkit-line-clamp: 2;&lt;br /&gt;
  -webkit-box-orient: vertical;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
}&lt;br /&gt;
.gra-card-text { font-size: 13px; color: #202124; line-height: 1.5; }&lt;br /&gt;
&lt;br /&gt;
.gra-note-del {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  color: #ccc;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  padding: 0 2px;&lt;br /&gt;
  line-height: 1;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
  margin-left: auto;&lt;br /&gt;
}&lt;br /&gt;
.gra-note-del:hover { color: #e53935; }&lt;br /&gt;
&lt;br /&gt;
.gra-empty-state {&lt;br /&gt;
  color: #9aa0a6;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  padding: 32px 16px;&lt;br /&gt;
  line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   5. BOOKMARK CARDS + COMPOSER&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
.gra-bookmark-card {&lt;br /&gt;
  border: 1px solid #e8eaed;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 10px 12px;&lt;br /&gt;
  margin-bottom: 10px;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  box-shadow: 0 1px 3px rgba(0,0,0,0.07);&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: flex-start;&lt;br /&gt;
  gap: 10px;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: box-shadow 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-bookmark-card:hover { box-shadow: 0 2px 8px rgba(0,0,0,0.12); }&lt;br /&gt;
.gra-bookmark-card .gra-icon { margin-top: 2px; flex-shrink: 0; }&lt;br /&gt;
.gra-bookmark-info { flex: 1; min-width: 0; }&lt;br /&gt;
.gra-bookmark-name {&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
  color: #202124;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  text-overflow: ellipsis;&lt;br /&gt;
}&lt;br /&gt;
.gra-bookmark-quote {&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  color: #80868b;&lt;br /&gt;
  margin-top: 2px;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  text-overflow: ellipsis;&lt;br /&gt;
}&lt;br /&gt;
.gra-bookmark-del {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  color: #ccc;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  padding: 0 2px;&lt;br /&gt;
  line-height: 1;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
.gra-bookmark-del:hover { color: #e53935; }&lt;br /&gt;
&lt;br /&gt;
.gra-bm-composer {&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 12px;&lt;br /&gt;
  box-shadow: 0 8px 40px rgba(0,0,0,0.22);&lt;br /&gt;
  width: 420px;&lt;br /&gt;
  max-width: calc(100vw - 32px);&lt;br /&gt;
  padding: 20px 24px 16px;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  /* Centered on screen — same as feedback composer */&lt;br /&gt;
  top: 50% !important;&lt;br /&gt;
  left: 50% !important;&lt;br /&gt;
  transform: translate(-50%, -50%) !important;&lt;br /&gt;
  z-index: 10150;&lt;br /&gt;
  display: none;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  gap: 10px;&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
}&lt;br /&gt;
.gra-bm-composer.gra-composer-visible { display: flex; }&lt;br /&gt;
.gra-bm-composer-label {&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
  color: #1C1A17;&lt;br /&gt;
  font-size: 16px;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 8px;&lt;br /&gt;
  font-family: &amp;quot;Noto Sans Devanagari&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
.gra-bm-composer-label .gra-icon, .gra-composer-header .gra-icon, .gra-tab .gra-icon {&lt;br /&gt;
margin-top: -3px;&lt;br /&gt;
filter: brightness(0) saturate(100%) invert(7%) sepia(8%) saturate(894%) hue-rotate(357deg) brightness(97%) contrast(92%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   6. ANCHOR HIGHLIGHTS&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
/* Note highlight — green tint */&lt;br /&gt;
.gra-note-highlight {&lt;br /&gt;
  background: rgba(52, 168, 83, 0.18);&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-note-highlight:hover,&lt;br /&gt;
.gra-note-highlight.gra-hl-active {&lt;br /&gt;
  background: rgba(52, 168, 83, 0.4);&lt;br /&gt;
  outline: 1.5px solid #34a853;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Bookmark highlight — blue underline */&lt;br /&gt;
.gra-bookmark-highlight {&lt;br /&gt;
  background: rgba(26, 115, 232, 0.12);&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  border-bottom: 1.5px solid #1a73e8;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-bookmark-highlight:hover { background: rgba(26, 115, 232, 0.22); }&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   7. PERSISTENT TOGGLE BUTTON&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
#gra-toggle {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  bottom: 78px;&lt;br /&gt;
  right: 20px;&lt;br /&gt;
  width: 48px;&lt;br /&gt;
  height: 48px;&lt;br /&gt;
  border-radius: 50%;&lt;br /&gt;
  background: #c0521a;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  z-index: 9998;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  box-shadow: 0 3px 12px rgba(0,0,0,0.22);&lt;br /&gt;
  transition: background 0.15s, transform 0.15s;&lt;br /&gt;
}&lt;br /&gt;
#gra-toggle:hover { background: #a0410e; transform: scale(1.07); }&lt;br /&gt;
#gra-toggle .gra-icon {&lt;br /&gt;
  width: 22px;&lt;br /&gt;
  height: 22px;&lt;br /&gt;
  filter: brightness(0) invert(1);&lt;br /&gt;
}&lt;br /&gt;
#gra-toggle-badge {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  top: -4px;&lt;br /&gt;
  right: -4px;&lt;br /&gt;
  background: #e53935;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-size: 10px;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  min-width: 16px;&lt;br /&gt;
  height: 16px;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 0 4px;&lt;br /&gt;
  line-height: 16px;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  display: none;&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  pointer-events: none;&lt;br /&gt;
}&lt;br /&gt;
#gra-panel.gra-panel-open ~ #gra-toggle {&lt;br /&gt;
  right: 356px;&lt;br /&gt;
  transition: right 0.28s cubic-bezier(0.4,0,0.2,1), background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   MOBILE BOTTOM ACTION BAR&lt;br /&gt;
   Slides up from bottom — avoids clashing with browser copy menu.&lt;br /&gt;
   Large tap targets (56px height buttons) with text labels.&lt;br /&gt;
   Only shown on mobile (JS sets _mobile flag).&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
#gra-mobile-bar {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  bottom: 0;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  right: 0;&lt;br /&gt;
  z-index: 10200;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  transform: translateY(100%);&lt;br /&gt;
  transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);&lt;br /&gt;
  pointer-events: none;&lt;br /&gt;
}&lt;br /&gt;
#gra-mobile-bar.gra-mobile-bar-visible {&lt;br /&gt;
  transform: translateY(0);&lt;br /&gt;
  pointer-events: auto;&lt;br /&gt;
}&lt;br /&gt;
#gra-mobile-bar-inner {&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  border-top: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 16px 16px 0 0;&lt;br /&gt;
  box-shadow: 0 -4px 20px rgba(0,0,0,0.18);&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: stretch;&lt;br /&gt;
  padding-bottom: env(safe-area-inset-bottom, 0px);&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-btn {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  gap: 5px;&lt;br /&gt;
  padding: 14px 8px;&lt;br /&gt;
  min-height: 72px;&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  border-right: 1px solid #f0f0f0;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  color: #444;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  -webkit-tap-highlight-color: rgba(0,0,0,0.06);&lt;br /&gt;
  transition: background 0.12s;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-btn:last-child { border-right: none; }&lt;br /&gt;
.gra-mob-btn:active { background: #f5f5f5; }&lt;br /&gt;
.gra-mob-btn .gra-icon { width: 24px; height: 24px; }&lt;br /&gt;
.gra-mob-label { font-size: 11px; line-height: 1.2; text-align: center; }&lt;br /&gt;
.gra-mob-dismiss { color: #999; }&lt;br /&gt;
.gra-mob-dismiss:active { background: #fff0f0; color: #e53935; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   8. RESPONSIVE&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
@media (max-width: 768px) {&lt;br /&gt;
  #gra-panel { width: 100vw; right: -100vw; }&lt;br /&gt;
  .gra-composer {&lt;br /&gt;
    width: calc(100vw - 32px) !important;&lt;br /&gt;
    max-width: 420px;&lt;br /&gt;
    /* Override centering for note/bookmark on mobile — keep centered */&lt;br /&gt;
    top: 50% !important;&lt;br /&gt;
    left: 50% !important;&lt;br /&gt;
    transform: translate(-50%, -50%) !important;&lt;br /&gt;
  }&lt;br /&gt;
  /* bm-composer already centered via its base CSS */&lt;br /&gt;
}&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   REPLACE the entire additions block at the bottom of&lt;br /&gt;
   MediaWiki:Gadget-GrAnnotations.css with this content.&lt;br /&gt;
&lt;br /&gt;
   FAB stack (right:20px desktop, right:16px mobile):&lt;br /&gt;
     22px   [📚] #se-docnav-btn   docs navigator&lt;br /&gt;
     78px   [↑]  #se-scrolltop    scroll to top&lt;br /&gt;
     134px  [✎]  #gra-toggle      notes panel   ← was wrongly 78px&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
&lt;br /&gt;
/* ── #gra-toggle: sits above both siteNav FABs ─────────────────── */&lt;br /&gt;
#gra-toggle {&lt;br /&gt;
  bottom: 78px !important;&lt;br /&gt;
  right: 20px !important;&lt;br /&gt;
}&lt;br /&gt;
#gra-panel.gra-panel-open ~ #gra-toggle {&lt;br /&gt;
  right: 356px !important;&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 768px) {&lt;br /&gt;
  #gra-toggle {&lt;br /&gt;
    bottom: 78px !important;&lt;br /&gt;
    right: 16px !important;&lt;br /&gt;
    width: 44px !important;&lt;br /&gt;
    height: 44px !important;&lt;br /&gt;
  }&lt;br /&gt;
  #gra-panel.gra-panel-open ~ #gra-toggle {&lt;br /&gt;
    right: calc(100vw + 4px) !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Mobile annotation bar above all Minerva overlays ──────────── */&lt;br /&gt;
#gra-mobile-bar {&lt;br /&gt;
  z-index: 99999 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── CSS custom property fallbacks ─────────────────────────────── */&lt;br /&gt;
/* readerToolbar.js writes these at runtime; these are initial values */&lt;br /&gt;
:root {&lt;br /&gt;
  --gr-header-height: 50px;&lt;br /&gt;
  --gr-bar-h: 48px;&lt;br /&gt;
  --gr-bar-top: 50px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Scroll-margin: TOC anchor links clear the fixed bar ────────── */&lt;br /&gt;
/* Vector: header + bar both fixed */&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h1[id],&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h2[id],&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h3[id],&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h4[id],&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h5[id],&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h6[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h1[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h2[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h3[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h4[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h5[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h6[id] {&lt;br /&gt;
  scroll-margin-top: calc(var(--gr-header-height) + var(--gr-bar-h) + 12px);&lt;br /&gt;
}&lt;br /&gt;
/* Minerva: only bar is fixed once header scrolls away */&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h1[id],&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h2[id],&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h3[id],&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h4[id],&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h5[id],&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h6[id] {&lt;br /&gt;
  scroll-margin-top: calc(var(--gr-bar-h) + 12px);&lt;br /&gt;
}&lt;br /&gt;
#mw-content-text .mw-parser-output &amp;gt; *:first-child {&lt;br /&gt;
  scroll-margin-top: calc(var(--gr-header-height) + var(--gr-bar-h) + 8px);&lt;br /&gt;
}&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output &amp;gt; *:first-child {&lt;br /&gt;
  scroll-margin-top: calc(var(--gr-bar-h) + 8px);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
/* Search icon in FAB using an inline SVG data-URI */&lt;br /&gt;
.gra-icon-search {&lt;br /&gt;
  background-image: url(&amp;quot;data:image/svg+xml,%3Csvg xmlns=&#039;http://www.w3.org/2000/svg&#039; viewBox=&#039;0 0 24 24&#039; fill=&#039;none&#039; stroke=&#039;%23ffffff&#039; stroke-width=&#039;2.2&#039; stroke-linecap=&#039;round&#039; stroke-linejoin=&#039;round&#039;%3E%3Ccircle cx=&#039;11&#039; cy=&#039;11&#039; r=&#039;7&#039;/%3E%3Cline x1=&#039;16.5&#039; y1=&#039;16.5&#039; x2=&#039;22&#039; y2=&#039;22&#039;/%3E%3C/svg%3E&amp;quot;) !important;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   MOBILE BOTTOM BAR — terracotta theme&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
#gra-mobile-bar-inner {&lt;br /&gt;
  background: #b5451b !important;&lt;br /&gt;
  border-top: none !important;&lt;br /&gt;
  border-radius: 16px 16px 0 0 !important;&lt;br /&gt;
  box-shadow: 0 -4px 20px rgba(181,69,27,0.35) !important;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
.gra-mob-btn {&lt;br /&gt;
  color: rgba(255,255,255,0.92) !important;&lt;br /&gt;
  border-right-color: rgba(255,255,255,0.18) !important;&lt;br /&gt;
  min-height: 76px !important;&lt;br /&gt;
  padding: 16px 8px !important;&lt;br /&gt;
  font-size: 12px !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-btn:active {&lt;br /&gt;
  background: rgba(0,0,0,0.12) !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-btn .gra-icon {&lt;br /&gt;
  width: 26px !important;&lt;br /&gt;
  height: 26px !important;&lt;br /&gt;
  filter: brightness(0) invert(1) !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-label {&lt;br /&gt;
  color: rgba(255,255,255,0.88) !important;&lt;br /&gt;
  font-size: 11px !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-dismiss {&lt;br /&gt;
  color: rgba(255,255,255,0.70) !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-dismiss .gra-mob-label {&lt;br /&gt;
  color: rgba(255,255,255,0.60) !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-dismiss span[style] {&lt;br /&gt;
  color: rgba(255,255,255,0.70) !important;&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 767px) {&lt;br /&gt;
&lt;br /&gt;
  /* Bottom sheet — pinned to bottom via inset, animated via transform */&lt;br /&gt;
  #gra-fb-composer.gra-composer,&lt;br /&gt;
  #gra-nt-composer.gra-composer,&lt;br /&gt;
  #gra-bm-composer.gra-bm-composer {&lt;br /&gt;
    position: fixed !important;&lt;br /&gt;
    inset: auto 0 0 0 !important;          /* top:auto right:0 bottom:0 left:0 */&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    max-width: 100% !important;&lt;br /&gt;
    margin: 0 !important;&lt;br /&gt;
    border-radius: 16px 16px 0 0 !important;&lt;br /&gt;
    box-shadow: 0 -4px 24px rgba(0,0,0,0.18) !important;&lt;br /&gt;
    padding: 20px 20px calc(20px + env(safe-area-inset-bottom)) !important;&lt;br /&gt;
    box-sizing: border-box !important;&lt;br /&gt;
    transform: translateY(100%) !important;&lt;br /&gt;
    transition: transform 0.28s cubic-bezier(0.32,0.72,0,1) !important;&lt;br /&gt;
    z-index: 10600 !important;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* Slide up when visible */&lt;br /&gt;
  #gra-fb-composer.gra-composer-visible,&lt;br /&gt;
  #gra-nt-composer.gra-composer-visible,&lt;br /&gt;
  #gra-bm-composer.gra-composer-visible {&lt;br /&gt;
    transform: translateY(0) !important;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* Grab handle */&lt;br /&gt;
  #gra-fb-composer::before,&lt;br /&gt;
  #gra-nt-composer::before,&lt;br /&gt;
  #gra-bm-composer::before {&lt;br /&gt;
    content: &amp;quot;&amp;quot;;&lt;br /&gt;
    display: block;&lt;br /&gt;
    width: 36px; height: 4px;&lt;br /&gt;
    border-radius: 2px;&lt;br /&gt;
    background: #d0d0d0;&lt;br /&gt;
    margin: -6px auto 14px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .gra-composer .gra-composer-input,&lt;br /&gt;
  .gra-bm-composer .gra-composer-input {&lt;br /&gt;
    font-size: 16px !important;   /* no iOS zoom on focus */&lt;br /&gt;
  }&lt;br /&gt;
  .gra-composer-actions { display: flex; gap: 10px; }&lt;br /&gt;
  .gra-composer-actions .gra-btn-submit,&lt;br /&gt;
  .gra-composer-actions .gra-btn-cancel { flex: 1; min-height: 44px; }&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 767px) {&lt;br /&gt;
  /* Docked toolbar below the reader header */&lt;br /&gt;
  #gra-fab.gra-fab-mobile-docked {&lt;br /&gt;
    position: fixed !important;&lt;br /&gt;
    top: var(--gr-toc-top, 99px) !important;  /* sits just below reader toolbar */&lt;br /&gt;
    left: 0 !important;&lt;br /&gt;
    right: 0 !important;&lt;br /&gt;
    height: 52px !important;&lt;br /&gt;
    flex-direction: row !important;&lt;br /&gt;
    align-items: center !important;&lt;br /&gt;
    justify-content: space-around !important;&lt;br /&gt;
    border-radius: 0 !important;&lt;br /&gt;
    box-shadow: 0 2px 8px rgba(0,0,0,0.15) !important;&lt;br /&gt;
    z-index: 2147483646 !important;       /* below native menu, above content */&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #gra-fab.gra-fab-mobile-docked .gra-fab-btn {&lt;br /&gt;
    flex: 1;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    height: 44px;&lt;br /&gt;
    background: transparent !important;&lt;br /&gt;
    touch-action: manipulation;&lt;br /&gt;
    -webkit-tap-highlight-color: transparent;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #gra-fab.gra-fab-mobile-docked .gra-fab-btn-label {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-size: 10px;&lt;br /&gt;
    margin-top: 2px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Gadget-GrAnnotations.css&amp;diff=6181</id>
		<title>MediaWiki:Gadget-GrAnnotations.css</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Gadget-GrAnnotations.css&amp;diff=6181"/>
		<updated>2026-06-10T19:43:19Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/*&lt;br /&gt;
 * gr_annotations.css  —  grantha.io inline Notes + Bookmarks + Feedback  (v3)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* ── Icon base ──────────────────────────────────────────────────── */&lt;br /&gt;
.gra-icon {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  width:  20px;&lt;br /&gt;
  height: 20px;&lt;br /&gt;
  background-size: contain;&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  background-position: center;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
/* comment.svg → Feedback (flag/report)  */&lt;br /&gt;
.gra-icon-feedback { background-image: url(&#039;/images/feedback.svg&#039;); }&lt;br /&gt;
/* notes.svg   → Notes                  */&lt;br /&gt;
.gra-icon-note     { background-image: url(&#039;/images/notes.svg&#039;); }&lt;br /&gt;
.gra-icon-bookmark { background-image: url(&#039;/images/bookmark.svg&#039;); }&lt;br /&gt;
.gra-icon-copy     { background-image: url(&#039;/images/copy.svg&#039;); }&lt;br /&gt;
.gra-icon-search { background-image: url(&#039;/images/search.svg&#039;); }&lt;br /&gt;
.gra-icon-dismiss { background-image: url(&#039;/images/close.svg&#039;); }&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   1. FLOATING ACTION STRIP  (desktop only)&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
#gra-fab {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  z-index: 10200;&lt;br /&gt;
  display: none;&lt;br /&gt;
  flex-direction: row;&lt;br /&gt;
  background: #B14A2E !important;&lt;br /&gt;
    border: none !important;&lt;br /&gt;
    border-radius: 12px !important;&lt;br /&gt;
    padding: 5px 4px !important;&lt;br /&gt;
    box-shadow: 0 3px 14px rgba(0, 0, 0, 0.08) !important;&lt;br /&gt;
    gap: 20px !important;&lt;br /&gt;
}&lt;br /&gt;
#gra-fab.gra-fab-visible { display: flex; }&lt;br /&gt;
&lt;br /&gt;
.gra-fab-btn {&lt;br /&gt;
  height: 48px;&lt;br /&gt;
  width: 48px;&lt;br /&gt;
  border: none;&lt;br /&gt;
  background: transparent;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  position: relative;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.gra-fab-btn-label {&lt;br /&gt;
 font-family: &#039;Noto Sans Devanagari&#039;;&lt;br /&gt;
font-weight: 400;&lt;br /&gt;
font-size: 10px;&lt;br /&gt;
line-height: 100%;&lt;br /&gt;
letter-spacing: 0%;&lt;br /&gt;
color: #ffffff;&lt;br /&gt;
padding: 5px 0;&lt;br /&gt;
}&lt;br /&gt;
.gra-fab-btn:hover { &lt;br /&gt;
background: rgba(255, 255, 255, 0.12) !important; border-radius: 12px;&lt;br /&gt;
}&lt;br /&gt;
.gra-fab-btn:hover .gra-fab-tooltip { opacity: 1; transform: translateX(0) translateY(-50%); }&lt;br /&gt;
&lt;br /&gt;
.gra-fab-tooltip {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  right: calc(100% + 8px);&lt;br /&gt;
  top: 50%;&lt;br /&gt;
  transform: translateX(4px) translateY(-50%);&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  background: rgba(30,30,30,0.82);&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  padding: 3px 9px;&lt;br /&gt;
  border-radius: 999px;&lt;br /&gt;
  pointer-events: none;&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
  transition: opacity 0.18s, transform 0.18s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   2. RIGHT PANEL&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
#gra-panel {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  right: -360px;&lt;br /&gt;
  width: 340px;&lt;br /&gt;
  height: 100vh;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  box-shadow: -3px 0 20px rgba(0,0,0,0.15);&lt;br /&gt;
  z-index: 10100;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  transition: right 0.28s cubic-bezier(0.4,0,0.2,1);&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
}&lt;br /&gt;
#gra-panel.gra-panel-open { right: 0; }&lt;br /&gt;
&lt;br /&gt;
#gra-backdrop {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  inset: 0;&lt;br /&gt;
  background: rgba(0,0,0,0.18);&lt;br /&gt;
  z-index: 10099;&lt;br /&gt;
  display: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
#gra-backdrop.gra-backdrop-visible { display: block; }&lt;br /&gt;
&lt;br /&gt;
#gra-panel-head {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: space-between;&lt;br /&gt;
  padding: 14px 16px 0;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
#gra-panel-close {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  font-size: 18px;&lt;br /&gt;
  color: #666;&lt;br /&gt;
  padding: 2px 6px;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
#gra-panel-close:hover { background: #f5f5f5; color: #222; }&lt;br /&gt;
&lt;br /&gt;
#gra-tabs {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  border-bottom: 2px solid #f0f0f0;&lt;br /&gt;
  margin: 10px 16px 0;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
.gra-tab {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  padding: 8px 4px;&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  font-family: inherit;&lt;br /&gt;
  color: #777;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  border-bottom: 2px solid transparent;&lt;br /&gt;
  margin-bottom: -2px;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  gap: 6px;&lt;br /&gt;
  transition: color 0.15s, border-color 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-tab .gra-icon { width: 16px; height: 16px; opacity: 0.5; }&lt;br /&gt;
.gra-tab:hover { color: #333; }&lt;br /&gt;
.gra-tab.gra-tab-active { color: #1a73e8; border-bottom-color: #1a73e8; }&lt;br /&gt;
.gra-tab.gra-tab-active .gra-icon {&lt;br /&gt;
  opacity: 1;&lt;br /&gt;
  filter: invert(30%) sepia(100%) saturate(500%) hue-rotate(190deg);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#gra-panel-body {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  overflow-y: auto;&lt;br /&gt;
  padding: 12px 16px 16px;&lt;br /&gt;
}&lt;br /&gt;
.gra-pane { display: none; }&lt;br /&gt;
.gra-pane.gra-pane-active { display: block; }&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   3. FEEDBACK COMPOSER  — centered modal&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
.gra-composer {&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 12px;&lt;br /&gt;
  box-shadow: 0 8px 40px rgba(0,0,0,0.22);&lt;br /&gt;
  width: 420px;&lt;br /&gt;
  max-width: calc(100vw - 32px);&lt;br /&gt;
  padding: 20px 24px 16px;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  /* Centered on screen */&lt;br /&gt;
  top: 50% !important;&lt;br /&gt;
  left: 50% !important;&lt;br /&gt;
  transform: translate(-50%, -50%) !important;&lt;br /&gt;
  z-index: 10150;&lt;br /&gt;
  display: none;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  gap: 12px;&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
}&lt;br /&gt;
.gra-composer.gra-composer-visible { display: flex; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Feedback composer header row */&lt;br /&gt;
.gra-composer-header {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 8px;&lt;br /&gt;
}&lt;br /&gt;
.gra-composer-header strong {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
  color: #1C1A17;&lt;br /&gt;
  font-size: 16px; &lt;br /&gt;
  font-family: &amp;quot;Noto Sans Devanagari&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
.gra-btn-x {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  font-size: 16px;&lt;br /&gt;
  color: #666;&lt;br /&gt;
  padding: 2px 5px;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
.gra-btn-x:hover { background: #f5f5f5; color: #222; }&lt;br /&gt;
&lt;br /&gt;
/* Feedback field labels */&lt;br /&gt;
.gra-fb-field-label {&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
  color: #5f6368;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  letter-spacing: 0.4px;&lt;br /&gt;
  margin-bottom: -6px;   /* tighten gap to input below */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Selected text quote preview */&lt;br /&gt;
.gra-fb-quote-label {&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  color: #9aa0a6;&lt;br /&gt;
  margin-bottom: -4px;&lt;br /&gt;
}&lt;br /&gt;
.gra-fb-quote {&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #5f6368;&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  background: #fafafa;&lt;br /&gt;
  border-left: 3px solid #fbbc04;&lt;br /&gt;
  border-radius: 0 4px 4px 0;&lt;br /&gt;
  padding: 6px 10px;&lt;br /&gt;
  line-height: 1.45;&lt;br /&gt;
  max-height: 56px;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  display: -webkit-box;&lt;br /&gt;
  -webkit-line-clamp: 3;&lt;br /&gt;
  -webkit-box-orient: vertical;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Issue type dropdown */&lt;br /&gt;
.gra-fb-select {&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  padding: 7px 10px;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  font-family: inherit;&lt;br /&gt;
  color: #202124;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  outline: none;&lt;br /&gt;
  transition: border-color 0.15s;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
.gra-fb-select:focus { border-color: #1a73e8; }&lt;br /&gt;
&lt;br /&gt;
/* Email input */&lt;br /&gt;
.gra-fb-email-input {&lt;br /&gt;
  min-height: unset !important;&lt;br /&gt;
  height: 36px;&lt;br /&gt;
  padding: 6px 10px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Status message */&lt;br /&gt;
.gra-fb-status {&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  min-height: 16px;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
.gra-fb-status.gra-fb-ok  { color: #34a853; }&lt;br /&gt;
.gra-fb-status.gra-fb-err { color: #ea4335; }&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   4. NOTE COMPOSER  (local only)&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
.gra-composer-user {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 10px;&lt;br /&gt;
}&lt;br /&gt;
.gra-avatar {&lt;br /&gt;
  width: 32px;&lt;br /&gt;
  height: 32px;&lt;br /&gt;
  border-radius: 50%;&lt;br /&gt;
  background: #1a73e8;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
.gra-composer-uname { font-weight: 600; color: #202124; font-size: 13px; }&lt;br /&gt;
&lt;br /&gt;
.gra-composer-input {&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  padding: 8px 10px;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  font-family: inherit;&lt;br /&gt;
  resize: none;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
  min-height: 56px;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
  color: #202124;&lt;br /&gt;
  outline: none;&lt;br /&gt;
  transition: border-color 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-composer-input::placeholder { color: #aaa; }&lt;br /&gt;
.gra-composer-input:focus { border-color: #B14A2E; }&lt;br /&gt;
&lt;br /&gt;
.gra-composer-actions {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: flex-end;&lt;br /&gt;
  gap: 8px;&lt;br /&gt;
}&lt;br /&gt;
.gra-btn-cancel {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  color: #5f6368;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  font-family:&amp;quot;Noto Sans Devanagari&amp;quot;;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  padding: 8px 12px;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
}&lt;br /&gt;
.gra-btn-cancel:hover { background: #f5f5f5; }&lt;br /&gt;
.gra-btn-submit {&lt;br /&gt;
  background: transparent;&lt;br /&gt;
  color: #B14A2E;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  font-family:&amp;quot;Noto Sans Devanagari&amp;quot;;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  padding: 8px 12px;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  gap: 8px;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-btn-submit:hover { color: #8A351F; }&lt;br /&gt;
.gra-btn-submit:disabled { opacity: 0.4;&lt;br /&gt;
  cursor: not-allowed; }&lt;br /&gt;
&lt;br /&gt;
/* ── Note cards ── */&lt;br /&gt;
.gra-note-card {&lt;br /&gt;
  border: 1px solid #e8eaed;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 10px 12px;&lt;br /&gt;
  margin-bottom: 10px;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  box-shadow: 0 1px 3px rgba(0,0,0,0.07);&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: box-shadow 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-note-card:hover { box-shadow: 0 2px 8px rgba(0,0,0,0.12); }&lt;br /&gt;
.gra-note-card.gra-card-active {&lt;br /&gt;
  border-color: #34a853;&lt;br /&gt;
  box-shadow: 0 0 0 2px rgba(52,168,83,0.25);&lt;br /&gt;
}&lt;br /&gt;
.gra-card-header {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 8px;&lt;br /&gt;
  margin-bottom: 6px;&lt;br /&gt;
}&lt;br /&gt;
.gra-card-meta { flex: 1; }&lt;br /&gt;
.gra-card-ts { font-size: 11px; color: #80868b; }&lt;br /&gt;
.gra-card-quote {&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #5f6368;&lt;br /&gt;
  border-left: 3px solid #34a853;&lt;br /&gt;
  padding-left: 8px;&lt;br /&gt;
  margin-bottom: 6px;&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  line-height: 1.4;&lt;br /&gt;
  display: -webkit-box;&lt;br /&gt;
  -webkit-line-clamp: 2;&lt;br /&gt;
  -webkit-box-orient: vertical;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
}&lt;br /&gt;
.gra-card-text { font-size: 13px; color: #202124; line-height: 1.5; }&lt;br /&gt;
&lt;br /&gt;
.gra-note-del {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  color: #ccc;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  padding: 0 2px;&lt;br /&gt;
  line-height: 1;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
  margin-left: auto;&lt;br /&gt;
}&lt;br /&gt;
.gra-note-del:hover { color: #e53935; }&lt;br /&gt;
&lt;br /&gt;
.gra-empty-state {&lt;br /&gt;
  color: #9aa0a6;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  padding: 32px 16px;&lt;br /&gt;
  line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   5. BOOKMARK CARDS + COMPOSER&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
.gra-bookmark-card {&lt;br /&gt;
  border: 1px solid #e8eaed;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 10px 12px;&lt;br /&gt;
  margin-bottom: 10px;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  box-shadow: 0 1px 3px rgba(0,0,0,0.07);&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: flex-start;&lt;br /&gt;
  gap: 10px;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: box-shadow 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-bookmark-card:hover { box-shadow: 0 2px 8px rgba(0,0,0,0.12); }&lt;br /&gt;
.gra-bookmark-card .gra-icon { margin-top: 2px; flex-shrink: 0; }&lt;br /&gt;
.gra-bookmark-info { flex: 1; min-width: 0; }&lt;br /&gt;
.gra-bookmark-name {&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
  color: #202124;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  text-overflow: ellipsis;&lt;br /&gt;
}&lt;br /&gt;
.gra-bookmark-quote {&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  color: #80868b;&lt;br /&gt;
  margin-top: 2px;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  text-overflow: ellipsis;&lt;br /&gt;
}&lt;br /&gt;
.gra-bookmark-del {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  color: #ccc;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  padding: 0 2px;&lt;br /&gt;
  line-height: 1;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
.gra-bookmark-del:hover { color: #e53935; }&lt;br /&gt;
&lt;br /&gt;
.gra-bm-composer {&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 12px;&lt;br /&gt;
  box-shadow: 0 8px 40px rgba(0,0,0,0.22);&lt;br /&gt;
  width: 420px;&lt;br /&gt;
  max-width: calc(100vw - 32px);&lt;br /&gt;
  padding: 20px 24px 16px;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  /* Centered on screen — same as feedback composer */&lt;br /&gt;
  top: 50% !important;&lt;br /&gt;
  left: 50% !important;&lt;br /&gt;
  transform: translate(-50%, -50%) !important;&lt;br /&gt;
  z-index: 10150;&lt;br /&gt;
  display: none;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  gap: 10px;&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
}&lt;br /&gt;
.gra-bm-composer.gra-composer-visible { display: flex; }&lt;br /&gt;
.gra-bm-composer-label {&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
  color: #1C1A17;&lt;br /&gt;
  font-size: 16px;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 8px;&lt;br /&gt;
  font-family: &amp;quot;Noto Sans Devanagari&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
.gra-bm-composer-label .gra-icon, .gra-composer-header .gra-icon {&lt;br /&gt;
margin-top: -3px;&lt;br /&gt;
filter: brightness(0) saturate(100%) invert(7%) sepia(8%) saturate(894%) hue-rotate(357deg) brightness(97%) contrast(92%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   6. ANCHOR HIGHLIGHTS&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
/* Note highlight — green tint */&lt;br /&gt;
.gra-note-highlight {&lt;br /&gt;
  background: rgba(52, 168, 83, 0.18);&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-note-highlight:hover,&lt;br /&gt;
.gra-note-highlight.gra-hl-active {&lt;br /&gt;
  background: rgba(52, 168, 83, 0.4);&lt;br /&gt;
  outline: 1.5px solid #34a853;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Bookmark highlight — blue underline */&lt;br /&gt;
.gra-bookmark-highlight {&lt;br /&gt;
  background: rgba(26, 115, 232, 0.12);&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  border-bottom: 1.5px solid #1a73e8;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-bookmark-highlight:hover { background: rgba(26, 115, 232, 0.22); }&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   7. PERSISTENT TOGGLE BUTTON&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
#gra-toggle {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  bottom: 78px;&lt;br /&gt;
  right: 20px;&lt;br /&gt;
  width: 48px;&lt;br /&gt;
  height: 48px;&lt;br /&gt;
  border-radius: 50%;&lt;br /&gt;
  background: #c0521a;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  z-index: 9998;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  box-shadow: 0 3px 12px rgba(0,0,0,0.22);&lt;br /&gt;
  transition: background 0.15s, transform 0.15s;&lt;br /&gt;
}&lt;br /&gt;
#gra-toggle:hover { background: #a0410e; transform: scale(1.07); }&lt;br /&gt;
#gra-toggle .gra-icon {&lt;br /&gt;
  width: 22px;&lt;br /&gt;
  height: 22px;&lt;br /&gt;
  filter: brightness(0) invert(1);&lt;br /&gt;
}&lt;br /&gt;
#gra-toggle-badge {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  top: -4px;&lt;br /&gt;
  right: -4px;&lt;br /&gt;
  background: #e53935;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-size: 10px;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  min-width: 16px;&lt;br /&gt;
  height: 16px;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 0 4px;&lt;br /&gt;
  line-height: 16px;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  display: none;&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  pointer-events: none;&lt;br /&gt;
}&lt;br /&gt;
#gra-panel.gra-panel-open ~ #gra-toggle {&lt;br /&gt;
  right: 356px;&lt;br /&gt;
  transition: right 0.28s cubic-bezier(0.4,0,0.2,1), background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   MOBILE BOTTOM ACTION BAR&lt;br /&gt;
   Slides up from bottom — avoids clashing with browser copy menu.&lt;br /&gt;
   Large tap targets (56px height buttons) with text labels.&lt;br /&gt;
   Only shown on mobile (JS sets _mobile flag).&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
#gra-mobile-bar {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  bottom: 0;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  right: 0;&lt;br /&gt;
  z-index: 10200;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  transform: translateY(100%);&lt;br /&gt;
  transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);&lt;br /&gt;
  pointer-events: none;&lt;br /&gt;
}&lt;br /&gt;
#gra-mobile-bar.gra-mobile-bar-visible {&lt;br /&gt;
  transform: translateY(0);&lt;br /&gt;
  pointer-events: auto;&lt;br /&gt;
}&lt;br /&gt;
#gra-mobile-bar-inner {&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  border-top: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 16px 16px 0 0;&lt;br /&gt;
  box-shadow: 0 -4px 20px rgba(0,0,0,0.18);&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: stretch;&lt;br /&gt;
  padding-bottom: env(safe-area-inset-bottom, 0px);&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-btn {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  gap: 5px;&lt;br /&gt;
  padding: 14px 8px;&lt;br /&gt;
  min-height: 72px;&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  border-right: 1px solid #f0f0f0;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  color: #444;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  -webkit-tap-highlight-color: rgba(0,0,0,0.06);&lt;br /&gt;
  transition: background 0.12s;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-btn:last-child { border-right: none; }&lt;br /&gt;
.gra-mob-btn:active { background: #f5f5f5; }&lt;br /&gt;
.gra-mob-btn .gra-icon { width: 24px; height: 24px; }&lt;br /&gt;
.gra-mob-label { font-size: 11px; line-height: 1.2; text-align: center; }&lt;br /&gt;
.gra-mob-dismiss { color: #999; }&lt;br /&gt;
.gra-mob-dismiss:active { background: #fff0f0; color: #e53935; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   8. RESPONSIVE&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
@media (max-width: 768px) {&lt;br /&gt;
  #gra-panel { width: 100vw; right: -100vw; }&lt;br /&gt;
  .gra-composer {&lt;br /&gt;
    width: calc(100vw - 32px) !important;&lt;br /&gt;
    max-width: 420px;&lt;br /&gt;
    /* Override centering for note/bookmark on mobile — keep centered */&lt;br /&gt;
    top: 50% !important;&lt;br /&gt;
    left: 50% !important;&lt;br /&gt;
    transform: translate(-50%, -50%) !important;&lt;br /&gt;
  }&lt;br /&gt;
  /* bm-composer already centered via its base CSS */&lt;br /&gt;
}&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   REPLACE the entire additions block at the bottom of&lt;br /&gt;
   MediaWiki:Gadget-GrAnnotations.css with this content.&lt;br /&gt;
&lt;br /&gt;
   FAB stack (right:20px desktop, right:16px mobile):&lt;br /&gt;
     22px   [📚] #se-docnav-btn   docs navigator&lt;br /&gt;
     78px   [↑]  #se-scrolltop    scroll to top&lt;br /&gt;
     134px  [✎]  #gra-toggle      notes panel   ← was wrongly 78px&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
&lt;br /&gt;
/* ── #gra-toggle: sits above both siteNav FABs ─────────────────── */&lt;br /&gt;
#gra-toggle {&lt;br /&gt;
  bottom: 78px !important;&lt;br /&gt;
  right: 20px !important;&lt;br /&gt;
}&lt;br /&gt;
#gra-panel.gra-panel-open ~ #gra-toggle {&lt;br /&gt;
  right: 356px !important;&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 768px) {&lt;br /&gt;
  #gra-toggle {&lt;br /&gt;
    bottom: 78px !important;&lt;br /&gt;
    right: 16px !important;&lt;br /&gt;
    width: 44px !important;&lt;br /&gt;
    height: 44px !important;&lt;br /&gt;
  }&lt;br /&gt;
  #gra-panel.gra-panel-open ~ #gra-toggle {&lt;br /&gt;
    right: calc(100vw + 4px) !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Mobile annotation bar above all Minerva overlays ──────────── */&lt;br /&gt;
#gra-mobile-bar {&lt;br /&gt;
  z-index: 99999 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── CSS custom property fallbacks ─────────────────────────────── */&lt;br /&gt;
/* readerToolbar.js writes these at runtime; these are initial values */&lt;br /&gt;
:root {&lt;br /&gt;
  --gr-header-height: 50px;&lt;br /&gt;
  --gr-bar-h: 48px;&lt;br /&gt;
  --gr-bar-top: 50px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Scroll-margin: TOC anchor links clear the fixed bar ────────── */&lt;br /&gt;
/* Vector: header + bar both fixed */&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h1[id],&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h2[id],&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h3[id],&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h4[id],&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h5[id],&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h6[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h1[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h2[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h3[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h4[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h5[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h6[id] {&lt;br /&gt;
  scroll-margin-top: calc(var(--gr-header-height) + var(--gr-bar-h) + 12px);&lt;br /&gt;
}&lt;br /&gt;
/* Minerva: only bar is fixed once header scrolls away */&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h1[id],&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h2[id],&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h3[id],&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h4[id],&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h5[id],&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h6[id] {&lt;br /&gt;
  scroll-margin-top: calc(var(--gr-bar-h) + 12px);&lt;br /&gt;
}&lt;br /&gt;
#mw-content-text .mw-parser-output &amp;gt; *:first-child {&lt;br /&gt;
  scroll-margin-top: calc(var(--gr-header-height) + var(--gr-bar-h) + 8px);&lt;br /&gt;
}&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output &amp;gt; *:first-child {&lt;br /&gt;
  scroll-margin-top: calc(var(--gr-bar-h) + 8px);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
/* Search icon in FAB using an inline SVG data-URI */&lt;br /&gt;
.gra-icon-search {&lt;br /&gt;
  background-image: url(&amp;quot;data:image/svg+xml,%3Csvg xmlns=&#039;http://www.w3.org/2000/svg&#039; viewBox=&#039;0 0 24 24&#039; fill=&#039;none&#039; stroke=&#039;%23ffffff&#039; stroke-width=&#039;2.2&#039; stroke-linecap=&#039;round&#039; stroke-linejoin=&#039;round&#039;%3E%3Ccircle cx=&#039;11&#039; cy=&#039;11&#039; r=&#039;7&#039;/%3E%3Cline x1=&#039;16.5&#039; y1=&#039;16.5&#039; x2=&#039;22&#039; y2=&#039;22&#039;/%3E%3C/svg%3E&amp;quot;) !important;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   MOBILE BOTTOM BAR — terracotta theme&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
#gra-mobile-bar-inner {&lt;br /&gt;
  background: #b5451b !important;&lt;br /&gt;
  border-top: none !important;&lt;br /&gt;
  border-radius: 16px 16px 0 0 !important;&lt;br /&gt;
  box-shadow: 0 -4px 20px rgba(181,69,27,0.35) !important;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
.gra-mob-btn {&lt;br /&gt;
  color: rgba(255,255,255,0.92) !important;&lt;br /&gt;
  border-right-color: rgba(255,255,255,0.18) !important;&lt;br /&gt;
  min-height: 76px !important;&lt;br /&gt;
  padding: 16px 8px !important;&lt;br /&gt;
  font-size: 12px !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-btn:active {&lt;br /&gt;
  background: rgba(0,0,0,0.12) !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-btn .gra-icon {&lt;br /&gt;
  width: 26px !important;&lt;br /&gt;
  height: 26px !important;&lt;br /&gt;
  filter: brightness(0) invert(1) !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-label {&lt;br /&gt;
  color: rgba(255,255,255,0.88) !important;&lt;br /&gt;
  font-size: 11px !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-dismiss {&lt;br /&gt;
  color: rgba(255,255,255,0.70) !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-dismiss .gra-mob-label {&lt;br /&gt;
  color: rgba(255,255,255,0.60) !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-dismiss span[style] {&lt;br /&gt;
  color: rgba(255,255,255,0.70) !important;&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 767px) {&lt;br /&gt;
&lt;br /&gt;
  /* Bottom sheet — pinned to bottom via inset, animated via transform */&lt;br /&gt;
  #gra-fb-composer.gra-composer,&lt;br /&gt;
  #gra-nt-composer.gra-composer,&lt;br /&gt;
  #gra-bm-composer.gra-bm-composer {&lt;br /&gt;
    position: fixed !important;&lt;br /&gt;
    inset: auto 0 0 0 !important;          /* top:auto right:0 bottom:0 left:0 */&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    max-width: 100% !important;&lt;br /&gt;
    margin: 0 !important;&lt;br /&gt;
    border-radius: 16px 16px 0 0 !important;&lt;br /&gt;
    box-shadow: 0 -4px 24px rgba(0,0,0,0.18) !important;&lt;br /&gt;
    padding: 20px 20px calc(20px + env(safe-area-inset-bottom)) !important;&lt;br /&gt;
    box-sizing: border-box !important;&lt;br /&gt;
    transform: translateY(100%) !important;&lt;br /&gt;
    transition: transform 0.28s cubic-bezier(0.32,0.72,0,1) !important;&lt;br /&gt;
    z-index: 10600 !important;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* Slide up when visible */&lt;br /&gt;
  #gra-fb-composer.gra-composer-visible,&lt;br /&gt;
  #gra-nt-composer.gra-composer-visible,&lt;br /&gt;
  #gra-bm-composer.gra-composer-visible {&lt;br /&gt;
    transform: translateY(0) !important;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* Grab handle */&lt;br /&gt;
  #gra-fb-composer::before,&lt;br /&gt;
  #gra-nt-composer::before,&lt;br /&gt;
  #gra-bm-composer::before {&lt;br /&gt;
    content: &amp;quot;&amp;quot;;&lt;br /&gt;
    display: block;&lt;br /&gt;
    width: 36px; height: 4px;&lt;br /&gt;
    border-radius: 2px;&lt;br /&gt;
    background: #d0d0d0;&lt;br /&gt;
    margin: -6px auto 14px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .gra-composer .gra-composer-input,&lt;br /&gt;
  .gra-bm-composer .gra-composer-input {&lt;br /&gt;
    font-size: 16px !important;   /* no iOS zoom on focus */&lt;br /&gt;
  }&lt;br /&gt;
  .gra-composer-actions { display: flex; gap: 10px; }&lt;br /&gt;
  .gra-composer-actions .gra-btn-submit,&lt;br /&gt;
  .gra-composer-actions .gra-btn-cancel { flex: 1; min-height: 44px; }&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 767px) {&lt;br /&gt;
  /* Docked toolbar below the reader header */&lt;br /&gt;
  #gra-fab.gra-fab-mobile-docked {&lt;br /&gt;
    position: fixed !important;&lt;br /&gt;
    top: var(--gr-toc-top, 99px) !important;  /* sits just below reader toolbar */&lt;br /&gt;
    left: 0 !important;&lt;br /&gt;
    right: 0 !important;&lt;br /&gt;
    height: 52px !important;&lt;br /&gt;
    flex-direction: row !important;&lt;br /&gt;
    align-items: center !important;&lt;br /&gt;
    justify-content: space-around !important;&lt;br /&gt;
    border-radius: 0 !important;&lt;br /&gt;
    box-shadow: 0 2px 8px rgba(0,0,0,0.15) !important;&lt;br /&gt;
    z-index: 2147483646 !important;       /* below native menu, above content */&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #gra-fab.gra-fab-mobile-docked .gra-fab-btn {&lt;br /&gt;
    flex: 1;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    height: 44px;&lt;br /&gt;
    background: transparent !important;&lt;br /&gt;
    touch-action: manipulation;&lt;br /&gt;
    -webkit-tap-highlight-color: transparent;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #gra-fab.gra-fab-mobile-docked .gra-fab-btn-label {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-size: 10px;&lt;br /&gt;
    margin-top: 2px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
	<entry>
		<id>https://dev.anandamakaranda.in/index.php?title=MediaWiki:Gadget-GrAnnotations.css&amp;diff=6180</id>
		<title>MediaWiki:Gadget-GrAnnotations.css</title>
		<link rel="alternate" type="text/html" href="https://dev.anandamakaranda.in/index.php?title=MediaWiki:Gadget-GrAnnotations.css&amp;diff=6180"/>
		<updated>2026-06-10T19:36:58Z</updated>

		<summary type="html">&lt;p&gt;Vaishnavi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/*&lt;br /&gt;
 * gr_annotations.css  —  grantha.io inline Notes + Bookmarks + Feedback  (v3)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* ── Icon base ──────────────────────────────────────────────────── */&lt;br /&gt;
.gra-icon {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  width:  20px;&lt;br /&gt;
  height: 20px;&lt;br /&gt;
  background-size: contain;&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  background-position: center;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
/* comment.svg → Feedback (flag/report)  */&lt;br /&gt;
.gra-icon-feedback { background-image: url(&#039;/images/feedback.svg&#039;); }&lt;br /&gt;
/* notes.svg   → Notes                  */&lt;br /&gt;
.gra-icon-note     { background-image: url(&#039;/images/notes.svg&#039;); }&lt;br /&gt;
.gra-icon-bookmark { background-image: url(&#039;/images/bookmark.svg&#039;); }&lt;br /&gt;
.gra-icon-copy     { background-image: url(&#039;/images/copy.svg&#039;); }&lt;br /&gt;
.gra-icon-search { background-image: url(&#039;/images/search.svg&#039;); }&lt;br /&gt;
.gra-icon-dismiss { background-image: url(&#039;/images/close.svg&#039;); }&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   1. FLOATING ACTION STRIP  (desktop only)&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
#gra-fab {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  z-index: 10200;&lt;br /&gt;
  display: none;&lt;br /&gt;
  flex-direction: row;&lt;br /&gt;
  background: #B14A2E !important;&lt;br /&gt;
    border: none !important;&lt;br /&gt;
    border-radius: 12px !important;&lt;br /&gt;
    padding: 5px 4px !important;&lt;br /&gt;
    box-shadow: 0 3px 14px rgba(0, 0, 0, 0.08) !important;&lt;br /&gt;
    gap: 20px !important;&lt;br /&gt;
}&lt;br /&gt;
#gra-fab.gra-fab-visible { display: flex; }&lt;br /&gt;
&lt;br /&gt;
.gra-fab-btn {&lt;br /&gt;
  height: 48px;&lt;br /&gt;
  width: 48px;&lt;br /&gt;
  border: none;&lt;br /&gt;
  background: transparent;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  position: relative;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.gra-fab-btn-label {&lt;br /&gt;
 font-family: &#039;Noto Sans Devanagari&#039;;&lt;br /&gt;
font-weight: 400;&lt;br /&gt;
font-size: 10px;&lt;br /&gt;
line-height: 100%;&lt;br /&gt;
letter-spacing: 0%;&lt;br /&gt;
color: #ffffff;&lt;br /&gt;
padding: 5px 0;&lt;br /&gt;
}&lt;br /&gt;
.gra-fab-btn:hover { &lt;br /&gt;
background: rgba(255, 255, 255, 0.12) !important; border-radius: 12px;&lt;br /&gt;
}&lt;br /&gt;
.gra-fab-btn:hover .gra-fab-tooltip { opacity: 1; transform: translateX(0) translateY(-50%); }&lt;br /&gt;
&lt;br /&gt;
.gra-fab-tooltip {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  right: calc(100% + 8px);&lt;br /&gt;
  top: 50%;&lt;br /&gt;
  transform: translateX(4px) translateY(-50%);&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  background: rgba(30,30,30,0.82);&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  padding: 3px 9px;&lt;br /&gt;
  border-radius: 999px;&lt;br /&gt;
  pointer-events: none;&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
  transition: opacity 0.18s, transform 0.18s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   2. RIGHT PANEL&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
#gra-panel {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  right: -360px;&lt;br /&gt;
  width: 340px;&lt;br /&gt;
  height: 100vh;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  box-shadow: -3px 0 20px rgba(0,0,0,0.15);&lt;br /&gt;
  z-index: 10100;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  transition: right 0.28s cubic-bezier(0.4,0,0.2,1);&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
}&lt;br /&gt;
#gra-panel.gra-panel-open { right: 0; }&lt;br /&gt;
&lt;br /&gt;
#gra-backdrop {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  inset: 0;&lt;br /&gt;
  background: rgba(0,0,0,0.18);&lt;br /&gt;
  z-index: 10099;&lt;br /&gt;
  display: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
#gra-backdrop.gra-backdrop-visible { display: block; }&lt;br /&gt;
&lt;br /&gt;
#gra-panel-head {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: space-between;&lt;br /&gt;
  padding: 14px 16px 0;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
#gra-panel-close {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  font-size: 18px;&lt;br /&gt;
  color: #666;&lt;br /&gt;
  padding: 2px 6px;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
#gra-panel-close:hover { background: #f5f5f5; color: #222; }&lt;br /&gt;
&lt;br /&gt;
#gra-tabs {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  border-bottom: 2px solid #f0f0f0;&lt;br /&gt;
  margin: 10px 16px 0;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
.gra-tab {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  padding: 8px 4px;&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  font-family: inherit;&lt;br /&gt;
  color: #777;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  border-bottom: 2px solid transparent;&lt;br /&gt;
  margin-bottom: -2px;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  gap: 6px;&lt;br /&gt;
  transition: color 0.15s, border-color 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-tab .gra-icon { width: 16px; height: 16px; opacity: 0.5; }&lt;br /&gt;
.gra-tab:hover { color: #333; }&lt;br /&gt;
.gra-tab.gra-tab-active { color: #1a73e8; border-bottom-color: #1a73e8; }&lt;br /&gt;
.gra-tab.gra-tab-active .gra-icon {&lt;br /&gt;
  opacity: 1;&lt;br /&gt;
  filter: invert(30%) sepia(100%) saturate(500%) hue-rotate(190deg);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#gra-panel-body {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  overflow-y: auto;&lt;br /&gt;
  padding: 12px 16px 16px;&lt;br /&gt;
}&lt;br /&gt;
.gra-pane { display: none; }&lt;br /&gt;
.gra-pane.gra-pane-active { display: block; }&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   3. FEEDBACK COMPOSER  — centered modal&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
.gra-composer {&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 12px;&lt;br /&gt;
  box-shadow: 0 8px 40px rgba(0,0,0,0.22);&lt;br /&gt;
  width: 420px;&lt;br /&gt;
  max-width: calc(100vw - 32px);&lt;br /&gt;
  padding: 20px 24px 16px;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  /* Centered on screen */&lt;br /&gt;
  top: 50% !important;&lt;br /&gt;
  left: 50% !important;&lt;br /&gt;
  transform: translate(-50%, -50%) !important;&lt;br /&gt;
  z-index: 10150;&lt;br /&gt;
  display: none;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  gap: 12px;&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
}&lt;br /&gt;
.gra-composer.gra-composer-visible { display: flex; }&lt;br /&gt;
&lt;br /&gt;
/* Feedback composer header row */&lt;br /&gt;
.gra-composer-header {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 8px;&lt;br /&gt;
}&lt;br /&gt;
.gra-composer-header strong {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
  color: #1C1A17;&lt;br /&gt;
  font-size: 16px; &lt;br /&gt;
  font-family: &amp;quot;Noto Sans Devanagari&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
.gra-btn-x {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  font-size: 16px;&lt;br /&gt;
  color: #666;&lt;br /&gt;
  padding: 2px 5px;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
.gra-btn-x:hover { background: #f5f5f5; color: #222; }&lt;br /&gt;
&lt;br /&gt;
/* Feedback field labels */&lt;br /&gt;
.gra-fb-field-label {&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
  color: #5f6368;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  letter-spacing: 0.4px;&lt;br /&gt;
  margin-bottom: -6px;   /* tighten gap to input below */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Selected text quote preview */&lt;br /&gt;
.gra-fb-quote-label {&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  color: #9aa0a6;&lt;br /&gt;
  margin-bottom: -4px;&lt;br /&gt;
}&lt;br /&gt;
.gra-fb-quote {&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #5f6368;&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  background: #fafafa;&lt;br /&gt;
  border-left: 3px solid #fbbc04;&lt;br /&gt;
  border-radius: 0 4px 4px 0;&lt;br /&gt;
  padding: 6px 10px;&lt;br /&gt;
  line-height: 1.45;&lt;br /&gt;
  max-height: 56px;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  display: -webkit-box;&lt;br /&gt;
  -webkit-line-clamp: 3;&lt;br /&gt;
  -webkit-box-orient: vertical;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Issue type dropdown */&lt;br /&gt;
.gra-fb-select {&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  padding: 7px 10px;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  font-family: inherit;&lt;br /&gt;
  color: #202124;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  outline: none;&lt;br /&gt;
  transition: border-color 0.15s;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
.gra-fb-select:focus { border-color: #1a73e8; }&lt;br /&gt;
&lt;br /&gt;
/* Email input */&lt;br /&gt;
.gra-fb-email-input {&lt;br /&gt;
  min-height: unset !important;&lt;br /&gt;
  height: 36px;&lt;br /&gt;
  padding: 6px 10px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Status message */&lt;br /&gt;
.gra-fb-status {&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  min-height: 16px;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
.gra-fb-status.gra-fb-ok  { color: #34a853; }&lt;br /&gt;
.gra-fb-status.gra-fb-err { color: #ea4335; }&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   4. NOTE COMPOSER  (local only)&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
.gra-composer-user {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 10px;&lt;br /&gt;
}&lt;br /&gt;
.gra-avatar {&lt;br /&gt;
  width: 32px;&lt;br /&gt;
  height: 32px;&lt;br /&gt;
  border-radius: 50%;&lt;br /&gt;
  background: #1a73e8;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
.gra-composer-uname { font-weight: 600; color: #202124; font-size: 13px; }&lt;br /&gt;
&lt;br /&gt;
.gra-composer-input {&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  padding: 8px 10px;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  font-family: inherit;&lt;br /&gt;
  resize: none;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
  min-height: 56px;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
  color: #202124;&lt;br /&gt;
  outline: none;&lt;br /&gt;
  transition: border-color 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-composer-input::placeholder { color: #aaa; }&lt;br /&gt;
.gra-composer-input:focus { border-color: #B14A2E; }&lt;br /&gt;
&lt;br /&gt;
.gra-composer-actions {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: flex-end;&lt;br /&gt;
  gap: 8px;&lt;br /&gt;
}&lt;br /&gt;
.gra-btn-cancel {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  color: #5f6368;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  font-family:&amp;quot;Noto Sans Devanagari&amp;quot;;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  padding: 8px 12px;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
}&lt;br /&gt;
.gra-btn-cancel:hover { background: #f5f5f5; }&lt;br /&gt;
.gra-btn-submit {&lt;br /&gt;
  background: transparent;&lt;br /&gt;
  color: #B14A2E;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  font-family:&amp;quot;Noto Sans Devanagari&amp;quot;;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  padding: 8px 12px;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  gap: 8px;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-btn-submit:hover { color: #8A351F; }&lt;br /&gt;
.gra-btn-submit:disabled { opacity: 0.4;&lt;br /&gt;
  cursor: not-allowed; }&lt;br /&gt;
&lt;br /&gt;
/* ── Note cards ── */&lt;br /&gt;
.gra-note-card {&lt;br /&gt;
  border: 1px solid #e8eaed;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 10px 12px;&lt;br /&gt;
  margin-bottom: 10px;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  box-shadow: 0 1px 3px rgba(0,0,0,0.07);&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: box-shadow 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-note-card:hover { box-shadow: 0 2px 8px rgba(0,0,0,0.12); }&lt;br /&gt;
.gra-note-card.gra-card-active {&lt;br /&gt;
  border-color: #34a853;&lt;br /&gt;
  box-shadow: 0 0 0 2px rgba(52,168,83,0.25);&lt;br /&gt;
}&lt;br /&gt;
.gra-card-header {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 8px;&lt;br /&gt;
  margin-bottom: 6px;&lt;br /&gt;
}&lt;br /&gt;
.gra-card-meta { flex: 1; }&lt;br /&gt;
.gra-card-ts { font-size: 11px; color: #80868b; }&lt;br /&gt;
.gra-card-quote {&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #5f6368;&lt;br /&gt;
  border-left: 3px solid #34a853;&lt;br /&gt;
  padding-left: 8px;&lt;br /&gt;
  margin-bottom: 6px;&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  line-height: 1.4;&lt;br /&gt;
  display: -webkit-box;&lt;br /&gt;
  -webkit-line-clamp: 2;&lt;br /&gt;
  -webkit-box-orient: vertical;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
}&lt;br /&gt;
.gra-card-text { font-size: 13px; color: #202124; line-height: 1.5; }&lt;br /&gt;
&lt;br /&gt;
.gra-note-del {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  color: #ccc;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  padding: 0 2px;&lt;br /&gt;
  line-height: 1;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
  margin-left: auto;&lt;br /&gt;
}&lt;br /&gt;
.gra-note-del:hover { color: #e53935; }&lt;br /&gt;
&lt;br /&gt;
.gra-empty-state {&lt;br /&gt;
  color: #9aa0a6;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  padding: 32px 16px;&lt;br /&gt;
  line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   5. BOOKMARK CARDS + COMPOSER&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
.gra-bookmark-card {&lt;br /&gt;
  border: 1px solid #e8eaed;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 10px 12px;&lt;br /&gt;
  margin-bottom: 10px;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  box-shadow: 0 1px 3px rgba(0,0,0,0.07);&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: flex-start;&lt;br /&gt;
  gap: 10px;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: box-shadow 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-bookmark-card:hover { box-shadow: 0 2px 8px rgba(0,0,0,0.12); }&lt;br /&gt;
.gra-bookmark-card .gra-icon { margin-top: 2px; flex-shrink: 0; }&lt;br /&gt;
.gra-bookmark-info { flex: 1; min-width: 0; }&lt;br /&gt;
.gra-bookmark-name {&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
  color: #202124;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  text-overflow: ellipsis;&lt;br /&gt;
}&lt;br /&gt;
.gra-bookmark-quote {&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  color: #80868b;&lt;br /&gt;
  margin-top: 2px;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  text-overflow: ellipsis;&lt;br /&gt;
}&lt;br /&gt;
.gra-bookmark-del {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  color: #ccc;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  padding: 0 2px;&lt;br /&gt;
  line-height: 1;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
.gra-bookmark-del:hover { color: #e53935; }&lt;br /&gt;
&lt;br /&gt;
.gra-bm-composer {&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 12px;&lt;br /&gt;
  box-shadow: 0 8px 40px rgba(0,0,0,0.22);&lt;br /&gt;
  width: 420px;&lt;br /&gt;
  max-width: calc(100vw - 32px);&lt;br /&gt;
  padding: 20px 24px 16px;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  /* Centered on screen — same as feedback composer */&lt;br /&gt;
  top: 50% !important;&lt;br /&gt;
  left: 50% !important;&lt;br /&gt;
  transform: translate(-50%, -50%) !important;&lt;br /&gt;
  z-index: 10150;&lt;br /&gt;
  display: none;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  gap: 10px;&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
}&lt;br /&gt;
.gra-bm-composer.gra-composer-visible { display: flex; }&lt;br /&gt;
.gra-bm-composer-label {&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
  color: #1C1A17;&lt;br /&gt;
  font-size: 16px;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 8px;&lt;br /&gt;
  font-family: &amp;quot;Noto Sans Devanagari&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
.gra-bm-composer-label .gra-icon, .gra-composer-header .gra-icon {&lt;br /&gt;
filter: brightness(0) saturate(100%) invert(7%) sepia(8%) saturate(894%) hue-rotate(357deg) brightness(97%) contrast(92%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   6. ANCHOR HIGHLIGHTS&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
/* Note highlight — green tint */&lt;br /&gt;
.gra-note-highlight {&lt;br /&gt;
  background: rgba(52, 168, 83, 0.18);&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-note-highlight:hover,&lt;br /&gt;
.gra-note-highlight.gra-hl-active {&lt;br /&gt;
  background: rgba(52, 168, 83, 0.4);&lt;br /&gt;
  outline: 1.5px solid #34a853;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Bookmark highlight — blue underline */&lt;br /&gt;
.gra-bookmark-highlight {&lt;br /&gt;
  background: rgba(26, 115, 232, 0.12);&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  border-bottom: 1.5px solid #1a73e8;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.gra-bookmark-highlight:hover { background: rgba(26, 115, 232, 0.22); }&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   7. PERSISTENT TOGGLE BUTTON&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
#gra-toggle {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  bottom: 78px;&lt;br /&gt;
  right: 20px;&lt;br /&gt;
  width: 48px;&lt;br /&gt;
  height: 48px;&lt;br /&gt;
  border-radius: 50%;&lt;br /&gt;
  background: #c0521a;&lt;br /&gt;
  border: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  z-index: 9998;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  box-shadow: 0 3px 12px rgba(0,0,0,0.22);&lt;br /&gt;
  transition: background 0.15s, transform 0.15s;&lt;br /&gt;
}&lt;br /&gt;
#gra-toggle:hover { background: #a0410e; transform: scale(1.07); }&lt;br /&gt;
#gra-toggle .gra-icon {&lt;br /&gt;
  width: 22px;&lt;br /&gt;
  height: 22px;&lt;br /&gt;
  filter: brightness(0) invert(1);&lt;br /&gt;
}&lt;br /&gt;
#gra-toggle-badge {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  top: -4px;&lt;br /&gt;
  right: -4px;&lt;br /&gt;
  background: #e53935;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-size: 10px;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  min-width: 16px;&lt;br /&gt;
  height: 16px;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 0 4px;&lt;br /&gt;
  line-height: 16px;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  display: none;&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  pointer-events: none;&lt;br /&gt;
}&lt;br /&gt;
#gra-panel.gra-panel-open ~ #gra-toggle {&lt;br /&gt;
  right: 356px;&lt;br /&gt;
  transition: right 0.28s cubic-bezier(0.4,0,0.2,1), background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   MOBILE BOTTOM ACTION BAR&lt;br /&gt;
   Slides up from bottom — avoids clashing with browser copy menu.&lt;br /&gt;
   Large tap targets (56px height buttons) with text labels.&lt;br /&gt;
   Only shown on mobile (JS sets _mobile flag).&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
#gra-mobile-bar {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  bottom: 0;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  right: 0;&lt;br /&gt;
  z-index: 10200;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  transform: translateY(100%);&lt;br /&gt;
  transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);&lt;br /&gt;
  pointer-events: none;&lt;br /&gt;
}&lt;br /&gt;
#gra-mobile-bar.gra-mobile-bar-visible {&lt;br /&gt;
  transform: translateY(0);&lt;br /&gt;
  pointer-events: auto;&lt;br /&gt;
}&lt;br /&gt;
#gra-mobile-bar-inner {&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  border-top: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 16px 16px 0 0;&lt;br /&gt;
  box-shadow: 0 -4px 20px rgba(0,0,0,0.18);&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: stretch;&lt;br /&gt;
  padding-bottom: env(safe-area-inset-bottom, 0px);&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-btn {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  gap: 5px;&lt;br /&gt;
  padding: 14px 8px;&lt;br /&gt;
  min-height: 72px;&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  border-right: 1px solid #f0f0f0;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  font-family: system-ui, sans-serif;&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  color: #444;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  -webkit-tap-highlight-color: rgba(0,0,0,0.06);&lt;br /&gt;
  transition: background 0.12s;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-btn:last-child { border-right: none; }&lt;br /&gt;
.gra-mob-btn:active { background: #f5f5f5; }&lt;br /&gt;
.gra-mob-btn .gra-icon { width: 24px; height: 24px; }&lt;br /&gt;
.gra-mob-label { font-size: 11px; line-height: 1.2; text-align: center; }&lt;br /&gt;
.gra-mob-dismiss { color: #999; }&lt;br /&gt;
.gra-mob-dismiss:active { background: #fff0f0; color: #e53935; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   8. RESPONSIVE&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
@media (max-width: 768px) {&lt;br /&gt;
  #gra-panel { width: 100vw; right: -100vw; }&lt;br /&gt;
  .gra-composer {&lt;br /&gt;
    width: calc(100vw - 32px) !important;&lt;br /&gt;
    max-width: 420px;&lt;br /&gt;
    /* Override centering for note/bookmark on mobile — keep centered */&lt;br /&gt;
    top: 50% !important;&lt;br /&gt;
    left: 50% !important;&lt;br /&gt;
    transform: translate(-50%, -50%) !important;&lt;br /&gt;
  }&lt;br /&gt;
  /* bm-composer already centered via its base CSS */&lt;br /&gt;
}&lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   REPLACE the entire additions block at the bottom of&lt;br /&gt;
   MediaWiki:Gadget-GrAnnotations.css with this content.&lt;br /&gt;
&lt;br /&gt;
   FAB stack (right:20px desktop, right:16px mobile):&lt;br /&gt;
     22px   [📚] #se-docnav-btn   docs navigator&lt;br /&gt;
     78px   [↑]  #se-scrolltop    scroll to top&lt;br /&gt;
     134px  [✎]  #gra-toggle      notes panel   ← was wrongly 78px&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
&lt;br /&gt;
/* ── #gra-toggle: sits above both siteNav FABs ─────────────────── */&lt;br /&gt;
#gra-toggle {&lt;br /&gt;
  bottom: 78px !important;&lt;br /&gt;
  right: 20px !important;&lt;br /&gt;
}&lt;br /&gt;
#gra-panel.gra-panel-open ~ #gra-toggle {&lt;br /&gt;
  right: 356px !important;&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 768px) {&lt;br /&gt;
  #gra-toggle {&lt;br /&gt;
    bottom: 78px !important;&lt;br /&gt;
    right: 16px !important;&lt;br /&gt;
    width: 44px !important;&lt;br /&gt;
    height: 44px !important;&lt;br /&gt;
  }&lt;br /&gt;
  #gra-panel.gra-panel-open ~ #gra-toggle {&lt;br /&gt;
    right: calc(100vw + 4px) !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Mobile annotation bar above all Minerva overlays ──────────── */&lt;br /&gt;
#gra-mobile-bar {&lt;br /&gt;
  z-index: 99999 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── CSS custom property fallbacks ─────────────────────────────── */&lt;br /&gt;
/* readerToolbar.js writes these at runtime; these are initial values */&lt;br /&gt;
:root {&lt;br /&gt;
  --gr-header-height: 50px;&lt;br /&gt;
  --gr-bar-h: 48px;&lt;br /&gt;
  --gr-bar-top: 50px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Scroll-margin: TOC anchor links clear the fixed bar ────────── */&lt;br /&gt;
/* Vector: header + bar both fixed */&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h1[id],&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h2[id],&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h3[id],&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h4[id],&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h5[id],&lt;br /&gt;
body.skin-vector #mw-content-text .mw-parser-output h6[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h1[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h2[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h3[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h4[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h5[id],&lt;br /&gt;
body.skin-vector-2022 #mw-content-text .mw-parser-output h6[id] {&lt;br /&gt;
  scroll-margin-top: calc(var(--gr-header-height) + var(--gr-bar-h) + 12px);&lt;br /&gt;
}&lt;br /&gt;
/* Minerva: only bar is fixed once header scrolls away */&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h1[id],&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h2[id],&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h3[id],&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h4[id],&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h5[id],&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output h6[id] {&lt;br /&gt;
  scroll-margin-top: calc(var(--gr-bar-h) + 12px);&lt;br /&gt;
}&lt;br /&gt;
#mw-content-text .mw-parser-output &amp;gt; *:first-child {&lt;br /&gt;
  scroll-margin-top: calc(var(--gr-header-height) + var(--gr-bar-h) + 8px);&lt;br /&gt;
}&lt;br /&gt;
body.skin-minerva #mw-content-text .mw-parser-output &amp;gt; *:first-child {&lt;br /&gt;
  scroll-margin-top: calc(var(--gr-bar-h) + 8px);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
/* Search icon in FAB using an inline SVG data-URI */&lt;br /&gt;
.gra-icon-search {&lt;br /&gt;
  background-image: url(&amp;quot;data:image/svg+xml,%3Csvg xmlns=&#039;http://www.w3.org/2000/svg&#039; viewBox=&#039;0 0 24 24&#039; fill=&#039;none&#039; stroke=&#039;%23ffffff&#039; stroke-width=&#039;2.2&#039; stroke-linecap=&#039;round&#039; stroke-linejoin=&#039;round&#039;%3E%3Ccircle cx=&#039;11&#039; cy=&#039;11&#039; r=&#039;7&#039;/%3E%3Cline x1=&#039;16.5&#039; y1=&#039;16.5&#039; x2=&#039;22&#039; y2=&#039;22&#039;/%3E%3C/svg%3E&amp;quot;) !important;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/* ══════════════════════════════════════════════════════════════════&lt;br /&gt;
   MOBILE BOTTOM BAR — terracotta theme&lt;br /&gt;
   ══════════════════════════════════════════════════════════════════ */&lt;br /&gt;
#gra-mobile-bar-inner {&lt;br /&gt;
  background: #b5451b !important;&lt;br /&gt;
  border-top: none !important;&lt;br /&gt;
  border-radius: 16px 16px 0 0 !important;&lt;br /&gt;
  box-shadow: 0 -4px 20px rgba(181,69,27,0.35) !important;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
.gra-mob-btn {&lt;br /&gt;
  color: rgba(255,255,255,0.92) !important;&lt;br /&gt;
  border-right-color: rgba(255,255,255,0.18) !important;&lt;br /&gt;
  min-height: 76px !important;&lt;br /&gt;
  padding: 16px 8px !important;&lt;br /&gt;
  font-size: 12px !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-btn:active {&lt;br /&gt;
  background: rgba(0,0,0,0.12) !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-btn .gra-icon {&lt;br /&gt;
  width: 26px !important;&lt;br /&gt;
  height: 26px !important;&lt;br /&gt;
  filter: brightness(0) invert(1) !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-label {&lt;br /&gt;
  color: rgba(255,255,255,0.88) !important;&lt;br /&gt;
  font-size: 11px !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-dismiss {&lt;br /&gt;
  color: rgba(255,255,255,0.70) !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-dismiss .gra-mob-label {&lt;br /&gt;
  color: rgba(255,255,255,0.60) !important;&lt;br /&gt;
}&lt;br /&gt;
.gra-mob-dismiss span[style] {&lt;br /&gt;
  color: rgba(255,255,255,0.70) !important;&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 767px) {&lt;br /&gt;
&lt;br /&gt;
  /* Bottom sheet — pinned to bottom via inset, animated via transform */&lt;br /&gt;
  #gra-fb-composer.gra-composer,&lt;br /&gt;
  #gra-nt-composer.gra-composer,&lt;br /&gt;
  #gra-bm-composer.gra-bm-composer {&lt;br /&gt;
    position: fixed !important;&lt;br /&gt;
    inset: auto 0 0 0 !important;          /* top:auto right:0 bottom:0 left:0 */&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    max-width: 100% !important;&lt;br /&gt;
    margin: 0 !important;&lt;br /&gt;
    border-radius: 16px 16px 0 0 !important;&lt;br /&gt;
    box-shadow: 0 -4px 24px rgba(0,0,0,0.18) !important;&lt;br /&gt;
    padding: 20px 20px calc(20px + env(safe-area-inset-bottom)) !important;&lt;br /&gt;
    box-sizing: border-box !important;&lt;br /&gt;
    transform: translateY(100%) !important;&lt;br /&gt;
    transition: transform 0.28s cubic-bezier(0.32,0.72,0,1) !important;&lt;br /&gt;
    z-index: 10600 !important;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* Slide up when visible */&lt;br /&gt;
  #gra-fb-composer.gra-composer-visible,&lt;br /&gt;
  #gra-nt-composer.gra-composer-visible,&lt;br /&gt;
  #gra-bm-composer.gra-composer-visible {&lt;br /&gt;
    transform: translateY(0) !important;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* Grab handle */&lt;br /&gt;
  #gra-fb-composer::before,&lt;br /&gt;
  #gra-nt-composer::before,&lt;br /&gt;
  #gra-bm-composer::before {&lt;br /&gt;
    content: &amp;quot;&amp;quot;;&lt;br /&gt;
    display: block;&lt;br /&gt;
    width: 36px; height: 4px;&lt;br /&gt;
    border-radius: 2px;&lt;br /&gt;
    background: #d0d0d0;&lt;br /&gt;
    margin: -6px auto 14px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .gra-composer .gra-composer-input,&lt;br /&gt;
  .gra-bm-composer .gra-composer-input {&lt;br /&gt;
    font-size: 16px !important;   /* no iOS zoom on focus */&lt;br /&gt;
  }&lt;br /&gt;
  .gra-composer-actions { display: flex; gap: 10px; }&lt;br /&gt;
  .gra-composer-actions .gra-btn-submit,&lt;br /&gt;
  .gra-composer-actions .gra-btn-cancel { flex: 1; min-height: 44px; }&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 767px) {&lt;br /&gt;
  /* Docked toolbar below the reader header */&lt;br /&gt;
  #gra-fab.gra-fab-mobile-docked {&lt;br /&gt;
    position: fixed !important;&lt;br /&gt;
    top: var(--gr-toc-top, 99px) !important;  /* sits just below reader toolbar */&lt;br /&gt;
    left: 0 !important;&lt;br /&gt;
    right: 0 !important;&lt;br /&gt;
    height: 52px !important;&lt;br /&gt;
    flex-direction: row !important;&lt;br /&gt;
    align-items: center !important;&lt;br /&gt;
    justify-content: space-around !important;&lt;br /&gt;
    border-radius: 0 !important;&lt;br /&gt;
    box-shadow: 0 2px 8px rgba(0,0,0,0.15) !important;&lt;br /&gt;
    z-index: 2147483646 !important;       /* below native menu, above content */&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #gra-fab.gra-fab-mobile-docked .gra-fab-btn {&lt;br /&gt;
    flex: 1;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    height: 44px;&lt;br /&gt;
    background: transparent !important;&lt;br /&gt;
    touch-action: manipulation;&lt;br /&gt;
    -webkit-tap-highlight-color: transparent;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #gra-fab.gra-fab-mobile-docked .gra-fab-btn-label {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-size: 10px;&lt;br /&gt;
    margin-top: 2px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Vaishnavi</name></author>
	</entry>
</feed>