// LoadingScreen — брендовый сплеш плеера. // Скопирован 1-в-1 с Android LoadingView.kt: // - синий gradient brandTop #2841C8 → brandBottom #4B6EF0 // - лого A02 130px по центру // - "Рублокс" 56sp белый под лого // - 8-точечный spinner с активной точкой // - подпись (text + анимированные точки) // - декоративные пузыри с "дышащим" alpha // // CSS-анимации, без JS-фрейма каждый кадр. import React, { useState } from 'react'; const TITLE = 'Рублокс'; /** * Dev-only панель вставки JWT. Показывается на экране «Нужен JWT» (только * localhost). Кнопка → инпут → сохраняет в localStorage['player_jwt'] и * перезагружает страницу. На проде этот экран не наступает (там redirect). */ function DevJwtPanel() { const [open, setOpen] = useState(false); const [val, setVal] = useState(''); const apply = () => { const t = (val || '').trim(); if (!t) return; try { localStorage.setItem('player_jwt', t); // совместимость с другими местами чтения токена localStorage.setItem('Authorization', t); } catch (e) { /* ignore */ } window.location.reload(); }; if (!open) { return ( ); } return (