1<!DOCTYPE html> 2<html> 3<head> 4 <meta charset="utf-8" /> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <title> - Savitri</title> 7 <!-- Site theme (Light / Sepia / Dark): applied before render to avoid a flash --> 8
8<script> 9 (function () { try { var t = localStorage.getItem('savSiteTheme'); if (t && t !== 'light') document.documentElement.className += ' theme-' + t; } catch (e) {} })(); 10 function savUpdateThemeIcon(t) { var i = document.getElementById('savThemeIcon'); if (i) i.className = 'fa ' + (t === 'dark' ? 'fa-moon-o' : t === 'sepia' ? 'fa-adjust' : 'fa-sun-o'); } 11 function savCycleTheme() { 12 var order = ['light', 'sepia', 'dark']; 13 var cur = (document.documentElement.className.match(/theme-(sepia|dark)/) || [])[1] || 'light'; 14 var next = order[(order.indexOf(cur) + 1) % 3]; 15 var d = document.documentElement; 16 d.classList.remove('theme-sepia', 'theme-dark'); 17 if (next !== 'light') d.classList.add('theme-' + next); 18 try { localStorage.setItem('savSiteTheme', next); } catch (e) {} 19 savUpdateThemeIcon(next); 20 } 21 document.addEventListener('DOMContentLoaded', function () { var t = 'light'; try { t = localStorage.getItem('savSiteTheme') || 'light'; } catch (e) {} savUpdateThemeIcon(t); }); 22 </script>
22 23 <link href="/Content/css?v=Htuaxk8hyvGm4L1nGh7Pg9YMgRj5gtIGCAPQ9YRZ1TA1" rel="stylesheet"/> 24 25
25<script src="/bundles/modernizr?v=inCVuEFe6J4Q07A0AcRsbJic_UE5MwpRMNGcOtk94TE1"></script>
25 26 27 <link href="/Content/photoswipe.css" rel="stylesheet" /> 28 <meta name="apple-itunes-app" content="app-id=1143882659"> 29 <meta name="google-play-app" content="app-id=in.savitri"> 30 <link href="/Content/smart-app-banner.css" rel="stylesheet" media="screen" type="text/css" /> 31 <link rel="apple-touch-icon" href="/images/touch-icon-iphone.png"> 32 <link rel="android-touch-icon" href="/images/touch-icon-iphone.png" /> 33 <link href="//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet"> 34 <link href="/Content/bootstrap-notifications.min.css" rel="stylesheet" /> 35 <link type="text/css" rel="stylesheet" href="//fast.fonts.net/cssapi/8b9becaf-4f33-4214-83ca-084c4a14579f.css" /> 36 <link href="/images/favicon-d0505c1971f5329c8f0042ab4b617089.png" rel="shortcut icon" type="image/vnd.microsoft.icon" /> 37 <link rel="apple-touch-icon" href="/images/touch-icon-iphone.png"> 38 <link rel="apple-touch-icon" sizes="76x76" href="/images/touch-icon-ipad.png"> 39 <link rel="apple-touch-icon" sizes="120x120" href="/images/touch-icon-iphone-retina.png"> 40 <link rel="apple-touch-icon" sizes="152x152" href="/images/touch-icon-ipad-retina.png"> 41 <meta name="apple-mobile-web-app-capable" content="yes"> 42 <meta name="mobile-web-app-capable" content="yes"> 43 <meta name="apple-mobile-web-app-title" content="Savitri"> 44 45 <!-- Tailwind CDN must load first so the tailwind global exists, then config --> 46
46<script src="https://cdn.tailwindcss.com"></script>
46 47
47<script> 48 tailwind.config = { 49 theme: { 50 extend: { 51 colors: { 52 sav: { 53 bg: '#f5efdc', 54 text: '#3f2a18', 55 gold: '#d19b3d', 56 'gold-dark': '#b8841e', 57 cream: '#fffff0', 58 parchment: '#f8f2e4', 59 border: '#e0d5bc', 60 muted: '#9b928b', 61 dark: '#2c2c2d', 62 'dark-brand': '#1a1f24' 63 } 64 }, 65 fontFamily: { 66 serif: ['Georgia','Palatino','"Times New Roman"','serif'] 67 } 68 } 69 } 70 } 71 </script>
71 72 73 <!-- Savitri Design System â plain CSS, no @apply (CDN limitation) --> 74 <style> 75 /* ââ Theme system (Light / Sepia / Dark) ââââââââââââââââââââââââââââââ 76 Light = default (no class). Sepia/Dark are additive overrides on <html>, 77 so the default experience is byte-for-byte unchanged. */ 78 :root{ 79 --sav-bg:#f5efdc; --sav-surface:#fffff0; --sav-surface-2:#f8f2e4; --sav-surface-3:#fffdf5; 80 --sav-text:#3f2a18; --sav-text-soft:#5a4e44; --sav-muted:#9b928b; 81 --sav-border:#e0d5bc; --sav-border-2:#e7dcc4; --sav-navbar:#f8f2e4; --sav-gold:#d19b3d; 82 } 83 html.theme-sepia{ 84 --sav-bg:#e9dcc1; --sav-surface:#f3ead4; --sav-surface-2:#e6d8bc; --sav-surface-3:#f5eddb; 85 --sav-text:#43331f; --sav-text-soft:#5c4a36; --sav-muted:#8a7b61; 86 --sav-border:#d8c49e; --sav-border-2:#e1d2b1; --sav-navbar:#e6d8bc; 87 } 88 html.theme-dark{ 89 --sav-bg:#15120e; --sav-surface:#221d17; --sav-surface-2:#2b251d; --sav-surface-3:#221d17; 90 --sav-text:#ece0cb; --sav-text-soft:#c9bca8; --sav-muted:#9b8f7e; 91 --sav-border:#393127; --sav-border-2:#393127; --sav-navbar:#1b1813; 92 } 93 /* â chrome & shared containers follow the variables (sepia/dark only) â */ 94 html.theme-sepia body, html.theme-dark body{ background:var(--sav-bg)!important; color:var(--sav-text); } 95 html.theme-sepia #savNav, html.theme-dark #savNav{ background:var(--sav-navbar)!important; border-bottom-color:var(--sav-border)!important; } 96 html.theme-sepia .sav-card, html.theme-sepia .sav-card-white, html.theme-dark .sav-card, html.theme-dark .sav-card-white{ background:var(--sav-surface)!important; border-color:var(--sav-border)!important; } 97 html.theme-sepia .sav-card-parchment, html.theme-dark .sav-card-parchment{ background:var(--sav-surface-2)!important; border-color:var(--sav-border)!important; } 98 html.theme-sepia .sav-input, html.theme-dark .sav-input{ background:var(--sav-surface)!important; border-color:var(--sav-border)!important; color:var(--sav-text)!important; } 99 html.theme-sepia .sav-dropdown-menu, html.theme-sepia #savMobileMenu, html.theme-dark .sav-dropdown-menu, html.theme-dark #savMobileMenu{ background:var(--sav-surface)!important; border-color:var(--sav-border)!important; } 100 html.theme-sepia .sav-dropdown-toggle, html.theme-sepia .sav-dropdown-item, html.theme-sepia .sav-nav-link, html.theme-dark .sav-dropdown-toggle, html.theme-dark .sav-dropdown-item, html.theme-dark .sav-nav-link{ color:var(--sav-text)!important; } 101 html.theme-dark .sav-dropdown-toggle:hover, html.theme-dark .sav-dropdown-item:hover, html.theme-dark .sav-nav-link:hover, html.theme-dark .sav-notif-item:hover{ background:var(--sav-surface-2)!important; } 102 /* mobile menu links (.sav-mobile-link / .sav-mobile-sub) â own classes, not caught above */ 103 html.theme-sepia .sav-mobile-link, html.theme-dark .sav-mobile-link{ color:var(--sav-text)!important; } 104 html.theme-sepia .sav-mobile-link:hover, html.theme-dark .sav-mobile-link:hover{ background:var(--sav-surface-2)!important; } 105 html.theme-sepia .sav-mobile-sub, html.theme-dark .sav-mobile-sub{ border-left-color:var(--sav-border)!important; } 106 html.theme-sepia .sav-mobile-sub a, html.theme-dark .sav-mobile-sub a{ color:var(--sav-muted)!important; } 107 html.theme-sepia .sav-mobile-sub a:hover, html.theme-dark .sav-mobile-sub a:hover{ color:var(--sav-text)!important; background:var(--sav-surface-2)!important; } 108 /* Bootstrap dropdown items (edition / translations menus): bg darkens below, but the link text stays #3f2a18 â invisible */ 109 html.theme-sepia .dropdown-menu > li > a, html.theme-dark .dropdown-menu > li > a, 110 html.theme-sepia .dropdown-menu label, html.theme-dark .dropdown-menu label{ color:var(--sav-text)!important; } 111 html.theme-sepia #DataCustom, html.theme-sepia #recentPosts, html.theme-sepia #Databooks, html.theme-dark #DataCustom, html.theme-dark #recentPosts, html.theme-dark #Databooks{ background:var(--sav-surface)!important; border-color:var(--sav-border)!important; color:var(--sav-text)!important; } 112 /* Books page headings: #BookName + per-author <h2> hardcode #3f2a18 (CSS rule, not inline â needs explicit override) */ 113 html.theme-sepia #BookName, html.theme-dark #BookName, 114 html.theme-sepia .books-author-section h2, html.theme-dark .books-author-section h2{ color:var(--sav-text)!important; } 115 html.theme-sepia #AuthorName, html.theme-dark #AuthorName{ color:var(--sav-muted)!important; } 116 html.theme-sepia .books-author-section + .books-author-section, html.theme-dark .books-author-section + .books-author-section{ border-top-color:var(--sav-border)!important; } 117 /* â re-map the common hardcoded INLINE colors so existing page markup follows the theme â */ 118 html.theme-sepia [style*="color:#3f2a18"], html.theme-dark [style*="color:#3f2a18"], 119 html.theme-sepia [style*="color: #3f2a18"], html.theme-dark [style*="color: #3f2a18"], 120 html.theme-sepia [style*="color:#2f2012"], html.theme-dark [style*="color:#2f2012"], 121 html.theme-sepia [style*="color:#3a2817"], html.theme-dark [style*="color:#3a2817"]{ color:var(--sav-text)!important; } 122 html.theme-sepia [style*="color:#9b928b"], html.theme-dark [style*="color:#9b928b"], 123 html.theme-sepia [style*="color: #9b928b"], html.theme-dark [style*="color: #9b928b"], 124 html.theme-sepia [style*="color:#5a4e44"], html.theme-dark [style*="color:#5a4e44"]{ color:var(--sav-muted)!important; } 125 html.theme-sepia [style*="background:#fffff0"], html.theme-dark [style*="background:#fffff0"], 126 html.theme-sepia [style*="background:#fffdf5"], html.theme-dark [style*="background:#fffdf5"]{ background-color:var(--sav-surface)!important; } 127 html.theme-sepia [style*="background:#f8f2e4"], html.theme-dark [style*="background:#f8f2e4"]{ background-color:var(--sav-surface-2)!important; } 128 /* â reading card / verses follow the site theme (the Aa panel can still override locally) â */ 129 html.theme-sepia #BindBook .ContentInner, html.theme-dark #BindBook .ContentInner{ background:var(--sav-surface-3)!important; border-color:var(--sav-border)!important; } 130 html.theme-sepia #BindBook .lbloriginal, html.theme-dark #BindBook .lbloriginal, 131 html.theme-sepia #BindBook .sectionColor, html.theme-dark #BindBook .sectionColor{ color:var(--sav-text)!important; } 132 html.theme-sepia #BindBook .sectionColor, html.theme-dark #BindBook .sectionColor{ border-bottom-color:var(--sav-border)!important; } 133 html.theme-dark #BindBook .Oline:hover{ background:rgba(245,239,220,.05)!important; } 134 html.theme-dark #BindBook .innerSpan img, html.theme-dark #BindBook .play-pron{ filter:invert(.82); } 135 /* â search/blog snippets, list items, rules, blog article internals â */ 136 html.theme-sepia .snippet, html.theme-dark .snippet{ border-bottom-color:var(--sav-border)!important; } 137 html.theme-sepia .sav-list-item, html.theme-dark .sav-list-item{ background:var(--sav-surface)!important; border-color:var(--sav-border)!important; color:var(--sav-text)!important; } 138 html.theme-dark .hr-light, html.theme-dark hr, html.theme-dark .post-content{ border-color:var(--sav-border)!important; } 139 html.theme-dark #DataCustom blockquote, html.theme-sepia #DataCustom blockquote{ background:var(--sav-surface-2)!important; color:var(--sav-text-soft)!important; } 140 html.theme-dark #DataCustom th, html.theme-sepia #DataCustom th{ background:var(--sav-surface-2)!important; color:var(--sav-text)!important; border-color:var(--sav-border)!important; } 141 html.theme-dark #DataCustom td, html.theme-sepia #DataCustom td{ border-color:var(--sav-border)!important; } 142 html.theme-dark #DataCustom tr:nth-child(even){ background:var(--sav-surface-2)!important; } 143 /* â content TEXT colours set by CSS rules (feed titles, headings, recent-posts, meta) â */ 144 html.theme-sepia #DataCustom h1, html.theme-sepia #DataCustom h2, html.theme-sepia #DataCustom h3, html.theme-sepia #DataCustom h4, 145 html.theme-dark #DataCustom h1, html.theme-dark #DataCustom h2, html.theme-dark #DataCustom h3, html.theme-dark #DataCustom h4, 146 html.theme-sepia .snippet h3 a, html.theme-dark .snippet h3 a, 147 html.theme-sepia #recentPosts h4, html.theme-dark #recentPosts h4, 148 html.theme-sepia #recentPosts strong a, html.theme-dark #recentPosts strong a, 149 html.theme-sepia #BindBook, html.theme-dark #BindBook{ color:var(--sav-text)!important; } 150 html.theme-sepia #recentPosts p, html.theme-dark #recentPosts p, 151 html.theme-sepia .byUser, html.theme-dark .byUser, 152 html.theme-sepia .postseries, html.theme-sepia .postseries a, html.theme-dark .postseries, html.theme-dark .postseries a, 153 html.theme-sepia .count-comments, html.theme-dark .count-comments, 154 html.theme-sepia .UpdatedText, html.theme-dark .UpdatedText{ color:var(--sav-muted)!important; } 155 html.theme-sepia .content, html.theme-dark .content, 156 html.theme-sepia .post-content, html.theme-dark .post-content, 157 html.theme-sepia #content-Post label, html.theme-dark #content-Post label{ color:var(--sav-text)!important; } 158 /* â design-system components: labels, outline/default buttons, tabs, nav arrows, form-control â */ 159 html.theme-sepia .sav-label, html.theme-dark .sav-label, 160 html.theme-sepia .sav-page-header h1, html.theme-dark .sav-page-header h1, 161 html.theme-sepia .sav-btn-outline, html.theme-dark .sav-btn-outline, 162 html.theme-sepia .btn-default, html.theme-dark .btn-default, 163 html.theme-sepia .sav-navigate, html.theme-dark .sav-navigate, 164 html.theme-sepia .sav-tab:hover, html.theme-dark .sav-tab:hover, 165 html.theme-sepia .sav-tab.active, html.theme-dark .sav-tab.active, 166 html.theme-sepia .nav-tabs > li > a:hover, html.theme-dark .nav-tabs > li > a:hover, 167 html.theme-sepia .nav-tabs > li.active > a, html.theme-dark .nav-tabs > li.active > a{ color:var(--sav-text)!important; } 168 html.theme-sepia .sav-btn-outline:hover, html.theme-dark .sav-btn-outline:hover, 169 html.theme-sepia .btn-default:hover, html.theme-dark .btn-default:hover{ background:var(--sav-surface-2)!important; border-color:var(--sav-gold)!important; } 170 html.theme-sepia .nav-tabs > li.active > a, html.theme-dark .nav-tabs > li.active > a{ background:var(--sav-surface-2)!important; } 171 html.theme-sepia .sav-navigate, html.theme-dark .sav-navigate{ background:var(--sav-surface)!important; border-color:var(--sav-border)!important; } 172 html.theme-sepia .form-control, html.theme-dark .form-control{ background:var(--sav-surface)!important; color:var(--sav-text)!important; border-color:var(--sav-border)!important; } 173 /* â light CARD/MENU/MODAL backgrounds set by CSS rules â themed surface â */ 174 html.theme-sepia #content-Post, html.theme-dark #content-Post, 175 html.theme-sepia .list-group li, html.theme-dark .list-group li, 176 html.theme-sepia .dropdown-menu, html.theme-dark .dropdown-menu, 177 html.theme-sepia .bootstrap-datetimepicker-widget.dropdown-menu, html.theme-dark .bootstrap-datetimepicker-widget.dropdown-menu, 178 html.theme-sepia .sav-thumb, html.theme-dark .sav-thumb,
179 html.theme-sepia .modal-content, html.theme-dark .modal-content{ background:var(--sav-surface)!important; border-color:var(--sav-border)!important; color:var(--sav-text)!important; } 180 html.theme-sepia .progress, html.theme-dark .progress, 181 html.theme-sepia .input-group-addon, html.theme-dark .input-group-addon{ background:var(--sav-surface-2)!important; border-color:var(--sav-border)!important; color:var(--sav-text)!important; } 182 html.theme-sepia .dropdown-menu > li > a:hover, html.theme-dark .dropdown-menu > li > a:hover, 183 html.theme-sepia .dropdown-menu label:hover, html.theme-dark .dropdown-menu label:hover, 184 html.theme-sepia .close:hover, html.theme-dark .close:hover{ background:var(--sav-surface-2)!important; } 185 html.theme-sepia .modal-title, html.theme-dark .modal-title, 186 html.theme-sepia .modal-body, html.theme-dark .modal-body, 187 html.theme-sepia .modal-body b, html.theme-dark .modal-body b, 188 html.theme-sepia .close, html.theme-dark .close, 189 html.theme-sepia #content-Post label, html.theme-dark #content-Post label{ color:var(--sav-text)!important; } 190 /* â broadened INLINE-background remap: #fff* prefix + "background: " space variant â */ 191 html.theme-sepia [style*="background:#fff"], html.theme-dark [style*="background:#fff"], 192 html.theme-sepia [style*="background: #fff"], html.theme-dark [style*="background: #fff"], 193 html.theme-sepia [style*="background-color:#fff"], html.theme-dark [style*="background-color:#fff"], 194 html.theme-sepia [style*="background-color: #fff"], html.theme-dark [style*="background-color: #fff"], 195 html.theme-sepia [style*="background:#faf4e6"], html.theme-dark [style*="background:#faf4e6"], 196 html.theme-sepia [style*="background:#f7eed8"], html.theme-dark [style*="background:#f7eed8"], 197 html.theme-sepia [style*="background: #f7eed8"], html.theme-dark [style*="background: #f7eed8"], 198 html.theme-sepia [style*="background:#fbf6e7"], html.theme-dark [style*="background:#fbf6e7"], 199 html.theme-sepia [style*="background: #fbf6e7"], html.theme-dark [style*="background: #fbf6e7"]{ background-color:var(--sav-surface)!important; } 200 html.theme-sepia [style*="background: #f8f2e4"], html.theme-dark [style*="background: #f8f2e4"], 201 html.theme-sepia [style*="background:#f0e8d8"], html.theme-dark [style*="background:#f0e8d8"], 202 html.theme-sepia [style*="background:#f4ecd8"], html.theme-dark [style*="background:#f4ecd8"], 203 html.theme-sepia [style*="background:#efe6d2"], html.theme-dark [style*="background:#efe6d2"]{ background-color:var(--sav-surface-2)!important; } 204 205 /* ââ Buttons ââ */ 206 .sav-btn{display:inline-flex;align-items:center;justify-content:center;padding:.5rem 1.25rem;font-size:.875rem;font-weight:500;border-radius:.5rem;border:1px solid transparent;cursor:pointer;text-decoration:none;transition:background-color .15s,color .15s,border-color .15s;white-space:nowrap;line-height:1.4;} 207 .sav-btn:hover{text-decoration:none;} 208 /* color is !important so buttons keep their text colour inside content areas 209 (e.g. #DataCustom a { color:teal } would otherwise win by id-specificity) */ 210 .sav-btn-primary{background:#3f2a18;color:#f5efdc!important;border-color:#3f2a18;} 211 .sav-btn-primary:hover{background:#2a1c10;color:#f5efdc!important;} 212 .sav-btn-gold{background:#d9a23f;color:#3f2a18!important;border-color:#cf942f;font-weight:600;} 213 .sav-btn-gold:hover{background:#c98f2c;color:#3f2a18!important;border-color:#b8841e;} 214 .sav-btn-teal{background:#0d9488;color:#fff!important;border-color:#0d9488;} 215 .sav-btn-teal:hover{background:#0f766e;color:#fff!important;} 216 .sav-btn-danger{background:#b3261e;color:#fff!important;border-color:#b3261e;} 217 .sav-btn-danger:hover{background:#8f1d17;color:#fff!important;} 218 .sav-btn-outline{background:transparent;color:#3f2a18!important;border-color:#e0d5bc;} 219 .sav-btn-outline:hover{background:#f8f2e4;border-color:#d19b3d;} 220 .sav-btn-sm{padding:.375rem .875rem;font-size:.8125rem;} 221 .sav-btn-xs{padding:.25rem .625rem;font-size:.75rem;border-radius:.375rem;} 222 .sav-btn-lg{padding:.75rem 1.75rem;font-size:1rem;} 223 224 /* ââ Cards ââ */ 225 .sav-card{background:#fffff0;border:1px solid #e0d5bc;border-radius:.75rem;padding:1.5rem;box-shadow:0 2px 8px rgba(63,42,24,.06);} 226 .sav-card-white{background:#fff;border:1px solid #e0d5bc;border-radius:.75rem;padding:1.5rem;box-shadow:0 2px 8px rgba(63,42,24,.06);} 227 .sav-card-parchment{background:#f8f2e4;border:1px solid #e0d5bc;border-radius:.75rem;padding:1.5rem;} 228 229 /* ââ Form inputs ââ */ 230 .sav-input{display:block;width:100%;padding:.5rem .875rem;font-size:.875rem;color:#3f2a18;background:#fff;border:1px solid #e0d5bc;border-radius:.5rem;max-width:none!important;box-sizing:border-box;transition:border-color .15s,box-shadow .15s;} 231 .sav-input:focus{outline:none;border-color:#0d9488;box-shadow:0 0 0 3px rgba(13,148,136,.12);} 232 .sav-input.sav-input-error,.CodeMirror.sav-input-error{border-color:#b91c1c!important;box-shadow:0 0 0 3px rgba(185,28,28,.14)!important;} 233 .sav-label{display:block;font-size:.875rem;font-weight:500;color:#3f2a18;margin-bottom:.375rem;} 234 .sav-form-group{margin-bottom:1.25rem;} 235 .sav-form-hint{font-size:.75rem;color:#9b928b;margin-top:.25rem;} 236 .sav-field-error{display:block;margin-top:.35rem;font-size:.78rem;font-weight:600;color:#b91c1c;} 237 238 /* ââ Page header ââ */ 239 .sav-page-header{border-bottom:1px solid #e0d5bc;padding-bottom:1.25rem;margin-bottom:2rem;text-align:center;} 240 .sav-page-header h1{font-size:1.875rem;font-weight:700;color:#3f2a18;margin:0 0 .375rem;} 241 .sav-page-header h2,.sav-page-header p{font-size:.9375rem;color:#9b928b;font-weight:400;margin:0;} 242 .sav-section-divider{width:3rem;height:2px;background:#d19b3d;margin:.875rem auto;border-radius:1px;} 243 244 /* ââ Tabs ââ */ 245 .sav-tabs{display:flex;border-bottom:1px solid #e0d5bc;
245gap:0;margin-bottom:1.5rem;} 246 .sav-tab{padding:.625rem 1.25rem;font-size:.875rem;font-weight:500;color:#9b928b;border-bottom:2px solid transparent;cursor:pointer;transition:color .15s,border-color .15s;text-decoration:none;background:none;border-top:none;border-left:none;border-right:none;margin-bottom:-1px;} 247 .sav-tab:hover{color:#3f2a18;} 248 .sav-tab.active,.sav-tab:focus{color:#3f2a18;border-bottom-color:#d19b3d;font-weight:600;outline:none;} 249 250 /* ââ Pills ââ */ 251 .sav-pill{display:inline-flex;align-items:center;padding:.375rem 1rem;font-size:.8125rem;font-weight:500;border-radius:999px;border:1px solid #e0d5bc;color:#9b928b;cursor:pointer;transition:all .15s;text-decoration:none;background:none;} 252 .sav-pill:hover,.sav-pill.active{background:#3f2a18;color:#f5efdc;border-color:#3f2a18;text-decoration:none;} 253 254 /* ââ Alerts ââ */ 255 .sav-alert{padding:.75rem 1rem;border-radius:.5rem;font-size:.875rem;margin-bottom:1rem;} 256 .sav-alert-info{background:#eff6ff;border:1px solid #bfdbfe;color:#1d4ed8;} 257 .sav-alert-success{background:#f0fdf4;border:1px solid #bbf7d0;color:#15803d;} 258 .sav-alert-warning{background:#fffbeb;border:1px solid #fde68a;color:#92400e;} 259 .sav-alert-error{background:#fef2f2;border:1px solid #fecaca;color:#b91c1c;} 260 #snackbar{max-width:calc(100vw - 2rem);margin-left:0!important;transform:translateX(-50%);box-shadow:0 10px 28px rgba(63,42,24,.28);opacity:0;pointer-events:none;transition:opacity .18s ease,bottom .18s ease;} 261 #snackbar.show{visibility:visible!important;opacity:1;bottom:30px!important;} 262 263 /* ââ Navigate arrows ââ */ 264 .sav-navigate{display:inline-flex;align-items:center;gap:.5rem;padding:.5rem 1.25rem;border:1px solid #e0d5bc;border-radius:999px;color:rgba(63,42,24,.7);font-size:.875rem;font-weight:500;transition:all .2s;text-decoration:none;margin:.25rem;background:#fff;} 265 .sav-navigate:hover{background:#3f2a18;color:#f5efdc;border-color:#3f2a18;} 266 267 /* ââ Snippets (search/blog results) ââ */ 268 .sav-snippet{border-bottom:1px dashed #e0d5bc;padding-bottom:1.25rem;margin-bottom:1.25rem;} 269 .sav-snippet:last-child{border-bottom:none;} 270 .sav-snippet-title{font-size:1rem;font-weight:600;color:#0d9488;text-decoration:none;} 271 .sav-snippet-title:hover{color:#0f766e;text-decoration:underline;} 272 .sav-snippet-meta{font-size:.8125rem;color:#9b928b;margin-top:.25rem;} 273 274 /* ââ Prose / reading ââ */ 275 .sav-prose{font-family:Georgia,Palatino,"Times New Roman",serif;font-size:1.0625rem;line-height:2;color:#3f2a18;} 276 .sav-prose p{margin-bottom:1rem;} 277 278 /* ââ Navbar ââ */ 279 #savNav{position:fixed;top:0;left:0;right:0;height:64px;background:#f8f2e4;border-bottom:1px solid #e0d5bc;box-shadow:0 2px 12px rgba(63,42,24,.08);z-index:1030;display:flex;align-items:center;padding:0 1rem;gap:.5rem;} 280 .sav-nav-link{padding:.375rem .625rem;font-size:.875rem;font-weight:500;color:#3f2a18;text-decoration:none;border-radius:.375rem;transition:background .15s,color .15s;white-space:nowrap;} 281 .sav-nav-link:hover{background:#f0e8d8;color:#3f2a18;text-decoration:none;} 282 283 /* ââ Navbar dropdown ââ */ 284 .sav-dropdown{position:relative;display:inline-flex;align-items:center;height:64px;} 285 .sav-dropdown-toggle{display:inline-flex;align-items:center;gap:.3rem;padding:.375rem .625rem;font-size:.875rem;font-weight:500;color:#3f2a18;text-decoration:none;border:none;background:none;cursor:pointer;border-radius:.375rem;transition:background .15s;white-space:nowrap;} 286 .sav-dropdown-toggle:hover{background:#f0e8d8;} 287 .sav-dropdown-menu{display:none;position:absolute;top:calc(100% + 4px);left:0;
287min-width:200px;background:#fff;border:1px solid #e0d5bc;border-radius:.625rem;box-shadow:0 8px 24px rgba(63,42,24,.12);z-index:1050;padding:.25rem 0;} 288 .sav-dropdown.open .sav-dropdown-menu{display:block;} 289 .sav-dropdown-item{display:flex;align-items:center;gap:.5rem;padding:.5625rem 1rem;font-size:.875rem;color:#3f2a18;text-decoration:none;transition:background .1s;white-space:nowrap;border:none;background:none;cursor:pointer;width:100%;text-align:left;} 290 .sav-dropdown-item:hover{background:#f8f2e4;color:#3f2a18;text-decoration:none;} 291 .sav-dropdown-divider{height:1px;background:#f0e8d8;margin:.25rem 0;} 292 .sav-dropdown-header{padding:.375rem 1rem .25rem;font-size:.6875rem;font-weight:600;color:#9b928b;text-transform:uppercase;letter-spacing:.05em;} 293 /* ââ Notifications dropdown ââ */ 294 #notifDropdown{left:auto;right:0;width:min(420px,calc(100vw - 1.5rem));min-width:0;max-height:min(520px,calc(100vh - 5.5rem));padding:0;border-radius:.875rem;background:#fffdf6;border-color:#e0d5bc;overflow:hidden;box-shadow:0 18px 44px -28px rgba(63,42,24,.55);} 295 #notifDropdown .sav-dropdown-header{background:#fffdf6;padding:.95rem 1.05rem .75rem;border-bottom:1px solid #ece2cd;font-size:.72rem;letter-spacing:.14em;font-weight:800;color:#8b8177;} 296 #BindNotification{list-style:none;margin:0;padding:.35rem;max-height:min(440px,calc(100vh - 10rem));overflow-y:auto;scrollbar-width:thin;scrollbar-color:#d19b3d #f3ead8;} 297 #BindNotification::-webkit-scrollbar{width:6px;} 298 #BindNotification::-webkit-scrollbar-track{background:#f3ead8;border-radius:999px;} 299 #BindNotification::-webkit-scrollbar-thumb{background:#d19b3d;border-radius:999px;} 300 #BindNotification li.sav-notif,#BindNotification li.sav-notif-empty{border-bottom:0;} 301 .sav-notif{margin:0;} 302 .sav-notif + .sav-notif{margin-top:.2rem;} 303 .sav-notif-item{display:flex;gap:.75rem;
303align-items:flex-start;padding:.78rem .8rem;border:1px solid transparent;border-radius:.65rem;color:#3f2a18;text-decoration:none;transition:background .12s,border-color .12s;} 304 .sav-notif-item:hover{background:#f8f2e4;border-color:#e7dcc4;text-decoration:none;} 305 .sav-notif-badge{flex-shrink:0;min-width:54px;margin-top:.12rem;font-size:.64rem;font-weight:800;text-align:center;text-transform:uppercase;letter-spacing:.06em;padding:.18rem .5rem;border-radius:999px;line-height:1.6;background:#ede6d8;color:#7c5f35;} 306 .sav-notif-post{background:#dff1ee;color:#08756c;} 307 .sav-notif-page{background:#f6ebcf;color:#996413;} 308 .sav-notif-text{display:flex;flex-direction:column;gap:.25rem;min-width:0;} 309 .sav-notif-title{font-size:.92rem;font-weight:700;color:#2f1f13;line-height:1.35;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;} 310 .sav-notif-meta{font-size:.78rem;color:#8b8177;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;} 311 .sav-notif-empty{padding:2rem 1rem;text-align:center;color:#8b8177;font-size:.9rem;} 312 html.theme-dark #notifDropdown{background:#211d18;border-color:#3a3228;box-shadow:0 20px 46px -20px rgba(0,0,0,.75);} 313 html.theme-dark #notifDropdown .sav-dropdown-header{background:#211d18;border-color:#3a3228;color:#c9bca8;} 314 html.theme-dark #BindNotification{scrollbar-color:#d19b3d #211d18;} 315 html.theme-dark #BindNotification::-webkit-scrollbar-track{background:#211d18;} 316 html.theme-dark .sav-notif-item{color:#f3ead6;} 317 html.theme-dark .sav-notif-item:hover{background:#2d261e;border-color:#4a4234;} 318 html.theme-dark .sav-notif-title{color:#f3ead6;} 319 html.theme-dark .sav-notif-meta{color:#b9aa95;} 320 321 /* ââ Mobile menu ââ */ 322 #savMobileMenu{display:none;position:fixed;top:64px;left:0;right:0;background:#f8f2e4;border-bottom:1px solid #e0d5bc;z-index:1029;padding:.75rem 1rem;max-height:calc(100vh - 64px);overflow-y:auto;} 323 #savMobileMenu.open{display:block;} 324 .sav-mobile-link{display:flex;align-items:center;padding:.625rem .75rem;font-size:.9375rem;font-weight:500;color:#3f2a18;text-decoration:none;border-radius:.375rem;border:none;background:none;cursor:pointer;width:100%;text-align:left;} 325 .sav-mobile-link:hover{background:#f0e8d8;} 326 .sav-mobile-sub{padding-left:1.25rem;border-left:2px solid #e0d5bc;margin:.25rem 0 .25rem .5rem;} 327 .sav-mobile-sub a{display:block;padding:.375rem .5rem;font-size:.875rem;color:#9b928b;text-decoration:none;border-radius:.25rem;} 328 .sav-mobile-sub a:hover{color:#3f2a18;background:#f0e8d8;} 329 330 /* ââ Back-to-top ââ */ 331 .back-to-top{cursor:pointer;position:fixed;bottom:20px;right:20px;display:none;width:40px;height:40px;border-radius:50%;background:#3f2a18;color:#f5efdc;border:none;box-shadow:0 4px 12px rgba(63,42,24,.3);font-size:1rem;transition:background .2s;} 332 .back-to-top:hover{background:#d19b3d;} 333 334 /* ââ Scrollbar for sidebars ââ */ 335 .sav-scrollbar{scrollbar-width:thin;scrollbar-color:#d19b3d #2c2c2d;} 336 .sav-scrollbar::-webkit-scrollbar{width:4px;} 337 .sav-scrollbar::-webkit-scrollbar-track{background:#2c2c2d;} 338 .sav-scrollbar::-webkit-scrollbar-thumb{background:#d19b3d;border-radius:2px;} 339 340 /* ââ Mobile responsive visibility ââ */ 341 @media(max-width:767px){ 342 #savNavLinks{display:none!important;} 343 #savSearchInline{display:none!important;} 344 #savMobileToggle{display:inline-flex!important;} 345 .sav-page-header h1{font-size:1.375rem;} 346 #notifDropdown{position:fixed;top:70px;left:.75rem;right:.75rem;width:auto;max-height:calc(100vh - 5.5rem);} 347 #BindNotification{max-height:calc(100vh - 10rem);} 348 } 349 @media(min-width:768px){ 350 #savMobileToggle{display:none!important;} 351 #savMobileMenu{display:none!important;} 352 } 353 </style> 354</head> 355<body class="bg-sav-bg text-sav-text" style="padding-top:64px;"> 356 <input name="__RequestVerificationToken" type="hidden" value="3C2zunT4UraNyWWWY-9H43Qe34FJLf0cdhUhJkiP9X9BALprfHWEX_QNj74goyJZsMQCD6_SmvW7YBK1-G_EhzXZaL2UimM5eBcHxcCnois1" /> 357 358 <!-- âââââââââââââââââââ TOP NAVBAR âââââââââââââââââââ --> 359 <nav id="savNav" class="top-nav" role="banner"> 360 361 <!-- Brand --> 362 <a href="/" style="color:#3f2a18;font-weight:700;font-size:1.125rem;text-decoration:none;display:flex;align-items:center;gap:.375rem;flex-shrink:0;margin-right:.75rem;">
363 <span style="color:#d19b3d;font-size:1.3rem;line-height:1;">✦</span>Savitri 364 </a> 365 366 <!-- Desktop nav links --> 367 <div id="savNavLinks" style="display:flex;align-items:center;flex:1;height:64px;gap:.1rem;"> 368 369 <a href="/" class="sav-nav-link">Home</a> 370 371 <!-- Journals dropdown --> 372 <div class="sav-dropdown"> 373 <button class="sav-dropdown-toggle" onclick="savToggleDrop(this)"> 374 Journals <i class="fa fa-caret-down" style="font-size:.75rem;"></i> 375 </button> 376 <div class="sav-dropdown-menu" style="min-width:220px;"> 377 <a href="/blogs/light-of-supreme" class="sav-dropdown-item">The Light of the Supreme</a> 378 <a href="/blogs/savitri-cultural" class="sav-dropdown-item">Savitri Cultural</a> 379 <a href="/blogs/parasya-jyotih" class="sav-dropdown-item">परसà¥à¤¯ à¤à¥à¤¯à¥à¤¤à¤¿à¤</a> 380 <a href="/blogs/bhawani-bharati" class="sav-dropdown-item">Bhawani Bharati</a> 381 <a href="/blogs/narad-remembers" class="sav-dropdown-item">Narad Remembers</a> 382 383 </div> 384 </div> 385 386 <a href="/library" class="sav-nav-link">Library</a> 387 <a href="/books" class="sav-nav-link">Books</a> 388 389 <!-- Media dropdown --> 390 <div class="sav-dropdown"> 391 <button class="sav-dropdown-toggle" onclick="savToggleDrop(this)"> 392 Media <i class="fa fa-caret-down" style="font-size:.75rem;"></i> 393 </button> 394 <div class="sav-dropdown-menu"> 395 <a href="/mos" class="sav-dropdown-item"><i class="fa fa-picture-o fa-fw"></i> Meditations on Savitri</a> 396 <a href="/presentations" class="sav-dropdown-item"><i class="fa fa-film fa-fw"></i> Presentations</a> 397 <a href="/themes" class="sav-dropdown-item"><i class="fa fa-picture-o fa-fw"></i> Themes</a> 398 <a href="/audio" class="sav-dropdown-item"><i class="fa fa-headphones fa-fw"></i> Audio</a> 399 <div class="sav-dropdown-divider"></div> 400 <a href="/about" class="sav-dropdown-item"><i class="fa fa-info-circle fa-fw"></i> About</a> 401 </div> 402 </div> 403 404 <!-- Analysis dropdown --> 405 <div class="sav-dropdown"> 406 <button class="sav-dropdown-toggle" onclick="savToggleDrop(this)"> 407 Analysis <i class="fa fa-caret-down" style="font-size:.75rem;"></i> 408 </button> 409 <div class="sav-dropdown-menu"> 410 <a href="/count" class="sav-dropdown-item"><i class="fa fa-bar-chart fa-fw"></i> Counts</a> 411 <a href="/lineinfo" class="sav-dropdown-item"><i class="fa fa-list-ol fa-fw"></i> Line Info</a> 412 </div> 413 </div> 414 415 <!-- Notifications --> 416 <div class="sav-dropdown"> 417 <button class="sav-dropdown-toggle" style="padding:.375rem .75rem;" onclick="savToggleDrop(this); GetNotifications();"> 418 <i class="fa fa-bell faa-ring animated" style="font-size:1rem;"></i> 419 </button> 420 <div class="sav-dropdown-menu" id="notifDropdown"> 421 <div class="sav-dropdown-header">Notifications</div> 422 <ul id="BindNotification"></ul> 423 </div> 424 </div> 425 426 </div> 427 428 <!-- Inline search (desktop) --> 429 <div id="savSearchInline" style="display:flex;align-items:center;gap:.375rem;margin:0 .5rem;"> 430 <input type="text" id="SearchBoxNav" placeholder="Search…" class="sav-input" style="width:155px;padding:.375rem .75rem;font-size:.8125rem;" /> 431 <a href="#" onclick="event.preventDefault();SearchGoNav();" style="color:#9b928b;padding:.375rem .5rem;font-size:.9rem;text-decoration:none;display:inline-flex;align-items:center;" aria-label="Search"> 432 <i class="fa fa-search"></i> 433 </a> 434 </div> 435 436 <!-- Theme toggle: Light â Sepia â Dark --> 437 <button type="button" id="savThemeToggle" class="sav-dropdown-toggle" style="padding:.375rem .6rem;flex-shrink:0;" title="Switch theme (Light / Sepia / Dark)" aria-label="Switch theme" onclick="savCycleTheme(
437)"> 438 <i class="fa fa-sun-o" id="savThemeIcon" style="font-size:1rem;"></i> 439 </button> 440 441 <!-- Sidebar toggle: shown only on pages that expose a reading sidebar / TOC --> 442 <button type="button" id="savSidebarToggle" class="sav-dropdown-toggle" style="display:none;padding:.375rem .6rem;flex-shrink:0;" title="Hide sidebar" aria-label="Toggle sidebar" aria-pressed="true" onclick="savToggleSidebar()"> 443 <i class="fa fa-columns" id="savSidebarToggleIcon" style="font-size:1rem;"></i> 444 </button> 445 446 <!-- Account / login --> 447 <div style="display:flex;align-items:center;gap:.25rem;flex-shrink:0;"> 448 <a href="/login" class="sav-btn sav-btn-outline sav-btn-sm"><i class="fa fa-sign-in" style="margin-right:.3rem;"></i> Log In</a> 449 450 <!-- Mobile hamburger (hidden on desktop via CSS) --> 451 <button id="savMobileToggle" onclick="savToggleMobile();" aria-label="Open menu" 452 style="display:none;align-items:center;justify-content:center;flex-direction:column;gap:4px;width:36px;height:36px;border:1px solid #e0d5bc;border-radius:.375rem;background:transparent;cursor:pointer;padding:7px;margin-left:.25rem;"> 453 <span style="display:block;width:18px;height:2px;background:#3f2a18;border-radius:1px;"></span> 454 <span style="display:block;width:18px;height:2px;background:#3f2a18;border-radius:1px;"></span> 455 <span style="display:block;width:18px;height:2px;background:#3f2a18;border-radius:1px;"></span> 456 </button> 457 </div> 458 </nav> 459 460 <!-- âââââââââââââââââââ MOBILE MENU âââââââââââââââââââ --> 461 <div id="savMobileMenu"> 462 <div style="display:flex;gap:.5rem;margin-bottom:.75rem;"> 463 <input type="text" id="SearchBoxNavMobile" placeholder="Search…" class="sav-input" style="flex:1;" /> 464 <button class="sav-btn sav-btn-outline sav-btn-sm" onclick="document.getElementById('SearchBoxNav').value=d
464ocument.getElementById('SearchBoxNavMobile').value;SearchGoNav();"> 465 <i class="fa fa-search"></i> 466 </button> 467 </div> 468 <a href="/" class="sav-mobile-link"><i class="fa fa-home fa-fw" style="margin-right:.5rem;color:#9b928b;"></i> Home</a> 469 <a href="/library" class="sav-mobile-link"><i class="fa fa-book fa-fw" style="margin-right:.5rem;color:#9b928b;"></i> Library</a> 470 <a href="/books" class="sav-mobile-link"><i class="fa fa-bookmark fa-fw" style="margin-right:.5rem;color:#9b928b;"></i> Books</a> 471 <button class="sav-mobile-link" onclick="this.nextElementSibling.style.display=this.nextElementSibling.style.display==='none'?'block':'none'"> 472 <i class="fa fa-newspaper-o fa-fw" style="margin-right:.5rem;color:#9b928b;"></i> Journals 473 </button> 474 <div class="sav-mobile-sub" style="display:none;"> 475 <a href="/blogs/light-of-supreme" class="sav-dropdown-item">The Light of the Supreme</a> 476 <a href="/blogs/savitri-cultural" class="sav-dropdown-item">Savitri Cultural</a> 477 <a href="/blogs/parasya-jyotih" class="sav-dropdown-item">परसà¥à¤¯ à¤à¥à¤¯à¥à¤¤à¤¿à¤</a> 478 <a href="/blogs/bhawani-bharati" class="sav-dropdown-item">Bhawani Bharati</a> 479 <a href="/blogs/narad-remembers" class="sav-dropdown-item">Narad Remembers</a> 480 481 </div> 482 <button class="sav-mobile-link" onclick="this.nextElementSibling.style.display=this.nextElementSibling.style.display==='none'?'block':'none'"> 483 <i class="fa fa-film fa-fw" style="margin-right:.5rem;color:#9b928b;"></i> Media 484 </button> 485 <div class="sav-mobile-sub" style="display:none;"> 486 <a href="/mos">Meditations on Savitri</a> 487 <a href="/presentations">Presentations</a> 488 <a href="/themes">Themes</a> 489 <a href="/audio">Audio</a> 490 <a href="/about">About</a> 491 </div> 492 <a href="/count" class="sav-mobile-link"><i class="fa fa-bar-chart fa-fw" style="margin-right:.5rem;color:#9b928b;"></i> Counts</a> 493 <a href="/login" class="sav-mobile-link"><i class="fa fa-sign-in fa-fw" style="margin-right:.5rem;color:#9b928b;"></i> Log In / Register</a> 494 </div> 495 496 <!-- âââââââââââââââââââ PAGE BODY âââââââââââââââââââ --> 497 <div class="container body-content" style="padding-top:1rem;"> 498 499 500<!-- Sidebar â Bootstrap navbar classes removed, id kept for JS --> 501<nav role="navigation" id="TocShowHide" style="display:none;"> 502 <div class="nav-side-menu sav-scrollbar"> 503 <div class="brand">Table of Content</div> 504 <i class="fa fa-bars fa-2x toggle-btn" data-toggle="collapse" data-target="#menu-content"></i> 505 <div class="menu-list"> 506 <ul id="menu-content" class="menu-content" aria-expanded="true"> 507 <li class="text-center" id="PlaceHolderLoad" aria-expanded="true" data-pid="1"> 508 <a href="#">Load More <span class="DataCount"></span></a> 509 </li> 510 </ul> 511 </div> 512 </div> 513</nav> 514 515<div id="bindData" class="sav-feed-wrap"> 516 <div class="divafter" style="text-align:center;padding:2.5rem 0 1.5rem;"> 517 <h1 id="jtype" style="font-family:Georgia,Palatino,'Times New Roman',serif;font-size:2rem;font-weight:700;color:#3f2a18;margin:0 0 .5rem;line-height:1.25;"></h1> 518 <h5 id="rssfeeder" style="color:#9b928b;font-size:.95rem;font-style:italic;margin:.25rem 0 0;font-weight:400;"></h5> 519 <p style="margin-top:.75rem;"> 520 <a href="" id="ShowToc" style="color:#d19b3d;font-family:'Crimson Text',Georgia,serif;">Show table of Content</a> 521 </p> 522 <div style="width:3rem;height:2px;background:#d19b3d;margin:.75rem auto 0;border-radius:1px;"></div> 523 </div> 524</div> 525 526<div class="sav-feed-wrap" style="display:flex;gap:2rem;flex-wrap:wrap;align-items:flex-start;"> 527 <div style="flex:1;min-width:0;" id="DataCustom"> 528 <div id="placeHolder"> 529 <p id="placeholderparar" style="display:none;">
530 <span><a href="#" class="sav-btn sav-btn-outline sav-btn-sm" id="loadData">Load More</a></span> 531 </p> 532 </div> 533 </div> 534 <div style="font-size:.9rem;" id="recentPosts"></div> 535</div> 536 537 538 539 <!-- WhatsApp --> 540 <div style="position:fixed;left:0;bottom:0;z-index:100;"> 541 <a href="https://api.whatsapp.com/send?phone=919310081872&text=Savitri%20--help" target="_blank" style="display:block;"> 542 <img src="https://vmltdata.s3-us-west-2.amazonaws.com/whatsapp.png" style="max-height:60px;"> 543 </a> 544 </div> 545 546 <!-- Back to top --> 547 <button id="back-to-top" class="back-to-top" title="Back to top" aria-label="Back to top"> 548 <i class="fa fa-chevron-up"></i> 549 </button> 550 551 <hr style="margin-top:2rem;border-color:#e0d5bc;" /> 552 <footer style="text-align:center;padding:1rem 0 1.5rem;font-size:.875rem;color:#9b928b;"> 553 <span>© 2026 Savitri</span> 554 — 555 <a href="/privacy-policy" target="_blank" style="color:#0d9488;">Privacy Policy</a> 556 </footer> 557 </div> 558 559 <!-- âââââââââââââââââââ SCRIPTS âââââââââââââââââââ --> 560
560<script src="/bundles/jquery?v=geHET3tT1HOb31uCwxJK1kl3ddcbtQpIPvT1bp-OXiI1"></script>
560 561 562
562<script src="/bundles/bootstrap?v=uC2-l4zY_lrcdhknLbcp1BQ3QdMCQd8SRkJ3yCEfzps1"></script>
562 563 564
564<script defer src="https://cdn.jsdelivr.net/simplemde/latest/simplemde.min.js"></script>
564 565
565<script src="/Scripts/jquery.firstVisitPopup.min.js"></script>
565 566
566<script src='/bundles/custom?v=qFo7I6HQ8_QX9gelfxvOTr5EzD0g98QKQJL36Asch1k1' defer></script>
566 567 568 569
569<script type="text/javascript"> 570 $(document).ready(function () { 571 RegexMatch('.content'); 572 $("#placeholderparar").hide(); 573 var pathArray = window.location.pathname.split("/"); 574 var pn = 1; 575 if (pathArray[1] !== "" && pathArray[2] !== "") { 576 getSlugsDetails(pathArray[2], pn); 577 } 578 $("#loadData").click(function (event) { 579 event.preventDefault(); 580 pn++; 581 getSlugsDetails(pathArray[2], pn); 582 }); 583 $(window).scroll(function () { 584 if ($(window).scrollTop() >= ($(document).height() * 0.8) - $(window).height()) { 585 $("#placeholderparar").show(); 586 } 587 }); 588 }); 589 </script>
589 590 591
591<script type="text/javascript" src="//fast.fonts.net/jsapi/8b9becaf-4f33-4214-83ca-084c4a14579f.js"></script>
591 592 593 <!-- Bootstrap modal kept for JS compatibility (custom.js uses Bootstrap modal API) --> 594 <div class="modal fade sav-reader-modal" id="showData" role="dialog" aria-labelledby="showDataTitle" data-backdrop="static" data-keyboard="false"> 595 <div class="modal-dialog modal-lg sav-reader-dialog"> 596 <div class="modal-content sav-reader-content"> 597 <div class="modal-header sav-reader-header"> 598 <h2 class="modal-title sav-reader-title" id="showDataTitle"></h2> 599 <button type="button" class="close sav-reader-close" data-dismiss="modal" aria-label="Close" title="Close"> 600 <span aria-hidden="true">×</span> 601 </button> 602 </div> 603 <div class="modal-body sav-reader-body"></div> 604 <div class="modal-footer sav-reader-footer"> 605 <div class="sav-reader-nav"> 606 <span class="navigators"> 607 <a href="" class="previous sav-reader-nav-btn" data-next="" aria-label="Previous" title="Previous"> 608 <i class="fa fa-chevron-left" aria-hidden="true"></i> 609 </a> 610 </span> 611 <span class="navigators"> 612 <a href="" data-next="" class="next sav-reader-nav-btn" aria-label="Next" title="Next"> 613 <i class="fa fa-chevron-right" aria-hidden="true"></i> 614 </a> 615 </span> 616 </div> 617 <button type="button" class="sav-btn sav-btn-outline sav-reader-close-btn" data-dismiss="modal">Close</button> 618 </div> 619 </div> 620 </div> 621 </div> 622 623 <div class="modalLoader"></div> 624 <div id="snackbar" style="visibility:hidden;min-width:250px;margin-left:-125px;background:#3f2a18;color:#f5efdc;text-align:center;border-radius:.5rem;padding:.875rem 1.25rem;position:fixed;z-index:9999;left:50%;bottom:30px;font-size:.875rem;"></div> 625 626
626<script> 627 // ââ Minimal Bootstrap-compatible modal shim (installs only if Bootstrap's modal JS is absent) ââ 628 (function ($) { 629 if (!$ || !$.fn || $.fn.modal) return; // real Bootstrap modal present â leave it alone 630 var openCount = 0; 631 function opt(el, name, dflt) { 632 var v = el.getAttribute('data-' + name); 633 if (v === null) return dflt; 634 if (v === 'false') return false; 635 if (v === 'true') return true; 636 return v; 637 } 638 function show($m) { 639 var el = $m[0]; 640 if (!el || el.classList.contains('in')) return; 641 $m.trigger('show.bs.modal'); 642 var backdrop = opt(el, 'backdrop', true); 643 if (backdrop !== false) { 644 var bd = document.createElement('div'); 645 bd.className = 'modal-backdrop fade'; 646 document.body.appendChild(bd); 647 el._savBd = bd; 648 void bd.offsetWidth; 649 bd.classList.add('in'); 650 if (backdrop !== 'static') { 651 bd.addEventListener('click', function () { hide($m); }); 652 } 653 } 654 document.body.classList.add('modal-open'); 655 el.style.display = 'block'; 656 el.removeAttribute('aria-hidden'); 657 el.setAttribute('aria-modal', 'true'); 658 void el.offsetWidth; // reflow so .fade transition runs 659 el.classList.add('in'); 660 openCount++; 661 $m.trigger('shown.bs.modal'); 662 } 663 function hide($m) { 664 var el = $m[0]; 665 if (!el || !el.classList.contains('in')) return; 666 $m.trigger('hide.bs.modal'); 667 el.classList.remove('in'); 668 var bd = el._savBd; 669 if (bd) bd.classList.remove('in'); 670 function done() { 671 el.style.display = 'none'; 672 el.setAttribute('aria-hidden', 'true'); 673 el.removeAttribute('aria-modal'); 674 if (bd && bd.parentNode) bd.parentNode.removeChild(bd); 675 el._savBd = null; 676 openCount = Math.max(0, openCount - 1); 677 if (openCount === 0) document.body.classList.remove('modal-open'); 678 $m.trigger('hidden.bs.modal'); 679 } 680 if (el.classList.contains('fade')) setTimeout(done, 300); else done(); 681 } 682 $.fn.modal = function (arg) { 683 return this.each(function () { 684 var $m = $(this); 685 if (arg === 'hide') hide($m); 686 else if (arg === 'toggle') this.classList.contains('in') ? hide($m) : show($m); 687 else show($m); // undefined / object / 'show' 688 }); 689 }; 690 $(document).on('click', '[data-dismiss="modal"]', function (e) { 691 e.preventDefault(); 692 var $m = $(this).closest('.modal'); 693 if ($m.length) hide($m); 694 }); 695 $(document).on('keydown', function (e) { 696 if (e.keyCode !== 27) return; 697 var $open = $('.modal.in').last(); 698 if ($open.length && opt($open[0], 'keyboard', true) !== false) hide($open); 699 }); 700 })(window.jQuery); 701 702 // ââ Minimal Bootstrap-compatible tab shim (installs only if Bootstrap's tab JS is absent) ââ 703 (function ($) { 704 if (!$ || !$.fn || $.fn.tab) return; // real Bootstrap tab present â leave it alone 705 $(document).on('click', '[data-toggle="tab"]', function (e) { 706 e.preventDefault(); 707 var sel = this.getAttribute('href') || this.getAttribute('data-target'); 708 var pane = sel ? document.querySelector(sel) : null; 709 var li = this.closest('li'); 710 var nav = this.closest('.nav'); 711 if (nav) nav.querySelectorAll('li').forEach(function (l) { l.classList.remove('active'); }); 712 if (li) li.classList.add('active'); 713 if (pane && pane.parentNode) { 714 pane.parentNode.querySelectorAll('.tab-pane').forEach(function (p) { p.classList.remove('active', 'in'); }); 715 pane.classList.add('active', 'in'); 716 } 717 }); 718 })(window.jQuery); 719 720 // Navbar dropdown toggle 721 function savToggleDrop(btn) { 722 var parent = btn.closest('.sav-dropdown'); 723 var wasOpen = parent.classList.contains('open'); 724 document.querySelectorAll('.sav-dropdown.open').forEach(function(d) { d.classList.remove('open'); }); 725 if (!wasOpen) { parent.classList.add('open'); } 726 } 727 document.addEventListener('click', function(e) { 728 if (!e.target.closest('.sav-dropdown')) { 729 document.querySelectorAll('.sav-dropdown.open').forEach(function(d) { d.classList.remove('open'); }); 730 } 731 });
732 733 // Mobile menu toggle 734 function savToggleMobile() { 735 document.getElementById('savMobileMenu').classList.toggle('open'); 736 } 737 738 function savGetSidebarNav() { 739 return document.querySelector('nav.generalData') || document.getElementById('TocShowHide'); 740 } 741 742 function savSidebarIsVisible(nav) { 743 if (!nav) return false; 744 return window.getComputedStyle(nav).display !== 'none' && !nav.classList.contains('sav-sidebar-hidden'); 745 } 746 747 function savSidebarNextFrame(callback) { 748 if (window.requestAnimationFrame) { 749 window.requestAnimationFrame(function() { 750 window.requestAnimationFrame(callback); 751 }); 752 } else { 753 window.setTimeout(callback, 0); 754 } 755 } 756 757 function savSidebarTransitionMs() { 758 if (window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches) { 759 return 0; 760 } 761 return 540; 762 } 763 764 function savClearSidebarTimer(nav) { 765 if (nav && nav.__savSidebarTimer) { 766 window.clearTimeout(nav.__savSidebarTimer); 767 nav.__savSidebarTimer = null; 768 } 769 } 770 771 function savClearSidebarContentTimer() { 772 if (document.body.__savSidebarContentTimer) { 773 window.clearTimeout(document.body.__savSidebarContentTimer); 774 document.body.__savSidebarContentTimer = null; 775 } 776 document.body.classList.remove('sidebar-content-prep'); 777 document.body.classList.remove('sidebar-content-animating'); 778 document.body.style.removeProperty('--sav-sidebar-content-shift'); 779 } 780 781 function savCanAnimateSidebarContent(content) { 782 if (!content || !document.body.classList.contains('sidebar-transition-ready')) return false; 783 if (window.innerWidth <= 860) return false; 784 if (window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches) return false; 785 return true; 786 } 787 788 function savApplySidebarBodyOffset(visible) { 789 if (visible) { 790 document.body.classList.add('has-sidebar'); 791 document.body.classList.add('sidebar-active'); 792 } else { 793 document.body.classList.remove('has-sidebar'); 794 document.body.classList.remove('sidebar-active'); 795 } 796 } 797 798 function savAnimateSidebarContent(content, applyLayoutChange) { 799 if (!savCanAnimateSidebarContent(content)) { 800 applyLayoutChange(); 801 return; 802 } 803 804 savClearSidebarContentTimer(); 805 var startLeft = content.getBoundingClientRect().left; 806 applyLayoutChange(); 807 var endLeft = content.getBoundingClientRect().left; 808 var shift = startLeft - endLeft; 809 if (Math.abs(shift) < 1) return; 810 811 document.body.style.setProperty('--sav-sidebar-content-shift', shift + 'px'); 812 document.body.classList.add('sidebar-content-prep'); 813 content.getBoundingClientRect(); 814 document.body.classList.remove('sidebar-content-prep'); 815 document.body.classList.add('sidebar-content-animating'); 816 817 savSidebarNextFrame(function() { 818 document.body.style.setProperty('--sav-sidebar-content-shift', '0px'); 819 document.body.__savSidebarContentTimer = window.setTimeout(function() { 820 savClearSidebarContentTimer(); 821 }, savSidebarTransitionMs()); 822 }); 823 } 824 825 function savShowSidebar(nav) { 826 if (!nav) return; 827 savClearSidebarTimer(nav); 828 if (window.getComputedStyle(nav).display === 'none') { 829 nav.classList.add('sav-sidebar-hidden'); 830 nav.style.display = 'block'; 831 } 832 nav.classList.add('sav-sidebar-animating'); 833 nav.getBoundingClientRect(); 834 savSidebarNextFrame(function() { 835 nav.classList.remove('sav-sidebar-hidden'); 836 nav.__savSidebarTimer = window.setTimeout(function() { 837 nav.classList.remove('sav-sidebar-animating'); 838 nav.__savSidebarTimer = null; 839 }, savSidebarTransitionMs()); 840 }); 841 } 842
843 function savHideSidebar(nav, collapseAfter) { 844 if (!nav) return; 845 savClearSidebarTimer(nav); 846 if (window.getComputedStyle(nav).display === 'none') { 847 nav.classList.add('sav-sidebar-hidden'); 848 return; 849 } 850 nav.classList.add('sav-sidebar-animating'); 851 nav.classList.add('sav-sidebar-hidden'); 852 nav.__savSidebarTimer = window.setTimeout(function() { 853 if (collapseAfter && nav.classList.contains('sav-sidebar-hidden')) { 854 nav.style.display = 'none'; 855 } 856 nav.classList.remove('sav-sidebar-animating'); 857 nav.__savSidebarTimer = null; 858 }, savSidebarTransitionMs()); 859 } 860 861 function savUpdateSidebarToggle(visible) { 862 var btn = document.getElementById('savSidebarToggle'); 863 if (!btn) return; 864 var nav = savGetSidebarNav(); 865 if (!nav) { 866 btn.style.display = 'none'; 867 return; 868 } 869 var isVisible = typeof visible === 'boolean' ? visible : savSidebarIsVisible(nav); 870 if (isVisible) btn.setAttribute('data-sidebar-available', '1'); 871 if (!isVisible && btn.getAttribute('data-sidebar-available') !== '1') { 872 btn.style.display = 'none'; 873 return; 874 } 875 btn.style.display = 'inline-flex'; 876 btn.setAttribute('aria-pressed', isVisible ? 'true' : 'false'); 877 btn.title = isVisible ? 'Hide sidebar' : 'Show sidebar'; 878 btn.setAttribute('aria-label', isVisible ? 'Hide sidebar' : 'Show sidebar'); 879 } 880 881 function savToggleSidebar() { 882 var nav = savGetSidebarNav(); 883 if (!nav) return; 884 var shouldShow = !savSidebarIsVisible(nav); 885 savSetSidebarOffset(shouldShow, nav); 886 } 887 888 // Sidebar body class â used by Site.css to offset content 889 function savSetSidebarOffset(visible, nav, collapseAfter) { 890 nav = nav || savGetSidebarNav(); 891 if (visible) { savShowSidebar(nav); } 892 else { savHideSidebar(nav, collapseAfter); } 893 894 var content = document.querySelector('.container.body-content'); 895 savAnimateSidebarContent(content, function() { 896 savApplySidebarBodyOffset(visible); 897 }); 898 savUpdateSidebarToggle(visible); 899 } 900 // Set offset immediately if sidebar nav exists and is visible on this page 901 (function() { 902 var nav = savGetSidebarNav(); 903 if (nav && savSidebarIsVisible(nav)) { savSetSidebarOffset(true); } 904 else { savUpdateSidebarToggle(false); } 905 var enableSidebarTransitions = function() { 906 document.body.classList.add('sidebar-transition-ready'); 907 }; 908 if (window.requestAnimationFrame) { window.requestAnimationFrame(enableSidebarTransitions); } 909 else { window.setTimeout(enableSidebarTransitions, 0); } 910 })(); 911 // Patch jQuery show/hide on sidebars so the body offset and toggle stay in sync 912 $(document).ready(function() { 913 var orig_show = $.fn.show, orig_hide = $.fn.hide, orig_fadeIn = $.fn.fadeIn, orig_fadeOut = $.fn.fadeOut; 914 function isSidebarSet(set) { 915 return set.is && set.is('nav.generalData, #TocShowHide'); 916 } 917 function applySidebarVisibility(set, visible, collapseAfter) { 918 set.each(function() { 919 savSetSidebarOffset(visible, this, collapseAfter); 920 }); 921 return set; 922 } 923 $.fn.show = function() { 924 if (isSidebarSet(this)) { return applySidebarVisibility(this, true, false); } 925 var result = orig_show.apply(this, arguments); 926 return result; 927 }; 928 $.fn.hide = function() { 929 if (isSidebarSet(this)) { return applySidebarVisibility(this, false, true); } 930 var result = orig_hide.apply(this, arguments); 931 return result; 932 }; 933 $.fn.fadeIn = function() { 934 if (isSidebarSet(this)) { return applySidebarVisibility(this, true, false); } 935 return orig_fadeIn.apply(this, arguments); 936 }; 937 $.fn.fadeOut = function() { 938 if (isSidebarSet(this)) { return applySidebarVisibility(this, false, true); } 939 return orig_fadeOut.apply(this, arguments); 940 }; 941 savUpdateSidebarToggle(); 942 });
943 944 // Back-to-top 945 $(window).on('scroll', function() { 946 if ($(this).scrollTop() > 50) { $('#back-to-top').fadeIn(); } 947 else { $('#back-to-top').fadeOut(); } 948 }); 949 $('#back-to-top').on('click', function(e) { 950 e.preventDefault(); 951 $('body,html').animate({ scrollTop: 0 }, 800); 952 }); 953 </script>
953 954 955 <!-- Google Analytics -->
vendor: 69 bytes, lines 955-956
955 956 <script async src="https://www.googletagmanager.com/gtag/js?id=
956UA-40735254-1
vendor: 17 bytes, lines 956-957
956"></script> 957
957<script> 958
vendor: 142 bytes, lines 958-961
958window.dataLayer = window.dataLayer || []; 959 function gtag(){dataLayer.push(arguments);} 960 gtag('js', new Date()); 961 gtag('config', '
961UA-40735254-1
vendor: 9 bytes, lines 961-962
961'); 962
962</script>
vendor: 2 bytes, line 962
962
963<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"6bdb57013c2747328ffed5b42b370dba","r":1,"spa":2}' crossorigin="anonymous"></script>
963 964</body> 965</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.