PageSourceSearch

https://gotorah.web.app/

html gotorah.web.app collected 2026-10-03 12:24:28 UTC 4,556 bytes, 139 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en">
3  <head>
4    <meta charset="UTF-8" />
5    <link rel="icon" type="image/svg+xml" href="/icon.svg" />
6    <link rel="apple-touch-icon" href="/icon.svg" />
7    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
8
9    <!-- PWA Configuration -->
10    <link rel="manifest" href="/manifest.json" />
11    <meta name="theme-color" content="#fef3c7" />
12    <meta name="apple-mobile-web-app-capable" content="yes" />
13    <meta name="apple-mobile-web-app-status-bar-style" content="default" />
14    <meta name="apple-mobile-web-app-title" content="GoTorah" />
15
16    <!-- SEO & Description -->
17    <title>GoTorah</title>
18    <meta name="description" content="AI-powered Torah study companion - Connect with Torah like never before" />
19    
19<script src="https://cdn.tailwindcss.com"></script>
19
20    <link rel="preconnect" href="https://fonts.googleapis.com">
21    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
22    <link href="https://fonts.googleapis.com/css2?family=EB+Garamond:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600&family=Frank+Ruhl+Libre:wght@300;400;500;700&family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
23    <style>
24      /* --- GoTorah Loading Animations --- */
25      @keyframes logo-scale-in {
26        from {
27          transform: scale(0.8);
28          opacity: 0;
29        }
30        to {
31          transform: scale(1);
32          opacity: 1;
33        }
34      }
35
36      .animate-logo-scale-in {
37        animation: logo-scale-in 0.7s cubic-bezier(0.25, 1, 0.5, 1) forwards;
38      }
39
40      @keyframes line-1-draw {
41        from { width: 0; }
42        to { width: 2.5rem; } /* w-10 */
43      }
44      .animate-line-1-draw {
45          width: 0;
46          animation: line-1-draw 0.5s ease-out forwards;
47          animation-delay: 0.5s;
48      }
49
50      @keyframes line-2-draw {
51        from { width: 0; }
52        to { width: 2.25rem; } /* w-9 */
53      }
54      .animate-line-2-draw {
55          width: 0;
56          animation: line-2-draw 0.5s ease-out forwards;
57          animation-delay: 0.7s;
58      }
59      
60      @keyframes line-3-draw {
61        from { width: 0; }
62        to { width: 2rem; } /* w-8 */
63      }
64      .animate-line-3-draw {
65          width: 0;
66          animation: line-3-draw 0.5s ease-out forwards;
67          animation-delay: 0.9s;
68      }
69
70      @keyframes fade-in-up {
71        from {
72          opacity: 0;
73          transform: translateY(20px);
74        }
75        to {
76          opacity: 1;
77          transform: translateY(0);
78        }
79      }
80      .animate-fade-in-up {
81          opacity: 0;
82          animation: fade-in-up 0.6s cubic-bezier(0.25, 1, 0.5, 1) forwards;
83      }
84
85      /* --- Bring to My Table shimmer --- */
86      @keyframes btn-shimmer {
87        0%   { background-position: -200% center; }
88        100% { background-position:  200% center; }
89      }
90      .animate-btn-shimmer {
91        background-image: linear-gradient(
92          105deg,
93          transparent 40%,
94          rgba(255,255,255,0.18) 50%,
95          transparent 60%
96        );
97        background-size: 200% 100%;
98        animation: btn-shimmer 2.8s ease-in-out infinite;
99      }
100
101      /* --- Base Styles --- */
102      body {
103        font-family: 'Inter', sans-serif;
104      }
105      h1, h2, h3, h4, .font-serif {
106        font-family: 'Frank Ruhl Libre', serif;
107      }
108    </style>
109
110  
110<script type="importmap">
111{
112  "imports": {
113    "react": "https://aistudiocdn.com/react@^19.1.1",
114    "react-dom/": "https://aistudiocdn.com/react-dom@^19.1.1/",
115    "react/": "https://aistudiocdn.com/react@^19.1.1/",
116    "@google/genai": "https://aistudiocdn.com/@google/genai@^1.20.0",
117    "firebase/app": "https://www.gstatic.com/firebasejs/10.12.2/firebase-app.js",
118    "firebase/auth": "https://www.gstatic.com/firebasejs/10.12.2/firebase-auth.js",
119    "firebase/": "https://aistudiocdn.com/firebase@^12.3.0/",
120    "vite": "https://aistudiocdn.com/vite@^7.1.7",
121    "path": "https://aistudiocdn.com/path@^0.12.7",
122    "@vitejs/plugin-react": "https://aistudiocdn.com/@vitejs/plugin-react@^5.0.3"
123  }
124}
125</script>
125
126  
126<script type="module" crossorigin src="/assets/index-BlBr0r9U.js"></script>
126
127</head>
128  <body class="bg-slate-50">
129    <!-- Capture donate intent before React mounts or Firebase redirects strip the URL param -->
130    
130<script>
131      try {
132        if (new URLSearchParams(window.location.search).get('donate') === 'true') {
133          sessionStorage.setItem('pendingDonate', 'true');
134        }
135      } catch(e) {}
136    </script>
136
137    <div id="root"></div>
138  </body>
139</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.