PageSourceSearch

https://snich.ai/

html snich.ai collected 2026-10-05 15:07:11 UTC 7,965 bytes, 226 lines download raw bytes

1<!DOCTYPE html>
2<html lang="ru">
3
4<head>
5  <meta charset="UTF-8" />
6  <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
7  <title>snich.ai</title>
8  <meta name="description" content="Российская платформа видеосвязи с AI: встречи, вебинары и обучение в браузере. SNICH фиксирует решения, раздаёт задачи и отправляет итоги участникам через минуту после звонка." />
9  <meta property="og:type" content="website" />
10  <meta property="og:site_name" content="SNICH" />
11  <meta property="og:title" content="SNICH — встречи и вебинары, которые заканчиваются результатом" />
12  <meta property="og:description" content="Российская платформа видеосвязи с AI: решения, задачи и итоги — через минуту после звонка." />
13  <meta property="og:image" content="https://snich.ai/og-default.png" />
14  <meta property="og:image:width" content="1200" />
15  <meta property="og:image:height" content="630" />
16  <meta name="twitter:card" content="summary_large_image" />
17  <link rel="icon" type="image/png" sizes="64x64" href="/brand/favicon-64.png?v=2" />
18  <link rel="icon" type="image/png" sizes="32x32" href="/brand/favicon-32.png?v=2" />
19  <link rel="icon" type="image/svg+xml" href="/brand/favicon.svg?v=2" />
20  <link rel="apple-touch-icon" href="/brand/apple-touch-icon.png" />
21  
21<script>
22    if (window.performance && performance.mark) performance.mark('snich:boot:html');
23  </script>
23
24  <!-- Fonts load without blocking first paint: the stylesheet is fetched at
25       low priority (media="print") and applied once ready. -->
26  <link rel="preconnect" href="https://fonts.googleapis.com" />
27  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
28  <link rel="stylesheet"
29    href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Manrope:wght@400;500;600;700;800&family=Rubik:wght@500;700;800&family=Onest:wght@400;500;600;700&family=Unbounded:wght@500;600;700&family=JetBrains+Mono:wght@500;600&display=swap"
30    media="print" onload="this.media='all'" />
31  <noscript>
32    <link rel="stylesheet"
33      href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Manrope:wght@400;500;600;700;800&family=Rubik:wght@500;700;800&family=Onest:wght@400;500;600;700&family=Unbounded:wght@500;600;700&family=JetBrains+Mono:wght@500;600&display=swap" />
34  </noscript>
35  <style>
36    body {
37      font-family: 'Inter', sans-serif;
38      background-color: #181a1b;
39      color: white;
40      overflow-x: hidden;
41      overflow-y: auto;
42      -webkit-overflow-scrolling: touch;
43    }
44
45    /* Prevent text size adjustment on orientation change */
46    html {
47      -webkit-text-size-adjust: 100%;
48      -moz-text-size-adjust: 100%;
49           text-size-adjust: 100%;
50    }
51
52    /* Custom scrollbar */
53    ::-webkit-scrollbar {
54      width: 6px;
55      height: 6px;
56    }
57
58    ::-webkit-scrollbar-track {
59      background: #2b2d30;
60    }
61
62    ::-webkit-scrollbar-thumb {
63      background: #555;
64      border-radius: 3px;
65    }
66
67    ::-webkit-scrollbar-thumb:hover {
68      background: #777;
69    }
70
71    /* Improve touch targets */
72    @media (hover: none) and (pointer: coarse) {
73
74      button,
75      a,
76      select {
77        min-height: 44px;
78      }
79    }
80
81    /* Boot loader: pure CSS, visible from the first painted frame until React
82       mounts and replaces #root's content. */
83    #snich-boot-loader {
84      position: fixed;
85      inset: 0;
86      display: flex;
87      flex-direction: column;
88      align-items: center;
89      justify-content: center;
90      gap: 18px;
91      background: #F4F3EF;
92      z-index: 2147483000;
93    }
94
95    #snich-boot-loader .snich-boot-brand {
96      display: flex;
97      align-items: center;
98      gap: 12px;
99      font-family: 'Unbounded', 'Onest', -apple-system, sans-serif;
100      font-size: 26px;
101      font-weight: 600;
102      letter-spacing: -0.015em;
103      color: #141619;
104    }
105
106    #snich-boot-loader .snich-boot-brand img {
107      width: 44px;
108      height: 44px;
109      display: block;
110    }
111
112    #snich-boot-loader .snich-boot-brand b {
113      font-weight: inherit;
114    }
115
116    #snich-boot-loader .snich-boot-brand span {
117      color: #D52F3A;
118    }
119
120    #snich-boot-loader .snich-boot-spinner {
121      width: 30px;
122      height: 30px;
123      border-radius: 50%;
124      border: 3px solid rgba(20, 22, 25, 0.1);
125      border-top-color: #0A72C6;
126      animation: snich-boot-spin 0.9s linear infinite;
127    }
128
129    #snich-boot-loader .snich-boot-text {
130      font-family: 'Onest', 'Inter', -apple-system, sans-serif;
131      font-size: 14px;
132      font-weight: 500;
133      color: #6A7079;
134    }
135
136    /* Appears only when loading takes suspiciously long. */
137    #snich-boot-loader .snich-boot-slow-hint {
138      font-family: 'Onest', 'Inter', -apple-system, sans-serif;
139      font-size: 12px;
140      color: #868D96;
141      opacity: 0;
142      animation: snich-boot-appear 0.4s ease 15s forwards;
143    }
144
145    @keyframes snich-boot-spin {
146      to {
147        transform: rotate(360deg);
148      }
149    }
150
151    @keyframes snich-boot-appear {
152      to {
153        opacity: 1;
154      }
155    }
156  </style>
157
158  <!-- pdf.js and JSZip are injected on demand by utils/externalLibs.ts when a
159       PDF/PPTX upload actually needs them. Keeping them out of <head> removes
160       two parser-blocking CDN requests from the critical path. -->
161
162  
162<script>
163    (function () {
164      var hash = window.location.hash || '';
165      if (hash.indexOf('#/') !== 0) return;
166
167      var next = hash.slice(1);
168      var hostname = window.location.hostname;
169      var isLocal = hostname === 'localhost' || hostname === '127.0.0.1' || hostname === '0.0.0.0' || hostname.endsWith('.localhost');
170
171      if (isLocal) {
172        window.history.replaceState(null, '', next);
173        return;
174      }
175
176      var appOrigin = 'https://app.snich.ai';
177      var meetOrigin = 'https://meet.snich.ai';
178      var eventsOrigin = 'https://events.snich.ai';
179
180      if (next.indexOf('/meet/') === 0 || next.indexOf('/join/') === 0 || next.indexOf('/meeting/') === 0) {
181        var roomId = next.split('/').filter(Boolean).pop();
182        window.location.replace(meetOrigin + '/' + encodeURIComponent(roomId || ''));
183        return;
184      }
185
186      if (next.indexOf('/e/') === 0) {
187        var slug = next.replace(/^\/e\//, '');
188        window.location.replace(eventsOrigin + '/' + slug);
189        return;
190      }
191
192      window.location.replace(appOrigin + next);
193    })();
194  </script>
194
195  
195<script type="importmap">
196{
197  "imports": {
198    "@google/genai": "https://esm.sh/@google/[email protected]",
199    "lucide-react": "https://esm.sh/[email protected]",
200    "react/": "https://esm.sh/[email protected]/",
201    "react": "https://esm.sh/[email protected]",
202    "react-dom/": "https://esm.sh/[email protected]/",
203    "react-router-dom": "https://esm.sh/[email protected]"
204  }
205}
206</script>
206
207  
207<script type="module" crossorigin src="/assets/main-f15583bd.js"></script>
207
208  <link rel="modulepreload" crossorigin href="/assets/modulepreload-polyfill-3cfb730f.js">
209  <link rel="modulepreload" crossorigin href="/assets/vendor-react-72e4a099.js">
210  <link rel="modulepreload" crossorigin href="/assets/buildLifecycle-a44b0e05.js">
211  <link rel="stylesheet" href="/assets/buildLifecycle-ced147ba.css">
212</head>
213
214<body>
215  <div id="root">
216    <div id="snich-boot-loader">
217      <div class="snich-boot-brand"><img src="/brand/snich-mark.svg" alt="" width="44" height="44" /><b>snich<span>.</span>ai</b></div>
218      <div class="snich-boot-spinner"></div>
219      <div class="snich-boot-text">Загружаем…</div>
220      <div class="snich-boot-slow-hint">Долго грузится? Проверьте сеть или обновите страницу.</div>
221    </div>
222  </div>
223  
224</body>
225
226</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.