web: the desktop version lives in two files, and only one was bumped

src/app.jsx carries its own SB_DESKTOP_VERSION for the compact download
table; src/components/ui/DownloadApps.jsx carries DESKTOP_VERSION for the
grid. Bumping one leaves the other pointing at a tag whose filenames no
longer exist — the failure tests/desktop-download-links.test.mjs was written
for, and which it caught here.

The i18n scan also learns that these dictionaries feed two clients. The
desktop client is a separate repository, so its keys can never appear in a
scan of this src/ and were being reported as dead strings to delete.
This commit is contained in:
SecureBitChatVolodymyr
2026-09-01 23:49:50 -04:00
parent 8d7b41b5fd
commit b4e12c2a98
21 changed files with 2325 additions and 353 deletions
+24 -24
View File
@@ -30,7 +30,7 @@
<!-- PWA Manifest --> <!-- PWA Manifest -->
<link rel="manifest" href="/ar/manifest.json"> <link rel="manifest" href="/ar/manifest.json">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788239352576"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788320423892">
<!-- PWA Meta Tags --> <!-- PWA Meta Tags -->
<meta name="mobile-web-app-capable" content="yes"> <meta name="mobile-web-app-capable" content="yes">
@@ -96,7 +96,7 @@
<link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png">
<!-- Apple Touch Icons --> <!-- Apple Touch Icons -->
<link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788239352576"> <link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788320423892">
<link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png"> <link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png"> <link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png"> <link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png">
@@ -105,7 +105,7 @@
<link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png"> <link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png"> <link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png"> <link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788239352576"> <link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788320423892">
<!-- Microsoft Tiles --> <!-- Microsoft Tiles -->
<meta name="msapplication-TileColor" content="#ff6b35"> <meta name="msapplication-TileColor" content="#ff6b35">
@@ -222,7 +222,7 @@
<!-- Render-blocking JS is deferred: classic deferred scripts and module scripts <!-- Render-blocking JS is deferred: classic deferred scripts and module scripts
both execute in document order after parsing, so React still runs before the both execute in document order after parsing, so React still runs before the
app modules below, but the parser / first paint is no longer blocked. --> app modules below, but the parser / first paint is no longer blocked. -->
<script defer src="/config/ice-servers.js?v=1788239352576"></script> <script defer src="/config/ice-servers.js?v=1788320423892"></script>
<script defer src="/libs/react/react.production.min.js"></script> <script defer src="/libs/react/react.production.min.js"></script>
<script defer src="/libs/react-dom/react-dom.production.min.js"></script> <script defer src="/libs/react-dom/react-dom.production.min.js"></script>
<!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only — <!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only —
@@ -230,8 +230,8 @@
Its CSS is loaded async via load-async-css.js (not paint-critical). --> Its CSS is loaded async via load-async-css.js (not paint-critical). -->
<script defer src="/libs/prism/prism.js"></script> <script defer src="/libs/prism/prism.js"></script>
<!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). --> <!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). -->
<link rel="stylesheet" href="/assets/tailwind.css?v=1788239352576"> <link rel="stylesheet" href="/assets/tailwind.css?v=1788320423892">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788239352576"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788320423892">
<!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI <!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI
icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the
first screen). Inter latin 400/700 cover body text and headings/buttons. --> first screen). Inter latin 400/700 cover body text and headings/buttons. -->
@@ -239,38 +239,38 @@
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin>
<link rel="stylesheet" href="/assets/fonts/inter/inter.css"> <link rel="stylesheet" href="/assets/fonts/inter/inter.css">
<link rel="stylesheet" href="/src/styles/main.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/main.css?v=1788320423892">
<link rel="stylesheet" href="/src/styles/animations.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/animations.css?v=1788320423892">
<link rel="stylesheet" href="/src/styles/components.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/components.css?v=1788320423892">
<!-- Loads after components.css on purpose: press feedback, material weight, <!-- Loads after components.css on purpose: press feedback, material weight,
size-specific tracking and the reduced-motion / -transparency / -contrast size-specific tracking and the reduced-motion / -transparency / -contrast
answers all need to settle arguments with the sheets above on source order. --> answers all need to settle arguments with the sheets above on source order. -->
<link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788320423892">
<!-- Last of the hand-written sheets: the mirroring rules must win over anything <!-- Last of the hand-written sheets: the mirroring rules must win over anything
above them, and they only ever apply under [dir="rtl"]. --> above them, and they only ever apply under [dir="rtl"]. -->
<link rel="stylesheet" href="/src/styles/rtl.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/rtl.css?v=1788320423892">
<!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. --> <!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. -->
<script defer src="/src/scripts/load-async-css.js?v=1788239352576"></script> <script defer src="/src/scripts/load-async-css.js?v=1788320423892"></script>
<noscript> <noscript>
<link rel="stylesheet" href="/assets/fontawesome/css/all.min.css"> <link rel="stylesheet" href="/assets/fontawesome/css/all.min.css">
<link rel="stylesheet" href="/libs/prism/prism.css"> <link rel="stylesheet" href="/libs/prism/prism.css">
</noscript> </noscript>
<script defer src="/src/scripts/fa-check.js?v=1788239352576"></script> <script defer src="/src/scripts/fa-check.js?v=1788320423892"></script>
<!-- Update Manager - система принудительного обновления --> <!-- Update Manager - система принудительного обновления -->
<script defer src="/src/utils/updateManager.js?v=1788239352576"></script> <script defer src="/src/utils/updateManager.js?v=1788320423892"></script>
<script type="module" src="/src/components/UpdateChecker.jsx?v=1788239352576"></script> <script type="module" src="/src/components/UpdateChecker.jsx?v=1788320423892"></script>
<script type="module" src="/dist/qr-local.js?v=1788239352576"></script> <script type="module" src="/dist/qr-local.js?v=1788320423892"></script>
<script type="module" src="/src/components/QRScanner.js?v=1788239352576"></script> <script type="module" src="/src/components/QRScanner.js?v=1788320423892"></script>
</head> </head>
<body> <body>
<div id="root"></div> <div id="root"></div>
<script type="module" src="/dist/app-boot.js?v=1788239352576"></script> <script type="module" src="/dist/app-boot.js?v=1788320423892"></script>
<script type="module" src="/dist/app.js?v=1788239352576"></script> <script type="module" src="/dist/app.js?v=1788320423892"></script>
<script defer src="/src/scripts/pwa-register.js?v=1788239352576"></script> <script defer src="/src/scripts/pwa-register.js?v=1788320423892"></script>
<script src="/src/pwa/install-prompt.js?v=1788239352576" type="module"></script> <script src="/src/pwa/install-prompt.js?v=1788320423892" type="module"></script>
<script src="/src/pwa/pwa-manager.js?v=1788239352576" type="module"></script> <script src="/src/pwa/pwa-manager.js?v=1788320423892" type="module"></script>
<script defer src="/src/scripts/pwa-offline-test.js?v=1788239352576"></script> <script defer src="/src/scripts/pwa-offline-test.js?v=1788320423892"></script>
<link rel="stylesheet" href="/src/styles/pwa.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/pwa.css?v=1788320423892">
</body> </body>
</html> </html>
+24 -24
View File
@@ -30,7 +30,7 @@
<!-- PWA Manifest --> <!-- PWA Manifest -->
<link rel="manifest" href="/de/manifest.json"> <link rel="manifest" href="/de/manifest.json">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788239352576"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788320423892">
<!-- PWA Meta Tags --> <!-- PWA Meta Tags -->
<meta name="mobile-web-app-capable" content="yes"> <meta name="mobile-web-app-capable" content="yes">
@@ -96,7 +96,7 @@
<link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png">
<!-- Apple Touch Icons --> <!-- Apple Touch Icons -->
<link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788239352576"> <link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788320423892">
<link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png"> <link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png"> <link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png"> <link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png">
@@ -105,7 +105,7 @@
<link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png"> <link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png"> <link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png"> <link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788239352576"> <link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788320423892">
<!-- Microsoft Tiles --> <!-- Microsoft Tiles -->
<meta name="msapplication-TileColor" content="#ff6b35"> <meta name="msapplication-TileColor" content="#ff6b35">
@@ -222,7 +222,7 @@
<!-- Render-blocking JS is deferred: classic deferred scripts and module scripts <!-- Render-blocking JS is deferred: classic deferred scripts and module scripts
both execute in document order after parsing, so React still runs before the both execute in document order after parsing, so React still runs before the
app modules below, but the parser / first paint is no longer blocked. --> app modules below, but the parser / first paint is no longer blocked. -->
<script defer src="/config/ice-servers.js?v=1788239352576"></script> <script defer src="/config/ice-servers.js?v=1788320423892"></script>
<script defer src="/libs/react/react.production.min.js"></script> <script defer src="/libs/react/react.production.min.js"></script>
<script defer src="/libs/react-dom/react-dom.production.min.js"></script> <script defer src="/libs/react-dom/react-dom.production.min.js"></script>
<!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only — <!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only —
@@ -230,8 +230,8 @@
Its CSS is loaded async via load-async-css.js (not paint-critical). --> Its CSS is loaded async via load-async-css.js (not paint-critical). -->
<script defer src="/libs/prism/prism.js"></script> <script defer src="/libs/prism/prism.js"></script>
<!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). --> <!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). -->
<link rel="stylesheet" href="/assets/tailwind.css?v=1788239352576"> <link rel="stylesheet" href="/assets/tailwind.css?v=1788320423892">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788239352576"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788320423892">
<!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI <!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI
icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the
first screen). Inter latin 400/700 cover body text and headings/buttons. --> first screen). Inter latin 400/700 cover body text and headings/buttons. -->
@@ -239,38 +239,38 @@
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin>
<link rel="stylesheet" href="/assets/fonts/inter/inter.css"> <link rel="stylesheet" href="/assets/fonts/inter/inter.css">
<link rel="stylesheet" href="/src/styles/main.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/main.css?v=1788320423892">
<link rel="stylesheet" href="/src/styles/animations.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/animations.css?v=1788320423892">
<link rel="stylesheet" href="/src/styles/components.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/components.css?v=1788320423892">
<!-- Loads after components.css on purpose: press feedback, material weight, <!-- Loads after components.css on purpose: press feedback, material weight,
size-specific tracking and the reduced-motion / -transparency / -contrast size-specific tracking and the reduced-motion / -transparency / -contrast
answers all need to settle arguments with the sheets above on source order. --> answers all need to settle arguments with the sheets above on source order. -->
<link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788320423892">
<!-- Last of the hand-written sheets: the mirroring rules must win over anything <!-- Last of the hand-written sheets: the mirroring rules must win over anything
above them, and they only ever apply under [dir="rtl"]. --> above them, and they only ever apply under [dir="rtl"]. -->
<link rel="stylesheet" href="/src/styles/rtl.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/rtl.css?v=1788320423892">
<!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. --> <!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. -->
<script defer src="/src/scripts/load-async-css.js?v=1788239352576"></script> <script defer src="/src/scripts/load-async-css.js?v=1788320423892"></script>
<noscript> <noscript>
<link rel="stylesheet" href="/assets/fontawesome/css/all.min.css"> <link rel="stylesheet" href="/assets/fontawesome/css/all.min.css">
<link rel="stylesheet" href="/libs/prism/prism.css"> <link rel="stylesheet" href="/libs/prism/prism.css">
</noscript> </noscript>
<script defer src="/src/scripts/fa-check.js?v=1788239352576"></script> <script defer src="/src/scripts/fa-check.js?v=1788320423892"></script>
<!-- Update Manager - система принудительного обновления --> <!-- Update Manager - система принудительного обновления -->
<script defer src="/src/utils/updateManager.js?v=1788239352576"></script> <script defer src="/src/utils/updateManager.js?v=1788320423892"></script>
<script type="module" src="/src/components/UpdateChecker.jsx?v=1788239352576"></script> <script type="module" src="/src/components/UpdateChecker.jsx?v=1788320423892"></script>
<script type="module" src="/dist/qr-local.js?v=1788239352576"></script> <script type="module" src="/dist/qr-local.js?v=1788320423892"></script>
<script type="module" src="/src/components/QRScanner.js?v=1788239352576"></script> <script type="module" src="/src/components/QRScanner.js?v=1788320423892"></script>
</head> </head>
<body> <body>
<div id="root"></div> <div id="root"></div>
<script type="module" src="/dist/app-boot.js?v=1788239352576"></script> <script type="module" src="/dist/app-boot.js?v=1788320423892"></script>
<script type="module" src="/dist/app.js?v=1788239352576"></script> <script type="module" src="/dist/app.js?v=1788320423892"></script>
<script defer src="/src/scripts/pwa-register.js?v=1788239352576"></script> <script defer src="/src/scripts/pwa-register.js?v=1788320423892"></script>
<script src="/src/pwa/install-prompt.js?v=1788239352576" type="module"></script> <script src="/src/pwa/install-prompt.js?v=1788320423892" type="module"></script>
<script src="/src/pwa/pwa-manager.js?v=1788239352576" type="module"></script> <script src="/src/pwa/pwa-manager.js?v=1788320423892" type="module"></script>
<script defer src="/src/scripts/pwa-offline-test.js?v=1788239352576"></script> <script defer src="/src/scripts/pwa-offline-test.js?v=1788320423892"></script>
<link rel="stylesheet" href="/src/styles/pwa.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/pwa.css?v=1788320423892">
</body> </body>
</html> </html>
+989 -14
View File
File diff suppressed because it is too large Load Diff
+2 -2
View File
File diff suppressed because one or more lines are too long
Vendored
+989 -14
View File
File diff suppressed because it is too large Load Diff
+2 -2
View File
File diff suppressed because one or more lines are too long
+24 -24
View File
@@ -30,7 +30,7 @@
<!-- PWA Manifest --> <!-- PWA Manifest -->
<link rel="manifest" href="/es/manifest.json"> <link rel="manifest" href="/es/manifest.json">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788239352576"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788320423892">
<!-- PWA Meta Tags --> <!-- PWA Meta Tags -->
<meta name="mobile-web-app-capable" content="yes"> <meta name="mobile-web-app-capable" content="yes">
@@ -96,7 +96,7 @@
<link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png">
<!-- Apple Touch Icons --> <!-- Apple Touch Icons -->
<link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788239352576"> <link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788320423892">
<link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png"> <link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png"> <link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png"> <link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png">
@@ -105,7 +105,7 @@
<link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png"> <link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png"> <link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png"> <link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788239352576"> <link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788320423892">
<!-- Microsoft Tiles --> <!-- Microsoft Tiles -->
<meta name="msapplication-TileColor" content="#ff6b35"> <meta name="msapplication-TileColor" content="#ff6b35">
@@ -222,7 +222,7 @@
<!-- Render-blocking JS is deferred: classic deferred scripts and module scripts <!-- Render-blocking JS is deferred: classic deferred scripts and module scripts
both execute in document order after parsing, so React still runs before the both execute in document order after parsing, so React still runs before the
app modules below, but the parser / first paint is no longer blocked. --> app modules below, but the parser / first paint is no longer blocked. -->
<script defer src="/config/ice-servers.js?v=1788239352576"></script> <script defer src="/config/ice-servers.js?v=1788320423892"></script>
<script defer src="/libs/react/react.production.min.js"></script> <script defer src="/libs/react/react.production.min.js"></script>
<script defer src="/libs/react-dom/react-dom.production.min.js"></script> <script defer src="/libs/react-dom/react-dom.production.min.js"></script>
<!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only — <!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only —
@@ -230,8 +230,8 @@
Its CSS is loaded async via load-async-css.js (not paint-critical). --> Its CSS is loaded async via load-async-css.js (not paint-critical). -->
<script defer src="/libs/prism/prism.js"></script> <script defer src="/libs/prism/prism.js"></script>
<!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). --> <!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). -->
<link rel="stylesheet" href="/assets/tailwind.css?v=1788239352576"> <link rel="stylesheet" href="/assets/tailwind.css?v=1788320423892">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788239352576"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788320423892">
<!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI <!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI
icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the
first screen). Inter latin 400/700 cover body text and headings/buttons. --> first screen). Inter latin 400/700 cover body text and headings/buttons. -->
@@ -239,38 +239,38 @@
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin>
<link rel="stylesheet" href="/assets/fonts/inter/inter.css"> <link rel="stylesheet" href="/assets/fonts/inter/inter.css">
<link rel="stylesheet" href="/src/styles/main.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/main.css?v=1788320423892">
<link rel="stylesheet" href="/src/styles/animations.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/animations.css?v=1788320423892">
<link rel="stylesheet" href="/src/styles/components.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/components.css?v=1788320423892">
<!-- Loads after components.css on purpose: press feedback, material weight, <!-- Loads after components.css on purpose: press feedback, material weight,
size-specific tracking and the reduced-motion / -transparency / -contrast size-specific tracking and the reduced-motion / -transparency / -contrast
answers all need to settle arguments with the sheets above on source order. --> answers all need to settle arguments with the sheets above on source order. -->
<link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788320423892">
<!-- Last of the hand-written sheets: the mirroring rules must win over anything <!-- Last of the hand-written sheets: the mirroring rules must win over anything
above them, and they only ever apply under [dir="rtl"]. --> above them, and they only ever apply under [dir="rtl"]. -->
<link rel="stylesheet" href="/src/styles/rtl.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/rtl.css?v=1788320423892">
<!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. --> <!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. -->
<script defer src="/src/scripts/load-async-css.js?v=1788239352576"></script> <script defer src="/src/scripts/load-async-css.js?v=1788320423892"></script>
<noscript> <noscript>
<link rel="stylesheet" href="/assets/fontawesome/css/all.min.css"> <link rel="stylesheet" href="/assets/fontawesome/css/all.min.css">
<link rel="stylesheet" href="/libs/prism/prism.css"> <link rel="stylesheet" href="/libs/prism/prism.css">
</noscript> </noscript>
<script defer src="/src/scripts/fa-check.js?v=1788239352576"></script> <script defer src="/src/scripts/fa-check.js?v=1788320423892"></script>
<!-- Update Manager - система принудительного обновления --> <!-- Update Manager - система принудительного обновления -->
<script defer src="/src/utils/updateManager.js?v=1788239352576"></script> <script defer src="/src/utils/updateManager.js?v=1788320423892"></script>
<script type="module" src="/src/components/UpdateChecker.jsx?v=1788239352576"></script> <script type="module" src="/src/components/UpdateChecker.jsx?v=1788320423892"></script>
<script type="module" src="/dist/qr-local.js?v=1788239352576"></script> <script type="module" src="/dist/qr-local.js?v=1788320423892"></script>
<script type="module" src="/src/components/QRScanner.js?v=1788239352576"></script> <script type="module" src="/src/components/QRScanner.js?v=1788320423892"></script>
</head> </head>
<body> <body>
<div id="root"></div> <div id="root"></div>
<script type="module" src="/dist/app-boot.js?v=1788239352576"></script> <script type="module" src="/dist/app-boot.js?v=1788320423892"></script>
<script type="module" src="/dist/app.js?v=1788239352576"></script> <script type="module" src="/dist/app.js?v=1788320423892"></script>
<script defer src="/src/scripts/pwa-register.js?v=1788239352576"></script> <script defer src="/src/scripts/pwa-register.js?v=1788320423892"></script>
<script src="/src/pwa/install-prompt.js?v=1788239352576" type="module"></script> <script src="/src/pwa/install-prompt.js?v=1788320423892" type="module"></script>
<script src="/src/pwa/pwa-manager.js?v=1788239352576" type="module"></script> <script src="/src/pwa/pwa-manager.js?v=1788320423892" type="module"></script>
<script defer src="/src/scripts/pwa-offline-test.js?v=1788239352576"></script> <script defer src="/src/scripts/pwa-offline-test.js?v=1788320423892"></script>
<link rel="stylesheet" href="/src/styles/pwa.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/pwa.css?v=1788320423892">
</body> </body>
</html> </html>
+24 -24
View File
@@ -30,7 +30,7 @@
<!-- PWA Manifest --> <!-- PWA Manifest -->
<link rel="manifest" href="/fa/manifest.json"> <link rel="manifest" href="/fa/manifest.json">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788239352576"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788320423892">
<!-- PWA Meta Tags --> <!-- PWA Meta Tags -->
<meta name="mobile-web-app-capable" content="yes"> <meta name="mobile-web-app-capable" content="yes">
@@ -96,7 +96,7 @@
<link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png">
<!-- Apple Touch Icons --> <!-- Apple Touch Icons -->
<link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788239352576"> <link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788320423892">
<link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png"> <link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png"> <link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png"> <link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png">
@@ -105,7 +105,7 @@
<link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png"> <link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png"> <link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png"> <link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788239352576"> <link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788320423892">
<!-- Microsoft Tiles --> <!-- Microsoft Tiles -->
<meta name="msapplication-TileColor" content="#ff6b35"> <meta name="msapplication-TileColor" content="#ff6b35">
@@ -222,7 +222,7 @@
<!-- Render-blocking JS is deferred: classic deferred scripts and module scripts <!-- Render-blocking JS is deferred: classic deferred scripts and module scripts
both execute in document order after parsing, so React still runs before the both execute in document order after parsing, so React still runs before the
app modules below, but the parser / first paint is no longer blocked. --> app modules below, but the parser / first paint is no longer blocked. -->
<script defer src="/config/ice-servers.js?v=1788239352576"></script> <script defer src="/config/ice-servers.js?v=1788320423892"></script>
<script defer src="/libs/react/react.production.min.js"></script> <script defer src="/libs/react/react.production.min.js"></script>
<script defer src="/libs/react-dom/react-dom.production.min.js"></script> <script defer src="/libs/react-dom/react-dom.production.min.js"></script>
<!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only — <!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only —
@@ -230,8 +230,8 @@
Its CSS is loaded async via load-async-css.js (not paint-critical). --> Its CSS is loaded async via load-async-css.js (not paint-critical). -->
<script defer src="/libs/prism/prism.js"></script> <script defer src="/libs/prism/prism.js"></script>
<!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). --> <!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). -->
<link rel="stylesheet" href="/assets/tailwind.css?v=1788239352576"> <link rel="stylesheet" href="/assets/tailwind.css?v=1788320423892">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788239352576"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788320423892">
<!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI <!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI
icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the
first screen). Inter latin 400/700 cover body text and headings/buttons. --> first screen). Inter latin 400/700 cover body text and headings/buttons. -->
@@ -239,38 +239,38 @@
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin>
<link rel="stylesheet" href="/assets/fonts/inter/inter.css"> <link rel="stylesheet" href="/assets/fonts/inter/inter.css">
<link rel="stylesheet" href="/src/styles/main.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/main.css?v=1788320423892">
<link rel="stylesheet" href="/src/styles/animations.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/animations.css?v=1788320423892">
<link rel="stylesheet" href="/src/styles/components.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/components.css?v=1788320423892">
<!-- Loads after components.css on purpose: press feedback, material weight, <!-- Loads after components.css on purpose: press feedback, material weight,
size-specific tracking and the reduced-motion / -transparency / -contrast size-specific tracking and the reduced-motion / -transparency / -contrast
answers all need to settle arguments with the sheets above on source order. --> answers all need to settle arguments with the sheets above on source order. -->
<link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788320423892">
<!-- Last of the hand-written sheets: the mirroring rules must win over anything <!-- Last of the hand-written sheets: the mirroring rules must win over anything
above them, and they only ever apply under [dir="rtl"]. --> above them, and they only ever apply under [dir="rtl"]. -->
<link rel="stylesheet" href="/src/styles/rtl.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/rtl.css?v=1788320423892">
<!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. --> <!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. -->
<script defer src="/src/scripts/load-async-css.js?v=1788239352576"></script> <script defer src="/src/scripts/load-async-css.js?v=1788320423892"></script>
<noscript> <noscript>
<link rel="stylesheet" href="/assets/fontawesome/css/all.min.css"> <link rel="stylesheet" href="/assets/fontawesome/css/all.min.css">
<link rel="stylesheet" href="/libs/prism/prism.css"> <link rel="stylesheet" href="/libs/prism/prism.css">
</noscript> </noscript>
<script defer src="/src/scripts/fa-check.js?v=1788239352576"></script> <script defer src="/src/scripts/fa-check.js?v=1788320423892"></script>
<!-- Update Manager - система принудительного обновления --> <!-- Update Manager - система принудительного обновления -->
<script defer src="/src/utils/updateManager.js?v=1788239352576"></script> <script defer src="/src/utils/updateManager.js?v=1788320423892"></script>
<script type="module" src="/src/components/UpdateChecker.jsx?v=1788239352576"></script> <script type="module" src="/src/components/UpdateChecker.jsx?v=1788320423892"></script>
<script type="module" src="/dist/qr-local.js?v=1788239352576"></script> <script type="module" src="/dist/qr-local.js?v=1788320423892"></script>
<script type="module" src="/src/components/QRScanner.js?v=1788239352576"></script> <script type="module" src="/src/components/QRScanner.js?v=1788320423892"></script>
</head> </head>
<body> <body>
<div id="root"></div> <div id="root"></div>
<script type="module" src="/dist/app-boot.js?v=1788239352576"></script> <script type="module" src="/dist/app-boot.js?v=1788320423892"></script>
<script type="module" src="/dist/app.js?v=1788239352576"></script> <script type="module" src="/dist/app.js?v=1788320423892"></script>
<script defer src="/src/scripts/pwa-register.js?v=1788239352576"></script> <script defer src="/src/scripts/pwa-register.js?v=1788320423892"></script>
<script src="/src/pwa/install-prompt.js?v=1788239352576" type="module"></script> <script src="/src/pwa/install-prompt.js?v=1788320423892" type="module"></script>
<script src="/src/pwa/pwa-manager.js?v=1788239352576" type="module"></script> <script src="/src/pwa/pwa-manager.js?v=1788320423892" type="module"></script>
<script defer src="/src/scripts/pwa-offline-test.js?v=1788239352576"></script> <script defer src="/src/scripts/pwa-offline-test.js?v=1788320423892"></script>
<link rel="stylesheet" href="/src/styles/pwa.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/pwa.css?v=1788320423892">
</body> </body>
</html> </html>
+24 -24
View File
@@ -30,7 +30,7 @@
<!-- PWA Manifest --> <!-- PWA Manifest -->
<link rel="manifest" href="/fr/manifest.json"> <link rel="manifest" href="/fr/manifest.json">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788239352576"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788320423892">
<!-- PWA Meta Tags --> <!-- PWA Meta Tags -->
<meta name="mobile-web-app-capable" content="yes"> <meta name="mobile-web-app-capable" content="yes">
@@ -96,7 +96,7 @@
<link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png">
<!-- Apple Touch Icons --> <!-- Apple Touch Icons -->
<link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788239352576"> <link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788320423892">
<link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png"> <link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png"> <link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png"> <link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png">
@@ -105,7 +105,7 @@
<link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png"> <link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png"> <link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png"> <link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788239352576"> <link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788320423892">
<!-- Microsoft Tiles --> <!-- Microsoft Tiles -->
<meta name="msapplication-TileColor" content="#ff6b35"> <meta name="msapplication-TileColor" content="#ff6b35">
@@ -222,7 +222,7 @@
<!-- Render-blocking JS is deferred: classic deferred scripts and module scripts <!-- Render-blocking JS is deferred: classic deferred scripts and module scripts
both execute in document order after parsing, so React still runs before the both execute in document order after parsing, so React still runs before the
app modules below, but the parser / first paint is no longer blocked. --> app modules below, but the parser / first paint is no longer blocked. -->
<script defer src="/config/ice-servers.js?v=1788239352576"></script> <script defer src="/config/ice-servers.js?v=1788320423892"></script>
<script defer src="/libs/react/react.production.min.js"></script> <script defer src="/libs/react/react.production.min.js"></script>
<script defer src="/libs/react-dom/react-dom.production.min.js"></script> <script defer src="/libs/react-dom/react-dom.production.min.js"></script>
<!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only — <!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only —
@@ -230,8 +230,8 @@
Its CSS is loaded async via load-async-css.js (not paint-critical). --> Its CSS is loaded async via load-async-css.js (not paint-critical). -->
<script defer src="/libs/prism/prism.js"></script> <script defer src="/libs/prism/prism.js"></script>
<!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). --> <!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). -->
<link rel="stylesheet" href="/assets/tailwind.css?v=1788239352576"> <link rel="stylesheet" href="/assets/tailwind.css?v=1788320423892">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788239352576"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788320423892">
<!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI <!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI
icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the
first screen). Inter latin 400/700 cover body text and headings/buttons. --> first screen). Inter latin 400/700 cover body text and headings/buttons. -->
@@ -239,38 +239,38 @@
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin>
<link rel="stylesheet" href="/assets/fonts/inter/inter.css"> <link rel="stylesheet" href="/assets/fonts/inter/inter.css">
<link rel="stylesheet" href="/src/styles/main.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/main.css?v=1788320423892">
<link rel="stylesheet" href="/src/styles/animations.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/animations.css?v=1788320423892">
<link rel="stylesheet" href="/src/styles/components.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/components.css?v=1788320423892">
<!-- Loads after components.css on purpose: press feedback, material weight, <!-- Loads after components.css on purpose: press feedback, material weight,
size-specific tracking and the reduced-motion / -transparency / -contrast size-specific tracking and the reduced-motion / -transparency / -contrast
answers all need to settle arguments with the sheets above on source order. --> answers all need to settle arguments with the sheets above on source order. -->
<link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788320423892">
<!-- Last of the hand-written sheets: the mirroring rules must win over anything <!-- Last of the hand-written sheets: the mirroring rules must win over anything
above them, and they only ever apply under [dir="rtl"]. --> above them, and they only ever apply under [dir="rtl"]. -->
<link rel="stylesheet" href="/src/styles/rtl.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/rtl.css?v=1788320423892">
<!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. --> <!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. -->
<script defer src="/src/scripts/load-async-css.js?v=1788239352576"></script> <script defer src="/src/scripts/load-async-css.js?v=1788320423892"></script>
<noscript> <noscript>
<link rel="stylesheet" href="/assets/fontawesome/css/all.min.css"> <link rel="stylesheet" href="/assets/fontawesome/css/all.min.css">
<link rel="stylesheet" href="/libs/prism/prism.css"> <link rel="stylesheet" href="/libs/prism/prism.css">
</noscript> </noscript>
<script defer src="/src/scripts/fa-check.js?v=1788239352576"></script> <script defer src="/src/scripts/fa-check.js?v=1788320423892"></script>
<!-- Update Manager - система принудительного обновления --> <!-- Update Manager - система принудительного обновления -->
<script defer src="/src/utils/updateManager.js?v=1788239352576"></script> <script defer src="/src/utils/updateManager.js?v=1788320423892"></script>
<script type="module" src="/src/components/UpdateChecker.jsx?v=1788239352576"></script> <script type="module" src="/src/components/UpdateChecker.jsx?v=1788320423892"></script>
<script type="module" src="/dist/qr-local.js?v=1788239352576"></script> <script type="module" src="/dist/qr-local.js?v=1788320423892"></script>
<script type="module" src="/src/components/QRScanner.js?v=1788239352576"></script> <script type="module" src="/src/components/QRScanner.js?v=1788320423892"></script>
</head> </head>
<body> <body>
<div id="root"></div> <div id="root"></div>
<script type="module" src="/dist/app-boot.js?v=1788239352576"></script> <script type="module" src="/dist/app-boot.js?v=1788320423892"></script>
<script type="module" src="/dist/app.js?v=1788239352576"></script> <script type="module" src="/dist/app.js?v=1788320423892"></script>
<script defer src="/src/scripts/pwa-register.js?v=1788239352576"></script> <script defer src="/src/scripts/pwa-register.js?v=1788320423892"></script>
<script src="/src/pwa/install-prompt.js?v=1788239352576" type="module"></script> <script src="/src/pwa/install-prompt.js?v=1788320423892" type="module"></script>
<script src="/src/pwa/pwa-manager.js?v=1788239352576" type="module"></script> <script src="/src/pwa/pwa-manager.js?v=1788320423892" type="module"></script>
<script defer src="/src/scripts/pwa-offline-test.js?v=1788239352576"></script> <script defer src="/src/scripts/pwa-offline-test.js?v=1788320423892"></script>
<link rel="stylesheet" href="/src/styles/pwa.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/pwa.css?v=1788320423892">
</body> </body>
</html> </html>
+24 -24
View File
@@ -30,7 +30,7 @@
<!-- PWA Manifest --> <!-- PWA Manifest -->
<link rel="manifest" href="/he/manifest.json"> <link rel="manifest" href="/he/manifest.json">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788239352576"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788320423892">
<!-- PWA Meta Tags --> <!-- PWA Meta Tags -->
<meta name="mobile-web-app-capable" content="yes"> <meta name="mobile-web-app-capable" content="yes">
@@ -96,7 +96,7 @@
<link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png">
<!-- Apple Touch Icons --> <!-- Apple Touch Icons -->
<link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788239352576"> <link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788320423892">
<link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png"> <link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png"> <link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png"> <link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png">
@@ -105,7 +105,7 @@
<link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png"> <link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png"> <link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png"> <link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788239352576"> <link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788320423892">
<!-- Microsoft Tiles --> <!-- Microsoft Tiles -->
<meta name="msapplication-TileColor" content="#ff6b35"> <meta name="msapplication-TileColor" content="#ff6b35">
@@ -222,7 +222,7 @@
<!-- Render-blocking JS is deferred: classic deferred scripts and module scripts <!-- Render-blocking JS is deferred: classic deferred scripts and module scripts
both execute in document order after parsing, so React still runs before the both execute in document order after parsing, so React still runs before the
app modules below, but the parser / first paint is no longer blocked. --> app modules below, but the parser / first paint is no longer blocked. -->
<script defer src="/config/ice-servers.js?v=1788239352576"></script> <script defer src="/config/ice-servers.js?v=1788320423892"></script>
<script defer src="/libs/react/react.production.min.js"></script> <script defer src="/libs/react/react.production.min.js"></script>
<script defer src="/libs/react-dom/react-dom.production.min.js"></script> <script defer src="/libs/react-dom/react-dom.production.min.js"></script>
<!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only — <!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only —
@@ -230,8 +230,8 @@
Its CSS is loaded async via load-async-css.js (not paint-critical). --> Its CSS is loaded async via load-async-css.js (not paint-critical). -->
<script defer src="/libs/prism/prism.js"></script> <script defer src="/libs/prism/prism.js"></script>
<!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). --> <!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). -->
<link rel="stylesheet" href="/assets/tailwind.css?v=1788239352576"> <link rel="stylesheet" href="/assets/tailwind.css?v=1788320423892">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788239352576"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788320423892">
<!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI <!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI
icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the
first screen). Inter latin 400/700 cover body text and headings/buttons. --> first screen). Inter latin 400/700 cover body text and headings/buttons. -->
@@ -239,38 +239,38 @@
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin>
<link rel="stylesheet" href="/assets/fonts/inter/inter.css"> <link rel="stylesheet" href="/assets/fonts/inter/inter.css">
<link rel="stylesheet" href="/src/styles/main.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/main.css?v=1788320423892">
<link rel="stylesheet" href="/src/styles/animations.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/animations.css?v=1788320423892">
<link rel="stylesheet" href="/src/styles/components.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/components.css?v=1788320423892">
<!-- Loads after components.css on purpose: press feedback, material weight, <!-- Loads after components.css on purpose: press feedback, material weight,
size-specific tracking and the reduced-motion / -transparency / -contrast size-specific tracking and the reduced-motion / -transparency / -contrast
answers all need to settle arguments with the sheets above on source order. --> answers all need to settle arguments with the sheets above on source order. -->
<link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788320423892">
<!-- Last of the hand-written sheets: the mirroring rules must win over anything <!-- Last of the hand-written sheets: the mirroring rules must win over anything
above them, and they only ever apply under [dir="rtl"]. --> above them, and they only ever apply under [dir="rtl"]. -->
<link rel="stylesheet" href="/src/styles/rtl.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/rtl.css?v=1788320423892">
<!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. --> <!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. -->
<script defer src="/src/scripts/load-async-css.js?v=1788239352576"></script> <script defer src="/src/scripts/load-async-css.js?v=1788320423892"></script>
<noscript> <noscript>
<link rel="stylesheet" href="/assets/fontawesome/css/all.min.css"> <link rel="stylesheet" href="/assets/fontawesome/css/all.min.css">
<link rel="stylesheet" href="/libs/prism/prism.css"> <link rel="stylesheet" href="/libs/prism/prism.css">
</noscript> </noscript>
<script defer src="/src/scripts/fa-check.js?v=1788239352576"></script> <script defer src="/src/scripts/fa-check.js?v=1788320423892"></script>
<!-- Update Manager - система принудительного обновления --> <!-- Update Manager - система принудительного обновления -->
<script defer src="/src/utils/updateManager.js?v=1788239352576"></script> <script defer src="/src/utils/updateManager.js?v=1788320423892"></script>
<script type="module" src="/src/components/UpdateChecker.jsx?v=1788239352576"></script> <script type="module" src="/src/components/UpdateChecker.jsx?v=1788320423892"></script>
<script type="module" src="/dist/qr-local.js?v=1788239352576"></script> <script type="module" src="/dist/qr-local.js?v=1788320423892"></script>
<script type="module" src="/src/components/QRScanner.js?v=1788239352576"></script> <script type="module" src="/src/components/QRScanner.js?v=1788320423892"></script>
</head> </head>
<body> <body>
<div id="root"></div> <div id="root"></div>
<script type="module" src="/dist/app-boot.js?v=1788239352576"></script> <script type="module" src="/dist/app-boot.js?v=1788320423892"></script>
<script type="module" src="/dist/app.js?v=1788239352576"></script> <script type="module" src="/dist/app.js?v=1788320423892"></script>
<script defer src="/src/scripts/pwa-register.js?v=1788239352576"></script> <script defer src="/src/scripts/pwa-register.js?v=1788320423892"></script>
<script src="/src/pwa/install-prompt.js?v=1788239352576" type="module"></script> <script src="/src/pwa/install-prompt.js?v=1788320423892" type="module"></script>
<script src="/src/pwa/pwa-manager.js?v=1788239352576" type="module"></script> <script src="/src/pwa/pwa-manager.js?v=1788320423892" type="module"></script>
<script defer src="/src/scripts/pwa-offline-test.js?v=1788239352576"></script> <script defer src="/src/scripts/pwa-offline-test.js?v=1788320423892"></script>
<link rel="stylesheet" href="/src/styles/pwa.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/pwa.css?v=1788320423892">
</body> </body>
</html> </html>
+24 -24
View File
@@ -30,7 +30,7 @@
<!-- PWA Manifest --> <!-- PWA Manifest -->
<link rel="manifest" href="/hi/manifest.json"> <link rel="manifest" href="/hi/manifest.json">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788239352576"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788320423892">
<!-- PWA Meta Tags --> <!-- PWA Meta Tags -->
<meta name="mobile-web-app-capable" content="yes"> <meta name="mobile-web-app-capable" content="yes">
@@ -96,7 +96,7 @@
<link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png">
<!-- Apple Touch Icons --> <!-- Apple Touch Icons -->
<link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788239352576"> <link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788320423892">
<link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png"> <link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png"> <link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png"> <link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png">
@@ -105,7 +105,7 @@
<link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png"> <link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png"> <link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png"> <link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788239352576"> <link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788320423892">
<!-- Microsoft Tiles --> <!-- Microsoft Tiles -->
<meta name="msapplication-TileColor" content="#ff6b35"> <meta name="msapplication-TileColor" content="#ff6b35">
@@ -222,7 +222,7 @@
<!-- Render-blocking JS is deferred: classic deferred scripts and module scripts <!-- Render-blocking JS is deferred: classic deferred scripts and module scripts
both execute in document order after parsing, so React still runs before the both execute in document order after parsing, so React still runs before the
app modules below, but the parser / first paint is no longer blocked. --> app modules below, but the parser / first paint is no longer blocked. -->
<script defer src="/config/ice-servers.js?v=1788239352576"></script> <script defer src="/config/ice-servers.js?v=1788320423892"></script>
<script defer src="/libs/react/react.production.min.js"></script> <script defer src="/libs/react/react.production.min.js"></script>
<script defer src="/libs/react-dom/react-dom.production.min.js"></script> <script defer src="/libs/react-dom/react-dom.production.min.js"></script>
<!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only — <!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only —
@@ -230,8 +230,8 @@
Its CSS is loaded async via load-async-css.js (not paint-critical). --> Its CSS is loaded async via load-async-css.js (not paint-critical). -->
<script defer src="/libs/prism/prism.js"></script> <script defer src="/libs/prism/prism.js"></script>
<!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). --> <!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). -->
<link rel="stylesheet" href="/assets/tailwind.css?v=1788239352576"> <link rel="stylesheet" href="/assets/tailwind.css?v=1788320423892">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788239352576"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788320423892">
<!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI <!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI
icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the
first screen). Inter latin 400/700 cover body text and headings/buttons. --> first screen). Inter latin 400/700 cover body text and headings/buttons. -->
@@ -239,38 +239,38 @@
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin>
<link rel="stylesheet" href="/assets/fonts/inter/inter.css"> <link rel="stylesheet" href="/assets/fonts/inter/inter.css">
<link rel="stylesheet" href="/src/styles/main.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/main.css?v=1788320423892">
<link rel="stylesheet" href="/src/styles/animations.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/animations.css?v=1788320423892">
<link rel="stylesheet" href="/src/styles/components.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/components.css?v=1788320423892">
<!-- Loads after components.css on purpose: press feedback, material weight, <!-- Loads after components.css on purpose: press feedback, material weight,
size-specific tracking and the reduced-motion / -transparency / -contrast size-specific tracking and the reduced-motion / -transparency / -contrast
answers all need to settle arguments with the sheets above on source order. --> answers all need to settle arguments with the sheets above on source order. -->
<link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788320423892">
<!-- Last of the hand-written sheets: the mirroring rules must win over anything <!-- Last of the hand-written sheets: the mirroring rules must win over anything
above them, and they only ever apply under [dir="rtl"]. --> above them, and they only ever apply under [dir="rtl"]. -->
<link rel="stylesheet" href="/src/styles/rtl.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/rtl.css?v=1788320423892">
<!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. --> <!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. -->
<script defer src="/src/scripts/load-async-css.js?v=1788239352576"></script> <script defer src="/src/scripts/load-async-css.js?v=1788320423892"></script>
<noscript> <noscript>
<link rel="stylesheet" href="/assets/fontawesome/css/all.min.css"> <link rel="stylesheet" href="/assets/fontawesome/css/all.min.css">
<link rel="stylesheet" href="/libs/prism/prism.css"> <link rel="stylesheet" href="/libs/prism/prism.css">
</noscript> </noscript>
<script defer src="/src/scripts/fa-check.js?v=1788239352576"></script> <script defer src="/src/scripts/fa-check.js?v=1788320423892"></script>
<!-- Update Manager - система принудительного обновления --> <!-- Update Manager - система принудительного обновления -->
<script defer src="/src/utils/updateManager.js?v=1788239352576"></script> <script defer src="/src/utils/updateManager.js?v=1788320423892"></script>
<script type="module" src="/src/components/UpdateChecker.jsx?v=1788239352576"></script> <script type="module" src="/src/components/UpdateChecker.jsx?v=1788320423892"></script>
<script type="module" src="/dist/qr-local.js?v=1788239352576"></script> <script type="module" src="/dist/qr-local.js?v=1788320423892"></script>
<script type="module" src="/src/components/QRScanner.js?v=1788239352576"></script> <script type="module" src="/src/components/QRScanner.js?v=1788320423892"></script>
</head> </head>
<body> <body>
<div id="root"></div> <div id="root"></div>
<script type="module" src="/dist/app-boot.js?v=1788239352576"></script> <script type="module" src="/dist/app-boot.js?v=1788320423892"></script>
<script type="module" src="/dist/app.js?v=1788239352576"></script> <script type="module" src="/dist/app.js?v=1788320423892"></script>
<script defer src="/src/scripts/pwa-register.js?v=1788239352576"></script> <script defer src="/src/scripts/pwa-register.js?v=1788320423892"></script>
<script src="/src/pwa/install-prompt.js?v=1788239352576" type="module"></script> <script src="/src/pwa/install-prompt.js?v=1788320423892" type="module"></script>
<script src="/src/pwa/pwa-manager.js?v=1788239352576" type="module"></script> <script src="/src/pwa/pwa-manager.js?v=1788320423892" type="module"></script>
<script defer src="/src/scripts/pwa-offline-test.js?v=1788239352576"></script> <script defer src="/src/scripts/pwa-offline-test.js?v=1788320423892"></script>
<link rel="stylesheet" href="/src/styles/pwa.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/pwa.css?v=1788320423892">
</body> </body>
</html> </html>
+24 -24
View File
@@ -30,7 +30,7 @@
<!-- PWA Manifest --> <!-- PWA Manifest -->
<link rel="manifest" href="/manifest.json"> <link rel="manifest" href="/manifest.json">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788239352576"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788320423892">
<!-- PWA Meta Tags --> <!-- PWA Meta Tags -->
<meta name="mobile-web-app-capable" content="yes"> <meta name="mobile-web-app-capable" content="yes">
@@ -96,7 +96,7 @@
<link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png">
<!-- Apple Touch Icons --> <!-- Apple Touch Icons -->
<link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788239352576"> <link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788320423892">
<link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png"> <link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png"> <link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png"> <link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png">
@@ -105,7 +105,7 @@
<link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png"> <link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png"> <link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png"> <link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788239352576"> <link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788320423892">
<!-- Microsoft Tiles --> <!-- Microsoft Tiles -->
<meta name="msapplication-TileColor" content="#ff6b35"> <meta name="msapplication-TileColor" content="#ff6b35">
@@ -222,7 +222,7 @@
<!-- Render-blocking JS is deferred: classic deferred scripts and module scripts <!-- Render-blocking JS is deferred: classic deferred scripts and module scripts
both execute in document order after parsing, so React still runs before the both execute in document order after parsing, so React still runs before the
app modules below, but the parser / first paint is no longer blocked. --> app modules below, but the parser / first paint is no longer blocked. -->
<script defer src="/config/ice-servers.js?v=1788239352576"></script> <script defer src="/config/ice-servers.js?v=1788320423892"></script>
<script defer src="/libs/react/react.production.min.js"></script> <script defer src="/libs/react/react.production.min.js"></script>
<script defer src="/libs/react-dom/react-dom.production.min.js"></script> <script defer src="/libs/react-dom/react-dom.production.min.js"></script>
<!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only — <!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only —
@@ -230,8 +230,8 @@
Its CSS is loaded async via load-async-css.js (not paint-critical). --> Its CSS is loaded async via load-async-css.js (not paint-critical). -->
<script defer src="/libs/prism/prism.js"></script> <script defer src="/libs/prism/prism.js"></script>
<!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). --> <!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). -->
<link rel="stylesheet" href="/assets/tailwind.css?v=1788239352576"> <link rel="stylesheet" href="/assets/tailwind.css?v=1788320423892">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788239352576"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788320423892">
<!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI <!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI
icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the
first screen). Inter latin 400/700 cover body text and headings/buttons. --> first screen). Inter latin 400/700 cover body text and headings/buttons. -->
@@ -239,38 +239,38 @@
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin>
<link rel="stylesheet" href="/assets/fonts/inter/inter.css"> <link rel="stylesheet" href="/assets/fonts/inter/inter.css">
<link rel="stylesheet" href="/src/styles/main.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/main.css?v=1788320423892">
<link rel="stylesheet" href="/src/styles/animations.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/animations.css?v=1788320423892">
<link rel="stylesheet" href="/src/styles/components.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/components.css?v=1788320423892">
<!-- Loads after components.css on purpose: press feedback, material weight, <!-- Loads after components.css on purpose: press feedback, material weight,
size-specific tracking and the reduced-motion / -transparency / -contrast size-specific tracking and the reduced-motion / -transparency / -contrast
answers all need to settle arguments with the sheets above on source order. --> answers all need to settle arguments with the sheets above on source order. -->
<link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788320423892">
<!-- Last of the hand-written sheets: the mirroring rules must win over anything <!-- Last of the hand-written sheets: the mirroring rules must win over anything
above them, and they only ever apply under [dir="rtl"]. --> above them, and they only ever apply under [dir="rtl"]. -->
<link rel="stylesheet" href="/src/styles/rtl.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/rtl.css?v=1788320423892">
<!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. --> <!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. -->
<script defer src="/src/scripts/load-async-css.js?v=1788239352576"></script> <script defer src="/src/scripts/load-async-css.js?v=1788320423892"></script>
<noscript> <noscript>
<link rel="stylesheet" href="/assets/fontawesome/css/all.min.css"> <link rel="stylesheet" href="/assets/fontawesome/css/all.min.css">
<link rel="stylesheet" href="/libs/prism/prism.css"> <link rel="stylesheet" href="/libs/prism/prism.css">
</noscript> </noscript>
<script defer src="/src/scripts/fa-check.js?v=1788239352576"></script> <script defer src="/src/scripts/fa-check.js?v=1788320423892"></script>
<!-- Update Manager - система принудительного обновления --> <!-- Update Manager - система принудительного обновления -->
<script defer src="/src/utils/updateManager.js?v=1788239352576"></script> <script defer src="/src/utils/updateManager.js?v=1788320423892"></script>
<script type="module" src="/src/components/UpdateChecker.jsx?v=1788239352576"></script> <script type="module" src="/src/components/UpdateChecker.jsx?v=1788320423892"></script>
<script type="module" src="/dist/qr-local.js?v=1788239352576"></script> <script type="module" src="/dist/qr-local.js?v=1788320423892"></script>
<script type="module" src="/src/components/QRScanner.js?v=1788239352576"></script> <script type="module" src="/src/components/QRScanner.js?v=1788320423892"></script>
</head> </head>
<body> <body>
<div id="root"></div> <div id="root"></div>
<script type="module" src="/dist/app-boot.js?v=1788239352576"></script> <script type="module" src="/dist/app-boot.js?v=1788320423892"></script>
<script type="module" src="/dist/app.js?v=1788239352576"></script> <script type="module" src="/dist/app.js?v=1788320423892"></script>
<script defer src="/src/scripts/pwa-register.js?v=1788239352576"></script> <script defer src="/src/scripts/pwa-register.js?v=1788320423892"></script>
<script src="/src/pwa/install-prompt.js?v=1788239352576" type="module"></script> <script src="/src/pwa/install-prompt.js?v=1788320423892" type="module"></script>
<script src="/src/pwa/pwa-manager.js?v=1788239352576" type="module"></script> <script src="/src/pwa/pwa-manager.js?v=1788320423892" type="module"></script>
<script defer src="/src/scripts/pwa-offline-test.js?v=1788239352576"></script> <script defer src="/src/scripts/pwa-offline-test.js?v=1788320423892"></script>
<link rel="stylesheet" href="/src/styles/pwa.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/pwa.css?v=1788320423892">
</body> </body>
</html> </html>
+24 -24
View File
@@ -30,7 +30,7 @@
<!-- PWA Manifest --> <!-- PWA Manifest -->
<link rel="manifest" href="/ko/manifest.json"> <link rel="manifest" href="/ko/manifest.json">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788239352576"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788320423892">
<!-- PWA Meta Tags --> <!-- PWA Meta Tags -->
<meta name="mobile-web-app-capable" content="yes"> <meta name="mobile-web-app-capable" content="yes">
@@ -96,7 +96,7 @@
<link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png">
<!-- Apple Touch Icons --> <!-- Apple Touch Icons -->
<link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788239352576"> <link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788320423892">
<link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png"> <link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png"> <link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png"> <link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png">
@@ -105,7 +105,7 @@
<link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png"> <link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png"> <link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png"> <link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788239352576"> <link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788320423892">
<!-- Microsoft Tiles --> <!-- Microsoft Tiles -->
<meta name="msapplication-TileColor" content="#ff6b35"> <meta name="msapplication-TileColor" content="#ff6b35">
@@ -222,7 +222,7 @@
<!-- Render-blocking JS is deferred: classic deferred scripts and module scripts <!-- Render-blocking JS is deferred: classic deferred scripts and module scripts
both execute in document order after parsing, so React still runs before the both execute in document order after parsing, so React still runs before the
app modules below, but the parser / first paint is no longer blocked. --> app modules below, but the parser / first paint is no longer blocked. -->
<script defer src="/config/ice-servers.js?v=1788239352576"></script> <script defer src="/config/ice-servers.js?v=1788320423892"></script>
<script defer src="/libs/react/react.production.min.js"></script> <script defer src="/libs/react/react.production.min.js"></script>
<script defer src="/libs/react-dom/react-dom.production.min.js"></script> <script defer src="/libs/react-dom/react-dom.production.min.js"></script>
<!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only — <!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only —
@@ -230,8 +230,8 @@
Its CSS is loaded async via load-async-css.js (not paint-critical). --> Its CSS is loaded async via load-async-css.js (not paint-critical). -->
<script defer src="/libs/prism/prism.js"></script> <script defer src="/libs/prism/prism.js"></script>
<!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). --> <!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). -->
<link rel="stylesheet" href="/assets/tailwind.css?v=1788239352576"> <link rel="stylesheet" href="/assets/tailwind.css?v=1788320423892">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788239352576"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788320423892">
<!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI <!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI
icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the
first screen). Inter latin 400/700 cover body text and headings/buttons. --> first screen). Inter latin 400/700 cover body text and headings/buttons. -->
@@ -239,38 +239,38 @@
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin>
<link rel="stylesheet" href="/assets/fonts/inter/inter.css"> <link rel="stylesheet" href="/assets/fonts/inter/inter.css">
<link rel="stylesheet" href="/src/styles/main.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/main.css?v=1788320423892">
<link rel="stylesheet" href="/src/styles/animations.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/animations.css?v=1788320423892">
<link rel="stylesheet" href="/src/styles/components.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/components.css?v=1788320423892">
<!-- Loads after components.css on purpose: press feedback, material weight, <!-- Loads after components.css on purpose: press feedback, material weight,
size-specific tracking and the reduced-motion / -transparency / -contrast size-specific tracking and the reduced-motion / -transparency / -contrast
answers all need to settle arguments with the sheets above on source order. --> answers all need to settle arguments with the sheets above on source order. -->
<link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788320423892">
<!-- Last of the hand-written sheets: the mirroring rules must win over anything <!-- Last of the hand-written sheets: the mirroring rules must win over anything
above them, and they only ever apply under [dir="rtl"]. --> above them, and they only ever apply under [dir="rtl"]. -->
<link rel="stylesheet" href="/src/styles/rtl.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/rtl.css?v=1788320423892">
<!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. --> <!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. -->
<script defer src="/src/scripts/load-async-css.js?v=1788239352576"></script> <script defer src="/src/scripts/load-async-css.js?v=1788320423892"></script>
<noscript> <noscript>
<link rel="stylesheet" href="/assets/fontawesome/css/all.min.css"> <link rel="stylesheet" href="/assets/fontawesome/css/all.min.css">
<link rel="stylesheet" href="/libs/prism/prism.css"> <link rel="stylesheet" href="/libs/prism/prism.css">
</noscript> </noscript>
<script defer src="/src/scripts/fa-check.js?v=1788239352576"></script> <script defer src="/src/scripts/fa-check.js?v=1788320423892"></script>
<!-- Update Manager - система принудительного обновления --> <!-- Update Manager - система принудительного обновления -->
<script defer src="/src/utils/updateManager.js?v=1788239352576"></script> <script defer src="/src/utils/updateManager.js?v=1788320423892"></script>
<script type="module" src="/src/components/UpdateChecker.jsx?v=1788239352576"></script> <script type="module" src="/src/components/UpdateChecker.jsx?v=1788320423892"></script>
<script type="module" src="/dist/qr-local.js?v=1788239352576"></script> <script type="module" src="/dist/qr-local.js?v=1788320423892"></script>
<script type="module" src="/src/components/QRScanner.js?v=1788239352576"></script> <script type="module" src="/src/components/QRScanner.js?v=1788320423892"></script>
</head> </head>
<body> <body>
<div id="root"></div> <div id="root"></div>
<script type="module" src="/dist/app-boot.js?v=1788239352576"></script> <script type="module" src="/dist/app-boot.js?v=1788320423892"></script>
<script type="module" src="/dist/app.js?v=1788239352576"></script> <script type="module" src="/dist/app.js?v=1788320423892"></script>
<script defer src="/src/scripts/pwa-register.js?v=1788239352576"></script> <script defer src="/src/scripts/pwa-register.js?v=1788320423892"></script>
<script src="/src/pwa/install-prompt.js?v=1788239352576" type="module"></script> <script src="/src/pwa/install-prompt.js?v=1788320423892" type="module"></script>
<script src="/src/pwa/pwa-manager.js?v=1788239352576" type="module"></script> <script src="/src/pwa/pwa-manager.js?v=1788320423892" type="module"></script>
<script defer src="/src/scripts/pwa-offline-test.js?v=1788239352576"></script> <script defer src="/src/scripts/pwa-offline-test.js?v=1788320423892"></script>
<link rel="stylesheet" href="/src/styles/pwa.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/pwa.css?v=1788320423892">
</body> </body>
</html> </html>
+6 -6
View File
@@ -1,10 +1,10 @@
{ {
"version": "1788239352576", "version": "1788320423892",
"buildVersion": "1788239352576", "buildVersion": "1788320423892",
"appVersion": "6.7.0", "appVersion": "6.7.0",
"buildTime": "2026-09-01T05:09:12.623Z", "buildTime": "2026-09-02T03:40:23.952Z",
"buildId": "1788239352576-113bb10", "buildId": "1788320423892-8d7b41b",
"gitHash": "113bb10", "gitHash": "8d7b41b",
"generated": true, "generated": true,
"generatedAt": "2026-09-01T05:09:12.625Z" "generatedAt": "2026-09-02T03:40:23.954Z"
} }
+24 -24
View File
@@ -30,7 +30,7 @@
<!-- PWA Manifest --> <!-- PWA Manifest -->
<link rel="manifest" href="/ru/manifest.json"> <link rel="manifest" href="/ru/manifest.json">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788239352576"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788320423892">
<!-- PWA Meta Tags --> <!-- PWA Meta Tags -->
<meta name="mobile-web-app-capable" content="yes"> <meta name="mobile-web-app-capable" content="yes">
@@ -96,7 +96,7 @@
<link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png">
<!-- Apple Touch Icons --> <!-- Apple Touch Icons -->
<link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788239352576"> <link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788320423892">
<link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png"> <link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png"> <link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png"> <link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png">
@@ -105,7 +105,7 @@
<link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png"> <link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png"> <link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png"> <link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788239352576"> <link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788320423892">
<!-- Microsoft Tiles --> <!-- Microsoft Tiles -->
<meta name="msapplication-TileColor" content="#ff6b35"> <meta name="msapplication-TileColor" content="#ff6b35">
@@ -222,7 +222,7 @@
<!-- Render-blocking JS is deferred: classic deferred scripts and module scripts <!-- Render-blocking JS is deferred: classic deferred scripts and module scripts
both execute in document order after parsing, so React still runs before the both execute in document order after parsing, so React still runs before the
app modules below, but the parser / first paint is no longer blocked. --> app modules below, but the parser / first paint is no longer blocked. -->
<script defer src="/config/ice-servers.js?v=1788239352576"></script> <script defer src="/config/ice-servers.js?v=1788320423892"></script>
<script defer src="/libs/react/react.production.min.js"></script> <script defer src="/libs/react/react.production.min.js"></script>
<script defer src="/libs/react-dom/react-dom.production.min.js"></script> <script defer src="/libs/react-dom/react-dom.production.min.js"></script>
<!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only — <!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only —
@@ -230,8 +230,8 @@
Its CSS is loaded async via load-async-css.js (not paint-critical). --> Its CSS is loaded async via load-async-css.js (not paint-critical). -->
<script defer src="/libs/prism/prism.js"></script> <script defer src="/libs/prism/prism.js"></script>
<!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). --> <!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). -->
<link rel="stylesheet" href="/assets/tailwind.css?v=1788239352576"> <link rel="stylesheet" href="/assets/tailwind.css?v=1788320423892">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788239352576"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788320423892">
<!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI <!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI
icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the
first screen). Inter latin 400/700 cover body text and headings/buttons. --> first screen). Inter latin 400/700 cover body text and headings/buttons. -->
@@ -239,38 +239,38 @@
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin>
<link rel="stylesheet" href="/assets/fonts/inter/inter.css"> <link rel="stylesheet" href="/assets/fonts/inter/inter.css">
<link rel="stylesheet" href="/src/styles/main.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/main.css?v=1788320423892">
<link rel="stylesheet" href="/src/styles/animations.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/animations.css?v=1788320423892">
<link rel="stylesheet" href="/src/styles/components.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/components.css?v=1788320423892">
<!-- Loads after components.css on purpose: press feedback, material weight, <!-- Loads after components.css on purpose: press feedback, material weight,
size-specific tracking and the reduced-motion / -transparency / -contrast size-specific tracking and the reduced-motion / -transparency / -contrast
answers all need to settle arguments with the sheets above on source order. --> answers all need to settle arguments with the sheets above on source order. -->
<link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788320423892">
<!-- Last of the hand-written sheets: the mirroring rules must win over anything <!-- Last of the hand-written sheets: the mirroring rules must win over anything
above them, and they only ever apply under [dir="rtl"]. --> above them, and they only ever apply under [dir="rtl"]. -->
<link rel="stylesheet" href="/src/styles/rtl.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/rtl.css?v=1788320423892">
<!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. --> <!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. -->
<script defer src="/src/scripts/load-async-css.js?v=1788239352576"></script> <script defer src="/src/scripts/load-async-css.js?v=1788320423892"></script>
<noscript> <noscript>
<link rel="stylesheet" href="/assets/fontawesome/css/all.min.css"> <link rel="stylesheet" href="/assets/fontawesome/css/all.min.css">
<link rel="stylesheet" href="/libs/prism/prism.css"> <link rel="stylesheet" href="/libs/prism/prism.css">
</noscript> </noscript>
<script defer src="/src/scripts/fa-check.js?v=1788239352576"></script> <script defer src="/src/scripts/fa-check.js?v=1788320423892"></script>
<!-- Update Manager - система принудительного обновления --> <!-- Update Manager - система принудительного обновления -->
<script defer src="/src/utils/updateManager.js?v=1788239352576"></script> <script defer src="/src/utils/updateManager.js?v=1788320423892"></script>
<script type="module" src="/src/components/UpdateChecker.jsx?v=1788239352576"></script> <script type="module" src="/src/components/UpdateChecker.jsx?v=1788320423892"></script>
<script type="module" src="/dist/qr-local.js?v=1788239352576"></script> <script type="module" src="/dist/qr-local.js?v=1788320423892"></script>
<script type="module" src="/src/components/QRScanner.js?v=1788239352576"></script> <script type="module" src="/src/components/QRScanner.js?v=1788320423892"></script>
</head> </head>
<body> <body>
<div id="root"></div> <div id="root"></div>
<script type="module" src="/dist/app-boot.js?v=1788239352576"></script> <script type="module" src="/dist/app-boot.js?v=1788320423892"></script>
<script type="module" src="/dist/app.js?v=1788239352576"></script> <script type="module" src="/dist/app.js?v=1788320423892"></script>
<script defer src="/src/scripts/pwa-register.js?v=1788239352576"></script> <script defer src="/src/scripts/pwa-register.js?v=1788320423892"></script>
<script src="/src/pwa/install-prompt.js?v=1788239352576" type="module"></script> <script src="/src/pwa/install-prompt.js?v=1788320423892" type="module"></script>
<script src="/src/pwa/pwa-manager.js?v=1788239352576" type="module"></script> <script src="/src/pwa/pwa-manager.js?v=1788320423892" type="module"></script>
<script defer src="/src/scripts/pwa-offline-test.js?v=1788239352576"></script> <script defer src="/src/scripts/pwa-offline-test.js?v=1788320423892"></script>
<link rel="stylesheet" href="/src/styles/pwa.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/pwa.css?v=1788320423892">
</body> </body>
</html> </html>
+1 -1
View File
@@ -1680,7 +1680,7 @@ import { GroupCallMedia, mediaErrorCode } from './group/groupCallMedia.js';
// /download/v0.3.0/SecureBit.Chat_0.1.0_x64-setup.exe, a file that never // /download/v0.3.0/SecureBit.Chat_0.1.0_x64-setup.exe, a file that never
// existed, and the download 404s. A pinned tag keeps serving a real // existed, and the download 404s. A pinned tag keeps serving a real
// installer instead. // installer instead.
const SB_DESKTOP_VERSION = '0.5.0'; const SB_DESKTOP_VERSION = '1.0.0';
const SB_DESKTOP_RELEASE = `https://github.com/SecureBitChat/securebit-desktop/releases/download/v${SB_DESKTOP_VERSION}`; const SB_DESKTOP_RELEASE = `https://github.com/SecureBitChat/securebit-desktop/releases/download/v${SB_DESKTOP_VERSION}`;
const DOWNLOADS = { const DOWNLOADS = {
mac: { name: 'macOS', format: '.dmg · Apple Silicon & Intel', icon: 'fab fa-apple', url: `${SB_DESKTOP_RELEASE}/SecureBit.Chat_${SB_DESKTOP_VERSION}_x64.dmg` }, mac: { name: 'macOS', format: '.dmg · Apple Silicon & Intel', icon: 'fab fa-apple', url: `${SB_DESKTOP_RELEASE}/SecureBit.Chat_${SB_DESKTOP_VERSION}_x64.dmg` },
+1 -1
View File
@@ -11,7 +11,7 @@ let DYNAMIC_CACHE = 'securebit-pwa-dynamic-v4.7.56';
// Build stamp — rewritten by scripts/post-build.js on every release so this file's // Build stamp — rewritten by scripts/post-build.js on every release so this file's
// bytes change each deploy. That is what makes the browser detect a new Service Worker, // bytes change each deploy. That is what makes the browser detect a new Service Worker,
// reinstall it, drop stale caches and (via controllerchange) prompt the page to update. // reinstall it, drop stale caches and (via controllerchange) prompt the page to update.
const SW_BUILD_VERSION = '1788239352576'; const SW_BUILD_VERSION = '1788320423892';
// Locale subdirectories, rewritten by scripts/build-i18n.js. Each localized page is a // Locale subdirectories, rewritten by scripts/build-i18n.js. Each localized page is a
// separate document at its own URL, so the shell has to be cached and served per // separate document at its own URL, so the shell has to be cached and served per
+23 -1
View File
@@ -148,8 +148,23 @@ for (const code of site.locales) {
} }
} }
// These dictionaries are the SHARED source for two clients: this one and the
// Tauri desktop client, which lives in a separate repository and is not
// scanned here. Its keys are therefore unused *by this scan* and always
// will be — that is the cost of one dictionary rather than two drifting
// ones, not a defect to fix by deleting them.
//
// The exemption is deliberately narrow: the `desktop.` prefix, plus the
// message-lifetime labels below by exact name. Anything else that stops
// being used still fails, which is the point of the check.
const CONSUMED_BY_DESKTOP = new Set([
'msg.after5s', 'msg.after15s', 'msg.after30s', 'msg.after1m',
'msg.sec30', 'msg.min5', 'msg.hour1',
]);
const belongsToDesktop = (key) => key.startsWith('desktop.') || CONSUMED_BY_DESKTOP.has(key);
const defined = new Set(Object.keys(JSON.parse(read(`locales/${site.defaultLocale}.json`)).ui || {})); const defined = new Set(Object.keys(JSON.parse(read(`locales/${site.defaultLocale}.json`)).ui || {}));
const isUsed = (key) => used.has(key) || patterns.some((re) => re.test(key)); const isUsed = (key) => used.has(key) || belongsToDesktop(key) || patterns.some((re) => re.test(key));
const missing = [...used].filter((key) => !defined.has(key)).sort(); const missing = [...used].filter((key) => !defined.has(key)).sort();
const unused = [...defined].filter((key) => !isUsed(key)).sort(); const unused = [...defined].filter((key) => !isUsed(key)).sort();
@@ -158,6 +173,13 @@ for (const code of site.locales) {
assert.deepEqual(unused, [], assert.deepEqual(unused, [],
`these keys are defined but never used — remove them rather than have them translated`); `these keys are defined but never used — remove them rather than have them translated`);
assert.ok(used.size > 0, 'the scan found no t() calls at all, which means it is not scanning anything'); assert.ok(used.size > 0, 'the scan found no t() calls at all, which means it is not scanning anything');
// If the desktop client ever stops sharing these dictionaries, the exemption
// above turns into a hiding place for dead strings. This fails when that
// day comes, instead of letting them accumulate unnoticed.
assert.ok(
[...defined].some(belongsToDesktop),
'no desktop-owned keys are defined any more — drop CONSUMED_BY_DESKTOP and the desktop. exemption'
);
assert.ok(patterns.length > 0, 'no template-literal keys were found — the dynamic-key scan is not working'); assert.ok(patterns.length > 0, 'no template-literal keys were found — the dynamic-key scan is not working');
} }
+24 -24
View File
@@ -30,7 +30,7 @@
<!-- PWA Manifest --> <!-- PWA Manifest -->
<link rel="manifest" href="/uk/manifest.json"> <link rel="manifest" href="/uk/manifest.json">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788239352576"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788320423892">
<!-- PWA Meta Tags --> <!-- PWA Meta Tags -->
<meta name="mobile-web-app-capable" content="yes"> <meta name="mobile-web-app-capable" content="yes">
@@ -96,7 +96,7 @@
<link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png">
<!-- Apple Touch Icons --> <!-- Apple Touch Icons -->
<link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788239352576"> <link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788320423892">
<link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png"> <link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png"> <link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png"> <link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png">
@@ -105,7 +105,7 @@
<link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png"> <link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png"> <link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png"> <link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788239352576"> <link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788320423892">
<!-- Microsoft Tiles --> <!-- Microsoft Tiles -->
<meta name="msapplication-TileColor" content="#ff6b35"> <meta name="msapplication-TileColor" content="#ff6b35">
@@ -222,7 +222,7 @@
<!-- Render-blocking JS is deferred: classic deferred scripts and module scripts <!-- Render-blocking JS is deferred: classic deferred scripts and module scripts
both execute in document order after parsing, so React still runs before the both execute in document order after parsing, so React still runs before the
app modules below, but the parser / first paint is no longer blocked. --> app modules below, but the parser / first paint is no longer blocked. -->
<script defer src="/config/ice-servers.js?v=1788239352576"></script> <script defer src="/config/ice-servers.js?v=1788320423892"></script>
<script defer src="/libs/react/react.production.min.js"></script> <script defer src="/libs/react/react.production.min.js"></script>
<script defer src="/libs/react-dom/react-dom.production.min.js"></script> <script defer src="/libs/react-dom/react-dom.production.min.js"></script>
<!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only — <!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only —
@@ -230,8 +230,8 @@
Its CSS is loaded async via load-async-css.js (not paint-critical). --> Its CSS is loaded async via load-async-css.js (not paint-critical). -->
<script defer src="/libs/prism/prism.js"></script> <script defer src="/libs/prism/prism.js"></script>
<!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). --> <!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). -->
<link rel="stylesheet" href="/assets/tailwind.css?v=1788239352576"> <link rel="stylesheet" href="/assets/tailwind.css?v=1788320423892">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788239352576"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788320423892">
<!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI <!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI
icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the
first screen). Inter latin 400/700 cover body text and headings/buttons. --> first screen). Inter latin 400/700 cover body text and headings/buttons. -->
@@ -239,38 +239,38 @@
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin>
<link rel="stylesheet" href="/assets/fonts/inter/inter.css"> <link rel="stylesheet" href="/assets/fonts/inter/inter.css">
<link rel="stylesheet" href="/src/styles/main.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/main.css?v=1788320423892">
<link rel="stylesheet" href="/src/styles/animations.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/animations.css?v=1788320423892">
<link rel="stylesheet" href="/src/styles/components.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/components.css?v=1788320423892">
<!-- Loads after components.css on purpose: press feedback, material weight, <!-- Loads after components.css on purpose: press feedback, material weight,
size-specific tracking and the reduced-motion / -transparency / -contrast size-specific tracking and the reduced-motion / -transparency / -contrast
answers all need to settle arguments with the sheets above on source order. --> answers all need to settle arguments with the sheets above on source order. -->
<link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788320423892">
<!-- Last of the hand-written sheets: the mirroring rules must win over anything <!-- Last of the hand-written sheets: the mirroring rules must win over anything
above them, and they only ever apply under [dir="rtl"]. --> above them, and they only ever apply under [dir="rtl"]. -->
<link rel="stylesheet" href="/src/styles/rtl.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/rtl.css?v=1788320423892">
<!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. --> <!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. -->
<script defer src="/src/scripts/load-async-css.js?v=1788239352576"></script> <script defer src="/src/scripts/load-async-css.js?v=1788320423892"></script>
<noscript> <noscript>
<link rel="stylesheet" href="/assets/fontawesome/css/all.min.css"> <link rel="stylesheet" href="/assets/fontawesome/css/all.min.css">
<link rel="stylesheet" href="/libs/prism/prism.css"> <link rel="stylesheet" href="/libs/prism/prism.css">
</noscript> </noscript>
<script defer src="/src/scripts/fa-check.js?v=1788239352576"></script> <script defer src="/src/scripts/fa-check.js?v=1788320423892"></script>
<!-- Update Manager - система принудительного обновления --> <!-- Update Manager - система принудительного обновления -->
<script defer src="/src/utils/updateManager.js?v=1788239352576"></script> <script defer src="/src/utils/updateManager.js?v=1788320423892"></script>
<script type="module" src="/src/components/UpdateChecker.jsx?v=1788239352576"></script> <script type="module" src="/src/components/UpdateChecker.jsx?v=1788320423892"></script>
<script type="module" src="/dist/qr-local.js?v=1788239352576"></script> <script type="module" src="/dist/qr-local.js?v=1788320423892"></script>
<script type="module" src="/src/components/QRScanner.js?v=1788239352576"></script> <script type="module" src="/src/components/QRScanner.js?v=1788320423892"></script>
</head> </head>
<body> <body>
<div id="root"></div> <div id="root"></div>
<script type="module" src="/dist/app-boot.js?v=1788239352576"></script> <script type="module" src="/dist/app-boot.js?v=1788320423892"></script>
<script type="module" src="/dist/app.js?v=1788239352576"></script> <script type="module" src="/dist/app.js?v=1788320423892"></script>
<script defer src="/src/scripts/pwa-register.js?v=1788239352576"></script> <script defer src="/src/scripts/pwa-register.js?v=1788320423892"></script>
<script src="/src/pwa/install-prompt.js?v=1788239352576" type="module"></script> <script src="/src/pwa/install-prompt.js?v=1788320423892" type="module"></script>
<script src="/src/pwa/pwa-manager.js?v=1788239352576" type="module"></script> <script src="/src/pwa/pwa-manager.js?v=1788320423892" type="module"></script>
<script defer src="/src/scripts/pwa-offline-test.js?v=1788239352576"></script> <script defer src="/src/scripts/pwa-offline-test.js?v=1788320423892"></script>
<link rel="stylesheet" href="/src/styles/pwa.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/pwa.css?v=1788320423892">
</body> </body>
</html> </html>
+24 -24
View File
@@ -30,7 +30,7 @@
<!-- PWA Manifest --> <!-- PWA Manifest -->
<link rel="manifest" href="/ur/manifest.json"> <link rel="manifest" href="/ur/manifest.json">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788239352576"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788320423892">
<!-- PWA Meta Tags --> <!-- PWA Meta Tags -->
<meta name="mobile-web-app-capable" content="yes"> <meta name="mobile-web-app-capable" content="yes">
@@ -96,7 +96,7 @@
<link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png">
<!-- Apple Touch Icons --> <!-- Apple Touch Icons -->
<link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788239352576"> <link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788320423892">
<link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png"> <link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png"> <link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png"> <link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png">
@@ -105,7 +105,7 @@
<link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png"> <link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png"> <link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png"> <link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788239352576"> <link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788320423892">
<!-- Microsoft Tiles --> <!-- Microsoft Tiles -->
<meta name="msapplication-TileColor" content="#ff6b35"> <meta name="msapplication-TileColor" content="#ff6b35">
@@ -222,7 +222,7 @@
<!-- Render-blocking JS is deferred: classic deferred scripts and module scripts <!-- Render-blocking JS is deferred: classic deferred scripts and module scripts
both execute in document order after parsing, so React still runs before the both execute in document order after parsing, so React still runs before the
app modules below, but the parser / first paint is no longer blocked. --> app modules below, but the parser / first paint is no longer blocked. -->
<script defer src="/config/ice-servers.js?v=1788239352576"></script> <script defer src="/config/ice-servers.js?v=1788320423892"></script>
<script defer src="/libs/react/react.production.min.js"></script> <script defer src="/libs/react/react.production.min.js"></script>
<script defer src="/libs/react-dom/react-dom.production.min.js"></script> <script defer src="/libs/react-dom/react-dom.production.min.js"></script>
<!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only — <!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only —
@@ -230,8 +230,8 @@
Its CSS is loaded async via load-async-css.js (not paint-critical). --> Its CSS is loaded async via load-async-css.js (not paint-critical). -->
<script defer src="/libs/prism/prism.js"></script> <script defer src="/libs/prism/prism.js"></script>
<!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). --> <!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). -->
<link rel="stylesheet" href="/assets/tailwind.css?v=1788239352576"> <link rel="stylesheet" href="/assets/tailwind.css?v=1788320423892">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788239352576"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788320423892">
<!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI <!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI
icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the
first screen). Inter latin 400/700 cover body text and headings/buttons. --> first screen). Inter latin 400/700 cover body text and headings/buttons. -->
@@ -239,38 +239,38 @@
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin>
<link rel="stylesheet" href="/assets/fonts/inter/inter.css"> <link rel="stylesheet" href="/assets/fonts/inter/inter.css">
<link rel="stylesheet" href="/src/styles/main.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/main.css?v=1788320423892">
<link rel="stylesheet" href="/src/styles/animations.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/animations.css?v=1788320423892">
<link rel="stylesheet" href="/src/styles/components.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/components.css?v=1788320423892">
<!-- Loads after components.css on purpose: press feedback, material weight, <!-- Loads after components.css on purpose: press feedback, material weight,
size-specific tracking and the reduced-motion / -transparency / -contrast size-specific tracking and the reduced-motion / -transparency / -contrast
answers all need to settle arguments with the sheets above on source order. --> answers all need to settle arguments with the sheets above on source order. -->
<link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788320423892">
<!-- Last of the hand-written sheets: the mirroring rules must win over anything <!-- Last of the hand-written sheets: the mirroring rules must win over anything
above them, and they only ever apply under [dir="rtl"]. --> above them, and they only ever apply under [dir="rtl"]. -->
<link rel="stylesheet" href="/src/styles/rtl.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/rtl.css?v=1788320423892">
<!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. --> <!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. -->
<script defer src="/src/scripts/load-async-css.js?v=1788239352576"></script> <script defer src="/src/scripts/load-async-css.js?v=1788320423892"></script>
<noscript> <noscript>
<link rel="stylesheet" href="/assets/fontawesome/css/all.min.css"> <link rel="stylesheet" href="/assets/fontawesome/css/all.min.css">
<link rel="stylesheet" href="/libs/prism/prism.css"> <link rel="stylesheet" href="/libs/prism/prism.css">
</noscript> </noscript>
<script defer src="/src/scripts/fa-check.js?v=1788239352576"></script> <script defer src="/src/scripts/fa-check.js?v=1788320423892"></script>
<!-- Update Manager - система принудительного обновления --> <!-- Update Manager - система принудительного обновления -->
<script defer src="/src/utils/updateManager.js?v=1788239352576"></script> <script defer src="/src/utils/updateManager.js?v=1788320423892"></script>
<script type="module" src="/src/components/UpdateChecker.jsx?v=1788239352576"></script> <script type="module" src="/src/components/UpdateChecker.jsx?v=1788320423892"></script>
<script type="module" src="/dist/qr-local.js?v=1788239352576"></script> <script type="module" src="/dist/qr-local.js?v=1788320423892"></script>
<script type="module" src="/src/components/QRScanner.js?v=1788239352576"></script> <script type="module" src="/src/components/QRScanner.js?v=1788320423892"></script>
</head> </head>
<body> <body>
<div id="root"></div> <div id="root"></div>
<script type="module" src="/dist/app-boot.js?v=1788239352576"></script> <script type="module" src="/dist/app-boot.js?v=1788320423892"></script>
<script type="module" src="/dist/app.js?v=1788239352576"></script> <script type="module" src="/dist/app.js?v=1788320423892"></script>
<script defer src="/src/scripts/pwa-register.js?v=1788239352576"></script> <script defer src="/src/scripts/pwa-register.js?v=1788320423892"></script>
<script src="/src/pwa/install-prompt.js?v=1788239352576" type="module"></script> <script src="/src/pwa/install-prompt.js?v=1788320423892" type="module"></script>
<script src="/src/pwa/pwa-manager.js?v=1788239352576" type="module"></script> <script src="/src/pwa/pwa-manager.js?v=1788320423892" type="module"></script>
<script defer src="/src/scripts/pwa-offline-test.js?v=1788239352576"></script> <script defer src="/src/scripts/pwa-offline-test.js?v=1788320423892"></script>
<link rel="stylesheet" href="/src/styles/pwa.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/pwa.css?v=1788320423892">
</body> </body>
</html> </html>
+24 -24
View File
@@ -30,7 +30,7 @@
<!-- PWA Manifest --> <!-- PWA Manifest -->
<link rel="manifest" href="/zh/manifest.json"> <link rel="manifest" href="/zh/manifest.json">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788239352576"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788320423892">
<!-- PWA Meta Tags --> <!-- PWA Meta Tags -->
<meta name="mobile-web-app-capable" content="yes"> <meta name="mobile-web-app-capable" content="yes">
@@ -96,7 +96,7 @@
<link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png">
<!-- Apple Touch Icons --> <!-- Apple Touch Icons -->
<link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788239352576"> <link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788320423892">
<link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png"> <link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png"> <link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png"> <link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png">
@@ -105,7 +105,7 @@
<link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png"> <link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png"> <link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png"> <link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788239352576"> <link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788320423892">
<!-- Microsoft Tiles --> <!-- Microsoft Tiles -->
<meta name="msapplication-TileColor" content="#ff6b35"> <meta name="msapplication-TileColor" content="#ff6b35">
@@ -222,7 +222,7 @@
<!-- Render-blocking JS is deferred: classic deferred scripts and module scripts <!-- Render-blocking JS is deferred: classic deferred scripts and module scripts
both execute in document order after parsing, so React still runs before the both execute in document order after parsing, so React still runs before the
app modules below, but the parser / first paint is no longer blocked. --> app modules below, but the parser / first paint is no longer blocked. -->
<script defer src="/config/ice-servers.js?v=1788239352576"></script> <script defer src="/config/ice-servers.js?v=1788320423892"></script>
<script defer src="/libs/react/react.production.min.js"></script> <script defer src="/libs/react/react.production.min.js"></script>
<script defer src="/libs/react-dom/react-dom.production.min.js"></script> <script defer src="/libs/react-dom/react-dom.production.min.js"></script>
<!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only — <!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only —
@@ -230,8 +230,8 @@
Its CSS is loaded async via load-async-css.js (not paint-critical). --> Its CSS is loaded async via load-async-css.js (not paint-critical). -->
<script defer src="/libs/prism/prism.js"></script> <script defer src="/libs/prism/prism.js"></script>
<!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). --> <!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). -->
<link rel="stylesheet" href="/assets/tailwind.css?v=1788239352576"> <link rel="stylesheet" href="/assets/tailwind.css?v=1788320423892">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788239352576"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788320423892">
<!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI <!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI
icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the
first screen). Inter latin 400/700 cover body text and headings/buttons. --> first screen). Inter latin 400/700 cover body text and headings/buttons. -->
@@ -239,38 +239,38 @@
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin>
<link rel="stylesheet" href="/assets/fonts/inter/inter.css"> <link rel="stylesheet" href="/assets/fonts/inter/inter.css">
<link rel="stylesheet" href="/src/styles/main.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/main.css?v=1788320423892">
<link rel="stylesheet" href="/src/styles/animations.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/animations.css?v=1788320423892">
<link rel="stylesheet" href="/src/styles/components.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/components.css?v=1788320423892">
<!-- Loads after components.css on purpose: press feedback, material weight, <!-- Loads after components.css on purpose: press feedback, material weight,
size-specific tracking and the reduced-motion / -transparency / -contrast size-specific tracking and the reduced-motion / -transparency / -contrast
answers all need to settle arguments with the sheets above on source order. --> answers all need to settle arguments with the sheets above on source order. -->
<link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788320423892">
<!-- Last of the hand-written sheets: the mirroring rules must win over anything <!-- Last of the hand-written sheets: the mirroring rules must win over anything
above them, and they only ever apply under [dir="rtl"]. --> above them, and they only ever apply under [dir="rtl"]. -->
<link rel="stylesheet" href="/src/styles/rtl.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/rtl.css?v=1788320423892">
<!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. --> <!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. -->
<script defer src="/src/scripts/load-async-css.js?v=1788239352576"></script> <script defer src="/src/scripts/load-async-css.js?v=1788320423892"></script>
<noscript> <noscript>
<link rel="stylesheet" href="/assets/fontawesome/css/all.min.css"> <link rel="stylesheet" href="/assets/fontawesome/css/all.min.css">
<link rel="stylesheet" href="/libs/prism/prism.css"> <link rel="stylesheet" href="/libs/prism/prism.css">
</noscript> </noscript>
<script defer src="/src/scripts/fa-check.js?v=1788239352576"></script> <script defer src="/src/scripts/fa-check.js?v=1788320423892"></script>
<!-- Update Manager - система принудительного обновления --> <!-- Update Manager - система принудительного обновления -->
<script defer src="/src/utils/updateManager.js?v=1788239352576"></script> <script defer src="/src/utils/updateManager.js?v=1788320423892"></script>
<script type="module" src="/src/components/UpdateChecker.jsx?v=1788239352576"></script> <script type="module" src="/src/components/UpdateChecker.jsx?v=1788320423892"></script>
<script type="module" src="/dist/qr-local.js?v=1788239352576"></script> <script type="module" src="/dist/qr-local.js?v=1788320423892"></script>
<script type="module" src="/src/components/QRScanner.js?v=1788239352576"></script> <script type="module" src="/src/components/QRScanner.js?v=1788320423892"></script>
</head> </head>
<body> <body>
<div id="root"></div> <div id="root"></div>
<script type="module" src="/dist/app-boot.js?v=1788239352576"></script> <script type="module" src="/dist/app-boot.js?v=1788320423892"></script>
<script type="module" src="/dist/app.js?v=1788239352576"></script> <script type="module" src="/dist/app.js?v=1788320423892"></script>
<script defer src="/src/scripts/pwa-register.js?v=1788239352576"></script> <script defer src="/src/scripts/pwa-register.js?v=1788320423892"></script>
<script src="/src/pwa/install-prompt.js?v=1788239352576" type="module"></script> <script src="/src/pwa/install-prompt.js?v=1788320423892" type="module"></script>
<script src="/src/pwa/pwa-manager.js?v=1788239352576" type="module"></script> <script src="/src/pwa/pwa-manager.js?v=1788320423892" type="module"></script>
<script defer src="/src/scripts/pwa-offline-test.js?v=1788239352576"></script> <script defer src="/src/scripts/pwa-offline-test.js?v=1788320423892"></script>
<link rel="stylesheet" href="/src/styles/pwa.css?v=1788239352576"> <link rel="stylesheet" href="/src/styles/pwa.css?v=1788320423892">
</body> </body>
</html> </html>