Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
90b1de134c | ||
|
|
ad0be47214 | ||
|
|
1c89d99cc7 | ||
|
|
27b6a3238d | ||
|
|
c23a74c2f6 | ||
|
|
3757449808 | ||
|
|
0ed9d1cf8b | ||
|
|
8fd68d79c7 | ||
|
|
3c17a97e86 | ||
|
|
c744c4815c | ||
|
|
54653d885d | ||
|
|
bbc9ad6c2c | ||
|
|
d394995011 | ||
|
|
456c0eef2f | ||
|
|
f6c64c3aa2 | ||
|
|
7dcfdfa033 | ||
|
|
6ce58406c6 | ||
|
|
44310fffc4 | ||
|
|
8a41eb9f2d | ||
|
|
140dcb90a0 | ||
|
|
09f741b873 | ||
|
|
bc5c4f2955 | ||
|
|
0b91bcc058 | ||
|
|
0b7b8fe1c4 | ||
|
|
c8b9c05ea1 | ||
|
|
9a6f41f6cb | ||
|
|
66e31369a4 | ||
|
|
02f4ac743c | ||
|
|
688ab6fbca | ||
|
|
5396801baa | ||
|
|
02a98b7949 | ||
|
|
67f7e622d9 | ||
|
|
ecb879a079 | ||
|
|
839d7f1de7 | ||
|
|
3152778266 | ||
|
|
835050e055 | ||
|
|
63fe7a1886 | ||
|
|
89fb1a495f | ||
|
|
208c167c9c | ||
|
|
b23012490c | ||
|
|
fe2818d0b7 | ||
|
|
94d125a503 | ||
|
|
45f20c192f | ||
|
|
fd0d49a79e | ||
|
|
3d26663d9e | ||
|
|
4d90d834ce | ||
|
|
da9342cce0 | ||
|
|
6904d4f204 | ||
|
|
cf6ba73334 | ||
|
|
c437874473 | ||
|
|
a475516292 | ||
|
|
48e3f297dc | ||
|
|
f0c6b50fdd | ||
|
|
2605318513 | ||
|
|
9ba79075a9 | ||
|
|
d1fd87d9ee | ||
|
|
af8b30e51d | ||
|
|
6c2d2e87a6 | ||
|
|
a23a5d7d02 | ||
|
|
f9dc52e6dc | ||
|
|
d6e8167d26 | ||
|
|
932ec3ac8f | ||
|
|
0b49915420 | ||
|
|
6d59cf206f | ||
|
|
bd033f5d36 | ||
|
|
a78037c4cc | ||
|
|
cc9140b45c | ||
|
|
f69b730169 | ||
|
|
d7ce367e75 | ||
|
|
94bbf8ce33 | ||
|
|
bed5688c6c | ||
|
|
6dbbfe90fa | ||
|
|
aa1bf30556 | ||
|
|
a825d84fee | ||
|
|
d5fb5b4949 | ||
|
|
43d7cf49cf | ||
|
|
8ca6d8e3b7 | ||
|
|
6f746cd8f3 | ||
|
|
38b5723a35 | ||
|
|
1882c8c35b | ||
|
|
7ce84fc18e |
No files matched your search
@@ -0,0 +1,2 @@
|
|||||||
|
*.html diff=html
|
||||||
|
*.md diff=plaintext
|
||||||
+8
-176
@@ -1,176 +1,8 @@
|
|||||||
# ---> Python
|
*_files/
|
||||||
# Byte-compiled / optimized / DLL files
|
*_(копия)*
|
||||||
__pycache__/
|
attribution-mockup*.html
|
||||||
*.py[cod]
|
dashboard-mockup.html
|
||||||
*$py.class
|
ibm-analytics-analysis.md
|
||||||
|
*Analytics*
|
||||||
# C extensions
|
*European*
|
||||||
*.so
|
*ibm*
|
||||||
|
|
||||||
# Distribution / packaging
|
|
||||||
.Python
|
|
||||||
build/
|
|
||||||
develop-eggs/
|
|
||||||
dist/
|
|
||||||
downloads/
|
|
||||||
eggs/
|
|
||||||
.eggs/
|
|
||||||
lib/
|
|
||||||
lib64/
|
|
||||||
parts/
|
|
||||||
sdist/
|
|
||||||
var/
|
|
||||||
wheels/
|
|
||||||
share/python-wheels/
|
|
||||||
*.egg-info/
|
|
||||||
.installed.cfg
|
|
||||||
*.egg
|
|
||||||
MANIFEST
|
|
||||||
|
|
||||||
# PyInstaller
|
|
||||||
# Usually these files are written by a python script from a template
|
|
||||||
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
||||||
*.manifest
|
|
||||||
*.spec
|
|
||||||
|
|
||||||
# Installer logs
|
|
||||||
pip-log.txt
|
|
||||||
pip-delete-this-directory.txt
|
|
||||||
|
|
||||||
# Unit test / coverage reports
|
|
||||||
htmlcov/
|
|
||||||
.tox/
|
|
||||||
.nox/
|
|
||||||
.coverage
|
|
||||||
.coverage.*
|
|
||||||
.cache
|
|
||||||
nosetests.xml
|
|
||||||
coverage.xml
|
|
||||||
*.cover
|
|
||||||
*.py,cover
|
|
||||||
.hypothesis/
|
|
||||||
.pytest_cache/
|
|
||||||
cover/
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
*.mo
|
|
||||||
*.pot
|
|
||||||
|
|
||||||
# Django stuff:
|
|
||||||
*.log
|
|
||||||
local_settings.py
|
|
||||||
db.sqlite3
|
|
||||||
db.sqlite3-journal
|
|
||||||
|
|
||||||
# Flask stuff:
|
|
||||||
instance/
|
|
||||||
.webassets-cache
|
|
||||||
|
|
||||||
# Scrapy stuff:
|
|
||||||
.scrapy
|
|
||||||
|
|
||||||
# Sphinx documentation
|
|
||||||
docs/_build/
|
|
||||||
|
|
||||||
# PyBuilder
|
|
||||||
.pybuilder/
|
|
||||||
target/
|
|
||||||
|
|
||||||
# Jupyter Notebook
|
|
||||||
.ipynb_checkpoints
|
|
||||||
|
|
||||||
# IPython
|
|
||||||
profile_default/
|
|
||||||
ipython_config.py
|
|
||||||
|
|
||||||
# pyenv
|
|
||||||
# For a library or package, you might want to ignore these files since the code is
|
|
||||||
# intended to run in multiple environments; otherwise, check them in:
|
|
||||||
# .python-version
|
|
||||||
|
|
||||||
# pipenv
|
|
||||||
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
||||||
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
||||||
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
||||||
# install all needed dependencies.
|
|
||||||
#Pipfile.lock
|
|
||||||
|
|
||||||
# UV
|
|
||||||
# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
|
|
||||||
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
||||||
# commonly ignored for libraries.
|
|
||||||
#uv.lock
|
|
||||||
|
|
||||||
# poetry
|
|
||||||
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
|
||||||
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
||||||
# commonly ignored for libraries.
|
|
||||||
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
|
||||||
#poetry.lock
|
|
||||||
|
|
||||||
# pdm
|
|
||||||
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
|
||||||
#pdm.lock
|
|
||||||
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
|
|
||||||
# in version control.
|
|
||||||
# https://pdm.fming.dev/latest/usage/project/#working-with-version-control
|
|
||||||
.pdm.toml
|
|
||||||
.pdm-python
|
|
||||||
.pdm-build/
|
|
||||||
|
|
||||||
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
|
||||||
__pypackages__/
|
|
||||||
|
|
||||||
# Celery stuff
|
|
||||||
celerybeat-schedule
|
|
||||||
celerybeat.pid
|
|
||||||
|
|
||||||
# SageMath parsed files
|
|
||||||
*.sage.py
|
|
||||||
|
|
||||||
# Environments
|
|
||||||
.env
|
|
||||||
.venv
|
|
||||||
env/
|
|
||||||
venv/
|
|
||||||
ENV/
|
|
||||||
env.bak/
|
|
||||||
venv.bak/
|
|
||||||
|
|
||||||
# Spyder project settings
|
|
||||||
.spyderproject
|
|
||||||
.spyproject
|
|
||||||
|
|
||||||
# Rope project settings
|
|
||||||
.ropeproject
|
|
||||||
|
|
||||||
# mkdocs documentation
|
|
||||||
/site
|
|
||||||
|
|
||||||
# mypy
|
|
||||||
.mypy_cache/
|
|
||||||
.dmypy.json
|
|
||||||
dmypy.json
|
|
||||||
|
|
||||||
# Pyre type checker
|
|
||||||
.pyre/
|
|
||||||
|
|
||||||
# pytype static type analyzer
|
|
||||||
.pytype/
|
|
||||||
|
|
||||||
# Cython debug symbols
|
|
||||||
cython_debug/
|
|
||||||
|
|
||||||
# PyCharm
|
|
||||||
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
|
||||||
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
|
||||||
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
|
||||||
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
|
||||||
#.idea/
|
|
||||||
|
|
||||||
# Ruff stuff:
|
|
||||||
.ruff_cache/
|
|
||||||
|
|
||||||
# PyPI configuration file
|
|
||||||
.pypirc
|
|
||||||
|
|
||||||
-318
@@ -1,318 +0,0 @@
|
|||||||
# ROI24 — Техническая архитектура
|
|
||||||
|
|
||||||
## Общая схема
|
|
||||||
|
|
||||||
```
|
|
||||||
┌──────────────────────────────────────────────────────────────┐
|
|
||||||
│ ИСТОЧНИКИ ДАННЫХ │
|
|
||||||
│ 1С:Предприятие │ Банки │ CRM │ Реклама │ Маркетплейсы │
|
|
||||||
└────────┬─────────┬───────┬─────┬────────┴───────────────────┘
|
|
||||||
│ │ │ │
|
|
||||||
┌────▼────┐ ┌──▼────┐ │ │
|
|
||||||
│ 1C Ad. │ │Bank. │ │Ad. │ │CRM Ad. │
|
|
||||||
└────┬────┘ └──┬────┘ │ └──┬──────┘
|
|
||||||
│ │ │ │
|
|
||||||
┌────▼─────────▼───────▼───────▼─────────┐
|
|
||||||
│ Python ETL Pipeline │
|
|
||||||
│ APScheduler / Celery + Redis │
|
|
||||||
└─────────────────┬──────────────────────┘
|
|
||||||
│
|
|
||||||
┌─────────────────▼──────────────────────┐
|
|
||||||
│ PostgreSQL 16 │
|
|
||||||
│ raw_data │ aggregated │ metadata │
|
|
||||||
└─────────────────┬──────────────────────┘
|
|
||||||
│
|
|
||||||
┌─────────────────▼──────────────────────┐
|
|
||||||
│ FastAPI (REST API) │
|
|
||||||
│ GET /api/dashboard/{client_id} │
|
|
||||||
│ GET /api/metrics/{client_id}/{type} │
|
|
||||||
│ GET /api/trend/{client_id} │
|
|
||||||
└─────────────────┬──────────────────────┘
|
|
||||||
│
|
|
||||||
┌─────────────────▼──────────────────────┐
|
|
||||||
│ HTML Dashboard (ECharts) │
|
|
||||||
│ Single-page SPA или server-rendered │
|
|
||||||
└────────────────────────────────────────┘
|
|
||||||
```
|
|
||||||
|
|
||||||
## Схема БД (PostgreSQL)
|
|
||||||
|
|
||||||
```sql
|
|
||||||
-- Клиент
|
|
||||||
CREATE TABLE clients (
|
|
||||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
||||||
name VARCHAR(256) NOT NULL,
|
|
||||||
niche VARCHAR(100), -- ecommerce, services, retail, b2b
|
|
||||||
status VARCHAR(20) DEFAULT 'active',
|
|
||||||
plan VARCHAR(20) DEFAULT 'start', -- start, business, premium
|
|
||||||
created_at TIMESTAMP DEFAULT NOW()
|
|
||||||
);
|
|
||||||
|
|
||||||
-- Подключённые источники данных
|
|
||||||
CREATE TABLE data_sources (
|
|
||||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
||||||
client_id UUID REFERENCES clients(id),
|
|
||||||
source_type VARCHAR(50), -- 1c, bank, ad_platform, crm
|
|
||||||
source_name VARCHAR(100), -- СберБизнес, Яндекс.Директ, amoCRM
|
|
||||||
config JSONB NOT NULL, -- credentials, API keys (encrypted)
|
|
||||||
enabled BOOLEAN DEFAULT TRUE,
|
|
||||||
last_sync TIMESTAMP,
|
|
||||||
created_at TIMESTAMP DEFAULT NOW()
|
|
||||||
);
|
|
||||||
|
|
||||||
-- Исходные данные (сырые)
|
|
||||||
CREATE TABLE raw_data (
|
|
||||||
id BIGSERIAL PRIMARY KEY,
|
|
||||||
source_id UUID REFERENCES data_sources(id),
|
|
||||||
data JSONB NOT NULL, -- сырые данные из API
|
|
||||||
fetched_at TIMESTAMP NOT NULL, -- когда скачаны
|
|
||||||
processed BOOLEAN DEFAULT FALSE -- обработаны ETL
|
|
||||||
);
|
|
||||||
|
|
||||||
-- Агрегированные данные (для дашборда)
|
|
||||||
CREATE TABLE metrics (
|
|
||||||
id BIGSERIAL PRIMARY KEY,
|
|
||||||
client_id UUID REFERENCES clients(id),
|
|
||||||
metric_key VARCHAR(100) NOT NULL, -- revenue, profit, orders, etc.
|
|
||||||
metric_value DECIMAL(15,2) NOT NULL,
|
|
||||||
period_start DATE NOT NULL,
|
|
||||||
period_end DATE,
|
|
||||||
dimensions JSONB, -- city, channel, manager, etc.
|
|
||||||
source TEXT, -- откуда рассчитано
|
|
||||||
created_at TIMESTAMP DEFAULT NOW(),
|
|
||||||
UNIQUE(client_id, metric_key, period_start, dimensions::text)
|
|
||||||
);
|
|
||||||
|
|
||||||
-- Индекс для быстрого поиска по дашборду
|
|
||||||
CREATE INDEX idx_metrics_client_period ON metrics(client_id, period_start DESC);
|
|
||||||
CREATE INDEX idx_metrics_key ON metrics(metric_key);
|
|
||||||
|
|
||||||
-- История изменений дашборда (аудит)
|
|
||||||
CREATE TABLE dashboard_changes (
|
|
||||||
id BIGSERIAL PRIMARY KEY,
|
|
||||||
client_id UUID REFERENCES clients(id),
|
|
||||||
metric_key VARCHAR(100),
|
|
||||||
old_value DECIMAL(15,2),
|
|
||||||
new_value DECIMAL(15,2),
|
|
||||||
change_pct DECIMAL(10,2),
|
|
||||||
changed_at TIMESTAMP DEFAULT NOW()
|
|
||||||
);
|
|
||||||
|
|
||||||
-- Настройки дашборда (какие метрики показывать клиенту)
|
|
||||||
CREATE TABLE dashboard_config (
|
|
||||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
||||||
client_id UUID REFERENCES clients(id) UNIQUE,
|
|
||||||
template VARCHAR(50), -- ecommerce, services, retails
|
|
||||||
metrics JSONB, -- какие метрики включены
|
|
||||||
refresh_interval INTEGER DEFAULT 1440, -- минут
|
|
||||||
created_at TIMESTAMP DEFAULT NOW()
|
|
||||||
);
|
|
||||||
```
|
|
||||||
|
|
||||||
## ETL Pipeline
|
|
||||||
|
|
||||||
### Структура адаптера
|
|
||||||
|
|
||||||
```
|
|
||||||
roi24/PIPELINE/adapters/
|
|
||||||
├── base.py # Базовый класс адаптера
|
|
||||||
├── 1c/
|
|
||||||
│ ├── __init__.py
|
|
||||||
│ ├── xmlrpc.py # Подключение через XML-RPC 1С
|
|
||||||
│ ├── direct_db.py # Прямой доступ к БД 1С
|
|
||||||
│ └── exporters.py # Экспорт данных
|
|
||||||
├── bank/
|
|
||||||
│ ├── __init__.py
|
|
||||||
│ ├── sberbank.py # СберБизнес
|
|
||||||
│ ├── tinkoff.py # Тинькофф
|
|
||||||
│ ├── tochka.py # Точка Банк
|
|
||||||
│ └── csv_import.py # Импорт из CSV
|
|
||||||
├── ad/
|
|
||||||
│ ├── __init__.py
|
|
||||||
│ ├── yandex_direct.py # Яндекс.Директ API
|
|
||||||
│ └── vk_ads.py # VK Ads
|
|
||||||
├── crm/
|
|
||||||
│ ├── __init__.py
|
|
||||||
│ ├── bitrix24.py # Битрикс24 REST API
|
|
||||||
│ └── amo.py # amoCRM API
|
|
||||||
└── marketplace/
|
|
||||||
├── __init__.py
|
|
||||||
└── ozon.py
|
|
||||||
```
|
|
||||||
|
|
||||||
### Базовый адаптер
|
|
||||||
|
|
||||||
```python
|
|
||||||
# PIPELINE/adapters/base.py
|
|
||||||
from abc import ABC, abstractmethod
|
|
||||||
from datetime import datetime
|
|
||||||
from typing import Optional
|
|
||||||
|
|
||||||
class BaseAdapter(ABC):
|
|
||||||
"""Базовый класс для всех адаптеров источников данных."""
|
|
||||||
|
|
||||||
def __init__(self, config: dict):
|
|
||||||
self.config = config
|
|
||||||
self.last_sync: Optional[datetime] = None
|
|
||||||
|
|
||||||
@abstractmethod
|
|
||||||
def fetch(self, date_from: str, date_to: str) -> list[dict]:
|
|
||||||
"""Получить данные за период."""
|
|
||||||
pass
|
|
||||||
|
|
||||||
def _save_raw(self, data: list[dict], source_id: str):
|
|
||||||
"""Сохранить сырые данные в PostgreSQL."""
|
|
||||||
pass
|
|
||||||
|
|
||||||
def _aggregate(self, raw: list[dict]) -> list[dict]:
|
|
||||||
"""Преобразовать сырые данные в метрики."""
|
|
||||||
pass
|
|
||||||
|
|
||||||
def sync(self, date_from: str, date_to: str, source_id: str):
|
|
||||||
"""Полный цикл синхронизации."""
|
|
||||||
raw = self.fetch(date_from, date_to)
|
|
||||||
self._save_raw(raw, source_id)
|
|
||||||
metrics = self._aggregate(raw)
|
|
||||||
self.last_sync = datetime.now()
|
|
||||||
return metrics
|
|
||||||
```
|
|
||||||
|
|
||||||
### Типовой цикл ETL
|
|
||||||
|
|
||||||
```
|
|
||||||
1. APScheduler запускает job каждые N минут
|
|
||||||
2. Job для каждого источника данных:
|
|
||||||
a. Вызывает adapter.fetch(date_from, date_to)
|
|
||||||
b. Сохраняет сырые данные в raw_data
|
|
||||||
c. Агрегирует в метрики (metrics table)
|
|
||||||
d. Помечает raw_data как processed
|
|
||||||
3. При изменении агрегированных метрик > 10% —
|
|
||||||
записывает в dashboard_changes
|
|
||||||
```
|
|
||||||
|
|
||||||
## FastAPI API
|
|
||||||
|
|
||||||
### Эндпоинты
|
|
||||||
|
|
||||||
```
|
|
||||||
GET /api/health # health-check
|
|
||||||
GET /api/dashboard/{client_id} # все метрики клиента
|
|
||||||
GET /api/metrics/{client_id}/{metric} # конкретная метрика
|
|
||||||
GET /api/trend/{client_id}/{metric} # тренд (сравнение периодов)
|
|
||||||
GET /api/export/{client_id}/{format} # экспорт в CSV/PDF
|
|
||||||
GET /api/clients # список клиентов
|
|
||||||
POST /api/clients/{id}/connect # подключить источник
|
|
||||||
DELETE /api/clients/{id}/sources/{src_id} # удалить источник
|
|
||||||
```
|
|
||||||
|
|
||||||
### Пример ответа
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"client_id": "uuid-here",
|
|
||||||
"generated_at": "2026-06-20T10:00:00Z",
|
|
||||||
"metrics": {
|
|
||||||
"revenue": {
|
|
||||||
"today": 125000,
|
|
||||||
"yesterday": 98000,
|
|
||||||
"week": 820000,
|
|
||||||
"month": 2450000,
|
|
||||||
"trend": "+12.5%",
|
|
||||||
"trend_direction": "up"
|
|
||||||
},
|
|
||||||
"profit": {
|
|
||||||
"today": 38500,
|
|
||||||
"margin": "30.8%",
|
|
||||||
"trend": "+8.2%"
|
|
||||||
},
|
|
||||||
"orders": {
|
|
||||||
"today": 47,
|
|
||||||
"conversion_rate": "3.2%",
|
|
||||||
"avg_check": 2660
|
|
||||||
},
|
|
||||||
"balance": {
|
|
||||||
"total": 1250000,
|
|
||||||
"debtor": 340000,
|
|
||||||
"creditor": 120000
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Docker Compose (стартовый)
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
version: '3.9'
|
|
||||||
|
|
||||||
services:
|
|
||||||
postgres:
|
|
||||||
image: postgres:16-alpine
|
|
||||||
environment:
|
|
||||||
POSTGRES_DB: roi24
|
|
||||||
POSTGRES_USER: roi24
|
|
||||||
POSTGRES_PASSWORD: change_me
|
|
||||||
ports:
|
|
||||||
- "5432:5432"
|
|
||||||
volumes:
|
|
||||||
- postgres_data:/var/lib/postgresql/data
|
|
||||||
- ./storage/schema.sql:/docker-entrypoint-initdb.d/01-schema.sql
|
|
||||||
|
|
||||||
api:
|
|
||||||
build:
|
|
||||||
context: ./api
|
|
||||||
ports:
|
|
||||||
- "8000:8000"
|
|
||||||
environment:
|
|
||||||
DATABASE_URL: postgresql://roi24:change_me@postgres:5432/roi24
|
|
||||||
depends_on:
|
|
||||||
- postgres
|
|
||||||
|
|
||||||
scheduler:
|
|
||||||
build:
|
|
||||||
context: ./scripts
|
|
||||||
environment:
|
|
||||||
DATABASE_URL: postgresql://roi24:change_me@postgres:5432/roi24
|
|
||||||
depends_on:
|
|
||||||
- postgres
|
|
||||||
command: ["python", "update_data.py"]
|
|
||||||
|
|
||||||
nginx:
|
|
||||||
image: nginx:alpine
|
|
||||||
ports:
|
|
||||||
- "80:80"
|
|
||||||
volumes:
|
|
||||||
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
|
|
||||||
- ./dashboard:/usr/share/nginx/html
|
|
||||||
depends_on:
|
|
||||||
- api
|
|
||||||
|
|
||||||
volumes:
|
|
||||||
postgres_data:
|
|
||||||
```
|
|
||||||
|
|
||||||
## Безопасность
|
|
||||||
|
|
||||||
1. **Контент** credentials в `data_sources.config` — шифровать (AES-256)
|
|
||||||
2. **API** — JWT tokens для каждого клиента
|
|
||||||
3. **Данные** — изоляция между клиентами на уровне `client_id`
|
|
||||||
4. **SSL** — Nginx + Let's Encrypt (certbot)
|
|
||||||
5. **Бэкапы** — ежедневные бэкапы PostgreSQL (pg_dump)
|
|
||||||
|
|
||||||
## Хостинг
|
|
||||||
|
|
||||||
### Вариант для старта (один VPS)
|
|
||||||
|
|
||||||
| Ресурс | Минимум | Рекомендуемый |
|
|
||||||
|--------|---------|--------------|
|
|
||||||
| CPU | 2 vCPU | 4 vCPU |
|
|
||||||
| RAM | 4 ГБ | 8 ГБ |
|
|
||||||
| SSD | 50 ГБ | 100 ГБ NVMe |
|
|
||||||
| Стоимость | ~1500₽/мес | ~3000₽/мес |
|
|
||||||
|
|
||||||
**Recomended providers:** Selectel, Timeweb, Yandex Cloud
|
|
||||||
|
|
||||||
### Этапы масштабирования
|
|
||||||
|
|
||||||
1. **Этап 1 (1-10 клиентов):** Один VPS, всё в одном Docker Compose
|
|
||||||
2. **Этап 2 (10-50 клиентов):** Выделение PostgreSQL на отдельный сервер
|
|
||||||
3. **Этап 3 (50+ клиентов):** Kubernetes + автоскейлинг + Redis кэш
|
|
||||||
@@ -0,0 +1,310 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><title>European, Middle Eastern & African Stocks - Bloomberg - Bloomberg Markets</title><link rel="icon" type="image/png" href="https://www.bloomberg.com/favicon-black.png"/><meta http-equiv="refresh" content="3600"/><link rel="canonical" href="https://www.bloomberg.com/markets/stocks/world-indexes/europe-africa-middle-east"/><meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover"/><meta name="apple-itunes-app" content="app-id=281941097"/><meta name="robots" content="max-image-preview:large"/><meta name="description" content="Updated stock indexes in Europe, Middle East & Africa. Get an overview of major indexes, current values and stock market data in Europe, UK, Germany, Russia & more."/><meta name="keywords" content="european stock indexes, european stock indices, african stock indexes, african indices, middle eastern stock indexes, middle eastern stock indices"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:site" content="@markets"/><meta name="twitter:description" content="Updated stock indexes in Europe, Middle East & Africa. Get an overview of major indexes, current values and stock market data in Europe, UK, Germany, Russia & more."/><meta name="twitter:title" content="European, Middle Eastern & African Stocks - Bloomberg"/><meta name="twitter:image" content="https://www.bloomberg.com/favicon-black.png"/><meta name="twitter:tile:template:testing" content="2"/><meta name="twitter:tile:image" content="https://www.bloomberg.com/favicon-black.png"/><meta name="twitter:tile:image:alt" content="European, Middle Eastern & African Stocks - Bloomberg"/><meta name="twitter:creator" content="@markets"/><meta property="og:description" content="Updated stock indexes in Europe, Middle East & Africa. Get an overview of major indexes, current values and stock market data in Europe, UK, Germany, Russia & more."/><meta property="og:image" content="https://www.bloomberg.com/favicon-black.png"/><meta property="og:site_name" content="Bloomberg.com"/><meta property="og:title" content="European, Middle Eastern & African Stocks - Bloomberg"/><meta property="og:type" content="company"/><meta property="og:url" content="https://www.bloomberg.com/markets/stocks/world-indexes/europe-africa-middle-east"/><meta property="og:keywords" content="european stock indexes, european stock indices, african stock indexes, african indices, middle eastern stock indexes, middle eastern stock indices"/><meta name="will-have-content-metadata" content="true"/><script type="application/ld+json">{"@context":"http://schema.org","@type":"NewsMediaOrganization","address":{"@type":"PostalAddress","addressCountry":"USA","addressLocality":"New York","addressRegion":"NY","postalCode":"10022","streetAddress":"731 Lexington Avenue"},"diversityPolicy":"https://www.bloomberg.com/diversity-inclusion","name":"Bloomberg","email":"inquiry1@bloomberg.net","legalName":"Bloomberg Finance L.P.","leiCode":"5493001KJTIIGC8Y1R12","telephone":"(212) 318-2000","url":"https://www.bloomberg.com","logo":"https://www.bloomberg.com/logo-bloomberg.svg","brand":[{"@type":"Brand","name":"Bloomberg markets","url":"https://www.bloomberg.com/markets"},{"@type":"Brand","name":"Bloomberg technology","url":"https://www.bloomberg.com/technology"},{"@type":"Brand","name":"Bloomberg pursuits","url":"https://www.bloomberg.com/pursuits"},{"@type":"Brand","name":"Bloomberg politics","url":"https://www.bloomberg.com/politics"},{"@type":"Brand","name":"Bloomberg opinion","url":"https://www.bloomberg.com/opinion","logo":"https://www.bloomberg.com/logo-bloomberg_opinion.svg"},{"@type":"Brand","name":"Bloomberg businessweek","url":"https://www.bloomberg.com/businessweek","logo":"https://www.bloomberg.com/logo-bloomberg_businessweek.svg"},{"@type":"Brand","name":"Bloomberg green","url":"https://www.bloomberg.com/green"},{"@type":"Brand","name":"Bloomberg equality","url":"https://www.bloomberg.com/equality"},{"@type":"Brand","name":"Bloomberg citylab","url":"https://www.bloomberg.com/citylab"},{"@type":"Brand","name":"Bloomberg crypto","url":"https://www.bloomberg.com/crypto"},{"@type":"Brand","name":"Bloomberg industries","url":"https://www.bloomberg.com/industries"},{"@type":"Brand","name":"Bloomberg economics","url":"https://www.bloomberg.com/economics"},{"@type":"Brand","name":"Bloomberg ai","url":"https://www.bloomberg.com/ai"},{"@type":"Brand","name":"Bloomberg wealth","url":"https://www.bloomberg.com/wealth"}]}</script><script type="application/ld+json">{"@context":"https://schema.org","@type":"WebPage","name":"European, Middle Eastern & African Stocks - Bloomberg","description":"Updated stock indexes in Europe, Middle East & Africa. Get an overview of major indexes, current values and stock market data in Europe, UK, Germany, Russia & more.","keywords":"european stock indexes, european stock indices, african stock indexes, africLine truncated
|
||||||
|
(()=>{var e,t,r={384:(e,t,r)=>{"use strict";r.d(t,{NT:()=>a,Zm:()=>c,bQ:()=>u,dV:()=>d,pV:()=>l});var n=r(6154),i=r(1863),s=r(944),o=r(1910);const a={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net"};function c(){return n.gm.NREUM||(n.gm.NREUM={}),void 0===n.gm.newrelic&&(n.gm.newrelic=n.gm.NREUM),n.gm.NREUM}function d(){let e=c();return e.o||(e.o={ST:n.gm.setTimeout,SI:n.gm.setImmediate||n.gm.setInterval,CT:n.gm.clearTimeout,XHR:n.gm.XMLHttpRequest,REQ:n.gm.Request,EV:n.gm.Event,PR:n.gm.Promise,MO:n.gm.MutationObserver,FETCH:n.gm.fetch,WS:n.gm.WebSocket},(0,o.i)(...Object.values(e.o))),e}function u(e,t){let r=c();r.initializedAgents??={},t.initializedAt={ms:(0,i.t)(),date:new Date},r.initializedAgents[e]=t,2===Object.keys(r.initializedAgents).length&&(0,s.R)(69)}function l(){return function(){let e=c();const t=e.info||{};e.info={beacon:a.beacon,errorBeacon:a.errorBeacon,...t}}(),function(){let e=c();const t=e.init||{};e.init={...t}}(),d(),function(){let e=c();const t=e.loader_config||{};e.loader_config={...t}}(),c()}},733:(e,t,r)=>{"use strict";function n(e,t){return function(e){let t=2166136261;for(let r=0;r<e.length;r++)t^=e.charCodeAt(r),t=Math.imul(t,16777619);return(t>>>0).toString(16).padStart(8,"0")}("".concat(String(e),":").concat(String(t)))}r.d(t,{Y:()=>n})},782:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.pageViewTiming},860:(e,t,r)=>{"use strict";r.d(t,{$J:()=>u,K7:()=>c,P3:()=>d,XX:()=>i,Yy:()=>a,df:()=>s,qY:()=>n,v4:()=>o});const n="events",i="jserrors",s="browser/blobs",o="rum",a="browser/logs",c={ajax:"ajax",genericEvents:"generic_events",jserrors:i,logging:"logging",metrics:"metrics",pageAction:"page_action",pageViewEvent:"page_view_event",pageViewTiming:"page_view_timing",sessionReplay:"session_replay",sessionTrace:"session_trace",softNav:"soft_navigations"},d={[c.pageViewEvent]:1,[c.pageViewTiming]:2,[c.metrics]:3,[c.jserrors]:4,[c.softNav]:5,[c.ajax]:6,[c.sessionTrace]:7,[c.sessionReplay]:8,[c.logging]:9,[c.genericEvents]:10},u={[c.pageViewEvent]:o,[c.pageViewTiming]:n,[c.ajax]:n,[c.softNav]:n,[c.metrics]:i,[c.jserrors]:i,[c.sessionTrace]:s,[c.sessionReplay]:s,[c.logging]:a,[c.genericEvents]:"ins"}},944:(e,t,r)=>{"use strict";r.d(t,{R:()=>i});var n=r(3241);function i(e,t){"function"==typeof console.debug&&(console.debug("New Relic Warning: https://github.com/newrelic/newrelic-browser-agent/blob/main/docs/warning-codes.md#".concat(e),t),(0,n.W)({drained:null,type:"data",name:"warn",feature:"warn",data:{code:e,secondary:t}}))}},993:(e,t,r)=>{"use strict";r.d(t,{A$:()=>s,ET:()=>o,TZ:()=>a,p_:()=>i});var n=r(860);const i={ERROR:"ERROR",WARN:"WARN",INFO:"INFO",DEBUG:"DEBUG",TRACE:"TRACE"},s={OFF:0,ERROR:1,WARN:2,INFO:3,DEBUG:4,TRACE:5},o="log",a=n.K7.logging},1687:(e,t,r)=>{"use strict";r.d(t,{Ak:()=>a,Ze:()=>d,x3:()=>c});var n=r(3241),i=r(3606),s=r(860),o=r(2646);function a(e,t){if(!e)return;const r={staged:!1,priority:s.P3[t]||0};e.runtime.drainRegistry.get(t)||e.runtime.drainRegistry.set(t,r)}function c(e,t){if(!e)return;const r=e.runtime.drainRegistry;r&&(r.get(t)&&r.delete(t),l(e,t,!1),r.size&&u(e))}function d(e,t="feature",r=!1){if(e){if(!e.runtime.drainRegistry.get(t)||r)return l(e,t);e.runtime.drainRegistry.get(t).staged=!0,u(e)}}function u(e){if(!e)return;const t=Array.from(e.runtime.drainRegistry);t.every(([e,t])=>t.staged)&&(t.sort((e,t)=>e[1].priority-t[1].priority),t.forEach(([t])=>{e.runtime.drainRegistry.delete(t),l(e,t)}))}function l(e,t,r=!0){if(!e)return;const s=e.ee,a=i.i.handlers;if(s&&!s.aborted&&s.backlog&&a){if((0,n.W)({type:"lifecycle",name:"drain",feature:t}),r){const e=s.backlog[t],r=a[t];if(r){for(let t=0;e&&t<e.length;++t)f(e[t],r);Object.entries(r).forEach(([e,t])=>{Object.values(t||{}).forEach(t=>{t[0]?.on&&t[0].context()instanceof o.y&&!t[0].listeners(e).includes(t[1])&&t[0].on(e,t[1])})})}}s.isolatedBacklog||delete a[t],s.backlog[t]=null,s.emit("drain-"+t,[])}}function f(e,t){var r=e[1];Object.values(t[r]||{}).forEach(t=>{var r=e[0];if(t[0]===r){var n=t[1],i=e[3],s=e[2];n.apply(i,s)}})}},1738:(e,t,r)=>{"use strict";r.d(t,{U:()=>f,Y:()=>l});var n=r(3241),i=r(9908),s=r(1863),o=r(944),a=r(3969),c=r(8362),d=r(860),u=r(4261);function l(e,t,r,s){const l=s||r;!l||l[e]&&l[e]!==c.d.prototype[e]||(l[e]=function(){(0,i.p)(a.xV,["API/"+e+"/called"],void 0,d.K7.metrics,r.ee),(0,n.W)({drained:!!r.runtime?.activatedFeatures,type:"data",name:"api",feature:u.Pl+e,data:{}});try{return t.apply(this,arguments)}catch(e){(0,o.R)(23,e)}})}function f(e,t,r,n,o){const a=e.info;null===r?delete a.jsAttributes[t]:a.jsAttributes[t]=r,(o||null===r)&&(0,i.p)(u.Pl+n,[(0,s.t)(),t,r],void 0,"session",e.ee)}},1741:(e,t,r)=>{"use strict";r.d(t,{W:()=>s});var n=r(944),i=r(4261);class s{#e(e,...t){if(this[e]!==s.prototype[e])return this[e](...t);(0,n.R)(35,e)}addPageAction(e,t){return this.#e(i.hG,e,t)}register(e){return this.#e(i.eY,e)}recordCustomEvent(e,t){return this.#e(i.fF,e,t)}setPageViewName(e,t){return this.#e(i.Fw,e,t)}setCustomAttribute(e,t,r){return this.#e(i.cD,e,tLine truncated
|
||||||
|
function isExpectedError(err) {
|
||||||
|
if(err instanceof DOMException && (err?.name === "TimeoutError" || err?.name === "AbortError")) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
(window.NREUM || window.newrelic)?.setErrorHandler((err) => isExpectedError(err));
|
||||||
|
</script><link rel="preconnect" href="https://assets.bwbx.io/s3/bazaar/" crossorigin="anonymous"/><link rel="dns-prefetch" href="https://assets.bwbx.io/s3/bazaar/"/><link href="https://fonts.googleapis.com" rel="preconnect"/><link crossorigin="anonymous" href="https://fonts.gstatic.com" rel="preconnect"/><link rel="stylesheet" data-href="https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@400..700&display=swap"/><link href="https://securepubads.g.doubleclick.net/" rel="preconnect"/><link href="https://securepubads.g.doubleclick.net/" rel="preconnect" crossorigin="anonymous"/><link href="https://pub.doubleverify.com/" rel="preconnect"/><script src="https://securepubads.g.doubleclick.net/tag/js/gpt.js" async="" type="text/javascript"></script><script src="https://assets.bwbx.io/s3/spritz/v1/spritz.mjs" type="module" defer=""></script><script src="https://assets.bwbx.io/s3/spritz/v1/spritz.js" defer="" nomodule=""></script><script>(function(w, n) {
|
||||||
|
w[n] = w[n] || {};
|
||||||
|
w[n].cmd = w[n].cmd || [];
|
||||||
|
})(window, "Spritz");</script><script src="https://assets.bwbx.io/s3/sparkle/v6/sparkle.mjs" type="module" defer=""></script><script src="https://assets.bwbx.io/s3/sparkle/v6/sparkle.js" defer="" nomodule=""></script><script src="https://pub.doubleverify.com/dvtag/24434720/DV1462763/pub.js" async="" type="text/javascript"></script><script>(function(w, n) {
|
||||||
|
w[n] = w[n] || {};
|
||||||
|
w[n].cmd = w[n].cmd || [];
|
||||||
|
})(window, "Sparkle");</script><script>!function(e,t,c,n,o,a,m){e._bmb||(o=e._bmb=function(){o.x?o.x.apply(o,arguments):o.q.push(arguments)},o.q=[],a=t.createElement(c),a.async=true,a.src="https://vi.ml314.com/get?eid=50066&tk=aO1CCthMyYq5eNlVwlKQXL9igGlRPy95K4LLnm84p2bE3d&fp="+(e.localStorage&&e.localStorage.getItem(n)||""),m=t.getElementsByTagName(c)[0],m.parentNode.insertBefore(a,m))}(window,document,"script","_ccmaid");</script><div>
|
||||||
|
|
||||||
|
<script id="ccpa-stub-script">
|
||||||
|
(function () { var e = false; var c = window; var t = document; function r() { if (!c.frames["__uspapiLocator"]) { if (t.body) { var a = t.body; var e = t.createElement("iframe"); e.style.cssText = "display:none"; e.name = "__uspapiLocator"; a.appendChild(e) } else { setTimeout(r, 5) } } } r(); function p() { var a = arguments; __uspapi.a = __uspapi.a || []; if (!a.length) { return __uspapi.a } else if (a[0] === "ping") { a[2]({ gdprAppliesGlobally: e, cmpLoaded: false }, true) } else { __uspapi.a.push([].slice.apply(a)) } } function l(t) { var r = typeof t.data === "string"; try { var a = r ? JSON.parse(t.data) : t.data; if (a.__cmpCall) { var n = a.__cmpCall; c.__uspapi(n.command, n.parameter, function (a, e) { var c = { __cmpReturn: { returnValue: a, success: e, callId: n.callId } }; t.source.postMessage(r ? JSON.stringify(c) : c, "*") }) } } catch (a) { } } if (typeof __uspapi !== "function") { c.__uspapi = p; __uspapi.msgHandler = l; c.addEventListener("message", l, false) } })();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
<script id="msps-stub-script">
|
||||||
|
window.__gpp_addFrame=function(e){if(!window.frames[e])if(document.body){var t=document.createElement("iframe");t.style.cssText="display:none",t.name=e,document.body.appendChild(t)}else window.setTimeout(window.__gpp_addFrame,10,e)},window.__gpp_stub=function(){var e=arguments;if(__gpp.queue=__gpp.queue||[],__gpp.events=__gpp.events||[],!e.length||1==e.length&&"queue"==e[0])return __gpp.queue;if(1==e.length&&"events"==e[0])return __gpp.events;var t=e[0],p=e.length>1?e[1]:null,s=e.length>2?e[2]:null;if("ping"===t)p({gppVersion:"1.1",cmpStatus:"stub",cmpDisplayStatus:"hidden",signalStatus:"not ready",supportedAPIs:["2:tcfeuv2","5:tcfcav1","6:uspv1","7:usnatv1","8:uscav1","9:usvav1","10:uscov1","11:usutv1","12:usctv1"],cmpId:0,sectionList:[],applicableSections:[],gppString:"",parsedSections:{}},!0);else if("addEventListener"===t){"lastId"in __gpp||(__gpp.lastId=0),__gpp.lastId++;var n=__gpp.lastId;__gpp.events.push({id:n,callback:p,parameter:s}),p({eventName:"listenerRegistered",listenerId:n,data:!0,pingData:{gppVersion:"1.1",cmpStatus:"stub",cmpDisplayStatus:"hidden",signalStatus:"not ready",supportedAPIs:["2:tcfeuv2","5:tcfcav1","6:uspv1","7:usnatv1","8:uscav1","9:usvav1","10:uscov1","11:usutv1","12:usctv1"],cmpId:0,sectionList:[],applicableSections:[],gppString:"",parsedSections:{}}},!0)}else if("removeEventListener"===t){for(var a=!1,i=0;i<__gpp.events.length;i++)if(__gpp.events[i].id==s){__gpp.events.splice(i,1),a=!0;break}p({eventName:"listenerRemoved",listenerId:s,data:a,pingData:{gppVersion:"1.1",cmpStatus:"stub",cmpDisplayStatus:"hidden",signalStatus:"not ready",supportedAPIs:["2:tcfeuv2","5:tcfcav1","6:uspv1","7:usnatv1","8:uscav1","9:usvav1","10:uscov1","11:usutv1","12:usctv1"],cmpId:0,sectionList:[],applicableSections:[],gppString:"",parsedSections:{}}},!0)}else"hasSection"===t?p(!1,!0):"getSection"===t||"getField"===t?p(null,!0):__gpp.queue.push([].slice.apply(e))},window.__gpp_msghandler=function(e){var t="string"==typeof e.data;try{var p=t?JSON.parse(e.data):e.data}catch(e){p=null}if("object"==typeof p&&null!==p&&"__gppCall"in p){var s=p.__gppCall;window.__gpp(s.command,(function(p,n){var a={__gppReturn:{returnValue:p,success:n,callId:s.callId}};e.source.postMessage(t?JSON.stringify(a):a,"*")}),"parameter"in s?s.parameter:null,"version"in s?s.version:"1.1")}},"__gpp"in window&&"function"==typeof window.__gpp||(window.__gpp=window.__gpp_stub,window.addEventListener("message",window.__gpp_msghandler,!1),window.__gpp_addFrame("__gppLocator"));
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
<script id="gdpr-stub-script">
|
||||||
|
function _typeof(t){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}!function(){for(var t,e,o=[],n=window,r=n;r;){try{if(r.frames.__tcfapiLocator){t=r;break}}catch(t){}if(r===n.top)break;r=n.parent}t||(function t(){var e=n.document,o=!!n.frames.__tcfapiLocator;if(!o)if(e.body){var r=e.createElement("iframe");r.style.cssText="display:none",r.name="__tcfapiLocator",e.body.appendChild(r)}else setTimeout(t,5);return!o}(),n.__tcfapi=function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];if(!n.length)return o;"setGdprApplies"===n[0]?n.length>3&&2===parseInt(n[1],10)&&"boolean"==typeof n[3]&&(e=n[3],"function"==typeof n[2]&&n[2]("set",!0)):"ping"===n[0]?"function"==typeof n[2]&&n[2]({gdprApplies:e,cmpLoaded:!1,cmpStatus:"stub"}):o.push(n)},n.addEventListener("message",(function(t){var e="string"==typeof t.data,o={};if(e)try{o=JSON.parse(t.data)}catch(t){}else o=t.data;var n="object"===_typeof(o)?o.__tcfapiCall:null;n&&window.__tcfapi(n.command,n.version,(function(o,r){var a={__tcfapiReturn:{returnValue:o,success:r,callId:n.callId}};t&&t.source&&t.source.postMessage&&t.source.postMessage(e?JSON.stringify(a):a,"*")}),n.parameter)}),!1))}();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script id="cmp-client-config">
|
||||||
|
(function(){
|
||||||
|
function getCookieValue(name) {
|
||||||
|
const matches = document.cookie.match("(^|;) ?" + name + "=([^;$]*)");
|
||||||
|
return matches ? matches[2] : "";
|
||||||
|
}
|
||||||
|
const isKisa = true && getCookieValue("country_code") === "KR";
|
||||||
|
window._sp_queue = [];
|
||||||
|
window._sp_ = {
|
||||||
|
config: {
|
||||||
|
accountId: 1425,
|
||||||
|
authCookie: "_breg-uid",
|
||||||
|
baseEndpoint: "https://sourcepointcmp.bloomberg.com",
|
||||||
|
propertyId: isKisa ? 29886 : 31489,
|
||||||
|
propertyHref: isKisa ? "https://kisa.bloomberg.com" : "https://mc.bloomberg.com",
|
||||||
|
joinHref: true,
|
||||||
|
targetingParams: {
|
||||||
|
isKisa: isKisa,
|
||||||
|
view: window.isTerminal ? "terminal" : "web"
|
||||||
|
},
|
||||||
|
usnat: {
|
||||||
|
includeUspApi: true
|
||||||
|
},
|
||||||
|
gdpr: {},
|
||||||
|
events: {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
|
<script async src="https://sourcepointcmp.bloomberg.com/unified/wrapperMessagingWithoutDetection.js"></script>
|
||||||
|
</div><script src="https://assets.bwbx.io/s3/foundation/cmp-client/v3/cmp-client.min.js" crossorigin="anonymous" async=""></script><script id="cmp-client-init">window.cmpClient = window.cmpClient || { cmd: [] };
|
||||||
|
window.cmpClient.cmd.push(function () {
|
||||||
|
const cmpClient = window.getCmpClient({"language":"en"});
|
||||||
|
cmpClient.init();
|
||||||
|
});</script><style data-service="font-service" data-font-names="AvenirNextPForBBG,BWHaasGroteskTF,BWHaasGroteskWeb,Bloomberg Logotypes,PublicoText,PublicoTextMono">@font-face{font-family:AvenirNextPForBBG;font-display:swap;font-weight:400;font-style:normal;src:url('https://assets.bwbx.io/s3/fontservice/fonts/AvenirNextPForBBG-Regular-eb3bb1b816.woff2') format('woff2'),url('https://assets.bwbx.io/s3/fontservice/fonts/AvenirNextPForBBG-Regular-093448f517.woff') format('woff')}@font-face{font-family:AvenirNextPForBBG;font-display:swap;font-weight:600;font-style:normal;src:url('https://assets.bwbx.io/s3/fontservice/fonts/AvenirNextPForBBG-Demi-b9b4abf0ea.woff2') format('woff2'),url('https://assets.bwbx.io/s3/fontservice/fonts/AvenirNextPForBBG-Demi-7459932d1d.woff') format('woff')}@font-face{font-family:'Bloomberg Logotypes';font-display:swap;font-weight:500;font-style:normal;src:url('https://assets.bwbx.io/s3/fontservice/fonts/Bloomberg%20Logotypes-Medium-0e53877b78.woff2') format('woff2'),url('https://assets.bwbx.io/s3/fontservice/fonts/Bloomberg%20Logotypes-Medium-4f4134c199.woff') format('woff')}@font-face{font-family:BWHaasGroteskTF;font-display:swap;font-weight:400;font-style:normal;src:url('https://assets.bwbx.io/s3/fontservice/fonts/BWHaasGroteskTF-55Roman-Web-179b9f98cd.eot');src:local('?'),url('https://assets.bwbx.io/s3/fontservice/fonts/BWHaasGroteskTF-55Roman-Web-b3ecfeedba.woff2') format('woff2'),url('https://assets.bwbx.io/s3/fontservice/fonts/BWHaasGroteskTF-55Roman-Web-eef72e4574.woff') format('woff')}@font-face{font-family:BWHaasGroteskWeb;font-display:swap;font-weight:400;font-style:normal;src:url('https://assets.bwbx.io/s3/fontservice/fonts/BWHaasGrotesk-55Roman-Web-7998fbcba8.eot');src:local('?'),url('https://assets.bwbx.io/s3/fontservice/fonts/BWHaasGrotesk-55Roman-Web-5cf5733cd9.woff2') format('woff2'),url('https://assets.bwbx.io/s3/fontservice/fonts/BWHaasGrotesk-55Roman-Web-a1ea4fd367.woff') format('woff')}@font-face{font-family:BWHaasGroteskWeb;font-display:swap;font-weight:500;font-style:normal;src:url('https://assets.bwbx.io/s3/fontservice/fonts/BWHaasGrotesk-65Medium-Web-d9a88b8a91.eot');src:local('?'),url('https://assets.bwbx.io/s3/fontservice/fonts/BWHaasGrotesk-65Medium-Web-8f5de0c368.woff2') format('woff2'),url('https://assets.bwbx.io/s3/fontservice/fonts/BWHaasGrotesk-65Medium-Web-e205ada7dd.woff') format('woff')}@font-face{font-family:BWHaasGroteskWeb;font-display:swap;font-weight:700;font-style:normal;src:url('https://assets.bwbx.io/s3/fontservice/fonts/BWHaasGrotesk-75Bold-Web-de8c77cce2.woff2') format('woff2'),url('https://assets.bwbx.io/s3/fontservice/fonts/BWHaasGrotesk-75Bold-Web-506363704e.woff') format('woff')}@font-face{font-family:BWHaasGroteskWeb;font-display:swap;font-weight:900;font-style:normal;src:url('https://assets.bwbx.io/s3/fontservice/fonts/BWHaasGrotesk-95Black-Web-3629d1569b.woff2') format('woff2'),url('https://assets.bwbx.io/s3/fontservice/fonts/BWHaasGrotesk-95Black-Web-37847ad026.woff') format('woff')}@font-face{font-family:BWHaasGroteskWeb;font-display:swap;font-weight:400;font-style:italic;src:url('https://assets.bwbx.io/s3/fontservice/fonts/BWHaasGrotesk-56Italic-Web-39c99fc394.eot');src:local('?'),url('https://assets.bwbx.io/s3/fontservice/fonts/BWHaasGrotesk-56Italic-Web-669253244d.woff2') format('woff2'),url('https://assets.bwbx.io/s3/fontservice/fonts/BWHaasGrotesk-56Italic-Web-296d0c8182.woff') format('woff')}@font-face{font-family:BWHaasGroteskWeb;font-display:swap;font-weight:500;font-style:italic;src:url('https://assets.bwbx.io/s3/fontservice/fonts/BWHaasGrotesk-66MediumItalic-Web-d725f5ecec.woff2') format('woff2'),url('https://assets.bwbx.io/s3/fontservice/fonts/BWHaasGrotesk-66MediumItalic-Web-503f6e56b6.woff') format('woff')}@font-face{font-family:BWHaasGroteskWeb;font-display:swap;font-weight:700;font-style:italic;src:url('https://assets.bwbx.io/s3/fontservice/fonts/BWHaasGrotesk-76BoldItalic-Web-1276e0d1bc.woff2') format('woff2'),url('https://assets.bwbx.io/s3/fontservice/fonts/BWHaasGrotesk-76BoldItalic-Web-1032f4ce3a.woff') format('woff')}@font-face{font-family:BWHaasGroteskWeb;font-display:swap;font-weight:900;font-style:italic;src:url('https://assets.bwbx.io/s3/fontservice/fonts/BWHaasGrotesk-96BlackItalic-Web-47835b8d5d.woff2') format('woff2'),url('https://assets.bwbx.io/s3/fontservice/fonts/BWHaasGrotesk-96BlackItalic-Web-1a0b95417e.woff') format('woff')}@font-face{font-family:PublicoText;font-display:swap;font-weight:400;font-style:normal;src:url('https://assets.bwbx.io/s3/fontservice/fonts/PublicoText-Roman-Web-bfa063ee27.woff2') format('woff2'),url('https://assets.bwbx.io/s3/fontservice/fonts/PublicoText-Roman-Web-e953eb7239.woff') format('woff')}@font-face{font-family:PublicoText;font-display:swap;font-weight:600;font-style:normal;src:url('https://assets.bwbx.io/s3/fontservice/fonts/PublicoText-Semibold-Web-c48189a45a.woff2') format('woff2'),url('https://assets.bwbx.io/s3/fontservice/fonts/PublicoText-SLine truncated
|
||||||
|
<script>!function(){"use strict";function t(t,a,e,n){if("a"===e&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof a?t!==a||!n:!a.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===e?n:"a"===e?n.call(t):n?n.value:a.get(t)}!function(){const t={VERSION:"2.1.0"};try{if(process)return process.env=Object.assign({},process.env),void Object.assign(process.env,t)}catch(t){}globalThis.process={env:t}}();const a="abbaClient:loaded";var e,n,i,o;class b{constructor({abbaPlatform:t,waitForContentMetadata:a=!1}){e.add(this),this.platform=t,this.waitForContentMetadata=a}init(){this.setupAbbaClient=this.setupAbbaClient.bind(this),t(this,e,"m",i).call(this)?t(this,e,"m",n).call(this):document.addEventListener(a,this.setupAbbaClient)}async getContentMetadata(){var t;return this.contentMetadata?this.contentMetadata:(this.waitForContentMetadata&&!this._contentMetadataPromise&&(this._contentMetadataPromise=new Promise((t=>{this._resolveContentMetadata=t}))),null!==(t=this._contentMetadataPromise)&&void 0!==t?t:Promise.resolve({}))}setContentMetadata(t){var a;this.contentMetadata=t,null===(a=this._resolveContentMetadata)||void 0===a||a.call(this,this.contentMetadata)}async getAbbaClient(){return this.abbaClient?this.abbaClient:(this._abbaClientPromise||(this._abbaClientPromise=new Promise((t=>{this._resolveAbbaClient=t}))),this._abbaClientPromise)}setAbbaClient(a){var n;this.abbaClient=a,window.__bloomberg__=t(this,e,"m",o).call(this),window.__bloomberg__.abbaClient=a,null===(n=this._resolveAbbaClient)||void 0===n||n.call(this,this.abbaClient)}async getAbbaConfig(t,a){const e=await this.getAbbaClient();return await e.getConfig(t,a)}async refreshAbbaClient(t){this.setContentMetadata(t);const a=await this.getAbbaClient();await a.refresh({contentMetadata:t})}async setupAbbaClient(){setTimeout((()=>t(this,e,"m",n).call(this)),0),document.removeEventListener(a,this.setupAbbaClient)}}let s;e=new WeakSet,n=async function(){var a;if(this.abbaClient)return;window.__bloomberg__=t(this,e,"m",o).call(this);const n=await(null===(a=t(this,e,"m",i).call(this))||void 0===a?void 0:a.build({platform:this.platform,contentMetadata:await this.getContentMetadata()}));n?(this.setAbbaClient(n),window.__bloomberg__.potentiallyStaleUserInfo=await n.getUserInfoPotentiallyStale(),document.dispatchEvent(new CustomEvent("abbaClient:ready"))):console.log("_abbaClientClass.build failed to build abbaClient")},i=function(){var t;return null===(t=window.__bloomberg__)||void 0===t?void 0:t._abbaClientClass},o=function(){return window.__bloomberg__||{}};const l=({abbaPlatform:t="frontend",waitForContentMetadata:a=!1})=>{var e;(e={abbaPlatform:t,waitForContentMetadata:a},void 0===s&&(s=new b(e),window.__bloomberg__=window.__bloomberg__||{},window.__bloomberg__.getAbbaConfig=s.getAbbaConfig.bind(s),window.__bloomberg__.getAbbaClient=s.getAbbaClient.bind(s),window.__bloomberg__.getContentMetadata=s.getContentMetadata.bind(s),window.__bloomberg__.refreshAbbaClient=s.refreshAbbaClient.bind(s),window.__bloomberg__.setContentMetadata=s.setContentMetadata.bind(s),window.__bloomberg__.abbaPlatform=e.abbaPlatform,window.__bloomberg__.waitForContentMetadata=e.waitForContentMetadata),s).init()};var r,d;window.__abbaScriptInitialized||(window.__abbaScriptInitialized=!0,l({abbaPlatform:null===(r=window.__bloomberg__)||void 0===r?void 0:r.abbaPlatform,waitForContentMetadata:null===(d=window.__bloomberg__)||void 0===d?void 0:d.waitForContentMetadata}))}();
|
||||||
|
</script>
|
||||||
|
<script src="https://assets.bwbx.io/s3/abba/abba-client/latest/abba-client.js" async></script>
|
||||||
|
</div><script id="gtm_analytics" type="text/javascript" data-nscript="beforeInteractive" crossorigin="anonymous">
|
||||||
|
window.dataLayer = window.dataLayer || [];
|
||||||
|
window.dataLayer.push({"adcode":"markets/stocks/emea","brand":"markets","contentType":"marketdata-stocks","pageType":"marketdata","template":"bazaar-sectionfront-html"});
|
||||||
|
</script><script id="sparkle-init" type="text/javascript" data-nscript="beforeInteractive" crossorigin="anonymous">
|
||||||
|
window.Sparkle.cmd.push(function(){
|
||||||
|
var lang = document.documentElement.lang || "en";
|
||||||
|
var options = {"networkCode":"5262","breakpoints":{"mobile":0,"tablet":768,"small_desktop":1123,"large_desktop":1335},"adBlockerShouldBeBlocked":true,"pageTargeting":{"page":"stocks-bazaar","thematic":"financial-advising,markets"},"useCachedConsent":true,"disableIAS":true,"enableBombora":true,"isDecoupled":true,"adContextData":{"adPageType":"quote","tickerId":"section-front-bazaar"},"excludeTargetingTypes":["content"],"dvScriptUrl":"https://pub.doubleverify.com/dvtag/24434720/DV1462763/pub.js"}
|
||||||
|
window.Sparkle.init({ ...options, adBlockerShouldBeBlocked: lang !== "ja" });
|
||||||
|
});
|
||||||
|
</script><script id="sparkle-init" type="text/javascript" data-nscript="beforeInteractive" crossorigin="anonymous">
|
||||||
|
window.Sparkle.cmd.push(function(){
|
||||||
|
const decoupleDiv = window.document.createElement("div");
|
||||||
|
decoupleDiv.id = "leaderboard-decoupled";
|
||||||
|
decoupleDiv.setAttribute("data-testid", "sparkle-ad");
|
||||||
|
decoupleDiv.setAttribute("data-ad-status", "rendering");
|
||||||
|
decoupleDiv.setAttribute("className", "");
|
||||||
|
window.document.body.appendChild(decoupleDiv);
|
||||||
|
var adOptions = {"disableAds":true,"adCode":"bloomberg/markets/stocks/emea","isDecoupled":true,"strategy":"always","refreshOptions":{"refreshInterval":45000},"dimensions":{"all":[[5,16]],"large_desktop":[[970,250]],"small_desktop":[[970,250]],"tablet":[[320,50],[300,50]],"mobile":[[320,50],[300,50]]},"targeting":{"position":"leaderboard"},"containerId":"leaderboard-decoupled"}
|
||||||
|
window.Sparkle.createAd({...adOptions});
|
||||||
|
});
|
||||||
|
</script><link rel="preload" href="https://assets.bwbx.io/s3/bazaar/_next/static/css/2537495a0ba73db8.css" as="style" crossorigin="anonymous"/><link rel="stylesheet" href="https://assets.bwbx.io/s3/bazaar/_next/static/css/2537495a0ba73db8.css" crossorigin="anonymous" data-n-g=""/><link rel="preload" href="https://assets.bwbx.io/s3/bazaar/_next/static/css/fbb0b9a86876c741.css" as="style" crossorigin="anonymous"/><link rel="stylesheet" href="https://assets.bwbx.io/s3/bazaar/_next/static/css/fbb0b9a86876c741.css" crossorigin="anonymous" data-n-p=""/><link rel="preload" href="https://assets.bwbx.io/s3/bazaar/_next/static/css/87c2764ae0951dfc.css" as="style" crossorigin="anonymous"/><link rel="stylesheet" href="https://assets.bwbx.io/s3/bazaar/_next/static/css/87c2764ae0951dfc.css" crossorigin="anonymous" data-n-p=""/><link rel="preload" href="https://assets.bwbx.io/s3/bazaar/_next/static/css/5830ff9c0cb152d3.css" as="style" crossorigin="anonymous"/><link rel="stylesheet" href="https://assets.bwbx.io/s3/bazaar/_next/static/css/5830ff9c0cb152d3.css" crossorigin="anonymous" data-n-p=""/><link rel="preload" href="https://assets.bwbx.io/s3/bazaar/_next/static/css/1b94bbeabe1e643e.css" as="style" crossorigin="anonymous"/><link rel="stylesheet" href="https://assets.bwbx.io/s3/bazaar/_next/static/css/1b94bbeabe1e643e.css" crossorigin="anonymous" data-n-p=""/><link rel="preload" href="https://assets.bwbx.io/s3/bazaar/_next/static/css/38bb7933384c1bf4.css" as="style" crossorigin="anonymous"/><link rel="stylesheet" href="https://assets.bwbx.io/s3/bazaar/_next/static/css/38bb7933384c1bf4.css" crossorigin="anonymous" data-n-p=""/><link rel="preload" href="https://assets.bwbx.io/s3/bazaar/_next/static/css/7b2aa8f0ad07b6a5.css" as="style" crossorigin="anonymous"/><link rel="stylesheet" href="https://assets.bwbx.io/s3/bazaar/_next/static/css/7b2aa8f0ad07b6a5.css" crossorigin="anonymous" data-n-p=""/><link rel="preload" href="https://assets.bwbx.io/s3/bazaar/_next/static/css/42223d36bd9d009d.css" as="style" crossorigin="anonymous"/><link rel="stylesheet" href="https://assets.bwbx.io/s3/bazaar/_next/static/css/42223d36bd9d009d.css" crossorigin="anonymous" data-n-p=""/><link rel="preload" href="https://assets.bwbx.io/s3/bazaar/_next/static/css/58ec4ae3b0278ff4.css" as="style" crossorigin="anonymous"/><link rel="stylesheet" href="https://assets.bwbx.io/s3/bazaar/_next/static/css/58ec4ae3b0278ff4.css" crossorigin="anonymous" data-n-p=""/><noscript data-n-css=""></noscript><script defer="" crossorigin="anonymous" nomodule="" src="https://assets.bwbx.io/s3/bazaar/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="https://assets.bwbx.io/s3/bazaar/_next/static/chunks/webpack-c25c10ce4b997b23.js" defer="" crossorigin="anonymous"></script><script src="https://assets.bwbx.io/s3/bazaar/_next/static/chunks/framework-945b357d4a851f4b.js" defer="" crossorigin="anonymous"></script><script src="https://assets.bwbx.io/s3/bazaar/_next/static/chunks/main-49698602bba35d45.js" defer="" crossorigin="anonymous"></script><script src="https://assets.bwbx.io/s3/bazaar/_next/static/chunks/pages/_app-ee7440650d4a6eda.js" defer="" crossorigin="anonymous"></script><script src="https://assets.bwbx.io/s3/bazaar/_next/static/chunks/5c0b189e-1a72a3c75385890d.js" defer="" crossorigin="anonymous"></script><script src="https://assets.bwbx.io/s3/bazaar/_next/static/chunks/26770aaf-434672d6e837ff7e.js" defer="" crossorigin="anonymous"></script><script src="https://assets.bwbx.io/s3/bazaar/_next/static/chunks/9491-37f1513243ddd3ac.js" defer="" crossorigin="anonymous"></script><script src="https://assets.bwbx.io/s3/bazaar/_next/static/chunks/1626-cc487492cbd86add.js" defer="" crossorigin="anonymous"></script><script src="https://assets.bwbx.io/s3/bazaar/_next/static/chunks/7592-1a7f29923c252d64.js" defer="" crossorigin="anonymous"></script><script src="https://assets.bwbx.io/s3/bazaar/_next/static/chunks/7018-4a136dd45f9c84bc.js" defer="" crossorigin="anonymous"></script><script src="https://assets.bwbx.io/s3/bazaar/_next/static/chunks/6239-f7689ebc5734dc9d.js" defer="" crossorigin="anonymous"></script><script src="https://assets.bwbx.io/s3/bazaar/_next/static/chunks/6336-0ef559f9ca6156bd.js" defer="" crossorigin="anonymous"></script><script src="https://assets.bwbx.io/s3/bazaar/_next/static/chunks/8764-de71f68e8e20a4eb.js" defer="" crossorigin="anonymous"></script><script src="https://assets.bwbx.io/s3/bazaar/_next/static/chunks/3934-ff427ed9511030ea.js" defer="" crossorigin="anonymous"></script><script src="https://assets.bwbx.io/s3/bazaar/_next/static/chunks/686-5b8c4a3d40d0d1d0.js" defer="" crossorigin="anonymous"></script><script src="https://assets.bwbx.io/s3/bazaar/_next/static/chunks/3711-33c4ab59eacdfddd.js" defer="" crossorigin="anonymous"></script><script src="https://assets.bwbx.io/s3/bazaar/_next/static/chunks/1709-6ef136967372cf72.js" defer="" crossorigin="anonymous"></script><script src="https://assets.bwbx.io/sLine truncated
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
@media screen and (max-height: 675px) {
|
||||||
|
body[data-reg-ui-client-status=show] {
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
body[data-reg-ui-client-status=load],
|
||||||
|
body[data-reg-ui-client-status=load] * {
|
||||||
|
cursor: wait !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.reg-ui-client {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
transform: translateX(-100%);
|
||||||
|
/* full page overlay: http://www.iab.com/guidelines/z-index-guidelines/ */
|
||||||
|
box-sizing: border-box;
|
||||||
|
visibility: hidden;
|
||||||
|
/* [LC] use visibility + z-index instead of display, because animation does not work with display: none */
|
||||||
|
z-index: -1;
|
||||||
|
position: fixed;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
width: 100%;
|
||||||
|
min-height: 100vh;
|
||||||
|
height: 100%;
|
||||||
|
background-color: #FFFFFF;
|
||||||
|
background-color: rgba(255, 255, 255, 0.9);
|
||||||
|
overflow: auto;
|
||||||
|
animation: 0.5s fadeOut;
|
||||||
|
/* for popup modal scrolling on iOS */
|
||||||
|
-webkit-overflow-scrolling: touch;
|
||||||
|
/* set top to 0 if browser window is NOT high enough */
|
||||||
|
}
|
||||||
|
.reg-ui-client *,
|
||||||
|
.reg-ui-client *:before,
|
||||||
|
.reg-ui-client *:after {
|
||||||
|
box-sizing: inherit;
|
||||||
|
}
|
||||||
|
.reg-ui-client[data-status=show] {
|
||||||
|
transform: translateX(0);
|
||||||
|
z-index: 8000000;
|
||||||
|
visibility: visible;
|
||||||
|
animation: 0.5s fadeIn;
|
||||||
|
}
|
||||||
|
.reg-ui-client__iframe-container, .reg-ui-client__wide-iframe-container, .reg-ui-client__uverify-iframe-container {
|
||||||
|
background-color: #FFFFFF;
|
||||||
|
box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
|
||||||
|
position: relative;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.reg-ui-client__iframe-container {
|
||||||
|
max-width: 375px;
|
||||||
|
}
|
||||||
|
.reg-ui-client__wide-iframe-container {
|
||||||
|
max-width: 570px;
|
||||||
|
}
|
||||||
|
.reg-ui-client__uverify-iframe-container {
|
||||||
|
max-width: 700px;
|
||||||
|
}
|
||||||
|
.reg-ui-client__iframe {
|
||||||
|
overflow: hidden;
|
||||||
|
width: 100%;
|
||||||
|
height: 615px;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
.reg-ui-client__wide-iframe {
|
||||||
|
overflow: hidden;
|
||||||
|
width: 100%;
|
||||||
|
height: 510px;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
.reg-ui-client__uverify-iframe {
|
||||||
|
overflow: hidden;
|
||||||
|
width: 100%;
|
||||||
|
height: 680px;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
@media screen and (max-height: 675px) {
|
||||||
|
.reg-ui-client__iframe-container {
|
||||||
|
top: 0;
|
||||||
|
transform: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media screen and (max-height: 900px) {
|
||||||
|
.reg-ui-client__uverify-iframe {
|
||||||
|
height: 675px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@keyframes fadeIn {
|
||||||
|
0% {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@keyframes fadeOut {
|
||||||
|
0% {
|
||||||
|
opacity: 1;
|
||||||
|
z-index: 8000000;
|
||||||
|
visibility: visible;
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
opacity: 0;
|
||||||
|
z-index: -1;
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
}</style><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@400..700&display=swap"/></head><body><div id="__next"><div><div class="media-ui-FullWidthAd_fullWidthAdWrapper-fClHZteIk3k-"><div class="media-ui-BaseAd_baseAd-dXBqvbLRJy0- media-ui-BaseAd_adPlaceholder-W4Hid5G045M- media-ui-FullWidthAd_fullWidthAd-waQ2dCOMRb8- media-ui-LeaderboardAd_leaderboard-FZL8q-6lUUI- media-ui-LeaderboardAd_parallax-9Z18W54a-Ss-" data-component="leaderboard-ad" data-ad-status="rendering" role="region" aria-label="Leaderboard advertisement" aria-busy="true"><div style="display:none"></div></div></div><div class="media-ui-LeaderboardAd_parallaxWrapper-JMVgdxR--aU-"><style>@media (min-width: 760px) { #bb-that .bb-that-header.bb-that--container { width: 760px; } }@media (min-width: 1123px) { #bb-that .bb-that-header.bb-that--container { width: 1113px; } }@media (min-width: 1335px) { #bb-that .bb-that-header.bb-that--container { width: 1323px; } }</style><style>#bb-that *,#bb-that *:before,#bb-that *:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#bb-that *{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#bb-that ul,#bb-that li{list-style:none;padding:0;margin:0}#bb-that p{padding:0;margin:0}#bb-that .bb-that__col{float:left}#bb-that .bb-that__col--md{width:23.5%}#bb-that .bb-that__col--md:last-of-type{padding-right:0}#bb-that .bb-that__col--md:first-child{width:29.5%}#bb-that .bb-that__col--sm{width:32%;padding:0 10px 0 0}#bb-that .bb-that__col--xs{float:none;display:block;border-top:1px solid #474747}#bb-that .bb-that__col--xs:last-of-type{border-bottom:1px solid #474747}@media (max-width: 759px){#bb-that .bb-that--visible-xs{display:block !important}}@media (min-width: 760px) and (max-width: 1019px){#bb-that .bb-that--visible-sm{display:block !important}}@media (min-width: 1020px) and (max-width: 1279px){#bb-that .bb-that--visible-md{display:block !important}}@media (min-width: 1280px){#bb-that .bb-that--visible-lg{display:block !important}}@media (max-width: 759px){#bb-that .bb-that.show-mobile-menu{display:block}#bb-that .bb-that.show-mobile-menu .bb-that-header{display:none}#bb-that .bb-that.show-mobile-menu .bb-that--container{overflow:initial;max-height:initial;visibility:visible;background-color:#141414;padding:0}#bb-that .bb-that.show-mobile-menu .bb-that--visible-xs.bb-that--mobile-menu-open ul{overflow-y:initial;max-height:initial}#bb-that .bb-that.show-mobile-menu .bb-that--visible-xs.bb-that--mobile-menu-open .bb-that__sitemap-mobile-header span:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}#bb-that .bb-that.show-mobile-menu .bb-that--visible-xs ul{padding:0;transition:all 0.25s ease-in-out;max-height:0;overflow-y:hidden}#bb-that .bb-that.show-mobile-menu .bb-that--visible-xs li{padding:0}#bb-that .bb-that.show-mobile-menu .bb-that--visible-xs li:first-of-type{padding-top:10px}#bb-that .bb-that.show-mobile-menu .bb-that--visible-xs li:last-child{background:none;padding-bottom:10px;margin:0}#bb-that .bb-that.show-mobile-menu .bb-that--visible-xs a{height:50px;display:flex;align-items:center;color:#B3B3B3;padding:15px 20px;transition:all 0.15s ease-in-out}#bb-that .bb-that.show-mobile-menu .bb-that--visible-xs a:hover{color:#fff;opacity:1}#bb-that .bb-that.show-mobile-menu .bb-that--visible-xs a:hover:after{position:static;content:url(data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2015%2015%27%3E%3Cpath%20d%3D%27M15.707%208.472l-7.354%207.354-0.707-0.707%206.146-6.146h-12.792v-1h12.793l-6.147-6.148%200.707-0.707%207.354%207.354z%27%20fill%3D%27%23ffffff%27%2F%3E%3Cpath%20d%3D%2710px%27%20fill%3D%27%23ffffff%27%2F%3E%3Cpath%20d%3D%2710px%27%20fill%3D%27%23ffffff%27%2F%3E%3C%2Fsvg%3E)}#bb-that .bb-that.show-mobile-menu .bb-that--visible-xs a:after{color:#46464b;opacity:1;display:inline-block;content:url(data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2015%2015%27%3E%3Cpath%20d%3D%27M15.707%208.472l-7.354%207.354-0.707-0.707%206.146-6.146h-12.792v-1h12.793l-6.147-6.148%200.707-0.707%207.354%207.354z%27%20fill%3D%27%2346464b%27%2F%3E%3Cpath%20d%3D%2710px%27%20fill%3D%27%2346464b%27%2F%3E%3Cpath%20d%3D%2710px%27%20fill%3D%27%2346464b%27%2F%3E%3C%2Fsvg%3E);height:15px;width:15px;line-height:initial;-webkit-transition:opacity 0.1s ease-out, content 0.3s ease-in-out;-o-transition:opacity 0.1s ease-out, content 0.3s ease-in-out;transition:opacity 0.1s ease-out, content 0.3s ease-in-out;margin-left:10px}#bb-that .bb-that.show-mobile-menu .bb-that__sitemap-mobile-header{border-bottom:1px solid #616166;height:40px;display:flex;align-items:center;padding:0 15px;background-color:#000}#bb-that .bb-that.show-mobile-menu .bb-that__sitemap-mobile-header span{font-size:12px;color:#fff;opacity:1;cursor:pointer;font-weight:700}#bb-that .bb-that.show-mobile-menu .bb-tLine truncated
|
||||||
|
</style><style>#bb-that a{text-decoration:none}#bb-that .bb-that__sitemap{overflow:hidden;position:relative;max-height:0;visibility:hidden;-webkit-transition:max-height 0.6s ease-in-out,visibility 0.6s ease-in-out;-o-transition:max-height 0.6s ease-in-out,visibility 0.6s ease-in-out;transition:max-height 0.6s ease-in-out,visibility 0.6s ease-in-out}#bb-that{font-family:AvenirNextPForBBG,"Helvetica Neue",Helvetica,Arial,sans-serif;background:#000;position:relative}@media (max-width: 759px){#bb-that .bb-that{display:none}}#bb-that *{font-family:AvenirNextPForBBG,"Helvetica Neue",Helvetica,Arial,sans-serif !important}#bb-that .bb-that--container{margin:0 auto;padding:0 30px;box-sizing:content-box}@media (min-width: 1020px){#bb-that .bb-that--container{padding:0}}#bb-that .bb-that--container:before,#bb-that .bb-that--container:after{content:" ";display:table}#bb-that .bb-that--container:after{clear:both}@media (min-width: 760px){#bb-that .bb-that--container{width:700px}}@media (min-width: 1020px){#bb-that .bb-that--container{width:980px}}@media (min-width: 1280px){#bb-that .bb-that--container{width:1160px}}#bb-that .bb-that-header{font-weight:600;font-size:15px;line-height:30px;padding:15px}@media (min-width: 760px){#bb-that .bb-that-header{font-size:12px;height:30px;padding:0}}#bb-that .bb-that-header__link{position:relative;display:block;outline-offset:2px}@media (min-width: 760px){#bb-that .bb-that-header__link{display:inline-block;padding:0 10px}}#bb-that .bb-that-header__link,#bb-that .bb-that-header__link>span{color:#f3f4ef;font-family:inherit;font-size:inherit;line-height:inherit}@media (min-width: 760px){#bb-that .bb-that-header__link,#bb-that .bb-that-header__link>span{line-height:1;-webkit-font-smoothing:subpixel-antialiased;-moz-osx-font-smoothing:auto}}@media (max-width: 1019px){#bb-that .bb-that-header__link,#bb-that .bb-that-header__link>span{font-size:11px}}#bb-that .bb-that-header__link[href*="bba.bloomberg.net"]:before{display:inline-block;content:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 25.32 19'%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill:%23fff;stroke:%23fff;stroke-miterlimit:10;stroke-width:.5px%7D%3C/style%3E%3C/defs%3E%3Cpath d='M0 0h25.32v19H0z'/%3E%3Crect class='cls-1' x='.32' y='1.81' width='11.74' height='9.39' rx='.47' ry='.47'/%3E%3Crect class='cls-1' x='13.23' y='1.8' width='11.74' height='9.39' rx='.47' ry='.47'/%3E%3Cpath class='cls-1' d='M11.4 13.75v.8c0 .29.53.53 1.18.53s1.17-.24 1.17-.53v-.8h.06c1.83.2 3.11.87 3.11 1.68 0 1-1.93 1.76-4.31 1.76s-4.32-.79-4.32-1.76c0-.8 1.3-1.47 3.09-1.69z'/%3E%3C/svg%3E");height:16px;width:16px;line-height:initial;right:3px;top:2px;position:relative}#bb-that .bb-that-header__link[href*="bba.bloomberg.net"],#bb-that .bb-that-header__link[href*="bba.bloomberg.net"]>span{color:#FFA028}#bb-that .bb-that-header__link[href*="/service"]:before{display:inline-block;content:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 25 25'%3E%3Cpath fill='%23231f20' d='M0 0h25v25H0z'/%3E%3Crect x='1.53' y='1.33' width='21.91' height='21.91' rx='2.63' ry='2.63' fill='%231bbc3c'/%3E%3Ctext transform='translate(1.53 19.79)' style='isolation:isolate' font-size='10.19' font-family='AvenirNextPForBBG-Medium,Avenir Next P for BBG' letter-spacing='-.02em' fill='%23231f20'%3EHelp%3C/text%3E%3C/svg%3E");height:16px;width:16px;line-height:initial;right:3px;top:2px;position:relative}#bb-that .bb-that-header__link:first-child{padding-left:0}#bb-that .bb-that-header__link:after{font-size:9px;position:absolute}@media (min-width: 760px){#bb-that .bb-that-header__link+.bb-that-header__link{border-left:1px solid #b3b3b3}#bb-that .bb-that-header__link+.bb-that-header__link:after{top:-3px}}#bb-that .bb-that-header__link>span{pointer-events:none}#bb-that .bb-that-header__link>span:first-of-type{display:inline}#bb-that .bb-that-header__link>span:first-of-type+span{display:none}@media (max-width: 1019px){#bb-that .bb-that-header__link>span:first-of-type{display:none}#bb-that .bb-that-header__link>span:first-of-type+span{display:inline}}#bb-that .bb-that-header--sitemap-trigger{padding:0 27px 0 10px}#bb-that .bb-that-header--sitemap-trigger:after{display:inline-block;content:url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2015%2015%27%3E%3Cpath%20d%3D%27M0,2.5l7.5,10l7.5-10H0z%27%20fill%3D%27%23fff%27%2F%3E%3C%2Fsvg%3E");height:9px;width:9px;line-height:initial;opacity:0.7;-webkit-transition:opacity 0.1s ease-out;-o-transition:opacity 0.1s ease-out;transition:opacity 0.1s ease-out}#bb-that .bb-that-header--sitemap-trigger:hover:after{opacity:1}#bb-that .bb-that-header--sitemap-trigger:after{height:9px;width:9px;-webkit-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0);-webkit-transition:transform 0.35s ease;-o-transition:transform 0.35s ease;transition:transform 0.35s ease}@media (min-width: 760px){#bb-that .bb-that-header--sitemap-trLine truncated
|
||||||
|
</style>
|
||||||
|
<div id="bb-that" data-spotlight-service="https://www.bloomberg.com/tophat/api/spotlights?site=markets">
|
||||||
|
<nav class="bb-that">
|
||||||
|
<a href="#that-jump-content--default" class="bb-that__skip-to-content" aria-label="Skip to content" role="button" tabindex="0">Skip to content</a>
|
||||||
|
<div class="bb-that-header bb-that--container">
|
||||||
|
<a class="bb-that-header__link bb-that-header--sitemap-trigger" href="https://www.bloomberg.com/company/?utm_source=bloomberg-menu&utm_medium=markets" role="button" aria-controls="bb-that--container" aria-expanded="false" data-element="tophat-link" data-description="Bloomberg the Company & Its Products" data-label="markets"><span>Bloomberg the Company & Its Products</span><span>The Company & its Products</span></a><a class="bb-that-header__link" href="https://www.bloomberg.com/professional/contact-menu/?utm_source=bloomberg-menu&utm_medium=markets&bbgsum=DG-WS-PROF-DEMO-bbgmenu" data-element="tophat-link" data-description="Bloomberg Terminal Demo Request" data-label="markets">Bloomberg Terminal Demo Request</a><a class="bb-that-header__link" href="https://bba.bloomberg.net/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Bloomberg Anywhere Remote Login" data-label="markets"><span>Bloomberg Anywhere Remote Login</span><span>Bloomberg Anywhere Login</span></a><a class="bb-that-header__link" href="https://www.bloomberg.com/professional/support/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Bloomberg Customer Support" data-label="markets"><span>Bloomberg Customer Support</span><span>Customer Support</span></a> </div>
|
||||||
|
<div id="bb-that--container" class="bb-that__sitemap bb-that--container" tabindex="-1" role="dialog">
|
||||||
|
|
||||||
|
<ul class="bb-that__sitemap-sections bb-that--visible-md bb-that--visible-lg">
|
||||||
|
<li class="bb-that__col bb-that__col--md">
|
||||||
|
<section class="bb-that-category">
|
||||||
|
<h3 id="that-list--bloomberg--1" class="bb-that-category__title">Bloomberg</h3><div class="bb-that-category__content"><p class="bb-that-category__text">Connecting decision makers to a dynamic network of information, people and ideas, Bloomberg quickly and accurately delivers business and financial information, news and insight around the world</p></div></section> <section class="bb-that-category">
|
||||||
|
<h3 id="that-list--for_customers--2" class="bb-that-category__title">For Customers</h3><ul class="bb-that-category__content" aria-labelledby="that-list--for_customers--2"><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://bba.bloomberg.net/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Bloomberg Anywhere Remote Login" data-label="markets" tabindex="0">Bloomberg Anywhere Remote Login</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/professional/support/customer-support/software-updates/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Software Updates" data-label="markets" tabindex="0">Software Updates</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://service.bloomberg.com/portal/sessions/new?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Manage Products and Account Information" data-label="markets" tabindex="0">Manage Products and Account Information</a></li></ul></section> <section class="bb-that-category">
|
||||||
|
<h3 id="that-list--support--3" class="bb-that-category__title">Support</h3><div class="bb-that-category__content"><p class="bb-that-category__text"><span>Americas</span>+1 212 318 2000</p><p class="bb-that-category__text"><span>EMEA</span>+44 20 7330 7500</p><p class="bb-that-category__text"><span>Asia Pacific</span>+65 6212 1000</p></div></section> </li>
|
||||||
|
<li class="bb-that__col bb-that__col--md">
|
||||||
|
<section class="bb-that-category">
|
||||||
|
<h3 id="that-list--company--4" class="bb-that-category__title">Company</h3><ul class="bb-that-category__content" aria-labelledby="that-list--company--4"><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/company/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="About" data-label="markets" tabindex="0">About</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/company/what-we-do/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Careers" data-label="markets" tabindex="0">Careers</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/company/values/inclusion/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Inclusion at Bloomberg" data-label="markets" tabindex="0">Inclusion at Bloomberg</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/company/values/tech-at-bloomberg/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Tech at Bloomberg" data-label="markets" tabindex="0">Tech at Bloomberg</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/company/philanthropy/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Philanthropy" data-label="markets" tabindex="0">Philanthropy</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/company/sustainability/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Sustainability" data-label="markets" tabindex="0">Sustainability</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/company/values/tech-at-bloomberg/bloomberg-beta/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Bloomberg Beta" data-label="markets" tabindex="0">Bloomberg Beta</a></li></ul></section> <section class="bb-that-category">
|
||||||
|
<h3 id="that-list--communications--5" class="bb-that-category__title">Communications</h3><ul class="bb-that-category__content" aria-labelledby="that-list--communications--5"><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/company/announcements/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Press Announcements" data-label="markets" tabindex="0">Press Announcements</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/company/press-contacts/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Press Contacts" data-label="markets" tabindex="0">Press Contacts</a></li></ul></section> <section class="bb-that-category">
|
||||||
|
<h3 id="that-list--follow--6" class="bb-that-category__title">Follow</h3><ul class="bb-that-category__content" aria-labelledby="that-list--follow--6"><li class="bb-that-category__item"><a href="https://www.facebook.com/Bloomberglp" class="bb-that-category__social-link bb-that--icon-facebook" data-element="tophat-link" data-description="Facebook" data-label="markets" target="_blank" rel="noopener" tabindex="0">Facebook</a></li><li class="bb-that-category__item"><a href="https://www.instagram.com/bloomberg/" class="bb-that-category__social-link bb-that--icon-instagram" data-element="tophat-link" data-description="Instagram" data-label="markets" target="_blank" rel="noopener" tabindex="0">Instagram</a></li><li class="bb-that-category__item"><a href="https://www.linkedin.com/company/2494" class="bb-that-category__social-link bb-that--icon-linkedin" data-element="tophat-link" data-description="LinkedIn" data-label="markets" target="_blank" rel="noopener" tabindex="0">LinkedIn</a></li><li class="bb-that-category__item"><a href="https://www.youtube.com/@bloomberglp" class="bb-that-category__social-link bb-that--icon-youtube" data-element="tophat-link" data-description="YouTube" data-label="markets" target="_blank" rel="noopener" tabindex="0">YouTube</a></li></ul></section> </li>
|
||||||
|
<li class="bb-that__col bb-that__col--md">
|
||||||
|
<section class="bb-that-category">
|
||||||
|
<h3 id="that-list--products--7" class="bb-that-category__title">Products</h3><ul class="bb-that-category__content" aria-labelledby="that-list--products--7"><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://bloomberg.com/professional?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Bloomberg Professional Services" data-label="markets" tabindex="0">Bloomberg Professional Services</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/professional/products/bloomberg-terminal/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Bloomberg Terminal" data-label="markets" tabindex="0">Bloomberg Terminal</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/professional/products/data/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Data" data-label="markets" tabindex="0">Data</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/professional/products/trading/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Trading" data-label="markets" tabindex="0">Trading</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/professional/products/risk/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Risk" data-label="markets" tabindex="0">Risk</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/professional/products/compliance/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Compliance" data-label="markets" tabindex="0">Compliance</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/professional/products/indices/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Indices" data-label="markets" tabindex="0">Indices</a></li></ul></section> <section class="bb-that-category">
|
||||||
|
<h3 id="that-list--industry_products--8" class="bb-that-category__title">Industry Products</h3><ul class="bb-that-category__content" aria-labelledby="that-list--industry_products--8"><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://pro.bloomberglaw.com/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Bloomberg Law" data-label="markets" tabindex="0">Bloomberg Law</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://pro.bloombergtax.com/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Bloomberg Tax" data-label="markets" tabindex="0">Bloomberg Tax</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://about.bgov.com/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Bloomberg Government" data-label="markets" tabindex="0">Bloomberg Government</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://about.bnef.com/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="BloombergNEF" data-label="markets" tabindex="0">BloombergNEF</a></li></ul></section> </li>
|
||||||
|
<li class="bb-that__col bb-that__col--md">
|
||||||
|
<section class="bb-that-category">
|
||||||
|
<h3 id="that-list--media--9" class="bb-that-category__title">Media</h3><ul class="bb-that-category__content" aria-labelledby="that-list--media--9"><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/markets/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Bloomberg Markets" data-label="markets" tabindex="0">Bloomberg Markets</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/technology/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Bloomberg Technology" data-label="markets" tabindex="0">Bloomberg Technology</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/pursuits/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Bloomberg Pursuits" data-label="markets" tabindex="0">Bloomberg Pursuits</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/politics/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Bloomberg Politics" data-label="markets" tabindex="0">Bloomberg Politics</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/opinion/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Bloomberg Opinion" data-label="markets" tabindex="0">Bloomberg Opinion</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/businessweek/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Bloomberg Businessweek" data-label="markets" tabindex="0">Bloomberg Businessweek</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberglive.com/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Bloomberg Live Conferences" data-label="markets" tabindex="0">Bloomberg Live Conferences</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloombergradio.com/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Bloomberg Radio" data-label="markets" tabindex="0">Bloomberg Radio</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/live?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Bloomberg Television" data-label="markets" tabindex="0">Bloomberg Television</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/company/news-bureaus/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="News Bureaus" data-label="markets" tabindex="0">News Bureaus</a></li></ul></section> <section class="bb-that-category">
|
||||||
|
<h3 id="that-list--media_services--10" class="bb-that-category__title">Media Services</h3><ul class="bb-that-category__content" aria-labelledby="that-list--media_services--10"><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/distribution?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Bloomberg Media Distribution" data-label="markets" tabindex="0">Bloomberg Media Distribution</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloombergmedia.com/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Advertising" data-label="markets" tabindex="0">Advertising</a></li></ul></section> </li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<ul class="bb-that__sitemap-sections bb-that--visible-sm">
|
||||||
|
<li class="bb-that__col bb-that__col--sm">
|
||||||
|
<section class="bb-that-category">
|
||||||
|
<h3 id="that-list--company--11" class="bb-that-category__title">Company</h3><ul class="bb-that-category__content" aria-labelledby="that-list--company--11"><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/company/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="About" data-label="markets" tabindex="0">About</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/company/what-we-do/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Careers" data-label="markets" tabindex="0">Careers</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/company/values/inclusion/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Inclusion at Bloomberg" data-label="markets" tabindex="0">Inclusion at Bloomberg</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/company/values/tech-at-bloomberg/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Tech at Bloomberg" data-label="markets" tabindex="0">Tech at Bloomberg</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/company/philanthropy/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Philanthropy" data-label="markets" tabindex="0">Philanthropy</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/company/sustainability/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Sustainability" data-label="markets" tabindex="0">Sustainability</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/company/values/tech-at-bloomberg/bloomberg-beta/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Bloomberg Beta" data-label="markets" tabindex="0">Bloomberg Beta</a></li></ul></section> <section class="bb-that-category">
|
||||||
|
<h3 id="that-list--communications--12" class="bb-that-category__title">Communications</h3><ul class="bb-that-category__content" aria-labelledby="that-list--communications--12"><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/company/announcements/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Press Announcements" data-label="markets" tabindex="0">Press Announcements</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/company/press-contacts/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Press Contacts" data-label="markets" tabindex="0">Press Contacts</a></li></ul></section> <section class="bb-that-category">
|
||||||
|
<h3 id="that-list--follow--13" class="bb-that-category__title">Follow</h3><ul class="bb-that-category__content" aria-labelledby="that-list--follow--13"><li class="bb-that-category__item"><a href="https://www.facebook.com/Bloomberglp" class="bb-that-category__social-link bb-that--icon-facebook" data-element="tophat-link" data-description="Facebook" data-label="markets" target="_blank" rel="noopener" tabindex="0">Facebook</a></li><li class="bb-that-category__item"><a href="https://www.instagram.com/bloomberg/" class="bb-that-category__social-link bb-that--icon-instagram" data-element="tophat-link" data-description="Instagram" data-label="markets" target="_blank" rel="noopener" tabindex="0">Instagram</a></li><li class="bb-that-category__item"><a href="https://www.linkedin.com/company/2494" class="bb-that-category__social-link bb-that--icon-linkedin" data-element="tophat-link" data-description="LinkedIn" data-label="markets" target="_blank" rel="noopener" tabindex="0">LinkedIn</a></li><li class="bb-that-category__item"><a href="https://www.youtube.com/@bloomberglp" class="bb-that-category__social-link bb-that--icon-youtube" data-element="tophat-link" data-description="YouTube" data-label="markets" target="_blank" rel="noopener" tabindex="0">YouTube</a></li></ul></section> </li>
|
||||||
|
<li class="bb-that__col bb-that__col--sm">
|
||||||
|
<section class="bb-that-category">
|
||||||
|
<h3 id="that-list--products--14" class="bb-that-category__title">Products</h3><ul class="bb-that-category__content" aria-labelledby="that-list--products--14"><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://bloomberg.com/professional?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Bloomberg Professional Services" data-label="markets" tabindex="0">Bloomberg Professional Services</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/professional/products/bloomberg-terminal/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Bloomberg Terminal" data-label="markets" tabindex="0">Bloomberg Terminal</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/professional/products/data/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Data" data-label="markets" tabindex="0">Data</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/professional/products/trading/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Trading" data-label="markets" tabindex="0">Trading</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/professional/products/risk/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Risk" data-label="markets" tabindex="0">Risk</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/professional/products/compliance/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Compliance" data-label="markets" tabindex="0">Compliance</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/professional/products/indices/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Indices" data-label="markets" tabindex="0">Indices</a></li></ul></section> <section class="bb-that-category">
|
||||||
|
<h3 id="that-list--industry_products--15" class="bb-that-category__title">Industry Products</h3><ul class="bb-that-category__content" aria-labelledby="that-list--industry_products--15"><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://pro.bloomberglaw.com/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Bloomberg Law" data-label="markets" tabindex="0">Bloomberg Law</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://pro.bloombergtax.com/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Bloomberg Tax" data-label="markets" tabindex="0">Bloomberg Tax</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://about.bgov.com/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Bloomberg Government" data-label="markets" tabindex="0">Bloomberg Government</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://about.bnef.com/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="BloombergNEF" data-label="markets" tabindex="0">BloombergNEF</a></li></ul></section> </li>
|
||||||
|
<li class="bb-that__col bb-that__col--sm">
|
||||||
|
<section class="bb-that-category">
|
||||||
|
<h3 id="that-list--media--16" class="bb-that-category__title">Media</h3><ul class="bb-that-category__content" aria-labelledby="that-list--media--16"><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/markets/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Bloomberg Markets" data-label="markets" tabindex="0">Bloomberg Markets</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/technology/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Bloomberg[br] Technology" data-label="markets" tabindex="0">Bloomberg<br/> Technology</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/pursuits/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Bloomberg Pursuits" data-label="markets" tabindex="0">Bloomberg Pursuits</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/politics/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Bloomberg Politics" data-label="markets" tabindex="0">Bloomberg Politics</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/opinion/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Bloomberg Opinion" data-label="markets" tabindex="0">Bloomberg Opinion</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/businessweek/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Bloomberg[br] Businessweek" data-label="markets" tabindex="0">Bloomberg<br/> Businessweek</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberglive.com/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Bloomberg Live Conferences" data-label="markets" tabindex="0">Bloomberg Live Conferences</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloombergradio.com/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Bloomberg Radio" data-label="markets" tabindex="0">Bloomberg Radio</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/live?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Bloomberg Television" data-label="markets" tabindex="0">Bloomberg Television</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/company/news-bureaus/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="News Bureaus" data-label="markets" tabindex="0">News Bureaus</a></li></ul></section> <section class="bb-that-category">
|
||||||
|
<h3 id="that-list--media_services--17" class="bb-that-category__title">Media Services</h3><ul class="bb-that-category__content" aria-labelledby="that-list--media_services--17"><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/distribution?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Bloomberg Media Distribution" data-label="markets" tabindex="0">Bloomberg Media Distribution</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloombergmedia.com/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Advertising" data-label="markets" tabindex="0">Advertising</a></li></ul></section> </li>
|
||||||
|
<li class="bb-that__col bb-that__col--sm">
|
||||||
|
<section class="bb-that-category">
|
||||||
|
<h3 id="that-list--bloomberg--18" class="bb-that-category__title">Bloomberg</h3><div class="bb-that-category__content"><p class="bb-that-category__text">Connecting decision makers to a dynamic network of information, people and ideas, Bloomberg quickly and accurately delivers business and financial information, news and insight around the world</p></div></section> <section class="bb-that-category">
|
||||||
|
<h3 id="that-list--for_customers--19" class="bb-that-category__title">For Customers</h3><ul class="bb-that-category__content" aria-labelledby="that-list--for_customers--19"><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://bba.bloomberg.net/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Bloomberg Anywhere Remote Login" data-label="markets" tabindex="0">Bloomberg Anywhere Remote Login</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://www.bloomberg.com/professional/support/customer-support/software-updates/?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Software Updates" data-label="markets" tabindex="0">Software Updates</a></li><li class="bb-that-category__item"><a class="bb-that-category__link" href="https://service.bloomberg.com/portal/sessions/new?utm_source=bloomberg-menu&utm_medium=markets" data-element="tophat-link" data-description="Manage Contracts and Orders" data-label="markets" tabindex="0">Manage Contracts and Orders</a></li></ul></section> <section class="bb-that-category">
|
||||||
|
<h3 id="that-list--support--20" class="bb-that-category__title">Support</h3><div class="bb-that-category__content"><p class="bb-that-category__text"><span>Americas</span>+1 212 318 2000</p><p class="bb-that-category__text"><span>EMEA</span>+44 20 7330 7500</p><p class="bb-that-category__text"><span>Asia Pacific</span>+65 6212 1000</p></div></section> </li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<button class="bb-that__close" aria-label="Close" tabindex="0"></button>
|
||||||
|
</div> </nav>
|
||||||
|
</div>
|
||||||
|
<div id="that-jump-content--default" tabindex="-1"></div>
|
||||||
|
<div class="nav_nav__7WSAd" style="top:0px"><nav class="media-ui-Nav_navContainer-hjs68ExRvE4- nav" data-component="nav"><div class="media-ui-Nav_desktop-H4T7bcdLqpc-"><div class="media-ui-LogoBar_logoBarContainer-zT2Vdyxa9hk- media-ui-LogoBar_dark-q7Ouy-DICYc- logo-bar" data-component="logo-bar"><div class="media-ui-LogoBar_bar-dkILEe-ptTg- nav_gridNavDesktop__4OxRl"><div class="media-ui-Logo_logo-08Z6l4waIQI- media-ui-Logo_dark-8-AT52-hX7Q-" aria-label="logo" data-component="logo"><a href="/" class="media-ui-Logo_logo-08Z6l4waIQI-"><svg width="100%" height="100%" version="1.1" viewBox="429.6 479.5 476.4 96.1" xmlns="http://www.w3.org/2000/svg" role="img" fill="currentColor" aria-label="Bloomberg" data-component="bloombergLogo"><rect fill="none" x="429.5" y="479.5" width="480.2" height="100.2"></rect><path fill="currentColor" d="m442.1 491.9h10.4c9.5 0 13.6 3 13.6 9.1 0 5.3-4.2 8.9-12.5 8.9h-11.4v-18zm-12.5 59.7h25.4c13.3 0 26.7-4.8 26.7-20.1 0-9.1-6.4-16-15.2-17v-0.2c7.3-2.2 12.2-7.5 12.2-15.4 0-12.8-10.9-17.7-21.6-17.7h-27.5v70.4zm12.5-31h12c10.2 0 14.9 2.6 14.9 10 0 9.3-9 10.4-15.4 10.4h-11.5v-20.4z"></path><path fill="currentColor" d="m489.8 479.5h11.9v72.1h-11.9v-72.1z"></path><path fill="currentColor" d="m521.7 527.7c0-7.5 5.3-14.3 14-14.3 8.8 0 14 6.9 14 14.3 0 7.5-5.3 14.3-14 14.3-8.7 0.1-14-6.8-14-14.3zm-11.9 0c0 15 11.5 25.1 26 25.1 14.4 0 26-10.1 26-25.1s-11.5-25.1-26-25.1c-14.5 0.1-26 10.1-26 25.1z"></path><path fill="currentColor" d="m579.1 527.7c0-7.5 5.3-14.3 14-14.3 8.8 0 14 6.9 14 14.3 0 7.5-5.3 14.3-14 14.3-8.8 0.1-14-6.8-14-14.3zm-12 0c0 15 11.5 25.1 26 25.1 14.4 0 26-10.1 26-25.1s-11.5-25.1-26-25.1c-14.4 0.1-26 10.1-26 25.1z"></path><path fill="currentColor" d="m626.4 503.9h11.3v7.5h0.2c2.1-4.5 6.7-8.7 14.6-8.7 7.4 0 12.4 2.9 14.9 8.9 3.5-6.1 8.6-8.9 15.7-8.9 12.7 0 17.2 9.1 17.2 20.5v28.5h-11.9v-27.1c0-6-1.8-11.1-8.9-11.1-7.5 0-10.3 6.2-10.3 12.3v25.9h-11.9v-28.5c0-5.9-2.4-9.8-8.2-9.8-7.9 0-10.9 5.8-10.9 12.1v26.1h-11.9v-47.7z"></path><path fill="currentColor" d="m749.7 527.7c0 7.5-5.3 14.3-14 14.3-8.8 0-14-6.9-14-14.3 0-7.5 5.3-14.3 14-14.3s14 6.9 14 14.3zm-39.6 23.9h11.3v-7.2h0.2c3.5 5.8 9.8 8.4 16.4 8.4 14.7 0 23.6-10.9 23.6-25.1 0-14.1-9.5-25.1-23.1-25.1-9 0-13.7 4.2-16.2 7.3h-0.3v-30.4h-11.9v72.1z"></path><path fill="currentColor" d="m779 523c0.9-6.9 5.3-11.3 12.3-11.3 7.5 0 12 4.4 12.1 11.3h-24.4zm36.4 8.9v-3.3c0-16.6-9.1-26-22.4-26-14.4 0-26 10.1-26 25.1s11.5 25.1 26 25.1c7.6 0 14.6-2.7 20.2-9.6l-8.6-6.5c-3 3.7-6.9 6.5-12.8 6.5-6.7 0-12-4.3-12.8-11.3h36.4z"></path><path fill="currentColor" d="m823.2 503.9h11.9v7.6h0.2c2.6-5.5 7.9-8.8 14.1-8.8 1.5 0 2.9 0.3 4.3 0.7v11.5c-2-0.5-3.9-0.9-5.8-0.9-11.2 0-12.8 9.5-12.8 12v25.6h-11.9v-47.7z"></path><path fill="currentColor" d="m880.5 513.4c8.7 0 14.1 5.8 14.1 14 0 8-5.4 14-14.2 14-8.1 0-14-6.3-14-13.8 0-8.4 5.7-14.2 14.1-14.2zm14.1-9.5v7.2h-0.2c-3.5-5.8-9.8-8.4-16.4-8.4-14.7 0-23.6 11-23.6 25.1 0 13.5 9.5 24.5 23.8 24.5 6 0 12.1-2.3 15.6-7h0.2v3.5c0 9.5-3.6 16-15.1 16-6.7 0-11.6-2.5-16.4-6.9l-7.2 9.8c6.8 6 14.8 7.9 23.7 7.9 18.6 0 27-10.9 27-28.2v-43.5h-11.4z"></path></svg></a></div><div class="media-ui-LogoBar_right-HwB1Vmt3U30-"><button data-testid="sign-in-button" class="media-ui-LogoBar_signInButton-9yr-B7jjuE0-">Sign In</button><a class="media-ui-LogoBar_subscribeButton-rqH7oKAhEzM-" href="https://www.bloomberg.com/subscriptions?in_source=nav" target="_blank" rel="noreferrer">Subscribe</a><button class="media-ui-LogoBar_searchButton-gUKKb5rWizY-" data-testid="nav-search-button"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Search"><title>Search</title><path fill-rule="evenodd" clip-rule="evenodd" d="M21 20.1125C21 19.8689 20.9095 19.6566 20.7285 19.4756L15.7587 14.4849C16.232 13.8863 16.6009 13.2146 16.8654 12.4698C17.1299 11.7251 17.2622 10.942 17.2622 10.1206C17.2622 9.14617 17.0742 8.2239 16.6984 7.35383C16.3225 6.48375 15.8109 5.72854 15.1636 5.08817C14.5162 4.44779 13.761 3.93968 12.8979 3.56381C12.0348 3.18793 11.1091 3 10.1206 3C9.14617 3 8.2239 3.18793 7.35383 3.56381C6.48375 3.93968 5.72854 4.44779 5.08817 5.08817C4.44779 5.72854 3.93968 6.48375 3.56381 7.35383C3.18793 8.2239 3 9.14617 3 10.1206C3 11.1091 3.18793 12.0348 3.56381 12.8979C3.93968 13.761 4.44779 14.5162 5.08817 15.1636C5.72854 15.8109 6.48375 16.3225 7.35383 16.6984C8.2239 17.0742 9.14617 17.2622 10.1206 17.2622C10.942 17.2622 11.7251 17.1299 12.4698 16.8654C13.2146 16.6009 13.8863 16.232 14.4849 15.7587L19.4756 20.7285C19.5731 20.826 19.6775 20.8956 19.7889 20.9374C19.9002 20.9791 20.0046 21 20.1021 21C20.2135 21 20.3248 20.9791 20.4362 20.9374C20.5476 20.8956 20.645 20.826 20.7285 20.7285C20.9095 20.5615 21 20.3561 21 20.1125ZM5.203 12.1984C4.91762 11.551 4.77493 10.8584 4.77493 10.1206C4.77493 9.39672 4.91762 8.70764 5.203 8.05334C5.48839 7.39904 5.87121 6.83177 6.35149 6.35148C6.83177 5.8712 7.39905 5.48838 8.05335 5.20299C8.70764 4.91761 9.39673 4.77492 10.1206 4.77492C10.8585 4.774Line truncated
|
||||||
|
--atomics-text-color,
|
||||||
|
var(--atomics-text-variant-color, inherit)
|
||||||
|
);font-family:var(
|
||||||
|
--atomics-text-font-family,
|
||||||
|
var(--atomics-text-variant-font-family)
|
||||||
|
);font-size:var(
|
||||||
|
--atomics-text-font-size,
|
||||||
|
var(--atomics-text-variant-font-size)
|
||||||
|
);font-weight:var(
|
||||||
|
--atomics-text-font-weight,
|
||||||
|
var(--atomics-text-variant-font-weight)
|
||||||
|
);line-height:var(
|
||||||
|
--atomics-text-line-height,
|
||||||
|
var(--atomics-text-variant-line-height)
|
||||||
|
);}}@property --_atomics-Text-font-size{syntax:"*";inherits:false;}@property --_atomics-Text-line-height{syntax:"*";inherits:false;}@property --_atomics-Text-font-weight{syntax:"*";inherits:false;}@property --_atomics-Text-font-family{syntax:"*";inherits:false;}@property --_atomics-Text-decoration{syntax:"*";inherits:false;}@property --_atomics-Text-color{syntax:"*";inherits:false;}@layer phx.components{.css-5z3i9b[data-has-font-size]{--atomics-text-font-size:var(--_atomics-Text-font-size);}.css-5z3i9b[data-has-line-height]{--atomics-text-line-height:var(--_atomics-Text-line-height);}.css-5z3i9b[data-has-font-weight]{--atomics-text-font-weight:var(--_atomics-Text-font-weight);}.css-5z3i9b[data-has-font-family]{--atomics-text-font-family:var(--_atomics-Text-font-family);}.css-5z3i9b[data-has-decoration]{text-decoration-line:var(--_atomics-Text-decoration);}.css-5z3i9b[data-has-color]{--atomics-text-color:var(--_atomics-Text-color);}}@property --_atomics-Text-variant-font-size{syntax:"*";inherits:false;}@property --_atomics-Text-variant-font-size-at-mobile-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-font-size-at-xs-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-font-size-at-sm-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-font-size-at-lg-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-font-family{syntax:"*";inherits:false;}@property --_atomics-Text-variant-font-family-at-mobile-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-font-family-at-xs-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-font-family-at-sm-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-font-family-at-lg-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-font-weight{syntax:"*";inherits:false;}@property --_atomics-Text-variant-font-weight-at-mobile-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-font-weight-at-xs-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-font-weight-at-sm-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-font-weight-at-lg-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-line-height{syntax:"*";inherits:false;}@property --_atomics-Text-variant-line-height-at-mobile-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-line-height-at-xs-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-line-height-at-sm-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-line-height-at-lg-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-color{syntax:"*";inherits:false;}@property --_atomics-Text-variant-color-at-mobile-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-color-at-xs-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-color-at-sm-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-color-at-lg-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-letter-spacing{syntax:"*";inherits:false;}@property --_atomics-Text-variant-letter-spacing-at-mobile-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-letter-spacing-at-xs-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-letter-spacing-at-sm-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-letter-spacing-at-lg-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-text-transform{syntax:"*";inherits:false;}@property --_atomics-Text-variant-text-transform-at-mobile-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-text-transform-at-xs-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-text-transform-at-sm-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-text-transform-at-lg-desktop-and-up{syntax:"*";inherits:false;}@layer phx.components{.css-5z3i9b[data-has-variant-font-size]{--atomics-text-variant-font-size:var(--_atomics-Text-variant-font-size);}.css-5z3i9b[data-has-variant-font-family]{--atomics-text-variant-font-family:var(--_atomics-Text-variant-font-family);}.css-5z3i9b[data-has-variant-font-weight]{--atomics-text-variant-font-weight:var(--_atomics-Text-variant-font-weight);}.css-5z3i9b[data-has-variant-line-height]{--atomics-text-variant-line-height:var(--_atomics-Text-variant-line-height);}.css-5z3i9b[data-has-variant-color]{--atomics-text-variant-color:var(--_atomics-Text-variant-color);}.css-5z3i9b[data-has-variant-letter-spacing]{letter-spacing:var(--_atomics-Text-variant-letter-spacing);}.css-5z3i9b[data-has-variant-text-transform]{text-transform:var(--_atomics-Text-variant-text-transform);}@media (min-width: 48rem){.css-5z3i9b[data-has-variant-font-size-at-mobile-and-up]{--atomics-text-variant-font-size:var(--_atomics-Text-vLine truncated
|
||||||
|
--atomics-text-color,
|
||||||
|
var(--atomics-text-variant-color, inherit)
|
||||||
|
);font-family:var(
|
||||||
|
--atomics-text-font-family,
|
||||||
|
var(--atomics-text-variant-font-family)
|
||||||
|
);font-size:var(
|
||||||
|
--atomics-text-font-size,
|
||||||
|
var(--atomics-text-variant-font-size)
|
||||||
|
);font-weight:var(
|
||||||
|
--atomics-text-font-weight,
|
||||||
|
var(--atomics-text-variant-font-weight)
|
||||||
|
);line-height:var(
|
||||||
|
--atomics-text-line-height,
|
||||||
|
var(--atomics-text-variant-line-height)
|
||||||
|
);}}@property --_atomics-Text-font-size{syntax:"*";inherits:false;}@property --_atomics-Text-line-height{syntax:"*";inherits:false;}@property --_atomics-Text-font-weight{syntax:"*";inherits:false;}@property --_atomics-Text-font-family{syntax:"*";inherits:false;}@property --_atomics-Text-decoration{syntax:"*";inherits:false;}@property --_atomics-Text-color{syntax:"*";inherits:false;}@layer phx.components{.css-3lpbuy[data-has-font-size]{--atomics-text-font-size:var(--_atomics-Text-font-size);}.css-3lpbuy[data-has-line-height]{--atomics-text-line-height:var(--_atomics-Text-line-height);}.css-3lpbuy[data-has-font-weight]{--atomics-text-font-weight:var(--_atomics-Text-font-weight);}.css-3lpbuy[data-has-font-family]{--atomics-text-font-family:var(--_atomics-Text-font-family);}.css-3lpbuy[data-has-decoration]{text-decoration-line:var(--_atomics-Text-decoration);}.css-3lpbuy[data-has-color]{--atomics-text-color:var(--_atomics-Text-color);}}@property --_atomics-Text-variant-font-size{syntax:"*";inherits:false;}@property --_atomics-Text-variant-font-size-at-mobile-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-font-size-at-xs-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-font-size-at-sm-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-font-size-at-lg-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-font-family{syntax:"*";inherits:false;}@property --_atomics-Text-variant-font-family-at-mobile-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-font-family-at-xs-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-font-family-at-sm-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-font-family-at-lg-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-font-weight{syntax:"*";inherits:false;}@property --_atomics-Text-variant-font-weight-at-mobile-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-font-weight-at-xs-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-font-weight-at-sm-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-font-weight-at-lg-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-line-height{syntax:"*";inherits:false;}@property --_atomics-Text-variant-line-height-at-mobile-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-line-height-at-xs-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-line-height-at-sm-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-line-height-at-lg-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-color{syntax:"*";inherits:false;}@property --_atomics-Text-variant-color-at-mobile-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-color-at-xs-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-color-at-sm-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-color-at-lg-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-letter-spacing{syntax:"*";inherits:false;}@property --_atomics-Text-variant-letter-spacing-at-mobile-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-letter-spacing-at-xs-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-letter-spacing-at-sm-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-letter-spacing-at-lg-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-text-transform{syntax:"*";inherits:false;}@property --_atomics-Text-variant-text-transform-at-mobile-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-text-transform-at-xs-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-text-transform-at-sm-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-text-transform-at-lg-desktop-and-up{syntax:"*";inherits:false;}@layer phx.components{.css-3lpbuy[data-has-variant-font-size]{--atomics-text-variant-font-size:var(--_atomics-Text-variant-font-size);}.css-3lpbuy[data-has-variant-font-family]{--atomics-text-variant-font-family:var(--_atomics-Text-variant-font-family);}.css-3lpbuy[data-has-variant-font-weight]{--atomics-text-variant-font-weight:var(--_atomics-Text-variant-font-weight);}.css-3lpbuy[data-has-variant-line-height]{--atomics-text-variant-line-height:var(--_atomics-Text-variant-line-height);}.css-3lpbuy[data-has-variant-color]{--atomics-text-variant-color:var(--_atomics-Text-variant-color);}.css-3lpbuy[data-has-variant-letter-spacing]{letter-spacing:var(--_atomics-Text-variant-letter-spacing);}.css-3lpbuy[data-has-variant-text-transform]{text-transform:var(--_atomics-Text-variant-text-transform);}@media (min-width: 48rem){.css-3lpbuy[data-has-variant-font-size-at-mobile-and-up]{--atomics-text-variant-font-size:var(--_atomics-Text-vLine truncated
|
||||||
|
--atomics-text-color,
|
||||||
|
var(--atomics-text-variant-color, inherit)
|
||||||
|
);font-family:var(
|
||||||
|
--atomics-text-font-family,
|
||||||
|
var(--atomics-text-variant-font-family)
|
||||||
|
);font-size:var(
|
||||||
|
--atomics-text-font-size,
|
||||||
|
var(--atomics-text-variant-font-size)
|
||||||
|
);font-weight:var(
|
||||||
|
--atomics-text-font-weight,
|
||||||
|
var(--atomics-text-variant-font-weight)
|
||||||
|
);line-height:var(
|
||||||
|
--atomics-text-line-height,
|
||||||
|
var(--atomics-text-variant-line-height)
|
||||||
|
);}}@property --_atomics-Text-font-size{syntax:"*";inherits:false;}@property --_atomics-Text-line-height{syntax:"*";inherits:false;}@property --_atomics-Text-font-weight{syntax:"*";inherits:false;}@property --_atomics-Text-font-family{syntax:"*";inherits:false;}@property --_atomics-Text-decoration{syntax:"*";inherits:false;}@property --_atomics-Text-color{syntax:"*";inherits:false;}@layer phx.components{.css-kiko3w[data-has-font-size]{--atomics-text-font-size:var(--_atomics-Text-font-size);}.css-kiko3w[data-has-line-height]{--atomics-text-line-height:var(--_atomics-Text-line-height);}.css-kiko3w[data-has-font-weight]{--atomics-text-font-weight:var(--_atomics-Text-font-weight);}.css-kiko3w[data-has-font-family]{--atomics-text-font-family:var(--_atomics-Text-font-family);}.css-kiko3w[data-has-decoration]{text-decoration-line:var(--_atomics-Text-decoration);}.css-kiko3w[data-has-color]{--atomics-text-color:var(--_atomics-Text-color);}}@property --_atomics-Text-variant-font-size{syntax:"*";inherits:false;}@property --_atomics-Text-variant-font-size-at-mobile-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-font-size-at-xs-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-font-size-at-sm-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-font-size-at-lg-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-font-family{syntax:"*";inherits:false;}@property --_atomics-Text-variant-font-family-at-mobile-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-font-family-at-xs-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-font-family-at-sm-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-font-family-at-lg-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-font-weight{syntax:"*";inherits:false;}@property --_atomics-Text-variant-font-weight-at-mobile-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-font-weight-at-xs-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-font-weight-at-sm-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-font-weight-at-lg-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-line-height{syntax:"*";inherits:false;}@property --_atomics-Text-variant-line-height-at-mobile-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-line-height-at-xs-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-line-height-at-sm-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-line-height-at-lg-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-color{syntax:"*";inherits:false;}@property --_atomics-Text-variant-color-at-mobile-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-color-at-xs-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-color-at-sm-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-color-at-lg-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-letter-spacing{syntax:"*";inherits:false;}@property --_atomics-Text-variant-letter-spacing-at-mobile-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-letter-spacing-at-xs-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-letter-spacing-at-sm-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-letter-spacing-at-lg-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-text-transform{syntax:"*";inherits:false;}@property --_atomics-Text-variant-text-transform-at-mobile-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-text-transform-at-xs-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-text-transform-at-sm-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-Text-variant-text-transform-at-lg-desktop-and-up{syntax:"*";inherits:false;}@layer phx.components{.css-kiko3w[data-has-variant-font-size]{--atomics-text-variant-font-size:var(--_atomics-Text-variant-font-size);}.css-kiko3w[data-has-variant-font-family]{--atomics-text-variant-font-family:var(--_atomics-Text-variant-font-family);}.css-kiko3w[data-has-variant-font-weight]{--atomics-text-variant-font-weight:var(--_atomics-Text-variant-font-weight);}.css-kiko3w[data-has-variant-line-height]{--atomics-text-variant-line-height:var(--_atomics-Text-variant-line-height);}.css-kiko3w[data-has-variant-color]{--atomics-text-variant-color:var(--_atomics-Text-variant-color);}.css-kiko3w[data-has-variant-letter-spacing]{letter-spacing:var(--_atomics-Text-variant-letter-spacing);}.css-kiko3w[data-has-variant-text-transform]{text-transform:var(--_atomics-Text-variant-text-transform);}@media (min-width: 48rem){.css-kiko3w[data-has-variant-font-size-at-mobile-and-up]{--atomics-text-variant-font-size:var(--_atomics-Text-vLine truncated
|
||||||
|
--phx-color-background-secondary
|
||||||
|
);background-color:var(--atomics-skeleton-background-color);border-radius:var(--phx-radius-core-4);}@media (prefers-reduced-motion: no-preference){.css-dxn1xs{-webkit-animation:skeleton-pulse 1600ms linear infinite;animation:skeleton-pulse 1600ms linear infinite;}}}@layer phx.components{.css-dxn1xs{--atomics-skeleton-row-height:1lh;height:calc(
|
||||||
|
var(--atomics-skeleton-row-height) - var(--atomics-skeleton-row-gap)
|
||||||
|
);margin-bottom:calc(var(--atomics-skeleton-row-gap) / 2);margin-top:calc(var(--atomics-skeleton-row-gap) / 2);}.css-dxn1xs[data-is-last-row]{width:60%;}}@property --_atomics-LineSkeleton-row-height{syntax:"*";inherits:false;}@property --_atomics-LineSkeleton-row-height-at-mobile-and-up{syntax:"*";inherits:false;}@property --_atomics-LineSkeleton-row-height-at-xs-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-LineSkeleton-row-height-at-sm-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-LineSkeleton-row-height-at-lg-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-LineSkeleton-row-gap{syntax:"*";inherits:false;}@property --_atomics-LineSkeleton-row-gap-at-mobile-and-up{syntax:"*";inherits:false;}@property --_atomics-LineSkeleton-row-gap-at-xs-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-LineSkeleton-row-gap-at-sm-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-LineSkeleton-row-gap-at-lg-desktop-and-up{syntax:"*";inherits:false;}@layer phx.components{.css-dxn1xs[data-has-row-height]{--atomics-skeleton-row-height:var(--_atomics-LineSkeleton-row-height);}.css-dxn1xs[data-has-row-gap]{--atomics-skeleton-row-gap:var(--_atomics-LineSkeleton-row-gap);}@media (min-width: 48rem){.css-dxn1xs[data-has-row-height-at-mobile-and-up]{--atomics-skeleton-row-height:var(--_atomics-LineSkeleton-row-height-at-mobile-and-up);}.css-dxn1xs[data-has-row-gap-at-mobile-and-up]{--atomics-skeleton-row-gap:var(--_atomics-LineSkeleton-row-gap-at-mobile-and-up);}}@media (min-width: 57rem){.css-dxn1xs[data-has-row-height-at-xs-desktop-and-up]{--atomics-skeleton-row-height:var(--_atomics-LineSkeleton-row-height-at-xs-desktop-and-up);}.css-dxn1xs[data-has-row-gap-at-xs-desktop-and-up]{--atomics-skeleton-row-gap:var(--_atomics-LineSkeleton-row-gap-at-xs-desktop-and-up);}}@media (min-width: 70.1875rem){.css-dxn1xs[data-has-row-height-at-sm-desktop-and-up]{--atomics-skeleton-row-height:var(--_atomics-LineSkeleton-row-height-at-sm-desktop-and-up);}.css-dxn1xs[data-has-row-gap-at-sm-desktop-and-up]{--atomics-skeleton-row-gap:var(--_atomics-LineSkeleton-row-gap-at-sm-desktop-and-up);}}@media (min-width: 83.4375rem){.css-dxn1xs[data-has-row-height-at-lg-desktop-and-up]{--atomics-skeleton-row-height:var(--_atomics-LineSkeleton-row-height-at-lg-desktop-and-up);}.css-dxn1xs[data-has-row-gap-at-lg-desktop-and-up]{--atomics-skeleton-row-gap:var(--_atomics-LineSkeleton-row-gap-at-lg-desktop-and-up);}}}</style><div data-is-last-row="" class="css-dxn1xs"></div></div><div class="atomics-Flex-root css-14dle1h" data-testid="flex" style="--_atomics-Flex-gap:var(--phx-space-core-16);--_atomics-Flex-inline:flex" data-has-gap=""><div class="atomics-Flex-root atomics-Skeleton-root atomics-Text-root singleTopicStories_topicsStoriesTextSkeleton__YgKrr css-kiko3w" data-testid="flex" style="--_atomics-Flex-direction:column;--_atomics-Flex-inline:flex;--_atomics-Text-font-size:var(--phx-font-core-size-16);--_atomics-Text-line-height:var(--phx-font-core-line-height-120)" data-has-direction="" data-skeleton-variant="line" data-has-font-size="" data-has-line-height=""><div style="--_atomics-LineSkeleton-row-gap:var(--phx-space-core-6)" data-has-row-gap="" class="css-dxn1xs"></div><div style="--_atomics-LineSkeleton-row-gap:var(--phx-space-core-6)" data-has-row-gap="" class="css-dxn1xs"></div><div data-is-last-row="" style="--_atomics-LineSkeleton-row-gap:var(--phx-space-core-6)" data-has-row-gap="" class="css-dxn1xs"></div></div><style data-emotion="css addh1d">@layer phx.components{@-webkit-keyframes skeleton-pulse{0%,100%{opacity:1;}50%{opacity:0.3;}}@keyframes skeleton-pulse{0%,100%{opacity:1;}50%{opacity:0.3;}}.css-addh1d{--atomics-skeleton-background-color:var(
|
||||||
|
--phx-color-background-secondary
|
||||||
|
);background-color:var(--atomics-skeleton-background-color);border-radius:var(--phx-radius-core-4);}@media (prefers-reduced-motion: no-preference){.css-addh1d{-webkit-animation:skeleton-pulse 1600ms linear infinite;animation:skeleton-pulse 1600ms linear infinite;}}}@layer phx.components{.css-addh1d{aspect-ratio:3/2;}}@property --_atomics-BoxSkeleton-aspect-ratio{syntax:"*";inherits:false;}@layer phx.components{.css-addh1d[data-has-aspect-ratio]{aspect-ratio:var(--_atomics-BoxSkeleton-aspect-ratio);}}@property --_atomics-BoxSkeleton-width{syntax:"*";inherits:false;}@property --_atomics-BoxSkeleton-width-at-mobile-and-up{syntax:"*";inherits:false;}@property --_atomics-BoxSkeleton-width-at-xs-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-BoxSkeleton-width-at-sm-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-BoxSkeleton-width-at-lg-desktop-and-up{syntax:"*";inherits:false;}@layer phx.components{.css-addh1d[data-has-width]{width:var(--_atomics-BoxSkeleton-width);}@media (min-width: 48rem){.css-addh1d[data-has-width-at-mobile-and-up]{width:var(--_atomics-BoxSkeleton-width-at-mobile-and-up);}}@media (min-width: 57rem){.css-addh1d[data-has-width-at-xs-desktop-and-up]{width:var(--_atomics-BoxSkeleton-width-at-xs-desktop-and-up);}}@media (min-width: 70.1875rem){.css-addh1d[data-has-width-at-sm-desktop-and-up]{width:var(--_atomics-BoxSkeleton-width-at-sm-desktop-and-up);}}@media (min-width: 83.4375rem){.css-addh1d[data-has-width-at-lg-desktop-and-up]{width:var(--_atomics-BoxSkeleton-width-at-lg-desktop-and-up);}}}</style><div data-skeleton-variant="box" style="--_atomics-BoxSkeleton-aspect-ratio:3 / 2;--_atomics-BoxSkeleton-width:100px" data-has-aspect-ratio="" data-has-width="" class="atomics-Skeleton-root css-addh1d"></div></div><style data-emotion="css 11i9wh9">@layer phx.components{.css-11i9wh9{-webkit-align-self:auto;-ms-flex-item-align:auto;align-self:auto;box-sizing:border-box;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto;}}@property --_atomics-FlexItem-align-self{syntax:"*";inherits:false;}@property --_atomics-FlexItem-align-self-at-mobile-and-up{syntax:"*";inherits:false;}@property --_atomics-FlexItem-align-self-at-xs-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-FlexItem-align-self-at-sm-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-FlexItem-align-self-at-lg-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-FlexItem-basis{syntax:"*";inherits:false;}@property --_atomics-FlexItem-basis-at-mobile-and-up{syntax:"*";inherits:false;}@property --_atomics-FlexItem-basis-at-xs-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-FlexItem-basis-at-sm-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-FlexItem-basis-at-lg-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-FlexItem-grow{syntax:"*";inherits:false;}@property --_atomics-FlexItem-grow-at-mobile-and-up{syntax:"*";inherits:false;}@property --_atomics-FlexItem-grow-at-xs-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-FlexItem-grow-at-sm-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-FlexItem-grow-at-lg-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-FlexItem-shrink{syntax:"*";inherits:false;}@property --_atomics-FlexItem-shrink-at-mobile-and-up{syntax:"*";inherits:false;}@property --_atomics-FlexItem-shrink-at-xs-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-FlexItem-shrink-at-sm-desktop-and-up{syntax:"*";inherits:false;}@property --_atomics-FlexItem-shrink-at-lg-desktop-and-up{syntax:"*";inherits:false;}@layer phx.components{.css-11i9wh9[data-has-align-self]{-webkit-align-self:var(--_atomics-FlexItem-align-self);-ms-flex-item-align:var(--_atomics-FlexItem-align-self);align-self:var(--_atomics-FlexItem-align-self);}.css-11i9wh9[data-has-basis]{-webkit-flex-basis:var(--_atomics-FlexItem-basis);-ms-flex-preferred-size:var(--_atomics-FlexItem-basis);flex-basis:var(--_atomics-FlexItem-basis);}.css-11i9wh9[data-has-grow]{-webkit-box-flex:var(--_atomics-FlexItem-grow);-webkit-flex-grow:var(--_atomics-FlexItem-grow);-ms-flex-positive:var(--_atomics-FlexItem-grow);flex-grow:var(--_atomics-FlexItem-grow);}.css-11i9wh9[data-has-shrink]{-webkit-flex-shrink:var(--_atomics-FlexItem-shrink);-ms-flex-negative:var(--_atomics-FlexItem-shrink);flex-shrink:var(--_atomics-FlexItem-shrink);}@media (min-width: 48rem){.css-11i9wh9[data-has-align-self-at-mobile-and-up]{-webkit-align-self:var(--_atomics-FlexItem-align-self-at-mobile-and-up);-ms-flex-item-align:var(--_atomics-FlexItem-align-self-at-mobile-and-up);align-self:var(--_atomics-FlexItem-align-self-at-mobile-and-up);}.css-11i9wh9[data-has-basis-at-mobile-and-up]{-webkit-flex-basis:var(--_atomics-FlexItem-basis-at-mobile-and-up);-ms-flex-preferred-size:var(--_atomics-FlexItem-basis-at-mobile-and-up);flex-basis:var(--_atomics-FlexItem-basis-at-mobile-and-up);}.css-11i9wh9[data-has-grow-at-mobile-and-up]{-webkit-box-flex:var(--_atomics-FLine truncated
|
||||||
BIN
Binary file not shown.
|
After Width: | Height: | Size: 3.0 KiB |
+10
@@ -0,0 +1,10 @@
|
|||||||
|
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1626],{3556:function(e,t,r){"use strict";r.r(t),r.d(t,{UserBrowserSession:function(){return d}});let n=(e,t,r)=>{let n=r?`[${r}] - ${e}: ${t}`:`[@bloomberg/media.browser-storage] - ${e}: ${t}`;window?.newrelic?.noticeError(n)};var i=r(31955);class o{cookies=i.Z;get length(){return Object.keys(this.cookies.get()).length}clear(){Object.keys(this.cookies.get()).forEach(e=>{this.cookies.remove(e)})}getItem(e){let t=this.cookies.get(e);return void 0===t?null:t}key(e){return Object.keys(this.cookies.get())[e]||null}removeItem(e){this.cookies.remove(e)}setItem(e,t){this.cookies.set(e,t,{expires:7})}}let s="__bb-media",a=()=>{if("undefined"!=typeof window)return window[s]||(window[s]={}),window[s];throw Error(`${s} store on Window object is undefined!`)};class u{get length(){return Object.keys(a()).length}clear(){let e=a();Object.keys(e).forEach(t=>{delete e[t]})}getItem(e){let t=a()[e];return void 0===t?null:t}key(e){return Object.keys(a())[e]||null}removeItem(e){delete a()[e]}setItem(e,t){a()[e]=t}}let c=e=>{switch(e){case"window":return new u;case"local":return localStorage;case"session":return sessionStorage;default:return new o}};class l{type;storage;reportErrorsToNewRelic=!1;storageContext;constructor(e,t){this.type=e,this.storage=c(e),this.reportErrorsToNewRelic=t?.reportErrorsToNewRelic??!1,this.storageContext=t?.storageContext}handleErrorReporting(e,t,r){this.reportErrorsToNewRelic&&n(`Failed to ${e} ${t} in ${this.type}Storage.`,r,this.storageContext)}setItem(e,t){try{return this.storage.setItem(e,JSON.stringify(t)),!0}catch(t){return this.handleErrorReporting("set",e,t),!1}}getItem(e){try{let t=this.storage.getItem(e);if(!t)return null;try{return JSON.parse(t)}catch(e){return t}}catch(t){return this.handleErrorReporting("get",e,t),null}}removeItem(e){try{return this.storage.removeItem(e),!0}catch(t){return this.handleErrorReporting("remove",e,t),!1}}}let f=e=>{switch(e){case"agentId":return"agent_id";case"gatehouseId":return"gatehouse_id";case"sessionId":return"session_id";case"sessionKey":return"session_key";case"userData":return"_user-data";case"bregUid":return"_breg-uid";case"bregUser":return"_breg-user";default:return e}};class d{windowBrowserStorage;sessionBrowserStorage;localBrowserStorage;cookiesBrowserStorage;constructor(){this.windowBrowserStorage=new l("window",{reportErrorsToNewRelic:!0,storageContext:"UserBrowserSession-Window"}),this.sessionBrowserStorage=new l("session",{reportErrorsToNewRelic:!0,storageContext:"UserBrowserSession-Session"}),this.localBrowserStorage=new l("local",{reportErrorsToNewRelic:!0,storageContext:"UserBrowserSession-Local"}),this.cookiesBrowserStorage=new l("cookies",{reportErrorsToNewRelic:!0,storageContext:"UserBrowserSession-Cookies"})}setAttribute(e,t){this.windowBrowserStorage.setItem(e,t),this.sessionBrowserStorage.setItem(e,t),this.localBrowserStorage.setItem(e,t)}getAttribute(e){return this.windowBrowserStorage.getItem(e)||this.sessionBrowserStorage.getItem(e)||this.localBrowserStorage.getItem(e)||this.cookiesBrowserStorage.getItem(f(e))}clearAttribute(e){this.windowBrowserStorage.removeItem(e),this.sessionBrowserStorage.removeItem(e),this.localBrowserStorage.removeItem(e),this.cookiesBrowserStorage.removeItem(f(e))}setAgentId(e){this.setAttribute("agentId",e)}setSessionId(e){this.setAttribute("sessionId",e)}setSessionKey(e){this.setAttribute("sessionKey",e)}setGatehouseId(e){this.setAttribute("gatehouseId",e)}setBregUid(e){this.setAttribute("bregUid",e)}getBregUid(){return this.getAttribute("bregUid")}getIdentity(){return{agentId:this.getAttribute("agentId")??void 0,sessionId:this.getAttribute("sessionId")??void 0,sessionKey:this.getAttribute("sessionKey")??void 0,gatehouseId:this.getAttribute("gatehouseId")??void 0}}removeAgentId(){this.clearAttribute("agentId")}removeSessionId(){this.clearAttribute("sessionId")}removeSessionKey(){this.clearAttribute("sessionKey")}removeGatehouseId(){this.clearAttribute("gatehouseId")}removeBregUid(){this.clearAttribute("bregUid")}clearIdentity(){this.removeAgentId(),this.removeSessionId(),this.removeSessionKey(),this.removeGatehouseId()}setUserData(e){try{let t=JSON.stringify(e);this.setAttribute("userData",t)}catch(e){console.error("Failed to serialize SubsData for storage in UserBrowserSession",e)}}getUserData(){let e=this.getAttribute("userData");if(!e)return null;try{let t=JSON.parse(e);if(t&&"object"==typeof t)return t}catch{}return null}removeUserData(){this.clearAttribute("userData")}setBregUser(e){try{let t=JSON.stringify(e);this.setAttribute("bregUser",t)}catch(e){console.error("Failed to serialize RegProfile for storage in UserBrowserSession",e)}}getBregUser(){let e=this.getAttribute("bregUser");if(!e)return null;try{let t=JSON.parse(e);if(t&&"object"==typeof t)return t}catch{}return null}removeBregUser(){this.clearAttribute("bregUser")}}},53867:function(e,t,r){"use strict";r.d(t,{C2:function(){return s},uH:function(){return a}});var n=r(85893);r(67294);vLine truncated
|
||||||
|
window.dataLayer = window.dataLayer || [];
|
||||||
|
window.dataLayer.push(${JSON.stringify(e)});
|
||||||
|
`},type:r,strategy:t}),(0,n.jsx)(o(),{id:"gtm",strategy:"afterInteractive",dangerouslySetInnerHTML:{__html:`
|
||||||
|
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
|
||||||
|
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
|
||||||
|
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
|
||||||
|
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
|
||||||
|
})(window,document,'script','dataLayer','GTM-MNTH5N');
|
||||||
|
`},type:r})]})}function a(e,t="",r="",n=""){if(!window.dataLayer){console.warn("You must include <GtmScript /> on your page to use #trackClickEvent");return}window.dataLayer.push({event:e,eventCategory:n||"engagement",eventAction:r||"click",eventLabel:t||e})}r(11163)},59628:function(e,t,r){"use strict";r.r(t),r.d(t,{RegUIClient:function(){return c()},RegUIClientContext:function(){return s},RegUIClientProvider:function(){return l},RegUIEvent:function(){return i},useRegUIClient:function(){return f}});var n,i,o=r(67294);let s=(0,o.createContext)({session:{isRegUIClientLoaded:!1,isLoggedIn:!1,isBBGSubscriber:!1,isBWSubscriber:!1,isNewsletterSubscriber:!1,subscriberType:void 0,user:null,userId:null,userInfo:null},client:null});var a=r(85893),u=r(22358),c=r.n(u);(n=i||(i={})).InfoReady="reg-user-info-ready",n.NotSignedIn="reg-user-not-signed-in",n.SignedIn="reg-user-signed-in";let l=({children:e,onUserInfoReady:t,regUIClientOptions:r})=>{let[n,u]=(0,o.useState)(null),[l,f]=(0,o.useState)({isRegUIClientLoaded:!1,isLoggedIn:!1,isBBGSubscriber:!1,isBWSubscriber:!1,isNewsletterSubscriber:!1,subscriberType:void 0,user:null,userId:null,userInfo:null});return(0,o.useEffect)(()=>{function e(e){let r;if(!window.__bloomberg__?.regUIClient)return;let n=e?.detail,i=window.__bloomberg__.regUIClient.isLoggedIn()??!1,o=window.__bloomberg__.regUIClient.getUserInfo()??null;n?.isBBGSubscriber||n?.isTerminalSubscriber?r="BBG":n?.isBWSubscriber?r="BW":n?.isNewsletterSubscriber&&(r="Newsletter"),o&&!o.subscription&&r&&(o={...o,subscription:{type:r,number:void 0}});let s=(window.__bloomberg__.regUIClient.isBBGSubscriber()??!1)||"BBG"===r,a=(window.__bloomberg__.regUIClient.isBWSubscriber()??!1)||"BW"===r,u=(window.__bloomberg__.regUIClient.isNewsletterSubscriber()??!1)||"Newsletter"===r,c=window.__bloomberg__.regUIClient.getUserData(),l=window.__bloomberg__.regUIClient.getSubscriberData(),d=window.__bloomberg__.regUIClient.getEntitlementFeatures(),p=window.__bloomberg__.regUIClient.getSubscriberType(),h={isRegUIClientLoaded:!0,isLoggedIn:i,user:c,userId:o?.userId||null,isBBGSubscriber:s,isBWSubscriber:a,isNewsletterSubscriber:u,subscriberType:p,subscriberData:l?l.subscriberData:void 0,subscriptionsData:l?l.subscriptionsData:void 0,entitlementFeatures:d,userInfo:o};f(h),t?.(window.__bloomberg__.regUIClient,h)}window.addEventListener(i.SignedIn,e),window.addEventListener(i.NotSignedIn,e),window.__bloomberg__=window.__bloomberg__||{},window.__bloomberg__.regUIClient&&r&&console.warn("Constructor options were passed to reg-ui-client, but had already been instantiated."),window.__bloomberg__.regUIClient=window.__bloomberg__.regUIClient||new(c())([],r),window.__bloomberg__.regUIClient.initialize();let n=!1,o=setTimeout(()=>{n||window.newrelic?.addPageAction("regUIClientUserInfoReadyProviderTimeout",{timeoutMs:5e3})},5e3);return window.__bloomberg__.regUIClient.onUserInfoReady(t=>{n=!0,clearTimeout(o),e({detail:t})}),u(window.__bloomberg__.regUIClient),()=>{clearTimeout(o),window.removeEventListener(i.SignedIn,e),window.removeEventListener(i.NotSignedIn,e),window.__bloomberg__?.regUIClient?.cleanup()}},[]),(0,a.jsx)(s.Provider,{value:{client:n,session:l},children:e})};function f(){return(0,o.useContext)(s)}},38098:function(e,t,r){"use strict";"undefined"!=typeof window&&r(66477)},53555:function(e,t,r){"use strict";if("undefined"!=typeof window){var n=r(8042);window.Promise=window.Promise?window.Promise:n}},10646:function(e){var t;t=function(){"use strict";function e(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)e[n]=r[n]}return e}return function t(r,n){function i(t,i,o){if("undefined"!=typeof document){"number"==typeof(o=e({},n,o)).expires&&(o.expires=new Date(Date.now()+864e5*o.expires)),o.expires&&(o.expires=o.expires.toUTCString()),t=encodeURIComponent(t).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape);var s="";for(var a in o)o[a]&&(s+="; "+a,!0!==o[a]&&(s+="="+o[a].split(";")[0]));return document.cookie=t+"="+r.write(i,t)+s}}return Object.create({set:i,get:function(e){if("undefined"!=typeof document&&(!arguments.length||e)){for(var t=document.cookie?document.cookie.split("; "):[],n={},i=0;i<t.length;i++){var o=t[i].split("="),s=o.slice(1).join("=");try{var a=decodeURIComponent(o[0]);if(n[a]=r.read(s,a),e===a)break}catch(e){}}return e?n[e]:n}},remove:function(t,r){i(t,"",e({},r,{expires:-1}))},withAttributes:function(r){return t(this.converter,e({},this.attributes,r))},withConverter:function(r){return t(e({},this.converter,r),this.attributes)}},{attributes:{value:Object.freeze(n)},converter:{value:Object.freeze(r)}})}({read:function(e){return'"'===e[0]&&(e=e.slice(1,-1)),e.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent)},write:function(e){return encodeURIComponent(e).replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,decodeURIComponent)}},{path:"/"})},e.exports=t()},31730:function(e){var t,r,n,i,o,s=/^(?:0|[1-9]\d*)$/,a=Object.prototype,u=a.hasOwnProperty,c=a.toString,l
Line truncated
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1664],{38199:function(e,t){"use strict";var n,r,o,u;Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{ACTION_FAST_REFRESH:function(){return s},ACTION_NAVIGATE:function(){return f},ACTION_PREFETCH:function(){return c},ACTION_REFRESH:function(){return l},ACTION_RESTORE:function(){return a},ACTION_SERVER_ACTION:function(){return d},ACTION_SERVER_PATCH:function(){return i},PrefetchCacheEntryStatus:function(){return r},PrefetchKind:function(){return n},isThenable:function(){return p}});let l="refresh",f="navigate",a="restore",i="server-patch",c="prefetch",s="fast-refresh",d="server-action";function p(e){return e&&("object"==typeof e||"function"==typeof e)&&"function"==typeof e.then}(o=n||(n={})).AUTO="auto",o.FULL="full",o.TEMPORARY="temporary",(u=r||(r={})).fresh="fresh",u.reusable="reusable",u.expired="expired",u.stale="stale",("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},87195:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"getDomainLocale",{enumerable:!0,get:function(){return o}});let r=n(98337);function o(e,t,o,u){{let l=n(15183).normalizeLocalePath,f=n(4166).detectDomainLocale,a=t||l(e,o).detectedLocale,i=f(u,void 0,a);if(i){let t="http"+(i.http?"":"s")+"://",n=a===i.defaultLocale?"":"/"+a;return""+t+i.domain+(0,r.normalizePathTrailingSlash)(""+n+e)}return!1}}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},98342:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return g}});let r=n(38754),o=n(85893),u=r._(n(67294)),l=n(36075),f=n(53955),a=n(48041),i=n(99903),c=n(65490),s=n(81928),d=n(60257),p=n(84229),h=n(87195),b=n(89470),y=n(38199),_=new Set;function v(e,t,n,r,o,u){if(u||(0,f.isLocalURL)(t)){if(!r.bypassPrefetchedCheck){let o=t+"%"+n+"%"+(void 0!==r.locale?r.locale:"locale"in e?e.locale:void 0);if(_.has(o))return;_.add(o)}(async()=>u?e.prefetch(t,o):e.prefetch(t,n,r))().catch(e=>{})}}function O(e){return"string"==typeof e?e:(0,a.formatUrl)(e)}let g=u.default.forwardRef(function(e,t){let n,r;let{href:a,as:_,children:g,prefetch:P=null,passHref:j,replace:C,shallow:m,scroll:E,locale:M,onClick:T,onMouseEnter:R,onTouchStart:L,legacyBehavior:A=!1,...k}=e;n=g,A&&("string"==typeof n||"number"==typeof n)&&(n=(0,o.jsx)("a",{children:n}));let I=u.default.useContext(s.RouterContext),x=u.default.useContext(d.AppRouterContext),S=null!=I?I:x,N=!I,U=!1!==P,w=null===P?y.PrefetchKind.AUTO:y.PrefetchKind.FULL,{href:K,as:F}=u.default.useMemo(()=>{if(!I){let e=O(a);return{href:e,as:_?O(_):e}}let[e,t]=(0,l.resolveHref)(I,a,!0);return{href:e,as:_?(0,l.resolveHref)(I,_):t||e}},[I,a,_]),H=u.default.useRef(K),z=u.default.useRef(F);A&&(r=u.default.Children.only(n));let D=A?r&&"object"==typeof r&&r.ref:t,[V,q,B]=(0,p.useIntersection)({rootMargin:"200px"}),G=u.default.useCallback(e=>{(z.current!==F||H.current!==K)&&(B(),z.current=F,H.current=K),V(e),D&&("function"==typeof D?D(e):"object"==typeof D&&(D.current=e))},[F,D,K,B,V]);u.default.useEffect(()=>{S&&q&&U&&v(S,K,F,{locale:M},{kind:w},N)},[F,K,q,M,U,null==I?void 0:I.locale,S,N,w]);let Y={ref:G,onClick(e){A||"function"!=typeof T||T(e),A&&r.props&&"function"==typeof r.props.onClick&&r.props.onClick(e),S&&!e.defaultPrevented&&function(e,t,n,r,o,l,a,i,c){let{nodeName:s}=e.currentTarget;if("A"===s.toUpperCase()&&(function(e){let t=e.currentTarget.getAttribute("target");return t&&"_self"!==t||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||e.nativeEvent&&2===e.nativeEvent.which}(e)||!c&&!(0,f.isLocalURL)(n)))return;e.preventDefault();let d=()=>{let e=null==a||a;"beforePopState"in t?t[o?"replace":"push"](n,r,{shallow:l,locale:i,scroll:e}):t[o?"replace":"push"](r||n,{scroll:e})};c?u.default.startTransition(d):d()}(e,S,K,F,C,m,E,M,N)},onMouseEnter(e){A||"function"!=typeof R||R(e),A&&r.props&&"function"==typeof r.props.onMouseEnter&&r.props.onMouseEnter(e),S&&(U||!N)&&v(S,K,F,{locale:M,priority:!0,bypassPrefetchedCheck:!0},{kind:w},N)},onTouchStart:function(e){A||"function"!=typeof L||L(e),A&&r.props&&"function"==typeof r.props.onTouchStart&&r.props.onTouchStart(e),S&&(U||!N)&&v(S,K,F,{locale:M,priority:!0,bypassPrefetchedCheck:!0},{kind:w},N)}};if((0,i.isAbsoluteUrl)(F))Y.href=F;else if(!A||j||"a"===r.type&&!("href"in r.props)){let e=void 0!==M?M:null==I?void 0:I.locale,t=(null==I?void 0:I.isLocaleDomain)&&(0,h.getDomainLocale)(F,e,null==I?void 0:I.locales,null==I?void 0:I.domainLocales);Y.href=t||(0,b.addBasePath)((0,c.addLocale)(F,e,null==I?void 0:I.defaultLocale))}return A?u.dLine truncated
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1709],{23324:function(e,t,i){"use strict";i.d(t,{Z:function(){return s}});class r{watchlistServiceUrl;constructor({watchlistServiceUrl:e}){this.watchlistServiceUrl=e}getUserWatchlists({bconnectId:e,userToken:t,watchlistId:i}){let r=new URL(`${this.watchlistServiceUrl}/get/${e}`),s=new URLSearchParams;return void 0!==i&&s.append("portId",`${i}`),r.search=s.toString(),this.#e(r,{method:"GET",credentials:"include",headers:void 0!==t?{userKey:t}:void 0})}getUserHoldingsSummary({bconnectId:e,userToken:t,tickers:i=[]}){let r={...void 0!==t?{userKey:t}:void 0,"Content-Type":"application/json"};return this.#e(`${this.watchlistServiceUrl}/user-holdings-summary/${e}`,{method:"POST",credentials:"include",headers:r,body:JSON.stringify({tickers:i})})}getWatchlist({bconnectId:e,userToken:t,watchlistId:i}){return this.#e(`${this.watchlistServiceUrl}/get/${e}/${i}`,{method:"GET",credentials:"include",headers:void 0!==t?{userKey:t}:void 0})}createWatchlist({bconnectId:e,userToken:t,watchlistData:i}){let r={...void 0!==t?{userKey:t}:void 0,"Content-Type":"application/json"};return this.#e(`${this.watchlistServiceUrl}/create/${e}`,{method:"POST",credentials:"include",headers:r,body:JSON.stringify(i)})}addTickerToWatchlists({bconnectId:e,userToken:t,ticker:i,watchlistIds:r}){return this.#e(`${this.watchlistServiceUrl}/create/${e}/${r.join(",")}/${i}`,{method:"POST",credentials:"include",headers:void 0!==t?{userKey:t}:void 0})}removeTickerFromWatchlists({bconnectId:e,userToken:t,ticker:i,watchlistIds:r}){return this.#e(`${this.watchlistServiceUrl}/delete/${e}/${r.join(",")}/${i}`,{method:"DELETE",credentials:"include",headers:void 0!==t?{userKey:t}:void 0})}updateWatchlist({bconnectId:e,userToken:t,watchlistId:i,watchlistData:r}){let s={...void 0!==t?{userKey:t}:void 0,"Content-Type":"application/json"};return this.#e(`${this.watchlistServiceUrl}/update/${e}/${i}`,{method:"POST",credentials:"include",headers:s,body:JSON.stringify(r)})}deleteWatchlist({bconnectId:e,userToken:t,watchlistId:i}){return this.#e(`${this.watchlistServiceUrl}/delete/${e}/${i}`,{method:"DELETE",credentials:"include",headers:void 0!==t?{userKey:t}:void 0})}getUserPreferences({bconnectId:e,userToken:t}){return this.#e(`${this.watchlistServiceUrl}/user-preference/${e}/`,{method:"GET",credentials:"include",headers:void 0!==t?{userKey:t}:void 0})}updateUserPreferences({bconnectId:e,userToken:t,alertsNotificationsEnabled:i,alertsEmailsEnabled:r,dashboardView:s}){let n={...void 0!==t?{userKey:t}:void 0,"Content-Type":"application/json"},c=Object.entries({alertsNotificationsEnabled:i,alertsEmailsEnabled:r,dashboardView:s}).reduce((e,[t,i])=>void 0!==i?{...e,[t]:i}:e,{});return this.#e(`${this.watchlistServiceUrl}/user-preference/${e}/`,{method:"POST",credentials:"include",headers:n,body:JSON.stringify(c)})}getWatchlistCompare({bconnectId:e,userToken:t,watchlistId:i}){return this.#e(`${this.watchlistServiceUrl}/watchlist-compare/${e}/${i}`,{method:"GET",credentials:"include",headers:void 0!==t?{userKey:t}:void 0})}updateWatchlistCompare({bconnectId:e,userToken:t,watchlistId:i,watchlistCompareData:r}){let s={...void 0!==t?{userKey:t}:void 0,"Content-Type":"application/json"};return this.#e(`${this.watchlistServiceUrl}/watchlist-compare/${e}/${i}`,{method:"POST",credentials:"include",headers:s,body:JSON.stringify(r)})}getWatchlistLots({bconnectId:e,userToken:t,watchlistId:i}){return this.#e(`${this.watchlistServiceUrl}/get-lots/${e}/${i}`,{method:"GET",credentials:"include",headers:void 0!==t?{userKey:t}:void 0})}#e(...e){let[t,i]=e;return fetch(t,i).then(async e=>{let{status:t,ok:i,statusText:r}=e,s=e.clone(),n=await e.json().catch(()=>s.text());return i?Promise.resolve({status:t,data:n,message:r}):Promise.reject({status:t,data:n,message:r})})}}var s=r},36136:function(e,t,i){"use strict";i.d(t,{r:function(){return d}});var r=i(67294),s=i(25434),n=i(37018),c=i(77536);i(58848);var a={default:"media-ui-Link_default-KrHSq06NXRI-",_default:"media-ui-Link_default-KrHSq06NXRI-"};let o=["a","button"],d=r.forwardRef(function(e,t){let{as:i="a",variant:d="default",children:l,name:h="link",unstyled:u,...v}=e,f=(0,s.f)(h),S=(0,c.Sh)([a[d]],{...e,unstyled:u,name:h});return r.createElement(n.o,{...v,className:S,ref:t,"data-component":f,allowedTags:o,as:i},l)})},37018:function(e,t,i){"use strict";i.d(t,{o:function(){return c}});var r=i(67294),s=i(25434),n=i(77536);let c=r.forwardRef(function(e,t){let{allowedTags:i=["div"],as:c,children:a,...o}=e,{name:d}=o,l=c||"div";if(!i.includes(l))throw Error("Tag <".concat(c,"> is not allowed for this <Tagged /> instance: allowed tags are ").concat(i));let h=c||"div",u=(0,s.f)(d||"");return r.createElement(h,{className:(0,n.Sh)([],o),"data-component":u,...o,ref:t},a)})},58848:function(){}}]);
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1860],{67917:function(e,t,r){"use strict";r.d(t,{ik:function(){return o},sk:function(){return n}});let n=!1,i=/\s+/gm;function o(e){return e.replace(i," ")}},7438:function(e,t,r){"use strict";r.d(t,{z:function(){return u}});var n=r(67294),i=r(8599),o=r(77536);r(74766);var s={"roundedButton-phoenix":"media-ui-RoundedButton_roundedButton-phoenix-fI40QjV8msE-",small:"media-ui-RoundedButton_small-4uGdyeL41YA-",default:"media-ui-RoundedButton_default-KSbLMQQUxEk-",hasIcon:"media-ui-RoundedButton_hasIcon-pA-fzIwcl9s-",large:"media-ui-RoundedButton_large-Ylf54m9mmF8-",light:"media-ui-RoundedButton_light-ecL1xA3tWQ0-",outline:"media-ui-RoundedButton_outline-L-sLv9ivvaE-",fill:"media-ui-RoundedButton_fill-a2vFCr4YQIA-",dark:"media-ui-RoundedButton_dark-4tzyzSMv4yQ-",smallIcon:"media-ui-RoundedButton_smallIcon-x1cG8-ig6mI-",roundedButton___phoenix:"media-ui-RoundedButton_roundedButton-phoenix-fI40QjV8msE-",_default:"media-ui-RoundedButton_default-KSbLMQQUxEk-"};let u=n.forwardRef(function(e,t){let{children:r,name:u="roundedButton",version:c="phoenix",colorMode:l="light",appearance:h="outline",size:f="default",...m}=e,d=!!(e.Icon&&"none"!==e.iconPosition),p=(0,o.Sh)([s["roundedButton-".concat(c)],s[l],s[h],s[f],s.smallIcon,{[s.hasIcon]:d}],{unstyled:e.unstyled,className:e.className,name:e.name});return n.createElement(i.zx,{...m,version:c,className:p,ref:t,name:u},r)})},83524:function(e,t,r){"use strict";r.d(t,{x:function(){return u}});var n=r(67294),i=r(67673),o=r(41780),s=r(77536);r(82793);let u=n.forwardRef(function(e,t){let{className:r,name:u="toast-success",open:c,text:l,autoHideDuration:h,unstyled:f,inline:m=!1,onClose:d}=e,p=(0,s.Sh)([r,"media-ui-ToastSuccess_toastSuccess-nvHCoX8SI28-"],{...e,unstyled:f,name:u});return n.createElement(o.F,{autoHideDuration:h,Icon:n.createElement(i.yv,{className:"media-ui-ToastSuccess_toastSuccessIcon-fhF5NBkNQpE-"}),className:p,maxSize:"full",name:u,open:c,onClose:d,position:{horizontal:"center",vertical:"bottom"},ref:t,variant:"message",inline:m},l)})},90354:function(e,t,r){"use strict";r.d(t,{Y:function(){return t6}});var n,i,o,s,u,c=r(67294),l=r(99104),h=r(24229),f=r(70390),m=r(77536),d=r(12065),p=r(60006),g=r(93075),v=r(1371),E=r(29545);r(38688);var b={wrapper:"media-ui-Overlay_wrapper-IzUR8y5HyZw-",hiddenWrapper:"media-ui-Overlay_hiddenWrapper-UuMYm-kTyTc-",header:"media-ui-Overlay_header--SJNqPwUJfI-",headerWrapper:"media-ui-Overlay_headerWrapper-9ZxEK6l7q3g-",headerIcon:"media-ui-Overlay_headerIcon-6QQ8n-t6BV8-",withIcon:"media-ui-Overlay_withIcon-amCI8aiikyw-",mobileAnchor:"media-ui-Overlay_mobileAnchor-4PJw-CbaDDU-",dismissOverlay:"media-ui-Overlay_dismissOverlay-0Pc7hsD-ETc-",mobileOverlayWrapper:"media-ui-Overlay_mobileOverlayWrapper-fKy8NlpcYaU-",body:"media-ui-Overlay_body-cqXHjm-p6N4-"},y=function(){return(y=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var i in t=arguments[r])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e}).apply(this,arguments)};function T(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&0>t.indexOf(n)&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var i=0,n=Object.getOwnPropertySymbols(e);i<n.length;i++)0>t.indexOf(n[i])&&Object.prototype.propertyIsEnumerable.call(e,n[i])&&(r[n[i]]=e[n[i]]);return r}"function"==typeof SuppressedError&&SuppressedError;var _="right-scroll-bar-position",S="width-before-scroll-bar",H=(void 0===eV&&(eV={}),(void 0===eX&&(eX=function(e){return e}),eW=[],eY=!1,eK={read:function(){if(eY)throw Error("Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.");return eW.length?eW[eW.length-1]:null},useMedium:function(e){var t=eX(e,eY);return eW.push(t),function(){eW=eW.filter(function(e){return e!==t})}},assignSyncMedium:function(e){for(eY=!0;eW.length;){var t=eW;eW=[],t.forEach(e)}eW={push:function(t){return e(t)},filter:function(){return eW}}},assignMedium:function(e){eY=!0;var t=[];if(eW.length){var r=eW;eW=[],r.forEach(e),t=eW}var n=function(){var r=t;t=[],r.forEach(e)},i=function(){return Promise.resolve().then(n)};i(),eW={push:function(e){t.push(e),i()},filter:function(e){return t=t.filter(e),eW}}}}).options=y({async:!0,ssr:!1},eV),eK),B=function(){},I=c.forwardRef(function(e,t){var r,n,i,o=c.useRef(null),s=c.useState({onScrollCapture:B,onWheelCapture:B,onTouchMoveCapture:B}),u=s[0],l=s[1],h=e.forwardProps,f=e.children,m=e.className,d=e.removeScrollBar,p=e.enabled,g=e.shards,v=e.sideCar,E=e.noIsolation,b=e.inert,_=e.allowPinchZoom,S=e.as,I=e.gapMode,N=T(e,["forwardProps","children","className","removeScrollBar","enabled","shards","sideCar","noIsolation","inert","allowPinchZoom","as","gapMode"]),A=(r=[o,t],n=function(e){return r.forEach(function(t){return"function"==typeof t?t(e):t&&(t.current=e),t})},(i=(0,c.useState)(function(){return{value:null,callback:n,facade:{get current(){return i.value},set current(a){var e=i.value;e!Line truncated
|
||||||
BIN
Binary file not shown.
|
After Width: | Height: | Size: 4.2 KiB |
+1
@@ -0,0 +1 @@
|
|||||||
|
@charset "UTF-8";.media-ui-Container_base-QBDs9PHHQpE-{box-sizing:border-box;padding:1rem;position:relative}@media (min-width:768px){.media-ui-Container_base-QBDs9PHHQpE-{padding:1.5rem}}.media-ui-Container_base-QBDs9PHHQpE-:before{border-color:transparent;border-width:1px;bottom:0;content:"";left:0;pointer-events:none;position:absolute;right:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;z-index:0}.media-ui-Container_base-QBDs9PHHQpE-.media-ui-Container_outline-DkanPVBk-1w-:before{background:transparent;background:var(--background-color,transparent);border-color:var(--border-color);border-width:1px}.media-ui-Container_base-QBDs9PHHQpE-.media-ui-Container_rounded-PrsdJeyyb1o-:before,.media-ui-Container_base-QBDs9PHHQpE-.media-ui-Container_roundedCorners-QOic8qlaBuU-:before{border-color:transparent;border-color:var(--border-color,transparent);border-radius:.25rem}.media-ui-Container_base-QBDs9PHHQpE-.media-ui-Container_rounded-PrsdJeyyb1o-:before{border-width:1px}.media-ui-Container_base-QBDs9PHHQpE-.media-ui-Container_lined-r8qUhWeWQnw-{padding:1rem 0}@media (min-width:768px){.media-ui-Container_base-QBDs9PHHQpE-.media-ui-Container_lined-r8qUhWeWQnw-{padding:2rem 0}}.media-ui-Container_base-QBDs9PHHQpE-.media-ui-Container_lined-r8qUhWeWQnw-:before{border-color:var(--border-color);border-width:1px 0}.media-ui-Container_base-QBDs9PHHQpE-.media-ui-Container_shadow-U1-ool-gwWA-:before{box-shadow:.25rem .25rem .3125rem currentColor;box-shadow:.25rem .25rem .3125rem var(--border-color,currentColor);opacity:.15}.media-ui-Container_base-QBDs9PHHQpE-.media-ui-Container_solid-BFsuIx-Fv3E-:before{background:transparent;background:var(--background-color,transparent)}.media-ui-Container_inner-kVUiM3TMp20-{position:relative}.media-ui-ToastError_toastError-tjceNDlJmWM-{z-index:20}.media-ui-ToastError_toastErrorIcon-tVx6TjVxGLA-{color:var(--color-red-500)}@keyframes media-ui-Toast_change-in-C2JF-XMqB-k-{0%{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}.media-ui-Toast_outer-z1kHvyFyOXY-{align-items:center;display:flex;left:1rem;pointer-events:none;position:fixed;right:1rem;z-index:999}.media-ui-Toast_outer-z1kHvyFyOXY-.media-ui-Toast_top-TA-p3NWAb-4-{bottom:auto;top:1.25rem}.media-ui-Toast_outer-z1kHvyFyOXY-.media-ui-Toast_bottom-H5hdnoRl6Oo-{bottom:1.25rem;top:auto}.media-ui-Toast_outer-z1kHvyFyOXY-.media-ui-Toast_left-V1dC80PDBPM-{justify-content:flex-start}.media-ui-Toast_outer-z1kHvyFyOXY-.media-ui-Toast_right-JHUcGhTxwbM-{justify-content:flex-end}.media-ui-Toast_outer-z1kHvyFyOXY-.media-ui-Toast_center-JKSh-cI4ois-{justify-content:center}.media-ui-Toast_wrapper-w0swnDGj04A-{--tw-drop-shadow:drop-shadow(0 0.25rem 0.1875rem rgba(0,0,0,.07)) drop-shadow(0 0.125rem 0.125rem rgba(0,0,0,.06));align-items:center;animation:media-ui-Toast_change-in-C2JF-XMqB-k- .15s linear;animation-fill-mode:forwards;background-color:var(--color-gray-1000);border-radius:.5rem;color:var(--color-white);display:flex;filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);font-family:BWHaasGroteskWeb,BWHaasGroteskWeb-fallback,Helvetica,Arial,sans-serif;font-size:.875rem;justify-content:space-between;line-height:1.3125rem;line-height:1rem;max-width:21.5rem;padding:1rem;pointer-events:auto;transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.media-ui-Toast_wrapper-w0swnDGj04A-.media-ui-Toast_medium--ctWsbtrGcw-{max-width:28rem}.media-ui-Toast_wrapper-w0swnDGj04A-.media-ui-Toast_large-bqeBcxZ1Tuk-{max-width:32rem}.media-ui-Toast_wrapper-w0swnDGj04A-.media-ui-Toast_full-WJ7FVA-mueM-{max-width:100%}.media-ui-Toast_wrapper-w0swnDGj04A-.media-ui-Toast_error-iACl81EexTk-{background-color:var(--color-red-100);color:var(--color-red-900)}.media-ui-Toast_wrapper-w0swnDGj04A-.media-ui-Toast_success-VOhqOrp84Fc-{background-color:var(--color-green-100);color:var(--color-green-800)}.media-ui-Toast_wrapper-w0swnDGj04A-.media-ui-Toast_warning-A969ln6aYJA-{background-color:var(--color-yellow-100);color:var(--color-yellow-800)}.media-ui-Toast_contentWrapper-BpRHiktIiIw-,.media-ui-Toast_icon-XLKMjxlXbqA-{display:flex;flex-direction:column}.media-ui-Toast_icon-XLKMjxlXbqA-{justify-content:center;padding-right:.5rem}.media-ui-Toast_iconButtonWrapper-iSCTmJn5its-{align-items:center;border-radius:624.9375rem;display:flex;height:1.25rem;justify-content:center;margin-left:1rem;width:1.25rem}.media-ui-Toast_iconButton-CWEVxxzwGoY-{flex-grow:0;flex-shrink:0;transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.media-ui-Toast_iconButton-CWEVxxzwGoY- svg{height:1.25rem!important;width:1.25rem!important}.react-datepicker__month-read-view--down-arrow,.react-datepicker__month-year-read-view--down-arrow,.react-datepicker__navigation-icon:before,.react-datepicker__year-read-view--down-arrow{border-color:#ccc;border-style:solid;bLine truncated
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2095],{15782:function(e,t,n){"use strict";n.d(t,{Z:function(){return p}});var o=n(85893),a=n(67294),r=n(33090),i=n(53867),l=n(1437),s=n.n(l),c=n(89584),u=n(92175);let d=e=>{window.cmpClient.cmd.push(()=>{window.getCmpClient().addPrivacyManager(e)})};function p(e){var t;let{footerMenuItems:n,locale:l=c.go.En}=e,p=(0,a.useCallback)((e,t)=>{(0,i.uH)("footerClick",t,e)},[]),m=(null===(t=u.h$[l])||void 0===t?void 0:t.routeLocale)||l;return(0,o.jsx)(r.$,{addPrivacyManager:d,name:"footer",footerMenuItems:n,trackingFunction:p,desktopBreakpointClassName:s().gridFooter,locale:m})}},50722:function(e,t,n){"use strict";n.d(t,{Z:function(){return g}});var o=n(85893),a=n(67294),r=n(47631),i=n(25173),l=n(50448),s=n(93859),c=n(31361),u=n(90573),d=n.n(u),p=n(89584),m=n(92175);function g(e){var t,n;let{menuItems:u,countryCode:g,locale:h=p.go.En}=e,b=(0,a.useRef)(null),[v,f]=(0,a.useState)({top:"0px"}),w=(0,a.useCallback)(()=>{f({top:"0px"})},[]),x=(0,a.useCallback)(()=>{if(b.current){let e=b.current.clientHeight;f({top:"-".concat(e,"px")})}},[b.current]),y=(0,a.useCallback)((e,t)=>{var n;null===(n=window.dataLayer)||void 0===n||n.push({eventCategory:"nav",event:"navClick",eventAction:e,eventLabel:t})},[]);(0,s.B)({scrollingElementRef:b,scrollDirectionThreshold:30,onScrollUpCallback:w,onScrollDownCallback:x});let j=!!(null===(t=(0,c.useFeatureGate)("japan_login_nav"))||void 0===t?void 0:t.value),C=(null===(n=m.h$[h])||void 0===n?void 0:n.routeLocale)||h;return(0,o.jsx)("div",{className:d().nav,style:v,ref:b,children:(0,o.jsx)(r.J,{initializeSignInWithRegUI:(0,l.YM)().initializeSignInWithRegUI,theme:i.yU.DARK,user:(0,l.YM)().user,searchClient:(0,l.YM)().searchClient,onSignOut:(0,l.YM)().onSignOut,desktopBreakpointClassName:d().gridNavDesktop,countryCode:g,...u?{menuItems:u}:{hideMenu:!0},trackingFunction:y,subscriptionUrl:(0,l.YM)().subscriptionUrl,upgradeUrl:(0,l.YM)().upgradeUrl,locale:C,isJapanLoginEnabled:j})})}},52095:function(e,t,n){"use strict";n.d(t,{F:function(){return ee}});var o=n(85893),a=n(12918),r=n.n(a),i=n(67294),l=n(65804),s=n(59628),c=n(35426),u=n.n(c),d=n(31361),p=n(84533),m=n(55441),g=n(22539),h=n(50448),b=n(42977),v=n(51956),f=n(53867),w=n(8590),x=n(30202),y=n(34576),j=n(11465),C=n(86896),k=n(50722),_=n(15782),T=n(9008),I=n.n(T),S=n(83116),M=n(38742),O=n(53537);let F=(e,t,n,o)=>({"@context":"https://schema.org","@type":"Person",name:e,jobTitle:t||null,worksFor:n||null,image:o?{"@type":"ImageObject",url:o}:void 0}),N=(e,t)=>[...e.slice(0,3).map(e=>{var t;return F(e.name,e.currentPosition,e.companyName,null===(t=e.thumbnail)||void 0===t?void 0:t.src)}),...t.slice(0,3).map(e=>{var t;return F(e.name,void 0,e.companyName,null===(t=e.thumbnail)||void 0===t?void 0:t.src)})],P=e=>{let{company:t,displayName:n,shortTickerId:o,shortExchange:a}=e,{boardMembers:r=[],companyDescription:i,companyIsPrivate:l,companyPhone:s,companyWebsite:c,companyAddress:u,executives:d=[],foundedYear:p,numberOfEmployees:m}=t||{};return{"@context":"https://schema.org","@type":l?"Organization":"Corporation",name:n,description:i,address:u,telephone:s,foundingDate:p,url:c,numberOfEmployees:m,employee:N(d,r),tickerSymbol:l?void 0:"".concat(a," ").concat(o)}};var D=n(1864);let z=n.n(D)().join("https://assets.bwbx.io/s3/bazaar//_next/static/media/bloomberg-logo-amp.bae0aa0a.png"),E={communications:"/communication-services","consumer discretionary":"/consumer-discretionary","consumer staples":"/consumer-staples",energy:"/energy",financials:"/financials","health care":"/health-care",industrials:"/industrials",materials:"/materials",technology:"/information-technology",utilities:"/utilities",default:""},R={"quote-bazaar":"https://www.bloomberg.com/profile/company","quote-companyProfile":"https://www.bloomberg.com/quote",default:""},U=()=>({"@type":"Organization",name:"Bloomberg",url:"https://www.bloomberg.com",logo:{"@type":"ImageObject",url:z,width:262,height:60}}),L=(e,t)=>({"@context":"http://schema.org","@type":"Thing",name:e,url:t}),q=(e,t,n,o)=>{let a=[];if(!e)return a;if(o){let e=o.toLowerCase(),t=E[e]||E.default,n=L(e,"".concat("https://www.bloomberg.com/markets/sectors").concat(t));a.push(n)}let r=R[t]||R.default,i=L(n,"".concat(r,"/").concat(e));return a.push(i),a},A=e=>{let{bicsSector:t,description:n,displayName:o,keywords:a,pageType:r,tickerId:i,title:l,url:s}=e;return{"@context":"https://schema.org","@type":"WebPage",name:l,description:n,keywords:a,mainEntityOfPage:s,mentions:q(i,r,o,t),publisher:U(),isAccessibleForFree:"False",hasPart:{"@type":"WebPageElement",isAccessibleForFree:"False",cssSelector:".paywall"}}};function B(e){let{constructedTitle:t,description:n,keywords:a,title:r,url:l}=e.metadata,s=(0,M.gq)({canonical:l,description:n,keywords:a}),c=(0,M.W4)({twitterHandle:"@markets",creator:"@markets",description:n,title:r,image:"https://www.bloomberg.com/favicon-black.png"}),u=(0,M.wU)({type:"company",title:r,url:l,image:"https://www.bloomberg.com/favicon-black.png",descriptLine truncated
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
:root{--bw-roman:"BWHaasGroteskWeb";--font-weight-medium:500;--font-weight-bold:700;--color-opinion-blue:#0068ff;--color-white:#fff;--color-gray-100:#f8f8f8;--color-gray-200:#efefef;--color-gray-300:#ccc;--color-gray-400:#b3b3b3;--color-gray-500:#999;--color-gray-600:#767676;--color-gray-700:#545454;--color-gray-800:#3c3c3c;--color-gray-900:#262626;--color-gray-1000:#1c1c1c;--color-blue-200:#f2f7ff;--color-blue-300:#d4e5ff;--color-blue-400:#7eb2ff;--color-blue-500:#3d89fb;--color-blue-600:#0064fa;--color-blue-700:#004ec4;--color-blue-800:#00378e;--color-blue-900:#002157;--color-blue-1000:#000a21;--color-red-100:#fff0f0;--color-red-200:#ffe1df;--color-red-300:#ffcdca;--color-red-400:#f68d85;--color-red-500:#f05143;--color-red-600:#e51503;--color-red-700:#b20e01;--color-red-800:#800800;--color-red-900:#4e0300;--color-red-1000:#1f0000;--color-green-100:#eff9e9;--color-green-200:#e4f4d9;--color-green-300:#d1edc0;--color-green-400:#96d18c;--color-green-500:#4db250;--color-green-600:#338736;--color-green-700:#146917;--color-green-800:#0e4e10;--color-green-900:#073208;--color-green-1000:#001500;--accent-1:var(--color-gray-100);--accent-2:var(--color-gray-200);--accent-3:var(--color-gray-300);--accent-4:var(--color-gray-400);--accent-5:var(--color-gray-500);--accent-6:var(--color-gray-600);--accent-7:var(--color-gray-700);--accent-8:var(--color-gray-800);--accent-9:var(--color-gray-900)}[class^=intercom-] *,[class^=intercom-] :after,[class^=intercom-] :before,[id^=storybook-] *,[id^=storybook-] :after,[id^=storybook-] :before{background-color:transparent;border:none;box-sizing:border-box}[class^=intercom-] :is(ul),[id^=storybook-] :is(ul){list-style:none;margin:0;padding:0}[class^=intercom-] :is(h1,h2,h3,h4,h5,h6,p),[id^=storybook-] :is(h1,h2,h3,h4,h5,h6,p){margin:0}[class^=intercom-] :is(a),[id^=storybook-] :is(a){color:inherit;text-decoration:none}[data-accent-color=gray]{--accent-1:var(--color-gray-100);--accent-2:var(--color-gray-200);--accent-3:var(--color-gray-300);--accent-4:var(--color-gray-400);--accent-5:var(--color-gray-500);--accent-6:var(--color-gray-600);--accent-7:var(--color-gray-700);--accent-8:var(--color-gray-800);--accent-9:var(--color-gray-900)}[data-accent-color=blue]{--accent-1:var(--color-blue-100);--accent-2:var(--color-blue-200);--accent-3:var(--color-blue-300);--accent-4:var(--color-blue-400);--accent-5:var(--color-blue-500);--accent-6:var(--color-blue-600);--accent-7:var(--color-blue-700);--accent-8:var(--color-blue-800);--accent-9:var(--color-blue-900)}[data-accent-color=red]{--accent-1:var(--color-red-100);--accent-2:var(--color-red-200);--accent-3:var(--color-red-300);--accent-4:var(--color-red-400);--accent-5:var(--color-red-500);--accent-6:var(--color-red-600);--accent-7:var(--color-red-700);--accent-8:var(--color-red-800);--accent-9:var(--color-red-900);--accent-10:var(--color-red-1000)}[data-accent-color=green]{--accent-1:var(--color-green-100);--accent-2:var(--color-green-200);--accent-3:var(--color-green-300);--accent-4:var(--color-green-400);--accent-5:var(--color-green-500);--accent-6:var(--color-green-600);--accent-7:var(--color-green-700);--accent-8:var(--color-green-800);--accent-9:var(--color-green-900);--accent-10:var(--color-green-1000)}[data-border-style=full]{border:1px solid var(--color-gray-300)}[data-border-style=top]{border-top:1px solid var(--color-gray-200)}[data-border-style=bottom]{border-bottom:1px solid var(--color-gray-200)}[data-radius=small]{border-radius:.5rem}[data-radius=medium]{border-radius:.75rem}@layer tailwind-base, phx, app-overrides, video-js;@layer phx.base, phx.components, phx.utilities, phx.overrides;@layer phx.themes{:host,:root,[data-phx-theme=dark]{--phx-font-core-weight-regular:400;--phx-font-core-weight-medium:500;--phx-font-core-weight-semibold:600;--phx-font-core-weight-bold:700;--phx-font-core-weight-black:900;--phx-font-core-size-52:3.25rem;--phx-font-core-size-48:3rem;--phx-font-core-size-40:2.5rem;--phx-font-core-size-36:2.25rem;--phx-font-core-size-32:2rem;--phx-font-core-size-28:1.75rem;--phx-font-core-size-24:1.5rem;--phx-font-core-size-20:1.25rem;--phx-font-core-size-18:1.125rem;--phx-font-core-size-16:1rem;--phx-font-core-size-14:0.875rem;--phx-font-core-size-12:0.75rem;--phx-font-core-size-10:0.625rem;--phx-font-core-size-9:0.5625rem;--phx-font-core-line-height-170:1.7;--phx-font-core-line-height-150:1.5;--phx-font-core-line-height-130:1.3;--phx-font-core-line-height-120:1.2;--phx-font-core-line-height-105:1.05;--phx-font-core-line-height-100:1;--phx-font-core-family-sans-jp:BWHaasGroteskWeb,BWHaasGroteskWeb-fallback,"Noto Sans JP",Helvetica,Arial,sans-serif;--phx-font-core-family-serif:PublicoText,Georgia,Cambria,"Times New Roman",Times,serif;--phx-font-core-family-teritary-sans:AvenirNext,Avenir,Helvetica,sans-serif;--phx-font-core-family-secondary-sans:BWHaasHead,"Helvetica Neue",Helvetica,sans-serif;--phx-font-core-family-sans:BWHaasGroteskWeb,BWHaasGroteskWeb-fallback,Helvetica,Arial,sans-serif;--phx-space-core-48:3rem;-Line truncated
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2982],{94993:function(e,t,n){let r;n.r(t),n.d(t,{Composite:function(){return j},CompositeItem:function(){return H},FloatingArrow:function(){return G},FloatingDelayGroup:function(){return ef},FloatingFocusManager:function(){return eB},FloatingList:function(){return D},FloatingNode:function(){return et},FloatingOverlay:function(){return ez},FloatingPortal:function(){return eK},FloatingTree:function(){return en},arrow:function(){return f.x7},autoPlacement:function(){return f.X5},autoUpdate:function(){return d.Me},computePosition:function(){return d.oo},detectOverflow:function(){return d.US},flip:function(){return f.RR},getOverflowAncestors:function(){return c.Kx},hide:function(){return f.Cp},inline:function(){return f.Qo},inner:function(){return tv},limitShift:function(){return f.dr},offset:function(){return f.cv},platform:function(){return d.Jv},safePolygon:function(){return tg},shift:function(){return f.uY},size:function(){return f.dp},useClick:function(){return eV},useClientPoint:function(){return eJ},useDelayGroup:function(){return ed},useDelayGroupContext:function(){return es},useDismiss:function(){return e1},useFloating:function(){return e7},useFloatingNodeId:function(){return ee},useFloatingParentNodeId:function(){return Q},useFloatingPortalNode:function(){return eF},useFloatingRootContext:function(){return e2},useFloatingTree:function(){return $},useFocus:function(){return e3},useHover:function(){return ei},useId:function(){return z},useInnerOffset:function(){return tm},useInteractions:function(){return e8},useListItem:function(){return F},useListNavigation:function(){return tu},useMergeRefs:function(){return v},useRole:function(){return tl},useTransitionStatus:function(){return ta},useTransitionStyles:function(){return ts},useTypeahead:function(){return tf}});var u,o=n(67294),l=n(97145),i=n(71347),c=n(37317),a=n(88388),s=n(73935),f=n(1371),d=n(29545);function v(e){return o.useMemo(()=>e.every(e=>null==e)?null:t=>{e.forEach(e=>{"function"==typeof e?e(t):null!=e&&(e.current=t)})},e)}let m={...u||(u=n.t(o,2))},p=m.useInsertionEffect||(e=>e());function g(e){let t=o.useRef(()=>{});return p(()=>{t.current=e}),o.useCallback(function(){for(var e=arguments.length,n=Array(e),r=0;r<e;r++)n[r]=arguments[r];return null==t.current?void 0:t.current(...n)},[])}let h="ArrowUp",y="ArrowDown",b="ArrowLeft",E="ArrowRight";function w(e,t,n){return Math.floor(e/t)!==n}function x(e,t){return t<0||t>=e.current.length}function R(e,t){return M(e,{disabledIndices:t})}function k(e,t){return M(e,{decrement:!0,startingIndex:e.current.length,disabledIndices:t})}function M(e,t){let{startingIndex:n=-1,decrement:r=!1,disabledIndices:u,amount:o=1}=void 0===t?{}:t,l=e.current,i=n;do i+=r?-o:o;while(i>=0&&i<=l.length-1&&A(l,i,u));return i}function C(e,t){let{event:n,orientation:r,loop:u,rtl:o,cols:c,disabledIndices:a,minIndex:s,maxIndex:f,prevIndex:d,stopEvent:v=!1}=t,m=d;if(n.key===h){if(v&&(0,l.p7)(n),-1===d)m=f;else if(m=M(e,{startingIndex:m,amount:c,decrement:!0,disabledIndices:a}),u&&(d-c<s||m<0)){let e=d%c,t=f%c,n=f-(t-e);m=t===e?f:t>e?n:n-c}x(e,m)&&(m=d)}if(n.key===y&&(v&&(0,l.p7)(n),-1===d?m=s:(m=M(e,{startingIndex:d,amount:c,disabledIndices:a}),u&&d+c>f&&(m=M(e,{startingIndex:d%c-c,amount:c,disabledIndices:a}))),x(e,m)&&(m=d)),"both"===r){let t=(0,i.GW)(d/c);n.key===(o?b:E)&&(v&&(0,l.p7)(n),d%c!=c-1?(m=M(e,{startingIndex:d,disabledIndices:a}),u&&w(m,c,t)&&(m=M(e,{startingIndex:d-d%c-1,disabledIndices:a}))):u&&(m=M(e,{startingIndex:d-d%c-1,disabledIndices:a})),w(m,c,t)&&(m=d)),n.key===(o?E:b)&&(v&&(0,l.p7)(n),d%c!=0?(m=M(e,{startingIndex:d,decrement:!0,disabledIndices:a}),u&&w(m,c,t)&&(m=M(e,{startingIndex:d+(c-d%c),decrement:!0,disabledIndices:a}))):u&&(m=M(e,{startingIndex:d+(c-d%c),decrement:!0,disabledIndices:a})),w(m,c,t)&&(m=d));let r=(0,i.GW)(f/c)===t;x(e,m)&&(m=u&&r?n.key===(o?E:b)?f:M(e,{startingIndex:d-d%c-1,disabledIndices:a}):d)}return m}function T(e,t,n){let r=[],u=0;return e.forEach((e,o)=>{let{width:l,height:i}=e,c=!1;for(n&&(u=0);!c;){let e=[];for(let n=0;n<l;n++)for(let r=0;r<i;r++)e.push(u+n+r*t);u%t+l<=t&&e.every(e=>null==r[e])?(e.forEach(e=>{r[e]=o}),c=!0):u++}}),[...r]}function I(e,t,n,r,u){if(-1===e)return -1;let o=n.indexOf(e),l=t[e];switch(u){case"tl":return o;case"tr":if(!l)return o;return o+l.width-1;case"bl":if(!l)return o;return o+(l.height-1)*r;case"br":return n.lastIndexOf(e)}}function L(e,t){return t.flatMap((t,n)=>e.includes(t)?[n]:[])}function A(e,t,n){if(n)return n.includes(t);let r=e[t];return null==r||r.hasAttribute("disabled")||"true"===r.getAttribute("aria-disabled")}var P="undefined"!=typeof document?o.useLayoutEffect:o.useEffect;function S(e,t){let n=e.compareDocumentPosition(t);return n&Node.DOCUMENT_POSITION_FOLLOWING||n&Node.DOCUMENT_POSITION_CONTAINED_BY?-1:n&Node.DOCUMENT_POSITION_PRECEDING||n&Node.DOCUMENT_POSITION_CONTAINS?1:0}let O=o.createContext({register:()=>{},unregister:()=>{},map:new Map,elementsRef:{currenLine truncated
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2806],{44014:function(e,t,a){"use strict";a.d(t,{$I:function(){return h},If:function(){return k},JH:function(){return f},Jf:function(){return y},Np:function(){return _},Pe:function(){return u},TH:function(){return d},il:function(){return m},ue:function(){return p}});var r=a(53867),i=a(23324),n=a(48189),l=a(99464),o=a(48764).Buffer;let c=new i.Z({watchlistServiceUrl:"".concat("https://login.bloomberg.com","/watchlist-service")}),s=n.ff.getInstance();function u(e){let{bconnectId:t,watchlistId:a}=e;return c.getWatchlistCompare({bconnectId:t,watchlistId:a}).then(e=>e).catch(e=>{let t="Failed to fetch watchlist compare: ".concat(JSON.stringify(e));throw(0,l.H)(Error(t)),e})}function d(e){let{bconnectId:t,watchlistId:a,watchlistCompareData:r}=e;return c.updateWatchlistCompare({bconnectId:t,watchlistId:a,watchlistCompareData:r}).then(e=>e).catch(e=>{let t="Failed to update watchlist compare: ".concat(JSON.stringify(e));throw(0,l.H)(Error(t)),e})}async function h(e){let{bconnectId:t,subscription:a}=e;try{let e={};if(void 0!==a){let t=o.from(JSON.stringify({isSubscriber:"BBG"===a}),"utf-8").toString("base64");e["X-Request-Metadata"]=t}return{data:await s.getUserPreference(t,{headers:e}),status:200,message:"Success"}}catch(t){var i,n;(0,r.uH)("watchlistError","Get User Preferences Failure","error","watchlist");let e="Failed to fetch user preferences: ".concat(JSON.stringify(t));throw null===(n=window)||void 0===n||null===(i=n.newrelic)||void 0===i||i.noticeError(Error(e)),t}}function m(e){let{bconnectId:t,alertsNotificationsEnabled:a,alertsEmailsEnabled:i,dashboardView:n}=e;return c.updateUserPreferences({bconnectId:t,alertsNotificationsEnabled:a,alertsEmailsEnabled:i,dashboardView:n}).then(e=>e).catch(e=>{var t,a;(0,r.uH)("watchlistError","Update User Preferences Failure","error","watchlist");let i="Failed to update user preferences: ".concat(JSON.stringify(e));throw null===(a=window)||void 0===a||null===(t=a.newrelic)||void 0===t||t.noticeError(Error(i)),e})}function p(e){let{bconnectId:t,watchlistId:a}=e;return c.getUserWatchlists({bconnectId:t,watchlistId:a}).then(e=>e).catch(e=>{var t,a;(0,r.uH)("watchlistError","Get Default Watchlist Failure","error","watchlist");let i="Failed to fetch Default Watchlist data: ".concat(JSON.stringify(e));throw null===(a=window)||void 0===a||null===(t=a.newrelic)||void 0===t||t.noticeError(Error(i)),e})}function k(e,t){return c.getWatchlist({bconnectId:e,watchlistId:t}).then(e=>e).catch(e=>{var t,a;(0,r.uH)("watchlistError","Get Watchlist Failure","error","watchlist");let i="Failed to fetch Watchlist data: ".concat(JSON.stringify(e));throw null===(a=window)||void 0===a||null===(t=a.newrelic)||void 0===t||t.noticeError(Error(i)),e})}function f(e,t){return c.createWatchlist({bconnectId:e,watchlistData:t}).then(e=>((0,r.uH)("watchlistSubmitChanges","submit_changes","click","engagement"),e)).catch(e=>{var t,a;(0,r.uH)("watchlistError","Create Watchlist Failure","error","watchlist");let i="Failed to Create Watchlist: ".concat(JSON.stringify(e));throw null===(a=window)||void 0===a||null===(t=a.newrelic)||void 0===t||t.noticeError(Error(i)),e})}function y(e,t,a){return c.updateWatchlist({bconnectId:e,watchlistId:t,watchlistData:a}).then(e=>((0,r.uH)("watchlistSubmitChanges","submit_changes","success","watchlist"),e)).catch(e=>{var t,a;(0,r.uH)("watchlistError","Update Watchlist Failure","error","watchlist");let i="Failed to Update Watchlist: ".concat(JSON.stringify(e));throw null===(a=window)||void 0===a||null===(t=a.newrelic)||void 0===t||t.noticeError(Error(i)),e})}function _(e,t){return c.deleteWatchlist({bconnectId:e,watchlistId:t}).then(e=>((0,r.uH)("watchlistDelete","delete","success","watchlist"),e)).catch(e=>{var t,a;(0,r.uH)("watchlistError","Delete Watchlist Failure","error","watchlist");let i="Failed to Delete Watchlist: ".concat(JSON.stringify(e));throw null===(a=window)||void 0===a||null===(t=a.newrelic)||void 0===t||t.noticeError(Error(i)),e})}},48523:function(e,t,a){"use strict";a.d(t,{Z:function(){return h}});var r=a(85893),i=a(67294),n=a(9198),l=a.n(n),o=a(77536),c=a(71717);a(5843);var s=a(73319),u=a(3364),d=a.n(u);function h(e){let{className:t,dateFormat:a="MM/dd/yyyy",error:n,label:u,isJapanese:h,maxDate:m,native:p=!1,placeholder:k,popperPlacement:f,portalId:y,required:_=!1,value:b,onChange:S,variant:w="default"}=e,C=b?new Date(b):new Date,[L,A]=(0,i.useState)(C),P=(0,i.useMemo)(()=>{if(h)return s.Z},[h]),D=(0,o.RD)([t,d().datepickerInput,{[d().error]:!!n}]),g=(0,o.RD)([d().datepicker,{[d().refresh2025]:"refresh-2025"===w}]),N=(0,o.RD)([d().popper,{[d().refresh2025]:"refresh-2025"===w}]),E=(0,o.RD)([d().calendar,{[d().refresh2025]:"refresh-2025"===w}]),I=(0,o.RD)([d().day,{[d().refresh2025]:"refresh-2025"===w}]),v=(0,o.RD)([d().weekday,{[d().refresh2025]:"refresh-2025"===w}]),T=(0,i.useCallback)(e=>{e&&(A(e),S&&S(e))},[S]),M=(0,i.useCallback)(e=>I,[I]),B=(0,i.useCallback)(e=>v,[v]);return p?(0,r.jsx)(c.U,{classLine truncated
|
||||||
BIN
Binary file not shown.
|
After Width: | Height: | Size: 6.7 KiB |
+1
@@ -0,0 +1 @@
|
|||||||
|
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3711],{75197:function(e,t,n){"use strict";n.d(t,{I:function(){return c}});var o=n(67294),r=n(67673),l=n(8599),i=n(25434),a=n(77536);n(81789);var u={RoundedToggleButton:"media-ui-RoundedToggleButton_RoundedToggleButton-jupSnVE3YEE-",baseBackground:"media-ui-RoundedToggleButton_baseBackground-xtN1SsCKNUk-",onlyIcon:"media-ui-RoundedToggleButton_onlyIcon-5gacIog6Wyw-",small:"media-ui-RoundedToggleButton_small-lT037nV582M-",active:"media-ui-RoundedToggleButton_active-tGJxCkcd4qs-",withActiveHoverText:"media-ui-RoundedToggleButton_withActiveHoverText-sezBn0KkvYg-",activeHoverText:"media-ui-RoundedToggleButton_activeHoverText-aBcpR7Rz2-A-",buttonText:"media-ui-RoundedToggleButton_buttonText-iZD8r7vw2dA-",disabled:"media-ui-RoundedToggleButton_disabled-ZF3e7iYyTfg-",dark:"media-ui-RoundedToggleButton_dark-BkYbon7-MNs-",icon:"media-ui-RoundedToggleButton_icon-aBoTvm8dx9c-",activeText:"media-ui-RoundedToggleButton_activeText-BN8uCaLdf58-",inactiveText:"media-ui-RoundedToggleButton_inactiveText-oxH0UlyuECc-","roundedToggleButton-phoenix":"media-ui-RoundedToggleButton_roundedToggleButton-phoenix-jmYIcHhJdgQ-",hasIcon:"media-ui-RoundedToggleButton_hasIcon-1KESsmUA3tU-",default:"media-ui-RoundedToggleButton_default-LkHoW8vAiNc-",large:"media-ui-RoundedToggleButton_large-rSzfjgURqI8-",displayText:"media-ui-RoundedToggleButton_displayText--kigTOfr-QA-","onlyIcon-default":"media-ui-RoundedToggleButton_onlyIcon-default-2tb91NOahjA-","onlyIcon-small":"media-ui-RoundedToggleButton_onlyIcon-small-Jlt6LsnJIxE-","onlyIcon-large":"media-ui-RoundedToggleButton_onlyIcon-large-hGo3q1we174-",disabledActiveState:"media-ui-RoundedToggleButton_disabledActiveState-k5P5cvZeNsE-",light:"media-ui-RoundedToggleButton_light-YA1b8kWhA40-",unselectedState:"media-ui-RoundedToggleButton_unselectedState-KpIaF7jlw48-",activeState:"media-ui-RoundedToggleButton_activeState-LfnJ0G-6rcg-",lockedState:"media-ui-RoundedToggleButton_lockedState-jox5VwDvreI-",roundedToggleButton___phoenix:"media-ui-RoundedToggleButton_roundedToggleButton-phoenix-jmYIcHhJdgQ-",_default:"media-ui-RoundedToggleButton_default-LkHoW8vAiNc-",onlyIcon___default:"media-ui-RoundedToggleButton_onlyIcon-default-2tb91NOahjA-",onlyIcon___small:"media-ui-RoundedToggleButton_onlyIcon-small-Jlt6LsnJIxE-",onlyIcon___large:"media-ui-RoundedToggleButton_onlyIcon-large-hGo3q1we174-"};let c=o.forwardRef(function(e,t){let{name:n="RoundedToggleButton",colorMode:c="light",size:s="default",inactiveIcon:d="plus",activeHoverText:f="",withIcon:m=!1,onlyIcon:p=!1,dark:g=!1,disableWhenActive:v=!1,title:h="",version:y,activeText:b,inactiveText:w,active:x,onToggle:E,disabled:R,buttonProps:k}=e,[T]=(0,i.f)(n),S=o.useMemo(()=>{if(x&&!R)return v?{icon:o.createElement(r.MC,{className:u.icon,title:h}),value:"disabledActiveState"}:{icon:o.createElement(r.MC,{className:u.icon,title:h}),value:"activeState"};let e="lock"===d?o.createElement(r.HE,{className:u.icon,title:h}):o.createElement(r.v3,{className:u.icon,title:h});return R?"phoenix"===y?{icon:o.createElement(r.HE,{className:u.icon,title:h}),value:"lockedState"}:{icon:e,value:"lockedState"}:{icon:e,value:"unselectedState"}},[x,R,d,y]);return"phoenix"===y?o.createElement(l.zx,{version:y,disabled:R||"disabledActiveState"===S.value,onClick:E,title:h,ref:t,"data-component":T,className:(0,a.Sh)([e.className,u["roundedToggleButton-".concat(y)],u[s],u[S.value],u[c],{[u.onlyIcon]:p,[u.hasIcon]:m&&!p,[u["onlyIcon-".concat(s)]]:p,[u.withActiveHoverText]:x&&f,[n]:e.name}])},p?S.icon:o.createElement(o.Fragment,null,o.createElement("div",{className:u.buttonText},o.createElement("span",{className:u.activeText},m&&S.icon," ",b),o.createElement("span",{className:u.inactiveText},m&&S.icon," ",w),m&&S.icon,o.createElement("span",{className:u.displayText},x?b:w)),o.createElement("span",{className:u.activeHoverText},f))):o.createElement(l.zx,{...e,onClick:E,className:(0,a.Sh)([u.RoundedToggleButton,u.baseBackground,{[u.active]:x,[u.disabled]:R,[u.small]:"small"===s,[u.dark]:g,[u.onlyIcon]:p,[u.withActiveHoverText]:x&&f}],e),ref:t,"data-component":T,unstyled:!0,...k,title:h},p?S.icon:o.createElement(o.Fragment,null,o.createElement("div",{className:u.buttonText},o.createElement("span",{className:u.activeText},m&&S.icon," ",b),o.createElement("span",{className:u.inactiveText},m&&S.icon," ",w),m&&S.icon," ",x?b:w),o.createElement("span",{className:u.activeHoverText},f)))})},12860:function(e,t,n){"use strict";n.d(t,{Z:function(){return tQ}});var o=n(67294),r=n.t(o,2),l=n(25434),i=n(77536);function a(e){return s(e)?(e.nodeName||"").toLowerCase():"#document"}function u(e){var t;return(null==e||null==(t=e.ownerDocument)?void 0:t.defaultView)||window}function c(e){var t;return null==(t=(s(e)?e.ownerDocument:e.document)||window.document)?void 0:t.documentElement}function s(e){return e instanceof Node||e instanceof u(e).Node}function d(e){return e instanceof Element||e instanceof u(e).Element}function f(e){return e instanceof HTMLLine truncated
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
.media-ui-InputField_inputContainer-dY89aFZcbqU-{box-sizing:border-box;color:currentColor;margin-bottom:.5rem;margin-top:.5rem;position:relative;width:100%}.media-ui-InputField_inputContainer-dY89aFZcbqU- .media-ui-InputField_input-trz7AzJlxTU-::-moz-placeholder{font-size:1rem;line-height:1.5rem}.media-ui-InputField_inputContainer-dY89aFZcbqU- .media-ui-InputField_input-trz7AzJlxTU-,.media-ui-InputField_inputContainer-dY89aFZcbqU- .media-ui-InputField_input-trz7AzJlxTU-::placeholder{font-size:1rem;line-height:1.5rem}.media-ui-InputField_inputContainer-dY89aFZcbqU-.media-ui-InputField_small-Yy7x-quB9xk- .media-ui-InputField_input-trz7AzJlxTU-::-moz-placeholder{font-size:.875rem;line-height:1.3125rem}.media-ui-InputField_inputContainer-dY89aFZcbqU-.media-ui-InputField_small-Yy7x-quB9xk- .media-ui-InputField_input-trz7AzJlxTU-,.media-ui-InputField_inputContainer-dY89aFZcbqU-.media-ui-InputField_small-Yy7x-quB9xk- .media-ui-InputField_input-trz7AzJlxTU-::placeholder{font-size:.875rem;line-height:1.3125rem}.media-ui-InputField_inputContainer-dY89aFZcbqU-.media-ui-InputField_password-TVOfm7A-XRE- ::-ms-reveal{display:none}.media-ui-InputField_input-trz7AzJlxTU-{background-color:transparent;border-color:currentColor;border-radius:0;border-width:0 0 1px;display:block;font-family:BWHaasGroteskWeb,BWHaasGroteskWeb-fallback,Helvetica,Arial,sans-serif;font-size:inherit;height:auto;line-height:1rem;outline:.125rem solid transparent;outline-offset:.125rem;padding:.5rem 2.5rem .25rem 0;position:relative;transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);width:100%}.media-ui-InputField_input-trz7AzJlxTU-.media-ui-InputField_error-4w5CNe-96N0-,.media-ui-InputField_input-trz7AzJlxTU-:invalid{border-color:var(--color-red-700)}.media-ui-InputField_input-trz7AzJlxTU-::-moz-placeholder{color:currentColor;font-size:inherit;line-height:1rem;opacity:.4;transition-duration:.15s;-moz-transition-property:opacity;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.media-ui-InputField_input-trz7AzJlxTU-::placeholder{color:currentColor;font-size:inherit;line-height:1rem;opacity:.4;transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.media-ui-InputField_input-trz7AzJlxTU-:disabled{border-color:var(--color-gray-400);color:var(--color-gray-400);cursor:default}.media-ui-InputField_input-trz7AzJlxTU-:active:not(:disabled),.media-ui-InputField_input-trz7AzJlxTU-:focus:not(:disabled){box-shadow:0 1px 1px -1px currentcolor;outline:.125rem solid transparent;outline-offset:.125rem}.media-ui-InputField_label-gyVRp41Ei7Y-{display:flex;position:relative}.media-ui-InputField_label-gyVRp41Ei7Y- span.media-ui-InputField_label-gyVRp41Ei7Y-{background-color:transparent;bottom:.4375rem;left:0;opacity:.4;pointer-events:none;position:absolute;transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.media-ui-InputField_label-gyVRp41Ei7Y-.media-ui-InputField_labelShrink-hS2SeloAhMI- span.media-ui-InputField_label-gyVRp41Ei7Y-{--tw-scale-x:.75;--tw-scale-y:.75;--tw-translate-y:-0.5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform-origin:top left}.media-ui-InputField_label-gyVRp41Ei7Y-.media-ui-InputField_labelShrink-hS2SeloAhMI-.media-ui-InputField_error-4w5CNe-96N0- span.media-ui-InputField_label-gyVRp41Ei7Y-{color:var(--color-red-700);opacity:1}.media-ui-InputField_label-gyVRp41Ei7Y-.media-ui-InputField_small-Yy7x-quB9xk-.media-ui-InputField_labelShrink-hS2SeloAhMI- span.media-ui-InputField_label-gyVRp41Ei7Y-{--tw-translate-y:-0.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.media-ui-InputField_label-gyVRp41Ei7Y-.media-ui-InputField_hideLabel-aVi4M3hS59I- span.media-ui-InputField_label-gyVRp41Ei7Y-{display:none}.media-ui-InputField_icon-RwX4HdyDbHY-{align-items:center;bottom:0;display:flex;justify-content:center;position:absolute;right:.25rem;top:0}.media-ui-InputField_icon-RwX4HdyDbHY-.media-ui-InputField_fullWidth-39tmB-JmVKU-{right:.5rem}.media-ui-InputField_helperText-oSSjAy9750k-{color:var(--color-gray-600);font-family:BWHaasGroteskWeb,BWHaasGroteskWeb-fallback,Helvetica,Arial,sans-serif;font-size:.75rem;line-height:1.125rem;padding-top:.25rem}.media-ui-InputField_success-Z-W51gkBIhE-{color:var(--color-green-700);height:1rem;width:1rem}.media-ui-InputField_success-Z-W51gkBIhE- svg{height:100%;width:100%}.media-ui-InputField_errorWrapper-HN0zh0R8BV4-{font-size:.75rem;line-height:1.125rem;margin-top:.25rem}.media-ui-InputField_clearInput-R7QZeFFgJM8-{--tw-translate-y:-45%;background-color:transparent;border-style:none;color:var(--color-black);cursor:pointer;margin:0;padding:0;positLine truncated
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3934],{33934:function(e,t,r){let s;r.d(t,{a:function(){return x}});var i=r(66474),n=r(27037),u=r(56888),a=r(7506),h=r(13820),c=r(24139),o=class extends a.l{constructor(e,t){super(),this.options=t,this.#e=e,this.#t=null,this.#r=(0,h.O)(),this.bindMethods(),this.setOptions(t)}#e;#s=void 0;#i=void 0;#n=void 0;#u;#a;#r;#t;#h;#c;#o;#l;#d;#p;#f=new Set;bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){1===this.listeners.size&&(this.#s.addObserver(this),l(this.#s,this.options)?this.#y():this.updateResult(),this.#R())}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return d(this.#s,this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return d(this.#s,this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,this.#b(),this.#Q(),this.#s.removeObserver(this)}setOptions(e){let t=this.options,r=this.#s;if(this.options=this.#e.defaultQueryOptions(e),void 0!==this.options.enabled&&"boolean"!=typeof this.options.enabled&&"function"!=typeof this.options.enabled&&"boolean"!=typeof(0,c.Nc)(this.options.enabled,this.#s))throw Error("Expected enabled to be a boolean or a callback that returns a boolean");this.#v(),this.#s.setOptions(this.options),t._defaulted&&!(0,c.VS)(this.options,t)&&this.#e.getQueryCache().notify({type:"observerOptionsUpdated",query:this.#s,observer:this});let s=this.hasListeners();s&&p(this.#s,r,this.options,t)&&this.#y(),this.updateResult(),s&&(this.#s!==r||(0,c.Nc)(this.options.enabled,this.#s)!==(0,c.Nc)(t.enabled,this.#s)||(0,c.KC)(this.options.staleTime,this.#s)!==(0,c.KC)(t.staleTime,this.#s))&&this.#m();let i=this.#g();s&&(this.#s!==r||(0,c.Nc)(this.options.enabled,this.#s)!==(0,c.Nc)(t.enabled,this.#s)||i!==this.#p)&&this.#I(i)}getOptimisticResult(e){let t=this.#e.getQueryCache().build(this.#e,e),r=this.createResult(t,e);return(0,c.VS)(this.getCurrentResult(),r)||(this.#n=r,this.#a=this.options,this.#u=this.#s.state),r}getCurrentResult(){return this.#n}trackResult(e,t){return new Proxy(e,{get:(e,r)=>(this.trackProp(r),t?.(r),"promise"!==r||this.options.experimental_prefetchInRender||"pending"!==this.#r.status||this.#r.reject(Error("experimental_prefetchInRender feature flag is not enabled")),Reflect.get(e,r))})}trackProp(e){this.#f.add(e)}getCurrentQuery(){return this.#s}refetch({...e}={}){return this.fetch({...e})}fetchOptimistic(e){let t=this.#e.defaultQueryOptions(e),r=this.#e.getQueryCache().build(this.#e,t);return r.fetch().then(()=>this.createResult(r,t))}fetch(e){return this.#y({...e,cancelRefetch:e.cancelRefetch??!0}).then(()=>(this.updateResult(),this.#n))}#y(e){this.#v();let t=this.#s.fetch(this.options,e);return e?.throwOnError||(t=t.catch(c.ZT)),t}#m(){this.#b();let e=(0,c.KC)(this.options.staleTime,this.#s);if(c.sk||this.#n.isStale||!(0,c.PN)(e))return;let t=(0,c.Kp)(this.#n.dataUpdatedAt,e);this.#l=setTimeout(()=>{this.#n.isStale||this.updateResult()},t+1)}#g(){return("function"==typeof this.options.refetchInterval?this.options.refetchInterval(this.#s):this.options.refetchInterval)??!1}#I(e){this.#Q(),this.#p=e,!c.sk&&!1!==(0,c.Nc)(this.options.enabled,this.#s)&&(0,c.PN)(this.#p)&&0!==this.#p&&(this.#d=setInterval(()=>{(this.options.refetchIntervalInBackground||i.j.isFocused())&&this.#y()},this.#p))}#R(){this.#m(),this.#I(this.#g())}#b(){this.#l&&(clearTimeout(this.#l),this.#l=void 0)}#Q(){this.#d&&(clearInterval(this.#d),this.#d=void 0)}createResult(e,t){let r;let s=this.#s,i=this.options,n=this.#n,a=this.#u,o=this.#a,d=e!==s?e.state:this.#i,{state:y}=e,R={...y},b=!1;if(t._optimisticResults){let r=this.hasListeners(),n=!r&&l(e,t),a=r&&p(e,s,t,i);(n||a)&&(R={...R,...(0,u.z)(y.data,e.options)}),"isRestoring"===t._optimisticResults&&(R.fetchStatus="idle")}let{error:Q,errorUpdatedAt:v,status:m}=R;r=R.data;let g=!1;if(void 0!==t.placeholderData&&void 0===r&&"pending"===m){let e;n?.isPlaceholderData&&t.placeholderData===o?.placeholderData?(e=n.data,g=!0):e="function"==typeof t.placeholderData?t.placeholderData(this.#o?.state.data,this.#o):t.placeholderData,void 0!==e&&(m="success",r=(0,c.oE)(n?.data,e,t),b=!0)}if(t.select&&void 0!==r&&!g){if(n&&r===a?.data&&t.select===this.#h)r=this.#c;else try{this.#h=t.select,r=t.select(r),r=(0,c.oE)(n?.data,r,t),this.#c=r,this.#t=null}catch(e){this.#t=e}}this.#t&&(Q=this.#t,r=this.#c,v=Date.now(),m="error");let I="fetching"===R.fetchStatus,C="pending"===m,O="error"===m,T=C&&I,S=void 0!==r,E={status:m,fetchStatus:R.fetchStatus,isPending:C,isSuccess:"success"===m,isError:O,isInitialLoading:T,isLoading:T,data:r,dataUpdatedAt:R.dataUpdatedAt,error:Q,errorUpdatedAt:v,failureCount:R.fetchFailureCount,failureReason:R.fetchFailureReason,errorUpdateCount:R.errorUpdateCount,isFetched:R.dataUpdateCount>0||R.errorUpdateCount>0,isFetchedAfterMount:R.dataUpdateCount>d.dataUpdateCount||R.errorUpdateCount>d.errorUpdateCount,isFetching:I,isRefetching:I&&!C,isLoadingError:O&&!S,isPaused:"paused"===R.fetchStatus,isPlLine truncated
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4092],{2595:function(e,t,n){"use strict";n.d(t,{Z:function(){return o}});var r=n(26727),a=n.n(r);class o{userApiUrl;constructor({userApiUrl:e}){this.userApiUrl=e}request({document:e,variables:t,includeCredentials:n=!1}){let r=a()(e);return fetch(this.userApiUrl,{body:r(t),method:"POST",credentials:n?"include":"same-origin",headers:{"Content-Type":"application/json",Accept:"application/json"}}).then(e=>e.json()).then(e=>e.data)}}},57966:function(e){function t(){for(var e,t,n=0,r="",a=arguments.length;n<a;n++)(e=arguments[n])&&(t=function e(t){var n,r,a="";if("string"==typeof t||"number"==typeof t)a+=t;else if("object"==typeof t){if(Array.isArray(t)){var o=t.length;for(n=0;n<o;n++)t[n]&&(r=e(t[n]))&&(a&&(a+=" "),a+=r)}else for(r in t)t[r]&&(a&&(a+=" "),a+=r)}return a}(e))&&(r&&(r+=" "),r+=t);return r}e.exports=t,e.exports.clsx=t},26727:function(e){e.exports=function(e){var n=t.exec(e=Array.isArray(e)?e.join(""):e);return function(t){var r={query:e};return t&&(r.variables=JSON.stringify(t)),n&&n.length&&n[2]&&(r.operationName=n[2]),JSON.stringify(r)}};var t=/(query|mutation) ?([\w\d-_]+)? ?\(.*?\)? \{/},68868:function(e,t,n){"use strict";n.d(t,{l:function(){return f}});var r=n(67294),a=n(67673),o=n(25434),i=n(38968),s=n(60006),u=n(77536),c=n(16562);n(29974);var l={carouselNav:"media-ui-Carousel_carouselNav-AgZezahKMDo-",navSection:"media-ui-Carousel_navSection-meXNYhIadqo-",navSectionButtons:"media-ui-Carousel_navSectionButtons-uL1EmVsYQZM-",dot:"media-ui-Carousel_dot-A0qq-PY5FQQ-",activeDot:"media-ui-Carousel_activeDot-oyvwM1McNgc-",navButtonContainer:"media-ui-Carousel_navButtonContainer-cmDqWTnEssM-",animatedBox:"media-ui-Carousel_animatedBox-nfNh2K7TJ30-",animatedCard:"media-ui-Carousel_animatedCard-FvA8txttpAs-",prevCard:"media-ui-Carousel_prevCard-dbrd4t-TN-8-",nextCard:"media-ui-Carousel_nextCard--tp1KkxlnwI-"};function d(e){let{onClick:t,index:n,isActive:a,ariaLabel:o}=e,i=(0,r.useCallback)(()=>{t(n)},[t,n]);return r.createElement("span",{className:(0,u.RD)([l.dot,a&&l.activeDot]),"aria-label":o,role:"button",onKeyDown:e=>{"Enter"===e.key&&i(e)},tabIndex:0,onClick:i})}function p(e){let{direction:t,isActive:n}=e,o=(0,u.RD)([l.navButtonContainer]);return r.createElement("div",null,r.createElement(s.h,{variant:"outlined",size:"default",className:o,disabled:!n},"left"===t?r.createElement(a.s$,null):r.createElement(a._Q,null)))}let f=(0,r.forwardRef)(function(e,t){let{children:n,limit:a=6,autoadvanceIntervalInMs:s=null,animatedTransition:f=!1,trackingName:h="carousel",trackClick:m,name:v="carousel"}=e,g=(0,o.f)(v),y=(0,c.Q)(),b=y({id:"media-ui-core_navigationDot",defaultMessage:i.j["media-ui-core_navigationDot"]}),D=y({id:"media-ui-core_navigateLeft",defaultMessage:i.j["media-ui-core_navigateLeft"]}),k=y({id:"media-ui-core_navigateRight",defaultMessage:i.j["media-ui-core_navigateRight"]}),w=(0,r.useRef)(null),[M,O]=(0,r.useState)(0),_=(0,r.useRef)(null),P=(0,r.useRef)(null),S=(0,u.RD)([l.navSection,l.navSectionButtons]),E=(0,r.useMemo)(()=>null==n?void 0:n.slice(0,a+1),[n,a]),C=(0,r.useCallback)((e,t)=>{w.current=setInterval(()=>{O(e=>(e+1)%t)},e)},[]),I=(0,r.useCallback)(()=>{w.current&&(clearInterval(w.current),w.current=null)},[]),T=(0,r.useCallback)(()=>{I(),s&&C(s,null==E?void 0:E.length)},[s,null==E?void 0:E.length,C,I]);(0,r.useEffect)(()=>(s&&C(s,null==E?void 0:E.length),I),[s,null==E?void 0:E.length,C,I]);let j=(0,r.useCallback)(()=>{O(e=>Math.max(e-1,0)),T(),m&&m("arrow-click","".concat(h,".arrow-back"))},[T]),Y=(0,r.useCallback)(()=>{O(e=>Math.min(e+1,((null==E?void 0:E.length)||0)-1)),T(),m&&m("arrow-click","".concat(h,".arrow-forward"))},[T,null==E?void 0:E.length]),N=(0,r.useCallback)(e=>{O(e),T(),m&&m("arrow-click","".concat(h,".card.").concat(e+1))},[T]),x=0===M,F=M===((null==E?void 0:E.length)||0)-1;return(null==E?void 0:E.length)?f?r.createElement("div",{"data-component":g,ref:t},r.createElement("div",{className:l.animatedBox,onTouchStart:e=>{var t;P.current=null,_.current=(null===(t=e.targetTouches[0])||void 0===t?void 0:t.clientX)||null},onTouchMove:e=>{var t;P.current=(null===(t=e.targetTouches[0])||void 0===t?void 0:t.clientX)||null},onTouchEnd:()=>{if(null===_.current||null===P.current)return;let e=P.current-_.current;e>50&&j(),e<-50&&Y()}},E.map((e,t)=>{let n=(0,u.RD)([l.animatedCard,t<M&&l.prevCard,t>M&&l.nextCard]);return r.createElement("span",{className:n,key:t},e)})),r.createElement("div",{className:l.carouselNav,"data-component":"carousel-nav"},r.createElement("div",{className:l.navSection}),r.createElement("div",{className:l.navSection},E.map((e,t)=>r.createElement(d,{key:t,index:t,isActive:t===M,onClick:N,ariaLabel:b}))),r.createElement("div",{className:S},r.createElement("button",{onClick:j,disabled:x,"aria-label":D},r.createElement(p,{direction:"left",isActive:!x})),r.createElement("button",{onClick:Y,disabled:F,"aria-label":k},r.createElement(p,{direction:"right",isActive:!F}))))):r.createElement("div",{"data-componLine truncated
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
.media-ui-OutlinedDropdown_wrapper-jDVzlgd6BVg-{margin-bottom:.5rem;position:relative;width:100%}.media-ui-OutlinedDropdown_wrapper-jDVzlgd6BVg- .css--input-base{margin:0}.media-ui-OutlinedDropdown_wrapper-jDVzlgd6BVg- .css--input-base [data-component=helper-text]{display:none}.media-ui-OutlinedDropdown_input-container--d6o57YImSo-{position:relative}.media-ui-OutlinedDropdown_input-MqEpmCTR85g-{padding-right:1.25rem;width:100%}.media-ui-OutlinedDropdown_icon-button-KLjKLzHAMZs-{align-items:center;bottom:0;display:flex;justify-content:center;padding-right:.625rem;position:absolute;right:0;top:0}.media-ui-OutlinedDropdown_icon-button-KLjKLzHAMZs-.media-ui-OutlinedDropdown_error-ddrIvhkkooE-{color:var(--color-red-700)}.media-ui-OutlinedDropdown_icon-button-KLjKLzHAMZs-:focus{border:none;outline:none}.media-ui-OutlinedDropdown_icon-button-KLjKLzHAMZs-:disabled .media-ui-OutlinedDropdown_chevron-1pMsIxL3WwY-:hover{background-color:transparent}.media-ui-OutlinedDropdown_chevron-1pMsIxL3WwY-{--tw-scale-x:1;--tw-scale-y:1;padding:.25rem;position:relative;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.media-ui-OutlinedDropdown_chevron-1pMsIxL3WwY-:hover{background-color:var(--color-gray-100);border-radius:624.9375rem}.media-ui-OutlinedDropdown_chevron-1pMsIxL3WwY- svg{height:100%;height:1rem;width:100%;width:1rem}.media-ui-OutlinedDropdown_chevron-1pMsIxL3WwY-.media-ui-OutlinedDropdown_open-chpaPyMcCZw-{--tw-scale-x:-1;--tw-scale-y:-1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.media-ui-OutlinedDropdown_menu-S8x6K0Uz8jw-{border-color:transparent;border-radius:.25rem;border-width:1px;display:none;margin-top:.25rem;max-height:18rem;overflow-y:auto;position:absolute;width:100%}.media-ui-OutlinedDropdown_menu-S8x6K0Uz8jw-.media-ui-OutlinedDropdown_menu-open-8HIWJAg-PKg-{--tw-shadow:0 1px 0.1875rem 0 rgba(0,0,0,.1),0 1px 0.125rem -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 0.1875rem 0 var(--tw-shadow-color),0 1px 0.125rem -1px var(--tw-shadow-color);background-color:var(--color-white);border-color:var(--color-gray-100);box-shadow:0 0 transparent,0 0 transparent,var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow,0 0 transparent),var(--tw-ring-shadow,0 0 transparent),var(--tw-shadow);display:block;z-index:10}.media-ui-OutlinedDropdown_item-0N0q4FaBwJA-{cursor:pointer;display:flex;flex-direction:column;font-size:1rem;line-height:1.125rem;padding:.625rem}.media-ui-OutlinedDropdown_item-0N0q4FaBwJA-.media-ui-OutlinedDropdown_small-D1-NcdsQHrs-{font-size:.875rem;line-height:1.3125rem;line-height:1rem}.media-ui-OutlinedDropdown_item-0N0q4FaBwJA-:hover{background-color:var(--color-gray-200)}.media-ui-OutlinedDropdown_item-0N0q4FaBwJA-.media-ui-OutlinedDropdown_item-selected-qgmseURsKSA-{background-color:var(--color-blue-100)}.media-ui-OutlinedDropdown_item-0N0q4FaBwJA-.media-ui-OutlinedDropdown_item-highlighted-lZX4gvpeiHQ-{background-color:var(--color-gray-200)}.media-ui-OutlinedDropdown_item-0N0q4FaBwJA-.media-ui-OutlinedDropdown_empty-TsBom1hnVW8-{color:var(--color-gray-500);font-style:italic}.media-ui-SparklineCard_wrapper-NjUSqP0P-ms-{border-color:var(--color-gray-200);border-radius:.5rem;border-width:1px;display:flex;flex-direction:column;gap:.375rem;padding:.625rem;width:-moz-min-content;width:min-content}.media-ui-SparklineCard_wrapper-NjUSqP0P-ms- .media-ui-SparklineCard_priceChange-azquEDGqV9w-{display:flex;flex-direction:column;gap:.625rem}.media-ui-SparklineCard_wrapper-NjUSqP0P-ms- [data-component=SecurityName]{font-weight:700}.media-ui-Sparkline_sparklineContainer-nhtZf2tc8Ao-{width:-moz-fit-content;width:fit-content}.media-ui-Sparkline_emptySparklineContainer-fOe7BTjNcFA-{height:2.8125rem;width:8.75rem}.media-ui-Sparkline_sparklineMarker-4guyQDKYF-M-{height:.375rem;width:.4375rem}.media-ui-Sparkline_sparklineLine-kKdRKzmzeZ4-{stroke-width:3;stroke-linejoin:round;stroke-linecap:round;fill:none}.media-ui-Sparkline_sparklineLine-kKdRKzmzeZ4-.media-ui-Sparkline_useThickerLine-hdgpo5LX3jQ-{stroke-width:5}.media-ui-Sparkline_sparklineLine-kKdRKzmzeZ4-.media-ui-Sparkline_useThinnerLine-xqtpFPaQVXU-{stroke-width:1}.media-ui-Sparkline_sparklineFill-VcOJeKIaxzA-{stroke:none;fill-opacity:.8;pointer-events:auto}.media-ui-Sparkline_sparklineReference-6DowYUMyQW0-{stroke:var(--color-gray-500);stroke-opacity:1;stroke-dasharray:2,2}.media-ui-Sparkline_sparklineReference-6DowYUMyQW0-.media-ui-Sparkline_useLongerDashes-iBS8FPfAW3E-{stroke-dasharray:7,4;stroke-width:2}.media-ui-Sparkline_sparklineReference-6DowYUMyQW0-.media-ui-Sparkline_useLighterReference-yF4IdiarKn4-{stroke:var(--color-gray-300)}.media-ui-Sparkline_positive-hiNE6HIsu6Q- .media-ui-Sparkline_sparklineLine-kKdRKzmzeZ4-{stroke:var(--color-green-refresh2024-500)}.media-ui-SpLine truncated
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
.media-ui-Link_default-KrHSq06NXRI-{text-decoration-line:underline}.media-ui-Link_default-KrHSq06NXRI-:hover{opacity:.7}.media-ui-FullWidthAd_fullWidthAd-waQ2dCOMRb8-{align-items:center;display:flex;justify-content:center;position:relative;width:100%}.media-ui-FullWidthAd_fullWidthAd-waQ2dCOMRb8-,.media-ui-FullWidthAd_fullWidthAdWrapper-fClHZteIk3k-{height:50vw;position:relative}@media screen and (min-width:650px){.media-ui-FullWidthAd_fullWidthAd-waQ2dCOMRb8-,.media-ui-FullWidthAd_fullWidthAdWrapper-fClHZteIk3k-{height:33.3vw}}@media screen and (min-width:950px){.media-ui-FullWidthAd_fullWidthAd-waQ2dCOMRb8-,.media-ui-FullWidthAd_fullWidthAdWrapper-fClHZteIk3k-{height:25vw}}@media screen and (min-width:1400px){.media-ui-FullWidthAd_fullWidthAd-waQ2dCOMRb8-,.media-ui-FullWidthAd_fullWidthAdWrapper-fClHZteIk3k-{height:20vw;max-height:25rem}}.media-ui-FullWidthAd_fullWidthAd-waQ2dCOMRb8->div{align-items:center;box-sizing:border-box;display:flex;height:100%;justify-content:center;overflow:hidden;width:100%}@media screen and (min-width:2000px){.media-ui-FullWidthAd_fullWidthAd-waQ2dCOMRb8->div{max-width:125rem}}.media-ui-FullWidthAd_fullWidthAd-waQ2dCOMRb8->div>div{text-align:center;width:100%}.media-ui-FullWidthAd_fullWidthAd-waQ2dCOMRb8- iframe{display:inline-block}.media-ui-LeaderboardAd_leaderboard-FZL8q-6lUUI-.media-ui-LeaderboardAd_parallax-9Z18W54a-Ss-{position:fixed}.media-ui-LeaderboardAd_leaderboard-FZL8q-6lUUI-.media-ui-LeaderboardAd_stickyParallax-CCvR3mPULtk-{position:sticky;top:0}.media-ui-LeaderboardAd_parallaxWrapper-JMVgdxR--aU-{background-color:var(--color-white);position:relative;z-index:10}.media-ui-LeaderboardAd_stickyParallaxWrapper-LEpvVekzJzE-{height:100vw}.media-ui-LeaderboardAd_leaderboard-FZL8q-6lUUI-[data-ad-size="5x16"] iframe{width:100vw!important}.media-ui-LeaderboardAd_hideEmptyAd-Xl5D-vwsjjM-[\:has\(\[data-ad-status\%3D\%22empty\%22\]\)]{display:none}.media-ui-LeaderboardAd_hideEmptyAd-Xl5D-vwsjjM-:has([data-ad-status=empty]){display:none}.media-ui-BaseAd_adPlaceholder-W4Hid5G045M-{background-color:var(--color-gray-200);font-size:.75rem;line-height:1.125rem}.media-ui-BaseAd_adPlaceholder-W4Hid5G045M-:before{--tw-content:"Advertisement";color:var(--color-gray-500);content:var(--tw-content);position:absolute}.media-ui-BaseAd_baseAd-dXBqvbLRJy0-{overflow:hidden}.media-ui-BaseAd_rendered-l1NeSo8x42M-:before{--tw-content:"";content:var(--tw-content)}.media-ui-BaseAd_hideEmptyAd-fxG2spO3FQY-[data-ad-status=empty]{display:none}.media-ui-BaseAd_adHeader-wkkvEuosJuI-{--tw-text-opacity:1;color:rgba(118,118,118,var(--tw-text-opacity));font-size:.75rem;line-height:1.125rem;margin-bottom:.375rem;text-align:center}.media-ui-Placeholder_placeholderParagraphWrapper-yqk1PvmrNoc-{margin-bottom:2rem}.media-ui-Placeholder_placeholderParagraphWrapper-yqk1PvmrNoc- .media-ui-Placeholder_shimmeringParagraph-CAmHW46Yvo4-{display:flex;flex-direction:column;margin-bottom:2rem}.media-ui-Placeholder_placeholderParagraphWrapper-yqk1PvmrNoc- .media-ui-Placeholder_shimmeringLine-eiuBL5rgMWw-{display:flex}.media-ui-Placeholder_placeholderParagraphWrapper-yqk1PvmrNoc- .media-ui-Placeholder_shimmeringLine-eiuBL5rgMWw-:last-child{margin-bottom:0}.media-ui-Placeholder_placeholderParagraphWrapper-yqk1PvmrNoc- .media-ui-Placeholder_shimmeringLine-eiuBL5rgMWw-:nth-child(2n){width:85%}.media-ui-Placeholder_shimmeringLine-eiuBL5rgMWw-{--tw-bg-opacity:1;background-color:rgba(239,239,239,var(--tw-bg-opacity));height:1.25rem;margin-bottom:.625rem}.media-ui-Placeholder_short-JSHimwvHcHU-{width:85%}.media-ui-Placeholder_shimmeringImage-3e9ZALBhsYQ-,.media-ui-Placeholder_shimmeringLine-eiuBL5rgMWw-{animation-duration:2.2s;animation-fill-mode:forwards;animation-iteration-count:infinite;animation-name:media-ui-Placeholder_shimmer-I1-O91t9Qwo-;animation-timing-function:linear;background:linear-gradient(90deg,#efefef 8%,#fafafa 18%,#efefef 33%);background-size:75rem 100%}.media-ui-Placeholder_shimmeringImage-3e9ZALBhsYQ-{height:100%;width:100%}@keyframes media-ui-Placeholder_shimmer-I1-O91t9Qwo-{0%{background-position:-75rem 0}to{background-position:75rem 0}}.media-ui-AddToWatchlist_addToWatchlist-OqbmudDWDm8- .media-ui-AddToWatchlist_header-mdkAol4MK2Y-{display:flex;justify-content:space-between}.media-ui-AddToWatchlist_addToWatchlist-OqbmudDWDm8- .media-ui-AddToWatchlist_confirmationText-ScKLt-g2BZg-{color:var(--color-black);font-size:1rem;font-weight:500;line-height:1.2}.media-ui-AddToWatchlist_addToWatchlist-OqbmudDWDm8- .media-ui-AddToWatchlist_showContainer-mdWFncAY8zo-{align-items:center;cursor:pointer;display:flex;margin:-.5rem;padding:.5rem}.media-ui-AddToWatchlist_addToWatchlist-OqbmudDWDm8- .media-ui-AddToWatchlist_showContainer-mdWFncAY8zo-:hover{opacity:.7}.media-ui-AddToWatchlist_addToWatchlist-OqbmudDWDm8- .media-ui-AddToWatchlist_showContainer-mdWFncAY8zo- svg{height:1rem;width:1rem}.media-ui-AddToWatchlist_addToWatchlist-OqbmudDWDm8- .media-ui-AddToWatchlist_showText--tq-pjkUBxQ-{font-size:.875rem;line-height:1.Line truncated
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
.styles_gridLayoutContainer__6qA_N .styles_stickyEnabled__RJ4og{position:sticky;top:1px}.styles_gridLayoutContainer__6qA_N .styles_terminalToutContainer__nG0tj{display:flex;justify-content:center}.styles_gridLayoutContainer__6qA_N .styles_terminalToutContainer__nG0tj .styles_terminalTout__c6q_u{display:none}@media (min-width:768px){.styles_gridLayoutContainer__6qA_N .styles_terminalToutContainer__nG0tj .styles_terminalTout__c6q_u{display:flex}}.styles_gridLayoutContainer__6qA_N .styles_terminalToutContainer__nG0tj .styles_terminalTout__c6q_u>div{align-items:center;gap:1rem;justify-content:flex-end;max-width:100%;padding:.5rem 1.875rem .5rem .75rem}@media (min-width:768px) and (max-width:1122px){.styles_gridLayoutContainer__6qA_N .styles_terminalToutContainer__nG0tj .styles_terminalTout__c6q_u>div{display:flex}}.styles_gridLayoutContainer__6qA_N .styles_terminalToutContainer__nG0tj .styles_terminalTout__c6q_u>div{white-space:nowrap}.styles_gridLayoutContainer__6qA_N .styles_terminalToutContainer__nG0tj .styles_terminalTout__c6q_u>div>div{flex-direction:row!important}.styles_gridLayoutContainer__6qA_N .styles_terminalToutContainer__nG0tj .styles_terminalTout__c6q_u>div span{white-space:nowrap}.styles_gridLayoutContainer__6qA_N .styles_terminalToutContainer__nG0tj .styles_terminalTout__c6q_u>div div{align-items:center;display:flex;gap:.25rem;margin-bottom:0!important}.styles_gridLayoutContainer__6qA_N .styles_terminalToutContainer__nG0tj .styles_mobileTerminalTout__GrCCq{padding-bottom:1.25rem;padding-top:1.25rem}@media (min-width:768px){.styles_gridLayoutContainer__6qA_N .styles_terminalToutContainer__nG0tj .styles_mobileTerminalTout__GrCCq{display:none}}.styles_gridLayoutContainer__6qA_N .styles_boxAd__jAmUW,.styles_gridLayoutContainer__6qA_N .styles_marketsSummary__emL_a,.styles_gridLayoutContainer__6qA_N .styles_newsletter__jmRm_{border-bottom-width:1px;border-color:var(--color-gray-300);padding-bottom:2rem;padding-top:2rem}.styles_gridLayoutContainer__6qA_N .styles_qualtricsSurvey__M2UcT{padding-top:1.125rem}.styles_gridLayoutContainer__6qA_N .styles_topicModule__yVt_L{padding-right:0}.style_sectionFront__UqNT5{display:flex;flex-direction:column;gap:1rem}.style_sectionFront__UqNT5 [data-sectionFront-cellState=loading]{display:none}.style_sectionFront__UqNT5 [data-sectionFront-cellState=success],.style_sectionFront__UqNT5.style_loading__EDCkt [data-sectionFront-cellState=loading]{display:block}.style_sectionFront__UqNT5.style_loading__EDCkt [data-sectionFront-cellState=success]{display:none}.style_section__LjMXv{display:flex;flex-direction:column;gap:1rem}@media (min-width:1123px){.style_section__LjMXv .style_boxAd__9_GYj{display:none}}@media (max-width:767px){.style_section__LjMXv .style_inBodyAd__nAGZe[data-ad-size="300x250"],.style_section__LjMXv .style_inBodyAd__nAGZe[data-ad-size="3x3"],.style_section__LjMXv .style_inBodyAd__nAGZe[data-ad-size="5x24"]{height:100vw;overflow:visible}}@media (min-width:1123px){.style_section__LjMXv .style_inBodyAd__nAGZe{display:none}}@media (max-width:767px){.style_section__LjMXv .style_inBodyAd__nAGZe[data-ad-size="3x4"]{height:auto}}.style_brokerBoxAd__Jw_Se{display:none}@media (min-width:1123px){.style_brokerBoxAd__Jw_Se{display:block}}.style_displayIdContainer__Uz7Gy{display:flex}.style_displayId__ZrwVL{text-decoration-line:none}.style_displayId__ZrwVL:hover{opacity:1}.style_currencyIdContainer__ZzZqr{align-items:center;display:flex}.style_quickAdd__N9GK9{padding-left:.5rem;padding-right:.5rem}.style_stockId__blFSc{color:var(--color-gray-700);font-family:BWHaasGroteskWeb,BWHaasGroteskWeb-fallback,Helvetica,Arial,sans-serif;font-size:.875rem;font-weight:500;line-height:.875rem}.style_stockId__blFSc:hover{color:var(--color-gray-900)}.style_stockName__8SqkX{width:8.125rem}@media (min-width:768px){.style_stockName__8SqkX{width:13.4375rem}}.style_stockName__8SqkX{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.style_stockName__8SqkX.style_crossRate__ctrTo{padding-left:.75rem;width:3.125rem}@media (max-width:767px){.style_stockName__8SqkX.style_consumerInterestRate__fEUGF{width:10.9375rem}}@media (min-width:1123px){.style_stockName__8SqkX.style_regionEconomiesName__rKk84{width:21.875rem}}@media (min-width:768px) and (max-width:1122px){.style_stockName__8SqkX.style_regionEconomiesName__rKk84{width:20.3125rem}}@media (min-width:768px){.style_stockName__8SqkX.style_regionEconomiesName__rKk84{text-wrap:wrap}}.style_entityName__seJpN{align-items:center;display:flex;gap:.25rem;padding-left:.75rem}.style_entityName__seJpN svg{height:.75rem;width:.75rem}.style_stockValue__fsPwb>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.125rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.125rem*var(--tw-space-x-reverse))}.style_stockValue__fsPwb{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.style_stockTime__SnJo8,.style_stoLine truncated
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6342],{93075:function(e,t,n){let r;n.d(t,{NI:function(){return ea},Y$:function(){return x},YF:function(){return el},Y_:function(){return ep},hU:function(){return em},ll:function(){return $},qq:function(){return f},qs:function(){return es},wD:function(){return er}});var l,u=n(67294),o=n(97145),i=n(37317),a=n(88388),c=n(73935),s=n(1371);function f(e){return u.useMemo(()=>e.every(e=>null==e)?null:t=>{e.forEach(e=>{"function"==typeof e?e(t):null!=e&&(e.current=t)})},e)}let d={...l||(l=n.t(u,2))},m=d.useInsertionEffect||(e=>e());function p(e){let t=u.useRef(()=>{});return m(()=>{t.current=e}),u.useCallback(function(){for(var e=arguments.length,n=Array(e),r=0;r<e;r++)n[r]=arguments[r];return null==t.current?void 0:t.current(...n)},[])}var v="undefined"!=typeof document?u.useLayoutEffect:u.useEffect;function b(){return(b=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}let g=!1,h=0,y=()=>"floating-ui-"+Math.random().toString(36).slice(2,6)+h++,E=d.useId||function(){let[e,t]=u.useState(()=>g?y():void 0);return v(()=>{null==e&&t(y())},[]),u.useEffect(()=>{g=!0},[]),e},x=u.forwardRef(function(e,t){let{context:{placement:n,elements:{floating:r},middlewareData:{arrow:l,shift:o}},width:a=14,height:c=7,tipRadius:s=0,strokeWidth:f=0,staticOffset:d,stroke:m,d:p,style:{transform:g,...h}={},...y}=e,x=E(),[R,k]=u.useState(!1);if(v(()=>{r&&"rtl"===(0,i.Dx)(r).direction&&k(!0)},[r]),!r)return null;let[M,w]=n.split("-"),A="top"===M||"bottom"===M,C=d;(A&&null!=o&&o.x||!A&&null!=o&&o.y)&&(C=null);let S=2*f,O=S/2,L=a/2*(-(s/8)+1),q=c/2*s/4,F=!!p,I=C&&"end"===w?"bottom":"top",T=C&&"end"===w?"right":"left";C&&R&&(T="end"===w?"left":"right");let W=(null==l?void 0:l.x)!=null?C||l.x:"",j=(null==l?void 0:l.y)!=null?C||l.y:"",N=p||"M0,0 H"+a+" L"+(a-L)+","+(c-q)+(" Q"+a/2+","+c+" ")+L+","+(c-q)+" Z",P={top:F?"rotate(180deg)":"",left:F?"rotate(90deg)":"rotate(-90deg)",bottom:F?"":"rotate(180deg)",right:F?"rotate(-90deg)":"rotate(90deg)"}[M];return u.createElement("svg",b({},y,{"aria-hidden":!0,ref:t,width:F?a:a+S,height:a,viewBox:"0 0 "+a+" "+(c>a?c:a),style:{position:"absolute",pointerEvents:"none",[T]:W,[I]:j,[M]:A||F?"100%":"calc(100% - "+S/2+"px)",transform:[P,g].filter(e=>!!e).join(" "),...h}}),S>0&&u.createElement("path",{clipPath:"url(#"+x+")",fill:"none",stroke:m,strokeWidth:S+(p?0:1),d:N}),u.createElement("path",{stroke:S&&!p?y.fill:"none",d:N}),u.createElement("clipPath",{id:x},u.createElement("rect",{x:-O,y:O*(F?-1:1),width:a+S,height:a})))}),R=u.createContext(null),k=u.createContext(null),M=()=>{var e;return(null==(e=u.useContext(R))?void 0:e.id)||null},w=()=>u.useContext(k);function A(e){return"data-floating-ui-"+e}function C(e){let t=(0,u.useRef)(e);return v(()=>{t.current=e}),t}let S=0;function O(e,t){void 0===t&&(t={});let{preventScroll:n=!1,cancelPrevious:r=!0,sync:l=!1}=t;r&&cancelAnimationFrame(S);let u=()=>null==e?void 0:e.focus({preventScroll:n});l?u():S=requestAnimationFrame(u)}function L(e,t){let n=e.filter(e=>{var n;return e.parentId===t&&(null==(n=e.context)?void 0:n.open)}),r=n;for(;r.length;)r=e.filter(e=>{var t;return null==(t=r)?void 0:t.some(t=>{var n;return e.parentId===t.id&&(null==(n=e.context)?void 0:n.open)})}),n=n.concat(r);return n}let q=new WeakMap,F=new WeakSet,I={},T=0,W=()=>"undefined"!=typeof HTMLElement&&"inert"in HTMLElement.prototype,j=e=>e&&(e.host||j(e.parentNode)),N=(e,t)=>t.map(t=>{if(e.contains(t))return t;let n=j(t);return e.contains(n)?n:null}).filter(e=>null!=e);function P(e,t,n){void 0===t&&(t=!1),void 0===n&&(n=!1);let r=(0,o.Me)(e[0]).body;return function(e,t,n,r){let l="data-floating-ui-inert",u=r?"inert":n?"aria-hidden":null,o=N(t,e),a=new Set,c=new Set(o),s=[];I[l]||(I[l]=new WeakMap);let f=I[l];return o.forEach(function e(t){!(!t||a.has(t))&&(a.add(t),t.parentNode&&e(t.parentNode))}),function e(t){!t||c.has(t)||[].forEach.call(t.children,t=>{if("script"!==(0,i.wk)(t)){if(a.has(t))e(t);else{let e=u?t.getAttribute(u):null,n=null!==e&&"false"!==e,r=(q.get(t)||0)+1,o=(f.get(t)||0)+1;q.set(t,r),f.set(t,o),s.push(t),1===r&&n&&F.add(t),1===o&&t.setAttribute(l,""),!n&&u&&t.setAttribute(u,"true")}}})}(t),a.clear(),T++,()=>{s.forEach(e=>{let t=(q.get(e)||0)-1,n=(f.get(e)||0)-1;q.set(e,t),f.set(e,n),t||(!F.has(e)&&u&&e.removeAttribute(u),F.delete(e)),n||e.removeAttribute(l)}),--T||(q=new WeakMap,q=new WeakMap,F=new WeakSet,I={})}}(e.concat(Array.from(r.querySelectorAll("[aria-live]"))),r,t,n)}let K=()=>({getShadowRoot:!0,displayCheck:"function"==typeof ResizeObserver&&ResizeObserver.toString().includes("[native code]")?"full":"none"});function D(e,t){let n=(0,a.tabbable)(e,K());"prev"===t&&n.reverse();let r=n.indexOf((0,o.AW)((0,o.Me)(e)));return n.slice(r+1)[0]}function B(){return D(document.body,"next")}function _(){return D(document.body,"prev")}function Y(e,t){let
Line truncated
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6239],{42977:function(t,e,r){"use strict";r.d(e,{r5:function(){return d},iJ:function(){return l},CO:function(){return y},Bx:function(){return f}});var s,i,n=r(85893),o=r(67294),a=r(73935),u=r(31361);let c="pending",h=(0,o.createContext)({paywallStatus:c,paywallDetails:{},checkPaywallState:()=>void 0,fortressInViewState:void 0});function l({children:t,options:e,inView:r}){let[s,i]=(0,o.useState)(r),[a,u]=(0,o.useState)(c),[l,f]=(0,o.useState)({}),d=(0,o.useRef)(!1);(0,o.useEffect)(()=>{if(!window.fortressCorrelationId){let t=window.crypto?.randomUUID()||"UNDEFINED_CORRELATION_ID";window.fortressCorrelationId=t,window.newrelic?.setCustomAttribute("fortressCorrelationId",t),window.newrelic?.setCustomAttribute("isMobileWebView",navigator.userAgent.includes("BloombergHorseshoe"))}},[]),(0,o.useEffect)(()=>{if(a!==c&&!d.current){d.current=!0;try{if(performance.mark("fortress-provider-paywall-decided"),performance.getEntriesByName("fortress-provider-paywall-decision-time").length>0)return;performance.measure("fortress-provider-paywall-decision-time","fortress-assets-fetch-start","fortress-provider-paywall-decided");let t=performance.getEntriesByName("fortress-provider-paywall-decision-time")[0];window.newrelic?.addPageAction("fortressProviderPaywallInitialDecisionTime",{durationMs:t.duration,decision:a})}catch{}}},[a]);let p=(t,r)=>{i(r),window.fastPath?.evaluate((t,e={})=>{u(t),f(e)},t||e),window.FortressStub=window.FortressStub||{},window.FortressStub.cmd=window.FortressStub.cmd||[],window.FortressStub.cmd.push(()=>{!1!==r&&window.fortressClient.addContent((t,e={})=>{u(t),f(e)},t||e)})};return(0,o.useEffect)(()=>{p(e,r),i(r)},[r]),(0,o.useEffect)(()=>()=>{console.warn("[FORTRESS] Unmounting Fortress Provider"),window.newrelic?.addPageAction("fortressProviderUnmounted")},[]),(0,n.jsx)(h.Provider,{value:{paywallStatus:a,paywallDetails:l,checkPaywallState:p,fortressInViewState:s},children:t})}function f(){let t=(0,o.useContext)(h);if(void 0===t)throw Error("useFortress must be used within a FortressProvider");return t}function d({fortressClientDomain:t,onLoadHandler:e,color:r}){return((0,o.useEffect)(()=>{e&&e()},[]),"development"===r)?(0,n.jsx)("script",{src:`https://${t}/s3/fence/fast-path/staging/v1/app.bundle.js`}):r&&"production"!==r?(i.STAGING,(0,n.jsx)("script",{src:`https://${t}/s3/fence/fast-path/${r}/v1/app.bundle.js`})):t===i.STAGING?(0,n.jsx)("script",{src:`https://${t}/s3/fence/fast-path/staging/v1/app.bundle.js`}):(0,n.jsx)("script",{src:`https://${t}/s3/fence/fast-path/v1/app.bundle.js`})}function p(){window["preact/compat"]||(window["preact/compat"]={...a,...o}),window["@foundation/statsig"]||(window["@foundation/statsig"]=u)}function y({fortressClientDomain:t,onLoadHandler:e,color:r,esm:s=!1}){let[a,u]=(0,o.useState)(null),c=()=>{try{performance.mark("fortress-assets-fetch-complete");let t=performance.getEntriesByName("fortress-assets-fetch-time");if(0===t.length){performance.measure("fortress-assets-fetch-time","fortress-assets-fetch-start","fortress-assets-fetch-complete");let t=performance.getEntriesByName("fortress-assets-fetch-time")[0];window.newrelic?.addPageAction("fortressAssetsFetchTime",{durationMs:t.duration})}}catch{}window.FortressStub=window.FortressStub||{},window.FortressStub.cmd=window.FortressStub.cmd||[],window.FortressStub.cmd.filter(t=>"function"==typeof t).forEach(t=>t()),window.FortressStub.cmd=[],window.FortressStub.cmd.push=t=>("function"==typeof t&&t(),0),e&&e()};return(0,o.useEffect)(p,[]),(0,o.useEffect)(()=>{if(!a)return;a.onload=c;try{"undefined"!=typeof performance&&performance.mark&&performance.mark("fortress-assets-fetch-start")}catch{}let e=new URL(window.location.href),n=new URLSearchParams(window.location.search),o="true"===n.get("forceFortressV3")||e.pathname.startsWith("/markets/watchlist")||e.pathname.startsWith("/jp/"),u="true"===n.get("forceESM"),h=o?"fortress/":"",l=o&&(s||u)?"es/":"";if(window.newrelic?.addPageAction("fortressClientVersionType",{versionType:o?"v3":"v2"}),l&&(a.type="module"),r&&"production"!==r){a.src=`https://${t}/s3/fence/fortress-client/${h}${r}/v1/${l}app.bundle.js`;return}if(t===i.STAGING){a.src=`https://${t}/s3/fence/fortress-client/${h}staging/v1/${l}app.bundle.js`;return}a.src=`https://${t}/s3/fence/fortress-client/${h}v1/${l}app.bundle.js`},[a]),(0,n.jsx)("script",{ref:u,id:"fortress-script",async:!0})}(s=i||(i={})).PRODUCTION="assets.bwbx.io",s.STAGING="assets-dev.bwbx.io"},51956:function(t,e){"use strict";var r,s;e.I=void 0,(s=r||(e.I=r={})).PRODUCTION="assets.bwbx.io",s.STAGING="assets-dev.bwbx.io"},83116:function(t,e,r){"use strict";r.d(e,{Z:function(){return n}});let s={default:"https://www.bloomberg.com/logo-bloomberg.svg",opinion:"https://www.bloomberg.com/logo-bloomberg_opinion.svg",businessweek:"https://www.bloomberg.com/logo-bloomberg_businessweek.svg"},i="markets,technology,pursuits,politics,opinion,businessweek,green,equality,citylab,crypto,industries,economicsLine truncated
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6336],{76489:function(e,t){t.parse=function(e,t){if("string"!=typeof e)throw TypeError("argument str must be a string");for(var r={},s=e.split(";"),o=(t||{}).decode||i,n=0;n<s.length;n++){var h=s[n],a=h.indexOf("=");if(!(a<0)){var c=h.substring(0,a).trim();if(void 0==r[c]){var d=h.substring(a+1,h.length).trim();'"'===d[0]&&(d=d.slice(1,-1)),r[c]=function(e,t){try{return t(e)}catch(t){return e}}(d,o)}}}return r},t.serialize=function(e,t,i){var o=i||{},n=o.encode||r;if("function"!=typeof n)throw TypeError("option encode is invalid");if(!s.test(e))throw TypeError("argument name is invalid");var h=n(t);if(h&&!s.test(h))throw TypeError("argument val is invalid");var a=e+"="+h;if(null!=o.maxAge){var c=o.maxAge-0;if(isNaN(c)||!isFinite(c))throw TypeError("option maxAge is invalid");a+="; Max-Age="+Math.floor(c)}if(o.domain){if(!s.test(o.domain))throw TypeError("option domain is invalid");a+="; Domain="+o.domain}if(o.path){if(!s.test(o.path))throw TypeError("option path is invalid");a+="; Path="+o.path}if(o.expires){if("function"!=typeof o.expires.toUTCString)throw TypeError("option expires is invalid");a+="; Expires="+o.expires.toUTCString()}if(o.httpOnly&&(a+="; HttpOnly"),o.secure&&(a+="; Secure"),o.sameSite)switch("string"==typeof o.sameSite?o.sameSite.toLowerCase():o.sameSite){case!0:case"strict":a+="; SameSite=Strict";break;case"lax":a+="; SameSite=Lax";break;case"none":a+="; SameSite=None";break;default:throw TypeError("option sameSite is invalid")}return a};var i=decodeURIComponent,r=encodeURIComponent,s=/^[\u0009\u0020-\u007e\u0080-\u00ff]+$/},47041:function(e,t,i){var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,i=1,r=arguments.length;i<r;i++)for(var s in t=arguments[i])Object.prototype.hasOwnProperty.call(t,s)&&(e[s]=t[s]);return e}).apply(this,arguments)},s=this&&this.__rest||function(e,t){var i={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(i[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var s=0,r=Object.getOwnPropertySymbols(e);s<r.length;s++)0>t.indexOf(r[s])&&Object.prototype.propertyIsEnumerable.call(e,r[s])&&(i[r[s]]=e[r[s]]);return i};Object.defineProperty(t,"__esModule",{value:!0}),t.checkCookies=t.hasCookie=t.removeCookies=t.deleteCookie=t.setCookies=t.setCookie=t.getCookie=t.getCookies=void 0;var o=i(76489),n=function(){return"undefined"!=typeof window},h=function(e){void 0===e&&(e="");try{var t=JSON.stringify(e);return/^[\{\[]/.test(t)?t:e}catch(t){return e}};t.getCookies=function(e){if(e&&(t=e.req),!n())return t&&t.cookies?t.cookies:t&&t.headers&&t.headers.cookie?(0,o.parse)(t.headers.cookie):{};for(var t,i={},r=document.cookie?document.cookie.split("; "):[],s=0,h=r.length;s<h;s++){var a=r[s].split("="),c=a.slice(1).join("=");i[a[0]]=c}return i},t.getCookie=function(e,i){var r,s=(0,t.getCookies)(i)[e];if(void 0!==s)return"true"===(r=s?s.replace(/(%[0-9A-Z]{2})+/g,decodeURIComponent):s)||"false"!==r&&("undefined"!==r?"null"===r?null:r:void 0)},t.setCookie=function(e,t,i){if(i){var a,c,d,l=i.req,f=i.res,u=s(i,["req","res"]);c=l,d=f,a=u}var p=(0,o.serialize)(e,h(t),r({path:"/"},a));if(n())document.cookie=p;else if(d&&c){var g=d.getHeader("Set-Cookie");if(Array.isArray(g)||(g=g?[String(g)]:[]),d.setHeader("Set-Cookie",g.concat(p)),c&&c.cookies){var y=c.cookies;""===t?delete y[e]:y[e]=h(t)}if(c&&c.headers&&c.headers.cookie){var y=(0,o.parse)(c.headers.cookie);""===t?delete y[e]:y[e]=h(t),c.headers.cookie=Object.entries(y).reduce(function(e,t){return e.concat("".concat(t[0],"=").concat(t[1],";"))},"")}}},t.setCookies=function(e,i,r){return console.warn("[WARN]: setCookies was deprecated. It will be deleted in the new version. Use setCookie instead."),(0,t.setCookie)(e,i,r)},t.deleteCookie=function(e,i){return(0,t.setCookie)(e,"",r(r({},i),{maxAge:-1}))},t.removeCookies=function(e,i){return console.warn("[WARN]: removeCookies was deprecated. It will be deleted in the new version. Use deleteCookie instead."),(0,t.deleteCookie)(e,i)},t.hasCookie=function(e,i){return!!e&&(0,t.getCookies)(i).hasOwnProperty(e)},t.checkCookies=function(e,i){return console.warn("[WARN]: checkCookies was deprecated. It will be deleted in the new version. Use hasCookie instead."),(0,t.hasCookie)(e,i)}},31356:function(e,t,i){i.d(t,{Sq:function(){return $},TJ:function(){return j},bg:function(){return H}});var r=i(77997),s=i(34155);!function(){let e={};try{if(s)return s.env=Object.assign({},s.env),void Object.assign(s.env,e)}catch(e){}globalThis.process={env:e}}();let o=new TextEncoder;function n(e,t,i){let r=t,s=r+i,o=[],n="";for(;r<s;){let t=e[r++];if(128&t){if(192==(224&t)){let i=63&e[r++];o.push((31&t)<<6|i)}else if(224==(240&t)){let i=63&e[r++],s=63&e[r++];o.push((31&t)<<12|i<<6|s)}else if(240==(248&t)){let i=(7&t)<<18|(63&e[r++])<<12|(63&e[r++])<<6|63&e[r++];i>65535&&(i-=65536,o.push(i>>>10&1023|55296),i=56320|1023&i),o.push(i)}else o.push(t)}else o.push(t);o.Line truncated
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[686],{30686:function(e,t,n){"use strict";let r;n.d(t,{zx:function(){return ti},Zb:function(){return ts},hQ:function(){return aN},LA:function(){return tv},Lt:function(){return ud},kC:function(){return i_},hU:function(){return uI},II:function(){return um},aV:function(){return uj},u_:function(){return uY},Y2:function(){return ug},Od:function(){return u6},xv:function(){return iB}});var l,i,o,a,u,s,c,d,f,p,v,h,m,g,y,b,x,w,S,C,E,R=n(85893),k=n(67294),I=n.t(k,2),M=function(){function e(e){var t=this;this._insertTag=function(e){var n;n=0===t.tags.length?t.insertionPoint?t.insertionPoint.nextSibling:t.prepend?t.container.firstChild:t.before:t.tags[t.tags.length-1].nextSibling,t.container.insertBefore(e,n),t.tags.push(e)},this.isSpeedy=void 0===e.speedy||e.speedy,this.tags=[],this.ctr=0,this.nonce=e.nonce,this.key=e.key,this.container=e.container,this.prepend=e.prepend,this.insertionPoint=e.insertionPoint,this.before=null}var t=e.prototype;return t.hydrate=function(e){e.forEach(this._insertTag)},t.insert=function(e){if(this.ctr%(this.isSpeedy?65e3:1)==0){var t;this._insertTag(((t=document.createElement("style")).setAttribute("data-emotion",this.key),void 0!==this.nonce&&t.setAttribute("nonce",this.nonce),t.appendChild(document.createTextNode("")),t.setAttribute("data-s",""),t))}var n=this.tags[this.tags.length-1];if(this.isSpeedy){var r=function(e){if(e.sheet)return e.sheet;for(var t=0;t<document.styleSheets.length;t++)if(document.styleSheets[t].ownerNode===e)return document.styleSheets[t]}(n);try{r.insertRule(e,r.cssRules.length)}catch(e){}}else n.appendChild(document.createTextNode(e));this.ctr++},t.flush=function(){this.tags.forEach(function(e){var t;return null==(t=e.parentNode)?void 0:t.removeChild(e)}),this.tags=[],this.ctr=0},e}(),P=Math.abs,A=String.fromCharCode,T=Object.assign;function N(e,t,n){return e.replace(t,n)}function O(e,t){return e.indexOf(t)}function _(e,t){return 0|e.charCodeAt(t)}function F(e,t,n){return e.slice(t,n)}function D(e){return e.length}function j(e,t){return t.push(e),e}var z=1,H=1,V=0,B=0,L=0,W="";function q(e,t,n,r,l,i,o){return{value:e,root:t,parent:n,type:r,props:l,children:i,line:z,column:H,length:o,return:""}}function U(e,t){return T(q("",null,null,"",null,null,0),e,{length:-e.length},t)}function Y(){return L=B<V?_(W,B++):0,H++,10===L&&(H=1,z++),L}function Z(){return _(W,B)}function K(e){switch(e){case 0:case 9:case 10:case 13:case 32:return 5;case 33:case 43:case 44:case 47:case 62:case 64:case 126:case 59:case 123:case 125:return 4;case 58:return 3;case 34:case 39:case 40:case 91:return 2;case 41:case 93:return 1}return 0}function X(e){return z=H=1,V=D(W=e),B=0,[]}function G(e){var t,n;return(t=B-1,n=function e(t){for(;Y();)switch(L){case t:return B;case 34:case 39:34!==t&&39!==t&&e(L);break;case 40:41===t&&e(t);break;case 92:Y()}return B}(91===e?e+2:40===e?e+1:e),F(W,t,n)).trim()}var $="-ms-",J="-moz-",Q="-webkit-",ee="comm",et="rule",en="decl",er="@keyframes";function el(e,t){for(var n="",r=e.length,l=0;l<r;l++)n+=t(e[l],l,e,t)||"";return n}function ei(e,t,n,r){switch(e.type){case"@layer":if(e.children.length)break;case"@import":case en:return e.return=e.return||e.value;case ee:return"";case er:return e.return=e.value+"{"+el(e.children,r)+"}";case et:e.value=e.props.join(",")}return D(n=el(e.children,r))?e.return=e.value+"{"+n+"}":""}function eo(e,t,n,r,l,i,o,a,u,s,c){for(var d=l-1,f=0===l?i:[""],p=f.length,v=0,h=0,m=0;v<r;++v)for(var g=0,y=F(e,d+1,d=P(h=o[v])),b=e;g<p;++g)(b=(h>0?f[g]+" "+y:N(y,/&\f/g,f[g])).trim())&&(u[m++]=b);return q(e,t,n,0===l?et:a,u,s,c)}function ea(e,t,n,r){return q(e,t,n,en,F(e,0,r),F(e,r+1,-1),r)}var eu=function(e,t,n){for(var r=0,l=0;r=l,l=Z(),38===r&&12===l&&(t[n]=1),!K(l);)Y();return F(W,e,B)},es=function(e,t){var n=-1,r=44;do switch(K(r)){case 0:38===r&&12===Z()&&(t[n]=1),e[n]+=eu(B-1,t,n);break;case 2:e[n]+=G(r);break;case 4:if(44===r){e[++n]=58===Z()?"&\f":"",t[n]=e[n].length;break}default:e[n]+=A(r)}while(r=Y());return e},ec=function(e,t){var n;return n=es(X(e),t),W="",n},ed=new WeakMap,ef=function(e){if("rule"===e.type&&e.parent&&!(e.length<1)){for(var t=e.value,n=e.parent,r=e.column===n.column&&e.line===n.line;"rule"!==n.type;)if(!(n=n.parent))return;if((1!==e.props.length||58===t.charCodeAt(0)||ed.get(n))&&!r){ed.set(e,!0);for(var l=[],i=ec(t,l),o=n.props,a=0,u=0;a<i.length;a++)for(var s=0;s<o.length;s++,u++)e.props[u]=l[a]?i[a].replace(/&\f/g,o[s]):o[s]+" "+i[a]}}},ep=function(e){if("decl"===e.type){var t=e.value;108===t.charCodeAt(0)&&98===t.charCodeAt(2)&&(e.return="",e.value="")}},ev=[function(e,t,n,r){if(e.length>-1&&!e.return)switch(e.type){case en:e.return=function e(t,n){switch(45^_(t,0)?(((n<<2^_(t,0))<<2^_(t,1))<<2^_(t,2))<<2^_(t,3):0){case 5103:return Q+"print-"+t+t;case 5737:case 4201:case 3177:case 3433:case 1641:case 4457:case 2921:case 5572:case 6356:case 5844:case 3191:case 6645:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 4215:case 6389Line truncated
|
||||||
+18
@@ -0,0 +1,18 @@
|
|||||||
|
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7018],{38742:function(e,t,n){"use strict";n.d(t,{sC:function(){return u},wU:function(){return o},gq:function(){return a},W4:function(){return r}});var i=n(85893);function r({description:e,image:t,isArticle:n,title:r,twitterHandle:o,creator:a}){let s=[(0,i.jsx)("meta",{name:"twitter:card",content:"summary_large_image"},"twitter:card"),(0,i.jsx)("meta",{name:"twitter:site",content:o},"twitter:site"),(0,i.jsx)("meta",{name:"twitter:description",content:e},"twitter:description"),(0,i.jsx)("meta",{name:"twitter:title",content:r},"twitter:title"),(0,i.jsx)("meta",{name:"twitter:image",content:t},"twitter:image"),(0,i.jsx)("meta",{name:"twitter:tile:template:testing",content:"2"},"twitter:tile:template:testing"),(0,i.jsx)("meta",{name:"twitter:tile:image",content:t},"twitter:tile:image"),(0,i.jsx)("meta",{name:"twitter:tile:image:alt",content:r},"twitter:tile:image:alt")];return n&&s.push((0,i.jsx)("meta",{name:"twitter:cta",content:"Read on Bloomberg"},"twitter:cta")),a&&s.push((0,i.jsx)("meta",{name:"twitter:creator",content:a},"twitter:creator")),s}function o({type:e,title:t,description:n,url:r,image:o,keywords:a}){let s=[(0,i.jsx)("meta",{property:"og:description",content:n},"og:description"),(0,i.jsx)("meta",{property:"og:image",content:o},"og:image"),(0,i.jsx)("meta",{property:"og:site_name",content:"Bloomberg.com"},"og:site_name"),(0,i.jsx)("meta",{property:"og:title",content:t},"og:title"),(0,i.jsx)("meta",{property:"og:type",content:e},"og:type"),(0,i.jsx)("meta",{property:"og:url",content:r},"og:url")];return a&&s.push((0,i.jsx)("meta",{property:"og:keywords",content:a},"og:keywords")),s}function a({canonical:e,description:t,keywords:n}){let r=[(0,i.jsx)("link",{rel:"canonical",href:e},"static-metadata-tags--canonical"),(0,i.jsx)("meta",{name:"viewport",content:"width=device-width, initial-scale=1, viewport-fit=cover"},"static-metadata-tags--viewport"),(0,i.jsx)("meta",{name:"apple-itunes-app",content:"app-id=281941097"},"static-metadata-tags--apple-itunes-app"),(0,i.jsx)("meta",{name:"robots",content:"max-image-preview:large"},"static-metadata-tags--robots")];return t&&r.push((0,i.jsx)("meta",{name:"description",content:t},"static-metadata-tags--description")),n&&r.push((0,i.jsx)("meta",{name:"keywords",content:n},"static-metadata-tags--keywords")),r}let s={blue:"/env/favicon-blue.png",green:"/env/favicon-green.png",orange:"/env/favicon-phoenix.png",purple:"/env/favicon-purple.png",red:"/env/favicon-red.png",yellow:"/env/favicon-yellow.png",staging:"/env/favicon-gray.png"},l={gladfly:"/favicon-blue.png",opinion:"/favicon-blue.png",view:"/favicon-blue.png"};var u=({brand:e="",baseUrl:t="https://www.bloomberg.com",env:n="production"})=>{let r=l[e]??"/favicon-black.png";"production"!==n&&s[n]&&(r=s[n]);let o=`${t}${r}`;return(0,i.jsx)("link",{rel:"icon",type:"image/png",href:o})}},76795:function(e,t,n){"use strict";var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.useAdOptions=t.adOptionsContext=void 0;let r=i(n(94962)),o=n(67294);t.adOptionsContext=(0,o.createContext)({adOptions:{}}),t.useAdOptions=e=>{let{adOptions:n,articleMetadata:i,customRefreshOptions:a}=(0,o.useContext)(t.adOptionsContext);return{adOptions:(0,o.useMemo)(()=>(0,r.default)(n,null!=e?e:{}),[n,e]),articleMetadata:i,customRefreshOptions:a}}},36257:function(e,t,n){"use strict";var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});let r=n(85893),o=i(n(4298)),a=n(67294),s=i(n(85252)),l=n(76795),u=n(93064),d=i(n(45092)),c=(e,t,n)=>[e,t,n].filter(Boolean).join("-"),p=(e,t)=>(0,r.jsx)(o.default,{id:"sparkle-init",strategy:"beforeInteractive",dangerouslySetInnerHTML:{__html:`
|
||||||
|
window.Sparkle.cmd.push(function(){
|
||||||
|
const decoupleDiv = window.document.createElement("div");
|
||||||
|
decoupleDiv.id = "${e}";
|
||||||
|
decoupleDiv.setAttribute("data-testid", "sparkle-ad");
|
||||||
|
decoupleDiv.setAttribute("data-ad-status", "rendering");
|
||||||
|
decoupleDiv.setAttribute("className", "");
|
||||||
|
window.document.body.appendChild(decoupleDiv);
|
||||||
|
var adOptions = ${JSON.stringify(t)}
|
||||||
|
window.Sparkle.createAd({...adOptions});
|
||||||
|
});
|
||||||
|
`},type:"text/javascript"});t.default=function(e){let{options:t,positionIncrement:n,onEmpty:i,onRender:o}=e,h=(0,a.useRef)(null),m=c("leaderboard","decoupled",n),f=(0,s.default)(),{sparkle:g}=f,{adOptions:v}=(0,l.useAdOptions)(t),b=(0,u.constructDecoupleAdOptions)({...v,containerId:m},f),[y,I]=(0,a.useState)();return(0,d.default)(v.refreshOptions,y),(0,a.useEffect)(()=>{var e;let t=document.querySelector(`div[id^='${m}']`);t&&h.current&&(null===(e=h.current.parentNode)||void 0===e||e.appendChild(t))},[h.current]),(0,a.useEffect)(()=>{if(!y)return;let e=document.querySelector(`div[id^='${m}']`);y.onRender(()=>{null==e||e.setAttribute("data-ad-status","rendered"),null==e||e.setAttribute("className","display"),"function"==typeof o&&o(y)}),y.onEmpty(()=>{null==e||e.setAttribute("data-ad-status","empty"),null==e||e.setAttribute("className",""),"function"==typeof i&&i()})},[y]),(0,a.useEffect)(()=>{if(!g)return;window.addEventListener("sparkleAdCreated",e=>{let{detail:{containerId:t}}=e;y||t!==m||I(g.getAd(m))},{once:!0});let e=g.getAd(m);e&&I(e)},[g]),(0,r.jsxs)(r.Fragment,{children:[p(m,b),(0,r.jsx)("div",{ref:h,style:{display:"none"}})]})}},75186:function(e,t,n){"use strict";var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});let r=n(85893),o=n(67294),a=n(93064),s=i(n(45092)),l=i(n(85252)),u=n(76795);t.default=function(e){let{id:t,onEmpty:n,onRender:i}=e,d=(0,l.default)(),{adOptions:c}=(0,u.useAdOptions)(e.options),[p,h]=(0,o.useState)("rendering"),[m,f]=(0,o.useState)(""),[g,v]=(0,o.useState)(),{sparkle:b,disableAds:y,userState:I}=d,w=y||c.disableAds,S=!I.isLoaded;return(0,s.default)(c.refreshOptions,g),(0,o.useEffect)(()=>{let e=(0,a.constructAdOptions)({...c,containerId:t},d);!b||w||S||b.createAd(e).then(e=>{e.onRender(()=>{f("display"),h("rendered"),v(e),"function"==typeof i&&i(e)}),e.onEmpty(()=>{f(""),h("empty"),"function"==typeof n&&n()})}).catch(e=>{console.error("Could not instantiate ad:","Error:",e)})},[b,w,S]),(0,r.jsx)("div",{id:t,"data-testid":"sparkle-ad","data-ad-status":p,className:m})}},77041:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.sparkleContext=t.DEFAULT_NETWORK_CODE=void 0;let i=n(67294),r=n(58436);t.DEFAULT_NETWORK_CODE="5262";let o={language:"en",sparkle:null,disableAds:!1,defaultAdCode:"",sparkleInitOptions:{networkCode:t.DEFAULT_NETWORK_CODE,breakpoints:r.DEFAULT_BREAKPOINTS},userState:{isLoaded:!1}};t.sparkleContext=(0,i.createContext)(o)},35426:function(e,t,n){"use strict";var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});let r=n(85893),o=n(67294),a=i(n(4298)),s=n(77041),l=i(n(85399)),u=i(n(58436)),d=(e,t)=>(0,r.jsx)(a.default,{id:"sparkle-init",strategy:"beforeInteractive",dangerouslySetInnerHTML:{__html:`
|
||||||
|
window.Sparkle.cmd.push(function(){
|
||||||
|
var lang = document.documentElement.lang || "en";
|
||||||
|
var options = ${JSON.stringify(e)}
|
||||||
|
window.Sparkle.init({ ...options, adBlockerShouldBeBlocked: lang !== "ja" });
|
||||||
|
});
|
||||||
|
`},type:t||"text/javascript"});t.default=function(e){let{children:t,debug:n,initFn:i=d,type:a="text/javascript"}=e,[c,p]=(0,o.useState)(null),{contextValue:h,options:m}=(0,u.default)(e,c,!1);return(0,l.default)(n,c),(0,o.useEffect)(()=>{window.Sparkle.cmd.push(()=>{p(window.Sparkle)})},[]),(0,r.jsxs)(r.Fragment,{children:[i(m,a),(0,r.jsx)(s.sparkleContext.Provider,{value:h,children:t})]})}},93064:function(e,t,n){"use strict";var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.constructAdOptions=t.constructDecoupleAdOptions=void 0;let r=i(n(94962)),o=n(71730);t.constructDecoupleAdOptions=function(e,t){return(0,r.default)({disableAds:t.disableAds,adCode:t.defaultAdCode,isDecoupled:!0},e)},t.constructAdOptions=function(e,t){return(0,r.default)({disableAds:t.disableAds,adCode:t.defaultAdCode},{targeting:{url:window.location.pathname,...function(e){let{userInfo:t}=e;return(null==t?void 0:t.isTerminalSubscriber)?{subscriber:"term"}:(null==t?void 0:t.isBBGSubscriber)?{subscriber:"yes"}:{subscriber:"no"}}(t.userState)}},{targetingModifiers:[o.querystringModifier]},e)}},71730:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.querystringModifier=void 0,t.querystringModifier=function(e){let t=new URLSearchParams(window.location.search),n={};for(let[e,i]of t.entries())n[e]=i;return{...e,...n}}},85399:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});let i=n(67294);t.default=(e=!1,t)=>{(0,i.useEffect)(()=>{let n=new URLSearchParams(window.location.search),i=e||!!n.get("debugAds");t&&i&&t.showDebugInformationOnRender()},[t])}},45092:function(e,t,n){"use strict";var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});let r=n(67294),o=i(n(85252));t.default=(e,t)=>{let{refreshInterval:n,changeCorrelator:i=!1}=e||{},{sparkle:a}=(0,o.default)(),[s,l]=(0,r.useState)();(0,r.useEffect)(()=>(a&&t&&n&&(clearInterval(s),l(window.setInterval(()=>{a.refresh([t],{changeCorrelator:i})},n))),()=>{clearInterval(s)}),[a,t,n,i])}},85252:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});let i=n(67294),r=n(77041);t.default=function(){let e=(0,i.useContext)(r.sparkleContext);if(void 0===e)throw Error("useSparkle must be used within a SparkleProvider");return e}},58436:function(e,t,n){"use strict";var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.DEFAULT_BREAKPOINTS=void 0;let r=n(67294),o=n(77041),a=i(n(63982));t.DEFAULT_BREAKPOINTS={mobile:0,tablet:760,small_desktop:1020,large_desktop:1280},t.default=(e,n,i=!0)=>{let[s,l]=(0,r.useState)("en"),[u,d]=(0,r.useState)(!i),{disableAds:c=!1,sparkleInitOptions:p,defaultAdCode:h,userStateTimeoutInMs:m}=e,f=(0,a.default)(m),g=(0,r.useMemo)(()=>({networkCode:o.DEFAULT_NETWORK_CODE,breakpoints:t.DEFAULT_BREAKPOINTS,adBlockerShouldBeBlocked:"ja"!==s,...p}),[s,p]),v=(0,r.useMemo)(()=>({language:s,sparkleInitOptions:g,sparkle:n,disableAds:c,defaultAdCode:h,userState:f}),[s,g,n,c,h,f]);return(0,r.useEffect)(()=>{l(document.documentElement.lang||"en")},[]),(0,r.useEffect)(()=>{n&&(!u&&i?(n.init(g),d(!0)):g.pageTargeting&&n.addPageTargeting(g.pageTargeting))},[n,g,i]),{contextValue:v,options:g}}},63982:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});let i=n(67294),r=n(59628);t.default=(e=500)=>{let[t,n]=(0,i.useState)(!1),[o,a]=(0,i.useState)(),s=(0,r.useRegUIClient)();return(0,i.useEffect)(()=>(a(setTimeout(()=>n(!0),e)),()=>clearTimeout(o)),[]),(0,i.useEffect)(()=>{var e;!t&&(null===(e=s.session)||void 0===e?void 0:e.isRegUIClientLoaded)&&n(!0)},[s.session]),(0,i.useMemo)(()=>({isLoaded:t,userInfo:t&&s.client?{isTerminalSubscriber:s.client.isTerminalSubscriber(),isBBGSubscriber:s.client.isBBGSubscriber()}:void 0}),[t,s.client])}},94962:function(e,t){"use strict";var n=this&&this.__assign||function(){return(n=Object.assign||function(e){for(var t,n=1,i=arguments.length;n<i;n++)for(var r in t=arguments[n])Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e}).apply(this,arguments)},i=this&&this.__read||function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var i,r,o=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(i=o.next()).done;)a.push(i.value)}catch(e){r={error:e}}finally{try{i&&!i.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}return a},r=this&&this.__spreadArray||function(e,t,n){if(n||2==arguments.length)for(var i,r=0,o=t.length;r<o;r++)!i&&r in t||(i||(i=Array.prototype.slice.call(t,0,r)),i[r]=t[r]);return e.concat(i||Array.prototype.slice.call(t))};Object.defineProperty(t,"__esModule",{value:!0});var o=function(e){if("object"==typeof e&&null!==e){if("function"==typeof Object.getPrototypeOf){var t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}return"[object Object]"==
Line truncated
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7287],{87909:function(e,t,a){"use strict";a.d(t,{fA:function(){return m},JJ:function(){return s},Dq:function(){return g}});var n,r,i=a(67294),o=a(86896),u=a(64618),l=a(70700);function s(e){return()=>{let t;try{let a=(0,o.Z)();t=(0,i.useCallback)(({id:e,defaultMessage:t},n)=>a.formatMessage({id:e,defaultMessage:t},n),[a,e])}catch{let e=(0,u.Sn)(),a=(0,l.d)({locale:"en",messages:{}},e);t=({defaultMessage:e,id:t},n)=>a.formatMessage({defaultMessage:e,id:t},n)}return t}}var d=a(85893),c=a(79960),f=a(44012);function m(e){return e=>{let{id:t,values:a,defaultMessage:n,children:r,...i}=e;try{return(0,o.Z)(),(0,d.jsx)(f.Z,{id:t,values:a,children:r,defaultMessage:n,...i})}catch{let e=(0,u.Sn)(),i=(0,c.d)({locale:"en",messages:{}},e).formatMessage({defaultMessage:n,id:t},a);if("function"==typeof r)return(0,d.jsx)(d.Fragment,{children:r?.([i])});return(0,d.jsx)(d.Fragment,{children:i})}}}(n=r||(r={})).En="en",n.Ja="ja";let h=e=>{let t=e.split("-")[0].toLowerCase();return t===r.En||t===r.Ja?t:r.En},g=()=>{try{let e=(0,o.Z)();return{...e,languageCode:h(e.locale)}}catch{let e=(0,u.Sn)();return{...(0,l.d)({locale:"en-US",messages:{}},e),languageCode:r.En}}}},48388:function(e,t,a){"use strict";a.d(t,{V$:function(){return g},_U:function(){return v}}),(n=r||(r={})).Success="success",n.Pending="pending",n.Failed="failed";var n,r,i=a(67294);let o={abbaConfig:null,abbaConfigStatus:r.Pending,geoIpData:null,accesslistMembership:null,refreshAbbaClient:()=>Promise.resolve()},u=(0,i.createContext)(o);var l=a(85893);let s="abbaClient:ready",d=()=>Promise.resolve();function c(e,t){return"fulfilled"===e.status?e.value:(console.error(`Error occurred while fetching abba feature: ${e.reason instanceof Error?e.reason:JSON.stringify(e.reason)}`),t||null)}function f(){let{getAbbaClient:e}=window?.__bloomberg__??{};return e?e():Promise.reject("'getAbbaClient' could not be found")}async function m(){let e=await f();return e&&e.getGeoIPData?e.getGeoIPData():Promise.reject("'getGeoIPData' could not be found.")}async function h(){let e=await f();return e&&e.getAccesslistMembership?e.getAccesslistMembership():Promise.reject("'getAccesslistMembership' could not be found.")}let g=({children:e,platform:t,user:n})=>{let[o,f]=(0,i.useState)(null),[g,v]=(0,i.useState)(null),[b,p]=(0,i.useState)(null),[w,y]=(0,i.useState)(r.Pending);(0,i.useEffect)(()=>{async function e(){let[e,a,i]=await Promise.allSettled([function(e,t={}){let{getAbbaConfig:a}=window.__bloomberg__??{};return a?a(e,t):Promise.reject("'getAbbaConfig' could not be found.")}(t,n),m(),h()]),o=c(e);f(o);let u=c(a);v(u),u&&function(e){let{region:t="",country:a="",provinceId:n="",cityId:r="",fieldP:i="",fieldMI:o="",fieldD:u="",fieldIS:l="",fieldN:s=""}=e,d=`${t}~${a}~${n}~${r}~${i}`,c=`${o}~${u}~${l}~${s}`;window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"geoip_info_ready",geoip_info:d,geoip_info_extension:c})}(u),p(c(i,null)),y(o?r.Success:r.Failed)}let{getAbbaClient:a}=window?.__bloomberg__??{};return a?(e(),()=>{}):(window.addEventListener(s,e),()=>{window.removeEventListener(s,e)})},[t,n]);let C=(0,i.useMemo)(()=>({abbaConfig:o,abbaConfigStatus:w,geoIpData:g,accesslistMembership:b,refreshAbbaClient:a.g.window?.__bloomberg__?.refreshAbbaClient||d}),[o,w]);return(0,l.jsx)(u.Provider,{value:C,children:e})},v=()=>(0,i.useContext)(u)},41762:function(e,t,a){"use strict";a.d(t,{j$:function(){return c},_P:function(){return f}});var n=a(85893),r=a(67294),i=a(59628);let o=(0,r.createContext)({controller:null,isLoggedIn:null,isSubscriber:null,subscriberType:void 0,openSignUp:null,openSignIn:null});var u=a(23324);let l={FOR_SUBSCRIBER:100,FOR_REGISTERED:10},s={FOR_SUBSCRIBER:100,FOR_REGISTERED:25};class d{#e;#t;#a;#n=new Set;#r={};#i;#o;#u;#l;constructor({bconnectId:e,watchlistServiceUrl:t,isSubscriber:a,updateValues:n}){this.#u=n,this.#e=a,this.#t=e,this.#o=new u.Z({watchlistServiceUrl:t}),this.#l=!1}get isUpdating(){return this.#l}get watchlistSummarysForTickers(){return this.#r}get isAtMaximumWatchlist(){return!!this.#i&&(this.#e?this.#i>=l.FOR_SUBSCRIBER:this.#i>=l.FOR_REGISTERED)}get #s(){return 400}get #d(){return this.#e?s.FOR_SUBSCRIBER:s.FOR_REGISTERED}get defaultWatchlistId(){return this.#a||null}updateTickerWatchlists(){return this.#t?(this.#u?.(e=>({...e,isUpdating:this.#l=!0})),this.#o.getUserHoldingsSummary({bconnectId:this.#t,tickers:[...this.#n]}).then(({data:e})=>{this.#r=this.#c(e),this.#a=e?.defaultWatchlistId||this.#a,this.#u?.({isAtMaximumWatchlist:this.isAtMaximumWatchlist,isUpdating:this.#l=!1,defaultWatchlistId:this.defaultWatchlistId,watchlistSummarysForTickers:this.#r})})):Promise.reject()}registerTicker(e){e&&this.#n.add(e)}createWatchlist({name:e,isDefault:t,currency:a="USD",ticker:n}){return e&&this.#t?this.#o.createWatchlist({bconnectId:this.#t,watchlistData:{portMeta:{name:e,currency:a,isDefault:t},...n?{holdings:[{security:n,shares:0,buyprice:0,buydate:new Date().valueOf()}]}:void 0}}):Promise.rLine truncated
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7592],{93223:function(e,t,n){"use strict";n.d(t,{Z:function(){return s}});var r=n(54138),i=n.n(r),a=n(47044),o=n.n(a);class s{baseUrl;constructor({baseUrl:e}={}){this.baseUrl=new URL(e||"https://search.bloomberg.com/")}lookup(e){let t=new URL(`${this.baseUrl}lookup.json`);return t.search=this.#e(e).toString(),fetch(t.toString()).then(e=>e.json())}autoComplete(e){let t=new URL(`${this.baseUrl}autocomplete.json`);return t.search=this.#e(e).toString(),fetch(t.toString()).then(e=>e.json())}#e(e){return new URLSearchParams(i()(e,(e,t)=>o()(t)))}}},22539:function(e,t,n){"use strict";n.d(t,{Q:function(){return b}});var r=n(85893),i=n(67294),a=n(9008),o=n.n(a),s=n(97314),l=n(30488);l.domToReact,l.htmlToDOM,l.attributesToProps,l.Comment,l.Element,l.ProcessingInstruction,l.Text;var u=n(4298),c=n.n(u);let d=(e,t)=>e&&t?`<style>${t}</style>${e}`:e,h=({href:e="",media:t="all",property:n="stylesheet",rel:i="stylesheet",type:a="text/css"})=>[(0,r.jsx)("link",{rel:"preload",href:`${e}`,as:"style"},`tophat-preload-${e}`),(0,r.jsx)("link",{href:`${e}`,media:`${t}`,property:`${n}`,rel:`${i}`,type:`${a}`},`tophat-${e}`)],m=e=>(0,r.jsx)(c(),{src:e},`tophat - ${e}`),f=e=>e&&e.length?e.flatMap(e=>h({href:e})):(console.debug("No styles received to construct tophat."),[]),p=e=>e&&e.length?e.map(e=>m(e)):(console.warn("No scripts received to construct tophat."),[]),g=(0,s.Z)(e=>{if(!e||!e.snippet.that)return console.warn("No html data received to construct tophat."),null;let t=f(e.snippet.styles),n=p(e.snippet.scripts);return{html:l(d(e.snippet.that,e.snippet.styles_overrides)),js:n,css:t}},v);function v(e,t){return e?.snippet?.that===t?.snippet?.that&&e?.snippet?.scripts.join?.("")===t?.snippet?.scripts.join?.("")&&e?.snippet?.styles.join?.("")===t?.snippet?.styles.join?.("")&&e?.snippet?.styles_overrides===t?.snippet?.styles_overrides}var b=(0,i.memo)(function(e){let t=g(e);if(!t)return(0,r.jsx)(r.Fragment,{});let{html:n,js:i,css:a}=t;return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(o(),{children:a}),n,i]})},v)},93859:function(e,t,n){"use strict";n.d(t,{B:function(){return i}});var r=n(67294);let i=e=>{let{classNameOnScrollUp:t="",classNameOnScrollDown:n="",scrollingElementRef:i,scrollDirectionThreshold:a=30,onScrollUpCallback:o=()=>{},onScrollDownCallback:s=()=>{}}=e,[l,u]=(0,r.useState)(!1),c=(0,r.useRef)(0),d=(0,r.useCallback)(()=>{let e=window.scrollY;Math.abs(e-c.current)<a||(u(e<c.current),c.current=e>0?e:0)},[]);(0,r.useEffect)(()=>(window.addEventListener("scroll",d),()=>{window.removeEventListener("scroll",d)}),[]),(0,r.useEffect)(()=>{i?.current&&(l?(t&&i.current.classList.add(t),n&&i.current.classList.remove(n)):(n&&i.current.classList.add(n),t&&i.current.classList.remove(t)))},[l]),(0,r.useEffect)(()=>{if(l){o();return}s()},[l,o,s])}},31361:function(e,t,n){"use strict";n.r(t),n.d(t,{StatsigProvider:function(){return r.StatsigProvider},endStatsigPerfLog:function(){return s},runStatsigAutoCapture:function(){return O},startStatsigPerfLog:function(){return o},useDynamicConfig:function(){return N},useFeatureGate:function(){return A},useLayer:function(){return I},useParameterStore:function(){return L},useStatsigClient:function(){return T},useStatsigClientCustomSetup:function(){return P},useStatsigClientWebSetup:function(){return M},useStatsigCustomUserRefresh:function(){return D},useStatsigUser:function(){return k},useStatsigWebUserRefresh:function(){return B}});var r=n(89211),i=n(12566);let a="undefined"!=typeof window&&void 0!==window?.performance&&void 0!==window?.performance?.mark&&void 0!==window?.performance?.measure?window?.performance:{mark:()=>({}),measure:()=>({duration:void 0})};function o(e){a.mark(`${e}-Start`)}function s(e){a.mark(`${e}-End`),n.g.window?.newrelic?.addPageAction(e,{duration:a.measure(e,`${e}-Start`,`${e}-End`)?.duration})}let l=(e,t)=>(...n)=>{o(e);let r=t(...n);return s(e),r};var u=n(67294),c=n(31955);let d=(e={})=>!!(e.userID||e.customIDs?.sessionId||e.customIDs?.regId),h=async(e,t,{timeoutMs:a}={})=>{o("SS-InitializeAsync");try{if(!d(t))throw Error("Provided user does not have a valid userID, regId, or sessionId.");return r.Storage.isReady()||await r.Storage.isReadyResolver(),e.updateUserSync(t,{disableBackgroundCacheRefresh:!0}),await e.initializeAsync({timeoutMs:a}),o("SS-runSSAutoCapture"),(0,i.AP)(e),s("SS-runSSAutoCapture"),e}catch(e){throw n.g.window.newrelic?.addPageAction("SS-InitializeAsync",e),e}finally{s("SS-InitializeAsync")}},m=(e,t)=>!!(e&&e._options?.environment?.tier===t.environmentTier&&e._sdkKey===t.statsigClientKey),f=e=>{let t=(0,r._getInstance)(e);if(t instanceof r.StatsigClient)return t},p=({initialUser:e,getAsyncInitializationUser:t,statsigClientKey:n,environmentTier:i,onStatsigInit:a,onStatsigInitError:o,options:s})=>{let l=(0,u.useRef)({client:f(n),onStatsigInit:a,onStatsigInitError:o});return l.current.onStatsigInit=a,l.current.onStatsigInitError=o,(0,u.useMemo)(()=>{if(m(l.current.client,{statsigClientKey:n,eLine truncated
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
.typography_core___PiUD{font-family:var(--core-font-family)}.typography_coreHeadline__iR1us{font-weight:var(--core-headline-weight)}.typography_coreHeadlineXl__7GZ3g{font-size:var(--core-headline-xl)}.typography_coreHeadlineLg__4pD50,.typography_coreHeadlineXl__7GZ3g{line-height:var(--core-headline-leading-lg)}.typography_coreHeadlineLg__4pD50{font-size:var(--core-headline-lg)}.typography_coreHeadlineMd__VL3H_{font-size:var(--core-headline-md);line-height:var(--core-headline-leading-lg)}.typography_coreHeadlineSm__9qq05{font-size:var(--core-headline-sm)}.typography_coreHeadlineSm__9qq05,.typography_coreHeadlineXs__1HRyf{line-height:var(--core-headline-leading-sm)}.typography_coreHeadlineXs__1HRyf{font-size:var(--core-headline-xs)}.typography_coreHeadlineXxs__15mdH{font-size:var(--core-headline-xxs);line-height:var(--core-headline-leading-sm)}.typography_coreShortText__1G9y1{line-height:var(--core-short-text-leading)}.typography_coreShortTextMd__gVP5F{font-size:var(--core-short-text-md)}.typography_coreShortTextSm__wawsT{font-size:var(--core-short-text-sm)}.typography_coreShortTextXs__L4gUR{font-size:var(--core-short-text-xs)}.typography_coreShortTextXxs__b8YXl{font-size:var(--core-short-text-xxs)}.typography_coreParagraph__P_KwK{line-height:var(--core-paragraph-leading)}.typography_coreParagraphMd__QOyPx{font-size:var(--core-paragraph-md)}.typography_coreParagraphSm__8_os_{font-size:var(--core-paragraph-sm)}.typography_coreParagraphXs__fpk8d{font-size:var(--core-paragraph-xs)}.typography_coreParagraphXxs__wcE7E{font-size:var(--core-paragraph-xxs)}.typography_articleHeadline__rSLf2{font-family:var(--article-headline-font-family);font-weight:var(--article-headline-weight)}.typography_articleHeadlineXxl__lx2bS{font-size:var(--article-headline-xxl);letter-spacing:var(--article-headline-kerning-xxl)}.typography_articleHeadlineXl__THpmD,.typography_articleHeadlineXxl__lx2bS{line-height:var(--article-headline-leading-lg)}.typography_articleHeadlineXl__THpmD{font-size:var(--article-headline-xl);letter-spacing:var(--article-headline-kerning-xl)}.typography_articleHeadlineLg__J4FhV{font-size:var(--article-headline-lg);letter-spacing:var(--article-headline-kerning-lg)}.typography_articleHeadlineLg__J4FhV,.typography_articleHeadlineMd__6_Fnp{line-height:var(--article-headline-leading-lg)}.typography_articleHeadlineMd__6_Fnp{font-size:var(--article-headline-md);letter-spacing:var(--article-headline-kerning-md)}.typography_articleHeadlineSm__VYjpe{font-size:var(--article-headline-sm)}.typography_articleHeadlineSm__VYjpe,.typography_articleHeadlineXs__3r4_I{font-family:var(--article-headline-font-family-sm);line-height:var(--article-headline-leading-sm)}.typography_articleHeadlineXs__3r4_I{font-size:var(--article-headline-xs)}.typography_articleDek__KFY65{color:var(--article-dek-color);font-family:var(--article-headline-font-family-sm);font-size:var(--article-dek-size);line-height:var(--article-dek-line-height)}.typography_articleBody__3UcBa{font-family:var(--article-headline-font-family-serif);font-size:var(--article-body-size);line-height:var(--article-body-line-height)}.typography_articleLabelBase__Yv37a{font-family:var(--article-label-font-family);font-size:var(--article-label-size)}.typography_articleLabel__tmNTX{line-height:var(--article-label-leading)}.typography_articleLabelMd__CU6xM{font-weight:var(--article-label-md-weight)}.typography_articleLabelCaps__IQAHl{letter-spacing:var(--article-label-kerning-caps);text-transform:uppercase}.media-ui-QuickAddContainer_quickAddContainer-dFVyVLLoFNM-{position:relative;width:-moz-fit-content;width:fit-content}.media-ui-QuickAddContainer_quickAddContainer-dFVyVLLoFNM- .media-ui-QuickAddContainer_quickAddOverlay-XfWlg8PPCwA-{position:absolute;top:calc(100% + .25rem)}@media (max-width:767px){.media-ui-QuickAddContainer_quickAddContainer-dFVyVLLoFNM-.media-ui-QuickAddContainer_withButton-ZLDAe5wJo3w- .media-ui-QuickAddContainer_quickAddOverlay-XfWlg8PPCwA-{right:0}}@media (min-width:768px){.media-ui-QuickAddContainer_quickAddContainer-dFVyVLLoFNM-.media-ui-QuickAddContainer_withButton-ZLDAe5wJo3w- .media-ui-QuickAddContainer_quickAddOverlay-XfWlg8PPCwA-{left:0}}.media-ui-QuickAddContainer_quickAddContainer-dFVyVLLoFNM-.media-ui-QuickAddContainer_withIcon-UT6RAIbAwuE- .media-ui-QuickAddContainer_quickAddOverlay-XfWlg8PPCwA-{left:0}.media-ui-QuickAddContainer_floatingUI-SD1oZT--9Q4-{z-index:20}@media (max-width:767px){.media-ui-QuickAddContainer_floatingUI-SD1oZT--9Q4-{width:100%}}.media-ui-QuickAddRoundedToggle_quickAddRoundedToggle-ptkxSdQlGfU- [data-component=button]{padding:.25rem .75rem}.media-ui-RoundedToggleButton_RoundedToggleButton-jupSnVE3YEE-.media-ui-RoundedToggleButton_baseBackground-xtN1SsCKNUk-{background-color:var(--color-black);color:var(--color-white)}.media-ui-RoundedToggleButton_RoundedToggleButton-jupSnVE3YEE-.media-ui-RoundedToggleButton_baseBackground-xtN1SsCKNUk-:hover{background-color:var(--color-gray-800)}.media-ui-RoundedToggleButton_RoundedToggleButtoLine truncated
|
||||||
+116
@@ -0,0 +1,116 @@
|
|||||||
|
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8097],{69076:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});class r{static _instance;constructor(){if(this.constructor._instance)throw Error("Cannot create multiple instances; use getInstance()")}static getInstance(){if(!this._instance)throw Error("Singleton has not been initialized yet!");return this._instance}static init(...e){return this._instance||(this._instance=new this(...e)),this._instance}static resetInstance(){this._instance=null}}t.default=r},39727:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});let o=r(45011),i=r(34727),a=n(r(69076)),s=r(20991);class u extends a.default{host;#e;#t;constructor(e){if(super(),!e.host)throw Error("No host passed to ContentServiceClient constructor; aborting");if(!e.username)throw Error("No username passed to ContentServiceClient constructor; aborting");if(!e.password)throw Error("No password passed to ContentServiceClient constructor; aborting");this.host=e.host,this.#e=e.username,this.#t=e.password}getAuthHeader(){return{Authorization:`Basic ${btoa(`${this.#e}:${this.#t}`)}`}}getV1StoriesSearchBy=async e=>{e&&this.validateGetV1StoriesSearchBy(e);let t=(0,i.stringifyParams)(e),r=`${this.host}/v1/search?${t}`,n=await fetch(r,{headers:this.getAuthHeader()}),o=await n.json();if(!n.ok)throw new s.ContentServiceClientError({errorResponse:o,status:n.status,url:r});return o};getV1StoriesBySlug=async()=>{};postV1StoriesSearchBy=async e=>{e&&this.validatePostV1StoriesSearchBy(e);let t=`${this.host}/v1/search`,r=await fetch(t,{method:"POST",headers:this.getAuthHeader(),body:JSON.stringify({filter:{params:e}})}),n=await r.json();if(!r.ok)throw new s.ContentServiceClientError({errorResponse:n,status:r.status,url:t});return n};validateGetV1StoriesSearchBy=e=>(Object.entries(e).forEach(([e,t])=>{if(e.length>200)throw Error(`Invalid key passed to ContentServiceClient.getV1StoriesSearchBy: ${e} exceeds length limit`);if(!e.toString().match(o.VALID_REGEX.objectKey))throw Error(`Invalid key passed to ContentServiceClient.getV1StoriesSearchBy: ${e}`);if(t.toString().length>200)throw Error(`Invalid value passed to ContentServiceClient.getV1StoriesSearchBy: ${t} exceeds length limit`);if(!t.toString().match(o.VALID_REGEX.objectValue))throw Error(`Invalid value passed to ContentServiceClient.getV1StoriesSearchBy with ${e}: ${t}`)}),!0);validatePostV1StoriesSearchBy=e=>(Object.entries(e).forEach(([e,t])=>{if(e.length>200)throw Error(`Invalid key passed to ContentServiceClient.postV1StoriesSearchBy: ${e} exceeds length limit`);if(!e.toString().match(o.VALID_REGEX.objectKey))throw Error(`Invalid key passed to ContentServiceClient.postV1StoriesSearchBy: ${e}`);if("object"==typeof t&&!t)throw Error(`Invalid value passed to ContentServiceClient.postV1StoriesSearchBy with ${e}: ${t}`);if("object"!=typeof t){if(t&&t.toString().length>200)throw Error(`Invalid value passed to ContentServiceClient.postV1StoriesSearchBy: ${t} exceeds length limit`);if(t&&!t.toString().match(o.VALID_REGEX.objectValue))throw Error(`Invalid value passed to ContentServiceClient.postV1StoriesSearchBy with ${e}: ${t}`)}}),!0)}t.default=u},20991:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ContentServiceClientError=void 0;class r extends Error{url;status;errorResponse;constructor({errorResponse:e,status:t,url:r}){super(JSON.stringify(e)),this.name="ContentServiceClientError",this.status=t,this.url=r,this.errorResponse=e}}t.ContentServiceClientError=r},74324:function(e,t){"use strict";var r,n;Object.defineProperty(t,"__esModule",{value:!0}),t.ContentServiceSite=t.ContentServiceStoryType=void 0,(r=t.ContentServiceStoryType||(t.ContentServiceStoryType={})).article="article",r.breaking_news="breaking_news",r.data_article="data_article",r.slideshow="slideshow",r.impact_scorecard="impact_scorecard",r.interactive="interactive",r.feature="feature",r.quicktake="quicktake",r.video="video",r.letter="letter",r.newsletter_campaign="newsletter_campaign",r.author_session="author_session",r.liveblog="liveblog",(n=t.ContentServiceSite||(t.ContentServiceSite={})).Business="BBIZ",n.Businessweek="BUSINESSWEEK",n.Citylab="CITYLAB",n.Cojp="COJP",n.Crypto="CRYPTO",n.Economics="ECONOMICS",n.Equality="EQUALITY",n.Gadfly="GADFLY",n.Green="GREEN",n.Industries="INDUSTRIES",n.Markets="MARKETS",n.MarketsMagazine="MARKETS_MAGAZINE",n.Politics="BPOL",n.Pursuits="PURSUITS",n.Quicktake="QUICKTAKE",n.Sponsored="SPONSORED",n.Technology="TECHNOLOGY",n.View="VIEW",n.Wealth="WEALTH",n.WorkShift="WORK_SHIFT"},93148:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);(!o||("get"in o?!t.__esModule:o.writable||o.configurable))&&(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===nLine truncated
|
||||||
|
query getUserBookmarks($bconnectId: ID!) {
|
||||||
|
userBookmarks(bconnectId: $bconnectId) {
|
||||||
|
bookmarks {
|
||||||
|
contentId
|
||||||
|
contentType
|
||||||
|
id
|
||||||
|
publishedDate
|
||||||
|
readDate
|
||||||
|
savedDate
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`,t.USER_PROFILE_QUERY=`
|
||||||
|
query getUserProfile($userIdentity: UserIdentityInput) {
|
||||||
|
user(userIdentity: $userIdentity) {
|
||||||
|
profile {
|
||||||
|
industry
|
||||||
|
jobTitle
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`},65068:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.PersonalizationClientError=void 0;class r extends Error{url;errorResponse;status;constructor({errorResponse:e,status:t,url:r}){super(JSON.stringify(e)),this.name="PersonalizationClientError",this.status=t,this.url=r,this.errorResponse=e}}t.PersonalizationClientError=r},88736:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);(!o||("get"in o?!t.__esModule:o.writable||o.configurable))&&(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&n(t,e,r);return o(t,e),t},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});let s=i(r(30096)),u=r(34727),l=a(r(69076)),c=r(35999),f=r(65068),{fetchWithProxy:p}=s;class d extends l.default{host;environment;fetchWithProxy;constructor(e){if(super(),!e.host)throw Error("No host passed to PersonalizationClient constructor; aborting");if(!e.environment)throw Error("No environment passed to PersonalizationClient constructor; aborting");this.host=e.host,this.environment=e.environment,this.fetchWithProxy=(e,t,r)=>{let n=new Set(["orange"]);if(n.has(this.environment)&&"GET"!==t)throw Error(`Only GET request method is allowed from PersonalizationClient in ${Array.from(n).join(",")}. It is trying to be called from: ${this.environment}`);return p(e,r,{method:t})}}async getCFRU(e,t){this.validateGetCFRU(e);let r=(0,u.stringifyParams)(e,e=>e.join(";")),n=`${this.host}/user/recommendations/cfru?${r}`,o=await this.fetchWithProxy(n,"GET",t),i=await o.json();if(!o.ok)throw new f.PersonalizationClientError({errorResponse:i,status:o.status,url:n});return i}async getRecommendedNewsletters(e,t){let r=(0,u.stringifyParams)(e,e=>e.join(";")),n=`${this.host}/user/recommendations/usertonewsletter?${r}`,o=await this.fetchWithProxy(n,"GET",t),i=await o.json();if(!o.ok)throw new f.PersonalizationClientError({errorResponse:i,status:o.status,url:n});return i}async getRecent(e,t){this.validateGetRecent(e);let r=(0,u.stringifyParams)(e,e=>e.join(";")),n=`${this.host}/user/recommendations/recent?${r}`,o=await this.fetchWithProxy(n,"GET",t),i=await o.json();if(!o.ok)throw new f.PersonalizationClientError({errorResponse:i,status:o.status,url:n});return i}async getRelated(e,t){this.validateGetRelated(e);let r=(0,u.stringifyParams)(e,e=>e.join(";")),n=`${this.host}/user/recommendations/rr?${r}`,o=await this.fetchWithProxy(n,"GET",t),i=await o.json();if(!o.ok)throw new f.PersonalizationClientError({errorResponse:i,status:o.status,url:n});return i}async getPopularResources(e,t){this.validateGetPopular(e);let r=(0,u.stringifyParams)(e,e=>e.join(";")),n=`${this.host}/popular/resources?${r}`,o=await this.fetchWithProxy(n,"GET",t),i=await o.json();if(!o.ok)throw new f.PersonalizationClientError({errorResponse:i,status:o.status,url:n});return i}async getPopularEntities(e,t){this.validateGetPopular(e);let r=(0,u.stringifyParams)(e,e=>e.join(";")),n=`${this.host}/popular/entities?${r}`,o=await this.fetchWithProxy(n,"GET",t),i=await o.json();if(!o.ok)throw new f.PersonalizationClientError({errorResponse:i,status:o.status,url:n});return i}async getRecommendedPopular(e,t){this.validateGetRecommendedPopular(e);let r=(0,u.stringifyParams)(e,e=>e.join(";")),n=`${this.host}/user/recommendations/popular?${r}`,o=await this.fetchWithProxy(n,"GET",t),i=await o.json();if(!o.ok)throw new f.PersonalizationClientError({errorResponse:i,status:o.status,url:n});return i}async getRecommendedTPR(e,t){this.validateGetRecommendedTPR(e);let r=(0,u.stringifyParams)(e,e=>e.join(";")),n=`${this.host}/user/recommendations/tpr?${r}`,o=await this.fetchWithProxy(n,"GET",t),i=await o.json();if(!o.ok)throw new f.PersonalizationClientError({errorResponse:i,status:o.status,url:n});return i}validateGetCFRU=e=>{if(!e)return!0;if(!e.resourceTypes||!Array.isArray(e.resourceTypes)||0===e.resourceTypes.length)throw Error("Missing required parameter for PersonalizationClient.getCFRU: resourceTypes");if(!e.resourceTypes.every(e=>Object.values(c.PersonalizationResourceType).includes(e)))throw Error(`Invalid type in resourceTypes passed to PersonalizationClient.getCFRU: ${e.resourceTypes}`);if(!e.limit)throw Error("Missing required parameter for PersonalizationClient.getCFRU: limit");if("number"!=typeof e.limit||e.limit<=0)throw Error(`Invalid limit passed to PersonalizationClient.getCFRU: ${e.limit}`);if(!e.thumbnailRequired||"boolean"!=typeof e.thumbnailRequired)throw Error("Missing required parameter for Personalization
Line truncated
|
||||||
|
user(userIdentity: $user) {
|
||||||
|
engagements(queryArgs: {productType: ENGAGEMENT_PREFERENCES}) {
|
||||||
|
elements {
|
||||||
|
id
|
||||||
|
actionType
|
||||||
|
resource {
|
||||||
|
id
|
||||||
|
type
|
||||||
|
... on Person {
|
||||||
|
name
|
||||||
|
}
|
||||||
|
... on Topic {
|
||||||
|
name
|
||||||
|
}
|
||||||
|
... on Company {
|
||||||
|
longName
|
||||||
|
}
|
||||||
|
... on Securities {
|
||||||
|
longName
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}`,t.GetUserAuthorsQuery=`query getUserAuthors($user: UserIdentityInput) {
|
||||||
|
user(userIdentity: $user) {
|
||||||
|
engagements(queryArgs: {productType: AUTHOR_FOLLOW}) {
|
||||||
|
elements {
|
||||||
|
id
|
||||||
|
actionType
|
||||||
|
resource {
|
||||||
|
id
|
||||||
|
type
|
||||||
|
... on Person {
|
||||||
|
name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}`,t.GetUserTopicsQuery=`query getUserTopics($user: UserIdentityInput) {
|
||||||
|
user(userIdentity: $user) {
|
||||||
|
engagements(queryArgs: {productType: ENGAGEMENT_PREFERENCES, resourceType: Topic}) {
|
||||||
|
elements {
|
||||||
|
id
|
||||||
|
actionType
|
||||||
|
resource {
|
||||||
|
id
|
||||||
|
type
|
||||||
|
... on Topic {
|
||||||
|
name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}`,t.GetUserSecuritiesQuery=`query getUserSecurities($user: UserIdentityInput) {
|
||||||
|
user(userIdentity: $user) {
|
||||||
|
engagements(queryArgs: {productType: ENGAGEMENT_PREFERENCES}) {
|
||||||
|
elements {
|
||||||
|
id
|
||||||
|
actionType
|
||||||
|
resource {
|
||||||
|
id
|
||||||
|
type
|
||||||
|
... on Securities {
|
||||||
|
longName
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}`,t.FollowMutation=`mutation follow(
|
||||||
|
$user: UserIdentityInput!,
|
||||||
|
$engagementsUpdate: BulkUpdateEngagementsInput!
|
||||||
|
) {
|
||||||
|
bulkUpdateEngagements(
|
||||||
|
userIdentity: $user,
|
||||||
|
bulkUpdateEngagementsInput: $engagementsUpdate)
|
||||||
|
{
|
||||||
|
success
|
||||||
|
}
|
||||||
|
}`,t.DeleteFollowMutation=`mutation deleteFollow(
|
||||||
|
$user: UserIdentityInput!,
|
||||||
|
$deleteEngagement: DeleteEngagementInput!
|
||||||
|
) {
|
||||||
|
deleteEngagement(userIdentity: $user, deleteInput: $deleteEngagement) {
|
||||||
|
success
|
||||||
|
}
|
||||||
|
}`},83922:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0})},76268:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);(!o||("get"in o?!t.__esModule:o.writable||o.configurable))&&(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),o=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.fetchFrom=t.stringifyParams=t.Singleton=t.IntercomTracking=t.IntercomSlot=t.Intercom=void 0;var a=r(53174);Object.defineProperty(t,"Intercom",{enumerable:!0,get:function(){return i(a).default}}),o(r(90616),t),o(r(61010),t);var s=r(63500);Object.defineProperty(t,"IntercomSlot",{enumerable:!0,get:function(){return s.IntercomSlot}});var u=r(63500);Object.defineProperty(t,"IntercomTracking",{enumerable:!0,get:function(){return u.IntercomTracking}});var l=r(69076);Object.defineProperty(t,"Singleton",{enumerable:!0,get:function(){return i(l).default}}),o(r(93148),t),o(r(35099),t),o(r(71134),t),o(r(94122),t),o(r(2801),t),o(r(96431),t);var c=r(34727);Object.defineProperty(t,"stringifyParams",{enumerable:!0,get:function(){return c.stringifyParams}});var f=r(19583);Object.defineProperty(t,"fetchFrom",{enumerable:!0,get:function(){return f.fetchFrom}})},53174:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});let o=r(19583),i=n(r(69076)),a=r(90616);class s extends i.default{slots={};apiEndpoints;personalizationClient;mediaGatewayClient;userApiClient;constructor(e){super();let t=a.INTERCOM_API_ENDPOINTS;this.apiEndpoints={...t,...e?.apiEndpoints},this.mediaGatewayClient=e?.mediaGatewayClient,this.personalizationClient=e?.personalizationClient,this.userApiClient=e?.userApiClient}getSlots(){return this.slots}getSlot(e){return this.getSlots()[e]}async getPersonById(e){let t=this.apiEndpoints.getPersonById;if(!t)throw Error("getPersonById endpoint not configured");return(await (0,o.fetchFrom)(t,e)).json()}async getStories(e){let t=this.apiEndpoints.getStories;if(!t)throw Error("getStories endpoint not configured");return(await (0,o.fetchFrom)(t,e)).json()}async getStoryBySlug(e){let t=this.apiEndpoints.getStoryBySlug;if(!t)throw Error("getStoryBySlug endpoint not configured");return(await (0,o.fetchFrom)(t,e)).json()}async getStoryById(e){let t=this.apiEndpoints.getStoryById;if(!t)throw Error("getStoryById endpoint not configured");return(await (0,o.fetchFrom)(t,e)).json()}async getImages(e){let t=this.apiEndpoints.getImages;if(!t)throw Error("getImages endpoint not configured");return(await (0,o.fetchFrom)(t,{id:e?.id||""})).json()}async getAudios(e){let t=this.apiEndpoints.getAudios;if(!t)throw Error("getAudios endpoint not configured");return(await (0,o.fetchFrom)(t,{ids:e?.ids||""})).json()}async getVideos(e){let t=this.apiEndpoints.getVideos;if(!t)throw Error("getVideos endpoint not configured");return(await (0,o.fetchFrom)(t,{id:e?.id||""})).json()}async getImagesBulk(e){let t=this.apiEndpoints.getImagesBulk;if(!t)throw Error("getImagesBulk endpoint not configured");return(await (0,o.fetchFrom)(t,e)).json()}async getSecurities(e){let t=this.apiEndpoints.getSecurities;if(!t)throw Error("getSecurities endpoint not configured");return(await (0,o.fetchFrom)(t,e)).json()}async getPopularResources(e){if(!this.personalizationClient)throw Error("personalizationClient is not initialized");return await this.personalizationClient.getPopularResources(e)||[]}async getPopularEntities(e){if(!this.personalizationClient)throw Error("personalizationClient is not initialized");return await this.personalizationClient.getPopularEntities(e)||[]}async getRelated(e){if(!e)return[];if(!this.personalizationClient)throw Error("personalizationClient is not initialized");return await this.personalizationClient.getRelated(e)||[]}async getRecommended(e){if(!this.personalizationClient)throw Error("personalizationClient is not initialized");return await this.personalizationClient.getCFRU(e)||[]}async getRecommendedPopular(e){if(!this.personalizationClient)throw Error("personalizationClient is not initialized");return await this.personalizationClient.getRecommendedPopular(e)||[]}async getRecommendedTPR(e){if(!this.personalizationClient)throw Error("personalizationClient is not initialized");return await this.personalizationClient.getRecommendedTPR(e)||[]}async getNiCodeStories(e){let t=this.apiEndpoints.getNiCodeStories;if(!t)throw Error("getNiCodeStories endpoint not configured");return(await (0,o.fetchFrom)(t,e)).json()}async getNewsletters(){let e=this.apiEndpoints.getNewsletters;if(!e)throw Error("getNewsletters endpoint not configured");return(await (0,o.fet
Line truncated
|
||||||
|
`;if(o.username||o.password){let e=`${decodeURIComponent(o.username)}:${decodeURIComponent(o.password)}`;i["Proxy-Authorization"]=`Basic ${n.from(e).toString("base64")}`}for(let e of(i.Host=`${a}:${t.port}`,i["Proxy-Connection"]||(i["Proxy-Connection"]=this.keepAlive?"Keep-Alive":"close"),Object.keys(i)))s+=`${e}: ${i[e]}\r
|
||||||
|
`;let f=(0,h.parseProxyResponse)(r);r.write(`${s}\r
|
||||||
|
`);let{connect:p,buffered:d}=await f;if(e.emit("proxyConnect",p),this.emit("proxyConnect",p,e),200===p.statusCode)return(e.once("socket",m),t.secureEndpoint)?(g("Upgrading socket connection to TLS"),l.connect({...v(y(t),"host","path","port"),socket:r})):r;r.destroy();let b=new u.Socket({writable:!1});return b.readable=!0,e.once("socket",e=>{g("Replaying proxy buffer for failed request"),(0,c.default)(e.listenerCount("data")>0),e.push(d),e.push(null)}),b}}function m(e){e.resume()}function v(e,...t){let r;let n={};for(r in e)t.includes(r)||(n[r]=e[r]);return n}b.protocols=["http","https"],t.HttpsProxyAgent=b},59829:function(e,t,r){"use strict";var n=r(48764).Buffer,o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.parseProxyResponse=void 0;let i=(0,o(r(11227)).default)("https-proxy-agent:parse-proxy-response");t.parseProxyResponse=function(e){return new Promise((t,r)=>{let o=0,a=[];function s(){let l=e.read();l?function(l){a.push(l),o+=l.length;let c=n.concat(a,o),f=c.indexOf("\r\n\r\n");if(-1===f){i("have not received end of HTTP headers yet..."),s();return}let p=c.slice(0,f).toString("ascii").split("\r\n"),d=p.shift();if(!d)return e.destroy(),r(Error("No header received from proxy CONNECT response"));let h=d.split(" "),g=+h[1],y=h.slice(2).join(" "),b={};for(let t of p){if(!t)continue;let n=t.indexOf(":");if(-1===n)return e.destroy(),r(Error(`Invalid header from proxy CONNECT response: "${t}"`));let o=t.slice(0,n).toLowerCase(),i=t.slice(n+1).trimStart(),a=b[o];"string"==typeof a?b[o]=[a,i]:Array.isArray(a)?a.push(i):b[o]=i}i("got proxy server response: %o %o",d,b),u(),t({connect:{statusCode:g,statusText:y,headers:b},buffered:c})}(l):e.once("readable",s)}function u(){e.removeListener("end",l),e.removeListener("error",c),e.removeListener("readable",s)}function l(){u(),i("onend"),r(Error("Proxy connection ended before receiving CONNECT response"))}function c(e){u(),i("onerror %o",e),r(e)}e.on("error",c),e.on("end",l),s()})}},35717:function(e){"function"==typeof Object.create?e.exports=function(e,t){t&&(e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:e.exports=function(e,t){if(t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e}}},82584:function(e,t,r){"use strict";var n=r(96410)(),o=r(17379)("Object.prototype.toString"),i=function(e){return(!n||!e||"object"!=typeof e||!(Symbol.toStringTag in e))&&"[object Arguments]"===o(e)},a=function(e){return!!i(e)||null!==e&&"object"==typeof e&&"length"in e&&"number"==typeof e.length&&e.length>=0&&"[object Array]"!==o(e)&&"callee"in e&&"[object Function]"===o(e.callee)},s=function(){return i(arguments)}();i.isLegacyArguments=a,e.exports=s?i:a},95320:function(e){"use strict";var t,r,n=Function.prototype.toString,o="object"==typeof Reflect&&null!==Reflect&&Reflect.apply;if("function"==typeof o&&"function"==typeof Object.defineProperty)try{t=Object.defineProperty({},"length",{get:function(){throw r}}),r={},o(function(){throw 42},null,t)}catch(e){e!==r&&(o=null)}else o=null;var i=/^\s*class\b/,a=function(e){try{var t=n.call(e);return i.test(t)}catch(e){return!1}},s=function(e){try{if(a(e))return!1;return n.call(e),!0}catch(e){return!1}},u=Object.prototype.toString,l="function"==typeof Symbol&&!!Symbol.toStringTag,c=!(0 in[,]),f=function(){return!1};if("object"==typeof document){var p=document.all;u.call(p)===u.call(document.all)&&(f=function(e){if((c||!e)&&(void 0===e||"object"==typeof e))try{var t=u.call(e);return("[object HTMLAllCollection]"===t||"[object HTML document.all class]"===t||"[object HTMLCollection]"===t||"[object Object]"===t)&&null==e("")}catch(e){}return!1})}e.exports=o?function(e){if(f(e))return!0;if(!e||"function"!=typeof e&&"object"!=typeof e)return!1;try{o(e,null,t)}catch(e){if(e!==r)return!1}return!a(e)&&s(e)}:function(e){if(f(e))return!0;if(!e||"function"!=typeof e&&"object"!=typeof e)return!1;if(l)return s(e);if(a(e))return!1;var t=u.call(e);return!!("[object Function]"===t||"[object GeneratorFunction]"===t||/^\[object HTML/.test(t))&&s(e)}},48662:function(e,t,r){"use strict";var n,o=r(17379),i=r(79246)(/^\s*(?:function)?\*/),a=r(96410)(),s=r(81618),u=o("Object.prototype.toString"),l=o("Function.prototype.toString"),c=function(){if(!a)return!1;try{return Function("return function*() {}")()}catch(e){}};e.exports=function(e){if("function"!=typeof e)return!1;if(i(l(e)))return!0;if(!a)return"[object GeneratorFunction]"===u(e);if(!s)return!1;if(void 0===n){var t=c();n=!!t&&s(t)}return s(e)===n}},98611:function(e){"use strict";e.exports=function(e){return e!=e}},20360:function(e,t,r){"use strict";var n=r(55559),o=r(4289),i=r(98611),a=r(29415),s=r(23194),u=n(a(),Number);o(u,{getPolyfill:a,implementation:i,shim:s}),e.exports=u},29415:function(e,t,r){"use strict";var n=r(98611);e.exports=function(){return Number.isNaN&&Number.isNaN(NaN)&&!Number.isNaN("a")?Number.i
Line truncated
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8433],{12065:function(e,t,n){"use strict";n.d(t,{x:function(){return s}});var a=n(67294),r=n(25434),i=n(37018),o=n(77536);n(61386);var l={text:"media-ui-Text_text-ry--cPm8x-A-",body_sm:"media-ui-Text_body_sm-BlWsbRhBM2w-",h1:"media-ui-Text_h1-AtMj5YoqNyw-",h2:"media-ui-Text_h2-TpvE5o6vddE-",h3:"media-ui-Text_h3-PiHPhzTFa-A-",h4:"media-ui-Text_h4-xyIFQD-kn3s-",h5:"media-ui-Text_h5-jwgrzXd5u10-",h6:"media-ui-Text_h6-Nnxc4AywUG0-",p:"media-ui-Text_p--hmGok-yY3I-",div:"media-ui-Text_div-zig7aYcHmSE-",span:"media-ui-Text_span-DIpFyILvKkM-",figcaption:"media-ui-Text_figcaption-2nPXkddKodk-",serif:"media-ui-Text_serif-9d74nBhFfa8-","sans-serif":"media-ui-Text_sans-serif-w6-tXZRlwpM-",monospace:"media-ui-Text_monospace-DUpcNu4-xC0-",sans___serif:"media-ui-Text_sans-serif-w6-tXZRlwpM-"};let c=["p","span","h1","h2","h3","h4","h5","h6","figcaption","div","section"],s=a.forwardRef(function(e,t){let{children:n,fontFamily:s,as:u="p",className:m="",name:d="text"}=e,h=typeof n,[p]=(0,r.f)(d);if("section"!==u&&"div"!==u&&"object"===h)throw Error("JSX passed as children to Text component. The Text component only allows string children. If you must use JSX children, please stringify.");let f=(0,o.Sh)([l.text,l[u],m,{...s&&{[l[s]]:!0},...!s&&"p"===u&&{[l.serif]:!0},...!s&&"p"!==u&&{[l["sans-serif"]]:!0}}],e);return"object"===h?a.createElement(i.o,{className:f,allowedTags:c,"data-component":p,as:u,ref:t},n):a.createElement(i.o,{className:f,allowedTags:c,"data-component":p,as:u,dangerouslySetInnerHTML:{__html:n},ref:t})})},44449:function(e,t,n){"use strict";n.d(t,{o:function(){return u}});var a=n(67294),r=n(25434),i=n(77536),o=n(1746),l=n(36251);n(84589);var c={chartContainer:"media-ui-TickerChartContainer_chartContainer-GzowhsDnfuk-",noData:"media-ui-TickerChartContainer_noData-dbG9VRflEF0-",message:"media-ui-TickerChartContainer_message-hZc417ub2Xo-"};let s={top:20,right:80,bottom:30,left:0},u=a.forwardRef(function(e,t){let{chartId:n,children:u,className:m,width:d=618,height:h=312,enableHoverInteraction:p=!0,enableDragInteraction:f=!1,nonSVGContent:v,pricePrecision:g=2,renderMode:x="price",showGradient:k=!0,showPreviousPrice:E=!0,tickerSnapshots:S,xAxisInterval:C,yAxisPlacement:y="right",yAxisTickSize:T=6,xAxisTickSize:b=7,handleChartHoverInteraction:w,handleChartDragInteraction:D,name:M="TickerChartContainer",formatXAxisLabel:P=l.CX,formatYAxisLabel:_=l.ez}=e,A=n||(0,l.DO)(M),I=(0,r.f)(M),L=(0,a.useRef)(null),[N,R]=(0,a.useState)(s),[F,X]=(0,a.useState)(10),[Y,z]=(0,a.useState)(0),[U,H]=(0,a.useState)(1),[G,J]=(0,a.useState)(1),[V,B]=(0,a.useState)(),[Z,W]=(0,a.useState)(!1),[O,j]=(0,a.useState)(void 0),[K,Q]=(0,a.useState)(void 0),[q,$]=(0,a.useState)(!1),[ee,et]=(0,a.useState)(void 0),[en,ea]=(0,a.useState)(void 0),[er,ei]=(0,a.useState)(void 0),[eo,el]=(0,a.useState)(void 0),ec=(0,a.useMemo)(()=>(0,l.P8)(S,x),[S,x]),es=(0,a.useMemo)(()=>(0,l.Kq)(S,ec),[S,ec]),eu=(0,a.useMemo)(()=>(0,l.tH)(S,ec,E),[S,ec,E]),em=(0,a.useMemo)(()=>(0,l.RX)(es,[N.left,d-N.right]),[es,N,d]),ed=(0,a.useMemo)(()=>(0,l._S)(eu,[h-N.bottom,N.top]),[eu,N,h]),eh=e=>{if(!L.current)return -1;let t=L.current,n=t.createSVGPoint();n.x=e.clientX||e.touches[0].clientX,n.y=e.clientY||e.touches[0].clientY;let a=t.getScreenCTM();if(!a)return -1;let{x:r}=n.matrixTransform(a.inverse());return r},ep=(0,a.useCallback)(e=>(0,l.Y)(e,d,es,N,ec),[ec,N,d,es]);(0,a.useEffect)(()=>{if(er){Q(void 0);return}if(!O){let e=p?ec[ec.length-1]:void 0;Q(e),e&&(null==w||w(e));return}let e=ep(O);e&&(Q(e),null==w||w(e))},[p,O,er,N,es,d]),(0,a.useEffect)(()=>{X(10*U)},[U]),(0,a.useEffect)(()=>{R(e=>"right"===y?{...e,left:0,right:1.2*Y}:{...e,right:0,left:1.2*Y})},[Y,y]),(0,a.useEffect)(()=>{if(!ee||!en||ee===en){ei(void 0),el(void 0),null==D||D(void 0,void 0);return}let e=ep(Math.min(ee,en)),t=ep(Math.max(ee,en));ei(e),el(t),null==D||D(e,t)},[q,ee,en]),(0,a.useEffect)(()=>{$(!1),et(void 0),ea(void 0)},[f]);let ef=(0,a.useCallback)(e=>{e.preventDefault(),W(!(q||eo))},[W,q,eo]),ev=(0,a.useCallback)(()=>{W(!1),$(!1)},[]),eg=e=>{if(!p||!Z||e<0){j(void 0);return}j(e)},ex=(0,a.useCallback)(e=>{if(e.preventDefault(),q){$(!1);return}$(!0);let t=eh(e);if(t<0){et(void 0),ea(void 0);return}et(t),ea(t)},[]),ek=(0,a.useCallback)(()=>{$(!1),W(p)},[]),eE=e=>{f&&q&&!(e<0)&&ea(e)},eS=e=>{e.preventDefault();let t=eh(e);eE(t),eg(t)};if((0,a.useEffect)(()=>{let e;if(!L.current)return;let t=null==L?void 0:L.current;return t&&(e=new ResizeObserver(e=>{for(let t of e){let e=t.contentBoxSize[0].inlineSize||t.contentRect.width||d,n=Math.max(1,d/e);H(n),J(e/d),X(10*n),B(t.contentRect)}})).observe(t),()=>{e&&t&&e.unobserve(t)}},[L,d]),0===ec.length||0===S.length)return a.createElement("div",{ref:t,"data-component":I,className:(0,i.Sh)([I,m,c.chartContainer,c.noData])},a.createElement("div",{className:c.message},"No pricing data is available"));let eC={...p&&{onMouseOver:ef,onMouseLeave:ev,onMouseMove:eS,onTouchStart:ef,onTouchMove:eS,onTouchEnd:ev},...f&&Line truncated
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8696],{92138:function(e,t,n){n.d(t,{D:function(){return l}});var r=n(77997),a=n(48189),i=n(48820);let o=a.Lw.getInstance(),l=async function(e,t){var n,a,l;let u=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"PX_LAST",c=arguments.length>3?arguments[3]:void 0,s=arguments.length>4?arguments[4]:void 0;try{let{startDate:n,endDate:a}=(0,i.fD)(t),l=null!=s?s:"5Y"===t?r.ST.Weekly:r.ST.Daily;return await o.getHistory({securities:e.join(","),startDate:n,endDate:a,periodicity:l,fields:u,referenceFields:c})}catch(r){throw null===(a=window)||void 0===a||null===(n=(l=a.newrelic).noticeError)||void 0===n||n.call(l,r,{context:"fetchHistoryChartData",tickers:e}),Error("Failed to fetch fetchHistoryChartData for ".concat(e.join(", ")," (").concat(t,")"))}}},82642:function(e,t,n){n.d(t,{q:function(){return l},v:function(){return u}});var r=n(77997),a=n(48189),i=n(99464);let o=a.Lw.getInstance(),l=async function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:r.VI.Close,a=arguments.length>3?arguments[3]:void 0,l=arguments.length>4?arguments[4]:void 0,u=arguments.length>5&&void 0!==arguments[5]&&arguments[5];try{return await o.getIntraday({securities:e.join(","),dataPoints:n,intervalMinutes:a,tradingDayCount:t,referenceFields:l,includeOutOfSessionBars:u})}catch(t){throw(0,i.H)(Error("Error Fetching IntradayChartData"),{context:"fetchIntradayChartData",tickers:e,errorMsg:JSON.stringify(t)}),Error("Failed to fetch intradayChartData for ".concat(e.join(", ")))}},u=async function(e,t,n){let a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:r.VI.Close,l=arguments.length>4?arguments[4]:void 0,u=arguments.length>5?arguments[5]:void 0,c=arguments.length>6&&void 0!==arguments[6]&&arguments[6];try{return await o.getIntraday({securities:e.join(","),dataPoints:a,intervalMinutes:l,startDate:t,endDate:n,referenceFields:u,includeOutOfSessionBars:c})}catch(t){throw(0,i.H)(Error("Error Fetching IntradayChartData With Dates"),{context:"fetchIntradayChartData",tickers:e,errorMsg:JSON.stringify(t)}),Error("Failed to fetch intradayChartData for ".concat(e.join(", ")))}}},48189:function(e,t,n){let r,a,i;n.d(t,{Lw:function(){return h},Ny:function(){return v},ff:function(){return m}});var o=n(31356),l=n(47041);let u="".concat("https://login.bloomberg.com","/octagon/api/"),c="oBtK6TVu4JI2wTjkTpXYr0uLsv9Tq2Bd0qUbczS1Fr4OmQ==",s="octagon-jwtToken",f=async()=>{let e=await (0,l.getCookie)(s);return"string"==typeof e?e:void 0},d=async e=>{e&&await (0,l.setCookie)(s,e,{maxAge:300,secure:!0,sameSite:"strict"})},m={getInstance:()=>r||(r=new o.TJ({appId:c,getJWTTokenHandler:f,setJWTTokenHandler:d,serviceUrl:u})),resetInstance(){r=void 0}},h={getInstance:()=>a||(a=new o.bg({appId:c,getJWTTokenHandler:f,setJWTTokenHandler:d,serviceUrl:u})),resetInstance(){a=void 0}},v={getInstance:()=>i||(i=new o.Sq({appId:c,getJWTTokenHandler:f,setJWTTokenHandler:d,serviceUrl:u})),resetInstance(){i=void 0}}},87278:function(e,t,n){var r,a;n.d(t,{Kd:function(){return i},Z7:function(){return o},lK:function(){return l},tB:function(){return u}}),(a=r||(r={})).REFERENCE="reference",a.INTRADAY="intraday",a.BOTH="both";let i=["1D","1M","6M","YTD","1Y","5Y"],o=["1H","1D","1M","6M","YTD","1Y","5Y"],l={"1H":["1m"],"1D":["1m","5m","15m","30m","1h","4h"],"3D":["1m","5m","15m","30m","1h","4h"],"5D":["1m","5m","15m","30m","1h","4h"],"1W":["1m","5m","15m","30m","1h","4h"],"1M":["1h","4h","1d","1w"],"6M":["1d","1w","1M"],YTD:["1d","1w","1M"],"1Y":["1d","1w","1M"],"5Y":["1w","1M","1y"]},u={"1m":"1 Min","5m":"5 Min","15m":"15 Min","30m":"30 Min","1h":"1 Hour","2h":"2 Hour","4h":"4 Hour","1d":"1 Day","1w":"1 Week","1M":"1 Month","1y":"1 Year"}},99464:function(e,t,n){n.d(t,{H:function(){return a},f:function(){return i}});let r="object"==typeof window.NREUM&&window.NREUM,a=function(e){var t;let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};r&&(null===(t=r.noticeError)||void 0===t||t.call(r,e,n))},i=(e,t)=>{var n;r&&(null===(n=r.addPageAction)||void 0===n||n.call(r,e,t))}},79281:function(e,t,n){n.d(t,{Bl:function(){return s},Mx:function(){return o},RN:function(){return f},Ru:function(){return a},ZE:function(){return i},_r:function(){return l},fK:function(){return c}});var r=n(2887);let a="#2563eb",i=[a,"#0032F1","#AE8E00","#97542B","#65a30d","#8317B2","#FF6200","#FF008C","#0094D9"],o={up:"#338736",down:"#E51503",unchanged:"#767676",wick:"#999999"};function l(e,t){return t&&/^#([0-9A-F]{3}|[0-9A-F]{6}|[0-9A-F]{8})$/i.test(t)?u(t):i[e%i.length]}function u(e){if(/^#[0-9A-F]{6}([0-9A-F]{2})?$/i.test(e))return e.toUpperCase();if(/^#[0-9A-F]{3}$/i.test(e)){let t=e[1],n=e[2],r=e[3];return"#".concat(t).concat(t).concat(n).concat(n).concat(r).concat(r).toUpperCase()}let t=/^rgba?\((\d+),\s*(\d+),\s*(\d+)/i.exec(e);if((null==t?void 0:t[1])&&t[2]&&t[3]){let e=Number.parseInt(t[1],10).toString(16).padStart(2,"0"),n=Number.parseInt(t[2],10).tLine truncated
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8764],{79742:function(t,e){"use strict";e.byteLength=function(t){var e=s(t),r=e[0],n=e[1];return(r+n)*3/4-n},e.toByteArray=function(t){var e,r,o=s(t),f=o[0],u=o[1],h=new i((f+u)*3/4-u),l=0,a=u>0?f-4:f;for(r=0;r<a;r+=4)e=n[t.charCodeAt(r)]<<18|n[t.charCodeAt(r+1)]<<12|n[t.charCodeAt(r+2)]<<6|n[t.charCodeAt(r+3)],h[l++]=e>>16&255,h[l++]=e>>8&255,h[l++]=255&e;return 2===u&&(e=n[t.charCodeAt(r)]<<2|n[t.charCodeAt(r+1)]>>4,h[l++]=255&e),1===u&&(e=n[t.charCodeAt(r)]<<10|n[t.charCodeAt(r+1)]<<4|n[t.charCodeAt(r+2)]>>2,h[l++]=e>>8&255,h[l++]=255&e),h},e.fromByteArray=function(t){for(var e,n=t.length,i=n%3,o=[],f=0,u=n-i;f<u;f+=16383)o.push(function(t,e,n){for(var i,o=[],f=e;f<n;f+=3)o.push(r[(i=(t[f]<<16&16711680)+(t[f+1]<<8&65280)+(255&t[f+2]))>>18&63]+r[i>>12&63]+r[i>>6&63]+r[63&i]);return o.join("")}(t,f,f+16383>u?u:f+16383));return 1===i?o.push(r[(e=t[n-1])>>2]+r[e<<4&63]+"=="):2===i&&o.push(r[(e=(t[n-2]<<8)+t[n-1])>>10]+r[e>>4&63]+r[e<<2&63]+"="),o.join("")};for(var r=[],n=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",f=0,u=o.length;f<u;++f)r[f]=o[f],n[o.charCodeAt(f)]=f;function s(t){var e=t.length;if(e%4>0)throw Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");-1===r&&(r=e);var n=r===e?0:4-r%4;return[r,n]}n["-".charCodeAt(0)]=62,n["_".charCodeAt(0)]=63},48764:function(t,e,r){"use strict";let n=r(79742),i=r(80645),o="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;function f(t){if(t>2147483647)throw RangeError('The value "'+t+'" is invalid for option "size"');let e=new Uint8Array(t);return Object.setPrototypeOf(e,u.prototype),e}function u(t,e,r){if("number"==typeof t){if("string"==typeof e)throw TypeError('The "string" argument must be of type string. Received type number');return l(t)}return s(t,e,r)}function s(t,e,r){if("string"==typeof t)return function(t,e){if(("string"!=typeof e||""===e)&&(e="utf8"),!u.isEncoding(e))throw TypeError("Unknown encoding: "+e);let r=0|y(t,e),n=f(r),i=n.write(t,e);return i!==r&&(n=n.slice(0,i)),n}(t,e);if(ArrayBuffer.isView(t))return function(t){if(k(t,Uint8Array)){let e=new Uint8Array(t);return p(e.buffer,e.byteOffset,e.byteLength)}return a(t)}(t);if(null==t)throw TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t);if(k(t,ArrayBuffer)||t&&k(t.buffer,ArrayBuffer)||"undefined"!=typeof SharedArrayBuffer&&(k(t,SharedArrayBuffer)||t&&k(t.buffer,SharedArrayBuffer)))return p(t,e,r);if("number"==typeof t)throw TypeError('The "value" argument must not be of type number. Received type number');let n=t.valueOf&&t.valueOf();if(null!=n&&n!==t)return u.from(n,e,r);let i=function(t){var e;if(u.isBuffer(t)){let e=0|c(t.length),r=f(e);return 0===r.length||t.copy(r,0,0,e),r}return void 0!==t.length?"number"!=typeof t.length||(e=t.length)!=e?f(0):a(t):"Buffer"===t.type&&Array.isArray(t.data)?a(t.data):void 0}(t);if(i)return i;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof t[Symbol.toPrimitive])return u.from(t[Symbol.toPrimitive]("string"),e,r);throw TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t)}function h(t){if("number"!=typeof t)throw TypeError('"size" argument must be of type number');if(t<0)throw RangeError('The value "'+t+'" is invalid for option "size"')}function l(t){return h(t),f(t<0?0:0|c(t))}function a(t){let e=t.length<0?0:0|c(t.length),r=f(e);for(let n=0;n<e;n+=1)r[n]=255&t[n];return r}function p(t,e,r){let n;if(e<0||t.byteLength<e)throw RangeError('"offset" is outside of buffer bounds');if(t.byteLength<e+(r||0))throw RangeError('"length" is outside of buffer bounds');return Object.setPrototypeOf(n=void 0===e&&void 0===r?new Uint8Array(t):void 0===r?new Uint8Array(t,e):new Uint8Array(t,e,r),u.prototype),n}function c(t){if(t>=2147483647)throw RangeError("Attempt to allocate Buffer larger than maximum size: 0x7fffffff bytes");return 0|t}function y(t,e){if(u.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||k(t,ArrayBuffer))return t.byteLength;if("string"!=typeof t)throw TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof t);let r=t.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;let i=!1;for(;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return x(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return N(t).length;default:if(i)return n?-1:x(t).length;e=(""+e).toLowerCase(),i=!0}}function g(t,e,r){let i=!1;if((void 0===e||e<0)&&(e=0),e>this.length||((void 0===r||r>this.length)&&(r=this.length),r<=0||(r>>>=0)<=(e>>>=0)))return"";for(t||(t="utf8");;)switch(t){case"hex":return function(t,e,r){let n=t.length;(!Line truncated
|
||||||
+9
@@ -0,0 +1,9 @@
|
|||||||
|
@layer phx.components{.Avatar_avatar__6R9_G{--atomics-avatar-size-extra-small:2.5rem;--atomics-avatar-size-small:3.375rem;--atomics-avatar-size-medium:4.5rem;--atomics-avatar-size-large:12.5rem;aspect-ratio:1/1;border-radius:50%;display:inline-block}.Avatar_avatar__6R9_G[data-size=extra-small]{height:var(--atomics-avatar-size-extra-small);width:var(--atomics-avatar-size-extra-small)}.Avatar_avatar__6R9_G[data-size=small]{height:var(--atomics-avatar-size-small);width:var(--atomics-avatar-size-small)}.Avatar_avatar__6R9_G[data-size=medium]{height:var(--atomics-avatar-size-medium);width:var(--atomics-avatar-size-medium)}.Avatar_avatar__6R9_G[data-size=large]{height:var(--atomics-avatar-size-large);width:var(--atomics-avatar-size-large)}.Badge_badge__CT1BR{align-items:center;border-radius:var(--phx-radius-core-4);display:inline-flex;font-weight:var(--phx-font-core-weight-medium);gap:var(--phx-space-core-6);justify-content:center;letter-spacing:.01em;line-height:var(--phx-font-core-line-height-120);padding:var(--phx-space-core-2) var(--phx-space-core-4)}.Badge_badge__CT1BR[data-badge-color=blue]{--atomics-badge-filled-bg-color:var(--phx-color-secondary-opinion-500);--atomics-badge-filled-color:var(--phx-color-core-white)}.Badge_badge__CT1BR[data-badge-color=gray]{--atomics-badge-filled-bg-color:var(--phx-color-fill-primary);--atomics-badge-filled-color:var(--phx-color-text-invert)}.Badge_badge__CT1BR[data-badge-color=red]{--atomics-badge-filled-bg-color:var(--phx-color-core-red-500);--atomics-badge-filled-color:var(--phx-color-core-white)}.Badge_badge__CT1BR[data-badge-color=light-red]{--atomics-badge-filled-bg-color:var(--phx-color-core-red-200);--atomics-badge-filled-color:var(--phx-color-core-black)}.Badge_badge__CT1BR[data-badge-color=yellow]{--atomics-badge-filled-bg-color:var(--phx-color-core-yellow-400);--atomics-badge-filled-color:var(--phx-color-core-black)}.Badge_badge__CT1BR[data-badge-size=medium]{font-size:var(--phx-font-core-size-14)}.Badge_badge__CT1BR[data-badge-size=small]{font-size:var(--phx-font-core-size-12)}.Badge_badge__CT1BR[data-badge-variant=filled]{background-color:var(--atomics-badge-filled-bg-color);color:var(--atomics-badge-filled-color)}.Badge_badge__CT1BR[data-badge-variant=outline]{background-color:transparent;background-color:initial;border:1px solid var(--phx-color-border-subtle);color:var(--phx-color-text-primary);padding:calc(var(--phx-space-core-2) - 1px) calc(var(--phx-space-core-4) - 1px)}.Button_btn__hEu8M{align-items:center;-webkit-appearance:auto;appearance:auto;background-color:var(--phx-color-core-none);border:0;border-radius:var(--phx-radius-core-8);box-sizing:border-box;cursor:pointer;display:inline-flex;flex-shrink:0;font-family:var(--phx-font-core-family-sans);font-weight:var(--phx-font-core-weight-medium);gap:var(--phx-space-core-4);justify-content:center;line-height:var(--phx-font-core-line-height-100);text-decoration:none;transition:background-color .15s ease-out,color .15s ease-out;white-space:nowrap}.Button_btn__hEu8M[data-button-size=large]{block-size:var(--phx-space-core-48);font-size:var(--phx-font-core-size-16);padding:0 var(--phx-space-core-24)}.Button_btn__hEu8M[data-button-size=medium],.Button_btn__hEu8M[data-button-size=small]{font-size:var(--phx-font-core-size-14);padding:0 var(--phx-space-core-16)}}@layer phx.components{:is(.Button_btn__hEu8M[data-button-size=medium],.Button_btn__hEu8M[data-button-size=small])>svg{height:var(--phx-icon-core-size-20);width:var(--phx-icon-core-size-20)}.Button_btn__hEu8M[data-button-size=medium]{block-size:var(--phx-space-core-36)}.Button_btn__hEu8M[data-button-size=small]{block-size:var(--phx-space-core-28)}.Button_btn__hEu8M[data-button-variant=fill]{background-color:var(--phx-color-fill-primary);color:var(--phx-color-text-invert)}.Button_btn__hEu8M[data-button-variant=fill]:is(:hover,:focus){background-color:var(--phx-color-fill-primary-hover)}.Button_btn__hEu8M[data-button-variant=fill][aria-disabled=true],.Button_btn__hEu8M[data-button-variant=fill][aria-disabled=true]:is(:hover,:focus,:active){background-color:var(--phx-color-fill-disabled)}.Button_btn__hEu8M[data-button-variant=outline]{color:var(--phx-color-text-primary);outline:1px solid currentcolor;outline-offset:-1px}.Button_btn__hEu8M[data-button-variant=outline]:is(:hover,:focus){background-color:var(--phx-color-fill-secondary-hover)}.Button_btn__hEu8M[data-button-variant=outline][aria-disabled=true],.Button_btn__hEu8M[data-button-variant=outline][aria-disabled=true]:is(:hover,:focus,:active){background-color:var(--phx-color-core-none);outline-color:var(--phx-color-border-subtle)}.Button_btn__hEu8M[data-button-variant=ghost]{color:var(--phx-color-text-primary)}.Button_btn__hEu8M[data-button-variant=ghost]:is(:hover,:focus){color:var(--phx-color-text-primary-hover)}.Button_btn__hEu8M[data-button-variant=ghost][aria-disabled=true]{background-color:var(--phx-color-core-none)}.Button_btn__hEu8M[aria-disabled=true],.Button_btn__hEu8M[aria-disabled=true]:is(:hLine truncated
|
||||||
|
--phx-color-fill-disabled
|
||||||
|
);--atomics-combobox-disabled-text-color:var(--phx-color-text-disabled);--atomics-combobox-error-text-color:var(--phx-color-error-primary-text);--atomics-combobox-trigger-height:2.25rem;--atomics-combobox-transition-duration:150ms}.Combobox_label__RjTZr{border:0;-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.Combobox_trigger__wqwql{background-color:var(--atomics-combobox-background-color);border:none;border-radius:var(--phx-radius-core-8);color:var(--atomics-combobox-text-color);cursor:pointer;font-family:var(--phx-font-core-family-sans);font-size:var(--phx-font-core-size-14);height:var(--atomics-combobox-trigger-height);line-height:var(--phx-font-core-line-height-120);outline:1px solid var(--atomics-combobox-border-color);outline-offset:-1px;padding:0 var(--phx-space-core-12);text-align:left;transition:outline-color var(--atomics-combobox-transition-duration) ease;width:100%}}@layer phx.components{.Combobox_trigger__wqwql:focus-visible{outline:.125rem solid var(--atomics-combobox-border-color-focus);outline-offset:calc(var(--phx-space-core-2)*-1)}.Combobox_trigger__wqwql[data-disabled]{background-color:var(--atomics-combobox-disabled-background-color);color:var(--atomics-combobox-disabled-text-color);cursor:default}.Combobox_value__z8SBO{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.Combobox_trigger__wqwql[data-placeholder] .Combobox_value__z8SBO,.Combobox_value__z8SBO:empty:before{color:var(--atomics-combobox-placeholder-color)}.Combobox_chevron__kAfzz{color:var(--atomics-combobox-text-color);transition:transform var(--atomics-combobox-transition-duration) ease}.Combobox_trigger__wqwql[data-popup-open] .Combobox_chevron__kAfzz{transform:rotate(180deg)}.Combobox_trigger__wqwql[data-disabled] .Combobox_chevron__kAfzz{color:var(--atomics-combobox-disabled-text-color)}.Combobox_popup__iVm_B{min-width:var(--anchor-width);z-index:2}.Combobox_errorText__z9R9n{color:var(--atomics-combobox-error-text-color);line-height:var(--phx-font-core-line-height-120);margin:0}.Combobox_comboboxRoot__aDXv9:has(.Combobox_errorText__z9R9n){--atomics-combobox-text-color:var(--phx-color-text-primary)}.Combobox_comboboxRoot__aDXv9:has(.Combobox_errorText__z9R9n) .Combobox_trigger__wqwql{outline-color:var(--atomics-combobox-border-color-error)}[data-popup-open]:is(.Combobox_comboboxRoot__aDXv9:has(.Combobox_errorText__z9R9n) .Combobox_trigger__wqwql){outline:var(--phx-space-core-2) solid var(--atomics-combobox-border-color-error);outline-offset:calc(var(--phx-space-core-2)*-1)}}@layer phx.components{.MenuItem_menuItem__2BHxF{cursor:pointer;min-height:2.75rem;padding:var(--phx-space-core-12)}.MenuItem_menuItem__2BHxF[data-highlighted]{background-color:var(--phx-color-core-gray-300)}[data-phx-theme=dark] .MenuItem_menuItem__2BHxF[data-selected]{background-color:var(--phx-color-core-gray-600)}.MenuItem_menuItem__2BHxF[data-disabled]{cursor:default}[data-highlighted]:is([data-phx-theme=dark] .MenuItem_menuItem__2BHxF){background-color:var(--phx-color-core-gray-600)}:is([data-phx-theme=dark] .MenuItem_menuItem__2BHxF):hover{color:var(--phx-color-text-primary-hover)}.MenuItem_menuItem__2BHxF.MenuItem_menuItemSpacer__PDjR7{height:0;min-height:0;overflow:hidden;padding-bottom:0;padding-top:0;visibility:hidden}@media (hover:hover){.MenuItem_menuItem__2BHxF:hover:not([data-disabled]){background-color:var(--phx-color-core-gray-200)}[data-phx-theme=dark] .MenuItem_menuItem__2BHxF:hover:not([data-disabled]){background-color:var(--phx-color-fill-secondary-hover)}}}@layer phx.components{.MenuInput_menuInput__1zmFU{background:#0000;border:none;border-radius:0;color:var(--phx-color-text-primary);font-family:var(--phx-font-core-family-sans);font-size:var(--phx-font-core-size-14);line-height:var(--phx-font-core-line-height-130);outline:none;padding:0}.MenuInput_menuInput__1zmFU::placeholder{color:var(--phx-color-core-gray-600)}.MenuInput_menuInput__1zmFU:focus{outline:none}.ComboboxMenu_menuContainer__BurCm{background-color:var(--phx-color-background-primary);border:1px solid var(--phx-color-core-gray-200);border-radius:var(--phx-space-core-4);box-shadow:.25rem .25rem .3125rem #00000026;overflow:hidden}.ComboboxMenu_srOnly__R4NH9{border:0;-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.ComboboxMenu_searchBar__g1JI8{border-bottom:1px solid var(--phx-color-core-gray-300);padding:var(--phx-space-core-12)}}@layer phx.components{.ComboboxMenu_searchBar__g1JI8:focus-within{border-radius:.375rem;outline:.125rem solid var(--phx-color-border-extra-strong);outline-offset:calc(var(--phx-space-core-2)*-1)}.ComboboxMenu_clearButton__D47eM,.ComboboxMenu_searchIcon__IVgsl{color:var(--phx-color-text-tertiary)}.ComboboxMenu_clearButton__D47eM{align-items:center;background:none;border:none;cursor:pointer;display:none;flex-shrink:0;padding:0}.CoLine truncated
|
||||||
|
--phx-color-fill-disabled
|
||||||
|
);--atomics-dropdown-trigger-height:2.25rem}.Dropdown_root__qcJEu[data-dropdown-size=large]{--atomics-dropdown-trigger-height:3rem}.Dropdown_trigger__FTO1u{background-color:var(--atomics-dropdown-background-color);border:none;border-radius:var(--phx-radius-core-8);height:var(--atomics-dropdown-trigger-height);outline:1px solid var(--atomics-dropdown-border-color);outline-offset:-1px;padding:0 var(--phx-space-core-12);text-align:left}.Dropdown_trigger__FTO1u[data-popup-open]{outline:.125rem solid var(--atomics-dropdown-border-color-focus);outline-offset:-.125rem}}@layer phx.components{.Dropdown_trigger__FTO1u:focus-visible{outline:.125rem solid var(--atomics-dropdown-border-color-focus);outline-offset:-.125rem}.Dropdown_trigger__FTO1u[data-invalid]{outline-color:var(--atomics-dropdown-border-color-error)}.Dropdown_trigger__FTO1u[data-invalid]:focus-visible,.Dropdown_trigger__FTO1u[data-invalid][data-popup-open]{outline-color:var(--atomics-dropdown-border-color-error)}.Dropdown_trigger__FTO1u[data-disabled]{background-color:var(--atomics-dropdown-disabled-background-color);pointer-events:none}.Dropdown_value___qNc7{min-width:0;overflow:hidden;text-align:left;text-overflow:ellipsis;white-space:nowrap}.Dropdown_trigger__FTO1u[data-popup-open] .Dropdown_icon__ZQgxa{transform:rotate(180deg)}.Dropdown_popup__GkDN6{min-width:var(--anchor-width)}.Dropdown_popup__GkDN6[data-ending-style],.Dropdown_popup__GkDN6[data-starting-style]{opacity:0;transform:translateY(calc(var(--phx-space-core-4)*-1))}.Dropdown_popup__GkDN6[data-open]{opacity:1;transform:translateY(0)}.Dropdown_popupInner__JbRrD{background-color:var(--phx-color-background-primary);border:1px solid var(--phx-color-core-gray-200);border-radius:var(--phx-radius-core-8);box-shadow:.25rem .25rem .3125rem #00000026;overflow:hidden}[data-phx-theme=dark] .Dropdown_popupInner__JbRrD{border-color:var(--phx-color-core-gray-700)}.Dropdown_list__1dJwP{max-height:15.75rem;overflow-y:auto;scrollbar-color:var(--phx-color-core-gray-500) #0000;scrollbar-width:thin}.Dropdown_indicator__m_LbM{height:.75rem;width:.75rem}.Dropdown_errorText__YXtDi,.Dropdown_helpText__AKBli{margin:0}.Input_inputRoot__G24K_{--atomics-input-border-color:var(--phx-color-border-subtle);--atomics-input-border-color-focus:var(--phx-color-border-extra-strong);--atomics-input-border-color-error:var(--phx-color-error-primary);--atomics-input-text-color:var(--phx-color-text-primary);--atomics-input-label-color:var(--phx-color-text-tertiary);--atomics-input-label-color-focus:var(--phx-color-text-primary);--atomics-input-placeholder-color:var(--phx-color-text-disabled);--atomics-input-background-color:var(--phx-color-background-primary);--atomics-input-disabled-background-color:var(--phx-color-fill-disabled);--atomics-input-disabled-text-color:var(--phx-color-text-disabled);--atomics-input-error-text-color:var(--phx-color-error-primary-text);--atomics-input-help-text-color:var(--phx-color-text-tertiary);--atomics-input-transition-duration:150ms;--atomics-input-padding-horizontal:var(--phx-space-core-16);--atomics-input-padding-vertical:var(--phx-space-core-12);--atomics-input-label-padding:var(--phx-space-core-4);--atomics-input-label-offset:calc(var(--atomics-input-label-font-size)/2);--atomics-input-icon-padding:var(--phx-space-core-40);--atomics-input-icon-right:var(--phx-space-core-16);--atomics-input-height:3rem;--atomics-input-font-size:var(--phx-font-core-size-16);--atomics-input-label-font-size:var(--phx-font-core-size-12)}.Input_label__PFTMK{color:var(--atomics-input-label-color);transition:color var(--atomics-input-transition-duration) ease}}@layer phx.components{:is(.Input_inputRoot__G24K_[data-input-variant=line],.Input_inputRoot__G24K_[data-input-variant=outline]) .Input_label__PFTMK{height:1px;margin:-1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}.Input_inputRoot__G24K_[data-input-variant=outline-label]{position:relative}.Input_inputRoot__G24K_[data-input-variant=outline-label] .Input_label__PFTMK{background-color:var(--atomics-input-background-color);left:calc(var(--atomics-input-padding-horizontal) - var(--atomics-input-label-padding));opacity:0;padding:0 var(--atomics-input-label-padding);position:absolute;top:var(--atomics-input-label-offset);transform:translateY(-50%);transition:opacity 0s,visibility var(--atomics-input-transition-duration) ease;visibility:hidden;z-index:1}:is(.Input_inputRoot__G24K_[data-input-variant=outline-label][data-focused],.Input_inputRoot__G24K_[data-input-variant=outline-label][data-filled]) .Input_label__PFTMK{opacity:1;visibility:visible}.Input_inputRoot__G24K_[data-input-variant=outline-label][data-focused] .Input_label__PFTMK{color:var(--atomics-input-label-color-focus)}.Input_inputRoot__G24K_[data-input-variant=outline-label] .Input_inputWrapper__RQ977{margin-top:var(--atomics-input-label-offset)}.Input_inputWrapper__RQ977{position:relative;width:100%}.Input_inputWrapper__RQ977:has(.Input_icon__tgR_J) .Input_input__3mFqW{padding-rigLine truncated
|
||||||
|
--phx-font-core-family-sans
|
||||||
|
);font-size:var(--atomics-input-font-size);height:var(--atomics-input-height);line-height:var(--phx-font-core-line-height-150);outline:1px solid var(--atomics-input-border-color);outline-offset:-1px;padding:var(--atomics-input-padding-vertical) var(--atomics-input-padding-horizontal);transition:outline-color var(--atomics-input-transition-duration) ease;width:100%}.Input_input__3mFqW ::placeholder{color:var(--atomics-input-placeholder-color);opacity:1}.Input_input__3mFqW[data-focused]{outline:.125rem solid var(--atomics-input-border-color-focus);outline-offset:-.125rem}.Input_input__3mFqW[data-disabled]{background-color:var(--atomics-input-disabled-background-color);color:var(--atomics-input-disabled-text-color)}.Input_inputRoot__G24K_[data-input-variant=line] .Input_input__3mFqW{border:none;border-bottom:1px solid var(--atomics-input-border-color);border-radius:0;outline:none;padding-left:0;padding-right:0}[data-focused]:is(.Input_inputRoot__G24K_[data-input-variant=line] .Input_input__3mFqW){border-bottom:.125rem solid var(--atomics-input-border-color-focus)}.Input_inputRoot__G24K_[data-input-size=small]{--atomics-input-padding-horizontal:var(--phx-space-core-12);--atomics-input-padding-vertical:var(--phx-space-core-8);--atomics-input-font-size:var(--phx-font-core-size-14);--atomics-input-icon-padding:var(--phx-space-core-32);--atomics-input-icon-right:var(--phx-space-core-12);--atomics-input-height:2.25rem}.Input_icon__tgR_J{position:absolute;right:var(--atomics-input-icon-right);top:50%;transform:translateY(-50%)}.Input_helpText__pRKz_{color:var(--atomics-input-help-text-color);margin:0}.Input_errorText___tlIi{color:var(--atomics-input-error-text-color);margin:0}.Input_inputRoot__G24K_:has(.Input_errorText___tlIi) .Input_label__PFTMK,.Input_inputRoot__G24K_[data-focused]:has(.Input_errorText___tlIi) .Input_label__PFTMK{color:var(--atomics-input-error-text-color)}.Input_inputRoot__G24K_:has(.Input_errorText___tlIi) .Input_input__3mFqW{outline-color:var(--atomics-input-border-color-error)}[data-focused]:is(.Input_inputRoot__G24K_:has(.Input_errorText___tlIi) .Input_input__3mFqW){outline:.125rem solid var(--atomics-input-border-color-error);outline-offset:-.125rem}.Input_inputRoot__G24K_[data-input-variant=line]:has(.Input_errorText___tlIi) .Input_input__3mFqW{border-bottom-color:var(--atomics-input-border-color-error)}[data-focused]:is(.Input_inputRoot__G24K_[data-input-variant=line]:has(.Input_errorText___tlIi) .Input_input__3mFqW){border:none;border-bottom:.125rem solid var(--atomics-input-border-color-error);outline:none}}@layer phx.components{.Switch_switch__h4w1G{--atomics-switch-active-color:var(--phx-color-secondary-subscription-500);--atomics-switch-active-color-hover:var(
|
||||||
|
--phx-color-secondary-subscription-100
|
||||||
|
);--atomics-switch-inactive-color:var(--phx-color-core-gray-300);--atomics-switch-inactive-color-hover:var(--phx-color-core-gray-100);--atomics-switch-transition-duration:150ms}[data-phx-theme=dark] .Switch_switch__h4w1G{--atomics-switch-inactive-color:var(--phx-color-core-gray-500);--atomics-switch-inactive-color-hover:var(--phx-color-core-gray-200)}.Switch_switch__h4w1G{align-items:center;-webkit-appearance:none;appearance:none;background-color:var(--atomics-switch-inactive-color);border:0;border-radius:1.875rem;display:flex;height:1.875rem;justify-content:flex-start;margin:0;padding:var(--phx-space-core-2);position:relative;transition-duration:var(--atomics-switch-transition-duration);transition-property:background-color;transition-timing-function:ease;width:3.5rem}.Switch_switch__h4w1G[data-checked]{background-color:var(--atomics-switch-active-color)}.Switch_switch__h4w1G:hover{cursor:pointer}.Switch_switch__h4w1G:focus-visible{outline:var(--phx-space-core-2) solid var(--atomics-switch-active-color);outline-offset:var(--phx-space-core-2)}.Switch_thumb__sjvmF{align-items:center;aspect-ratio:1/1;background-color:var(--phx-color-core-white);border-radius:100%;box-shadow:0 0 1px 0 #0000001a,0 1px var(--phx-space-core-2) 0 #00000026;color:var(--phx-color-core-gray-600);display:flex;height:100%;justify-content:center;position:relative;transition:background-color var(--atomics-switch-transition-duration) ease,translate var(--atomics-switch-transition-duration) ease}.Switch_thumb__sjvmF[data-checked]{color:var(--atomics-switch-active-color);translate:1.625rem 0}.Switch_switch__h4w1G:hover .Switch_thumb__sjvmF{background-color:var(--atomics-switch-inactive-color-hover)}.Switch_switch__h4w1G[data-checked]:hover .Switch_thumb__sjvmF{background-color:var(--atomics-switch-active-color-hover)}.Switch_thumb__sjvmF svg{height:var(--phx-icon-core-size-16);width:var(--phx-icon-core-size-16)}.IconButton_iconBtn__dg5zS{border-radius:50%}.IconButton_iconBtn__dg5zS[data-button-size=extra-small],.IconButton_iconBtn__dg5zS[data-button-size=large],.IconButton_iconBtn__dg5zS[data-button-size=medium],.IconButton_iconBtn__dg5zS[data-button-size=small]{padding:0}.IconButton_iconBtn__dg5zS[data-button-size=large]{block-size:var(--phx-space-core-44);min-inline-size:var(--phx-space-core-44)}.IconButton_iconBtn__dg5zS[data-button-size=medium]{block-size:var(--phx-space-core-36);min-inline-size:var(--phx-space-core-36)}.IconButton_iconBtn__dg5zS[data-button-size=medium]>svg{height:var(--phx-icon-core-size-24);width:var(--phx-icon-core-size-24)}.IconButton_iconBtn__dg5zS[data-button-size=small]{block-size:var(--phx-space-core-24);min-inline-size:var(--phx-space-core-24)}.IconButton_iconBtn__dg5zS[data-button-size=small]>svg{height:var(--phx-icon-core-size-16);width:var(--phx-icon-core-size-16)}.IconButton_iconBtn__dg5zS[data-button-size=small][data-button-variant=ghost]>svg{height:var(--phx-icon-core-size-24);width:var(--phx-icon-core-size-24)}.IconButton_iconBtn__dg5zS[data-button-size=extra-small]{block-size:var(--phx-space-core-20);min-inline-size:var(--phx-space-core-20)}.IconButton_iconBtn__dg5zS[data-button-size=extra-small]>svg{height:var(--phx-icon-core-size-12);width:var(--phx-icon-core-size-12)}.IconButton_iconBtn__dg5zS[data-button-size=extra-small][data-button-variant=ghost]>svg{height:var(--phx-icon-core-size-20);width:var(--phx-icon-core-size-20)}.IconButton_iconBtn__dg5zS[data-button-variant=outline]{outline-color:var(--phx-color-border-moderate)}}@layer phx.components{.IconButton_iconBtn__dg5zS[data-button-variant=outline]:is(:hover,:focus){outline-color:var(--phx-color-border-subtle)}}@layer phx.components{.Grid_grid__qtAzq{display:grid}.List_list__K_lgQ{display:flex;flex-direction:column}.List_list__K_lgQ[data-list-gap="2"]{gap:var(--phx-space-core-2)}.List_list__K_lgQ[data-list-gap="4"]{gap:var(--phx-space-core-4)}.List_list__K_lgQ[data-list-gap="6"]{gap:var(--phx-space-core-6)}.List_list__K_lgQ[data-list-gap="8"]{gap:var(--phx-space-core-8)}.List_list__K_lgQ[data-list-gap="12"]{gap:var(--phx-space-core-12)}.List_list__K_lgQ[data-list-gap="16"]{gap:var(--phx-space-core-16)}.List_list__K_lgQ[data-list-gap="20"]{gap:var(--phx-space-core-20)}.List_list__K_lgQ[data-list-gap="24"]{gap:var(--phx-space-core-24)}.List_list__K_lgQ[data-list-gap="28"]{gap:var(--phx-space-core-28)}.List_list__K_lgQ[data-list-gap="32"]{gap:var(--phx-space-core-32)}.List_list__K_lgQ[data-list-gap="36"]{gap:var(--phx-space-core-36)}.List_list__K_lgQ[data-list-gap="40"]{gap:var(--phx-space-core-40)}.List_list__K_lgQ[data-list-gap="44"]{gap:var(--phx-space-core-44)}.List_list__K_lgQ[data-list-gap="48"]{gap:var(--phx-space-core-48)}.List_list__K_lgQ[data-list-variant=unstyled]{list-style:none}.List_list__K_lgQ[data-list-variant=unordered]{list-style-type:disc}.List_list__K_lgQ[data-list-variant=ordered]{list-style-type:decimal}.Modal_popup__5shbF{--atomics-modal-width-medium:25.375rem;--atomics-modal-width-large:38.625rem;--atomics-modal-max-heighLine truncated
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9491],{20296:function(e){function t(e,t,l){function n(){var u=Date.now()-c;u<t&&u>=0?r=setTimeout(n,t-u):(r=null,l||(a=e.apply(o,i),o=i=null))}null==t&&(t=100);var r,i,o,c,a,u=function(){o=this,i=arguments,c=Date.now();var u=l&&!r;return r||(r=setTimeout(n,t)),u&&(a=e.apply(o,i),o=i=null),a};return u.clear=function(){r&&(clearTimeout(r),r=null)},u.flush=function(){r&&(a=e.apply(o,i),o=i=null,clearTimeout(r),r=null)},u}t.debounce=t,e.exports=t},25434:function(e,t,l){"use strict";l.d(t,{f:function(){return i}});var n=l(67294),r=l(77536);function i(){for(var e=arguments.length,t=Array(e),l=0;l<e;l++)t[l]=arguments[l];return n.useMemo(()=>t.map(e=>(0,r.lV)(e)),[t])}},77536:function(e,t,l){"use strict";l.d(t,{Ds:function(){return C},Mc:function(){return w},Mg:function(){return m},RD:function(){return u},Sh:function(){return h},dl:function(){return v},lV:function(){return a},vw:function(){return f}});var n=l(90512),r=l(20296),i=l.n(r);let o=new Set(["gif","png"]),c=[220,480,640,720,960,1020,1200,1280,1400,1800,2e3];function a(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return e.replace(/(^[A-Z])/,e=>{let[t]=e;return(t||"").toLowerCase()}).replace(/([A-Z])/g,e=>{let[t]=e;return"-".concat((t||"").toLowerCase())}).replace(/[^A-Z0-9]/gi,"-").replace(/-{1,}/g,"-").replace(/^-|-$/g,"")}let u=function(){for(var e=arguments.length,t=Array(e),l=0;l<e;l++)t[l]=arguments[l];return(0,n.Z)(...t)},h=(e,t)=>{var l;return Array.from(new Set(u((null==t?void 0:t.unstyled)?"":e,(null==t?void 0:t.className)||"",(l=null==t?void 0:t.name)?"".concat(a(l)):"").split(" "))).join(" ")};function C(e,t,l){return i()(e,t,l)}function v(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:-1,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:c,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:1,i=arguments.length>5&&void 0!==arguments[5]&&arguments[5],a=e.split(".").pop()||"",u=i&&"png"===a||!o.has(a);if(!e||!u||!n)return"";let h=[];return n.map(n=>{let i=Math.min(n,t);return h[i]?null:(h[i]=!0,e.replace(/^http:\/\//,"//").replace(/^\/\//,"https://").replace(/(\/)(-*\d+x-*\d+)(.\w+)$/,"$1".concat(i*r,"x").concat(l>0?Math.round(i/t*l):-1,"$3 ").concat(i,"w")))}).filter(Boolean).join(", ")}function m(e){return 0===e?"neutral":e>0?"positive":"negative"}function w(){return Math.random().toString(16).slice(2)}function f(e){var t;return!!e&&"string"==typeof e&&(null===(t=e.split("-")[0])||void 0===t?void 0:t.toLowerCase())==="ja"}},70390:function(e,t,l){"use strict";l.d(t,{AC:function(){return o},BR:function(){return M},CH:function(){return h},CJ:function(){return et},DM:function(){return V},HE:function(){return I},HN:function(){return O},I8:function(){return H},II:function(){return C},KW:function(){return el},Kh:function(){return E},Ov:function(){return _},_M:function(){return L},_Q:function(){return p},_Z:function(){return Z},_z:function(){return r},am:function(){return W},c3:function(){return j},et:function(){return q},fh:function(){return F},fv:function(){return Y},h6:function(){return b},hE:function(){return v},hY:function(){return G},ie:function(){return y},kF:function(){return g},n$:function(){return z},oI:function(){return ee},of:function(){return w},ol:function(){return u},pr:function(){return S},s$:function(){return s},s1:function(){return A},sh:function(){return K},sk:function(){return m},tL:function(){return er},v3:function(){return N},v8:function(){return P},vu:function(){return T},yv:function(){return d}});var n=l(67294);function r(e){let{width:t=24,height:l=24}=e;return n.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",width:t,height:l},n.createElement("path",{d:"M.594.695l-.594.7v10.707c0 10.488.008 10.718.477 11.3.73.914 1.933.82 4.039-.324.933-.508 1.8-1.113 1.925-1.344.407-.746.266-1.55-.336-1.937-.48-.309-.699-.324-1.421-.09-.79.258-.891.238-1.274-.23-.387-.465-.422-1.079-.422-7.563 0-6.023.055-7.133.36-7.562.199-.278.562-.504.816-.504.504 0 12.707 6.804 13.414 7.48.848.809.258 1.332-3.883 3.457-2.105 1.086-3.851 1.969-3.875 1.969-.023 0-.011-.996.028-2.215.062-1.98.02-2.281-.422-2.832-.586-.734-1.371-.789-1.973-.137-.39.426-.437.856-.437 4.059 0 3.476.015 3.598.558 4.164.348.367.805.586 1.219.586.785 0 12.71-6.29 13.613-7.176l.586-.578.067 5.066c.035 2.786.066.172.066-5.804 0-5.977-.031-8.582-.066-5.793l-.067 5.078-.629-.586C22.02 10.262 17.547 7.75 12.426 5 2.012-.594 1.773-.68.594.695M.105 12.113c0 5.977.032 8.39.067 5.364.035-3.032.035-7.922 0-10.872-.035-2.949-.067-.468-.067 5.508m7.407-4c-.692.75-.301 2.239.613 2.328 1.445.145 2.223-1.093 1.406-2.238-.441-.625-1.488-.668-2.02-.09",fillRule:"evenodd",fill:"#04accc"}))}var i="Apple";function o(){return n.createElement("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-label":i},n.createLine truncated
|
||||||
BIN
Binary file not shown.
|
After Width: | Height: | Size: 1.9 KiB |
+22
@@ -0,0 +1,22 @@
|
|||||||
|
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9848],{32289:function(e,t,r){var n,i,o={};e.exports=o,o.themes={};var a=r(89539),s=o.styles=r(38982),l=Object.defineProperties,u=new RegExp(/[\r\n]+/g);o.supportsColor=r(48136).supportsColor,void 0===o.enabled&&(o.enabled=!1!==o.supportsColor()),o.enable=function(){o.enabled=!0},o.disable=function(){o.enabled=!1},o.stripColors=o.strip=function(e){return(""+e).replace(/\x1B\[\d+m/g,"")},o.stylize=function(e,t){if(!o.enabled)return e+"";var r=s[t];return!r&&t in o?o[t](e):r.open+e+r.close};var c=/[|\\{}()[\]^$+*?.]/g,f=function(e){if("string"!=typeof e)throw TypeError("Expected a string");return e.replace(c,"\\$&")};function d(e){var t=function e(){return m.apply(e,arguments)};return t._styles=e,t.__proto__=p,t}var h=(n={},s.grey=s.gray,Object.keys(s).forEach(function(e){s[e].closeRe=RegExp(f(s[e].close),"g"),n[e]={get:function(){return d(this._styles.concat(e))}}}),n),p=l(function(){},h);function m(){var e=Array.prototype.slice.call(arguments),t=e.map(function(e){return null!=e&&e.constructor===String?e:a.inspect(e)}).join(" ");if(!o.enabled||!t)return t;for(var r=-1!=t.indexOf("\n"),n=this._styles,i=n.length;i--;){var l=s[n[i]];t=l.open+t.replace(l.closeRe,l.open)+l.close,r&&(t=t.replace(u,function(e){return l.close+e+l.open}))}return t}o.setTheme=function(e){if("string"==typeof e){console.log("colors.setTheme now only accepts an object, not a string. If you are trying to set a theme from a file, it is now your (the caller's) responsibility to require the file. The old syntax looked like colors.setTheme(__dirname + '/../themes/generic-logging.js'); The new syntax looks like colors.setTheme(require(__dirname + '/../themes/generic-logging.js'));");return}for(var t in e)!function(t){o[t]=function(r){if("object"==typeof e[t]){var n=r;for(var i in e[t])n=o[e[t][i]](n);return n}return o[e[t]](r)}}(t)};var g=function(e,t){var r=t.split("");return(r=r.map(e)).join("")};for(var y in o.trap=r(58763),o.zalgo=r(50750),o.maps={},o.maps.america=r(36278)(o),o.maps.zebra=r(90848)(o),o.maps.rainbow=r(38823)(o),o.maps.random=r(79353)(o),o.maps)!function(e){o[e]=function(t){return g(o.maps[e],t)}}(y);l(o,(i={},Object.keys(h).forEach(function(e){i[e]={get:function(){return d([e])}}}),i))},58763:function(e){e.exports=function(e,t){var r="";e=(e=e||"Run the trap, drop the bass").split("");var n={a:["@","Ą","Ⱥ","Ʌ","Δ","Λ","Д"],b:["\xdf","Ɓ","Ƀ","ɮ","β","฿"],c:["\xa9","Ȼ","Ͼ"],d:["\xd0","Ɗ","Ԁ","ԁ","Ԃ","ԃ"],e:["\xcb","ĕ","Ǝ","ɘ","Σ","ξ","Ҽ","੬"],f:["Ӻ"],g:["ɢ"],h:["Ħ","ƕ","Ң","Һ","Ӈ","Ԋ"],i:["༏"],j:["Ĵ"],k:["ĸ","Ҡ","Ӄ","Ԟ"],l:["Ĺ"],m:["ʍ","Ӎ","ӎ","Ԡ","ԡ","൩"],n:["\xd1","ŋ","Ɲ","Ͷ","Π","Ҋ"],o:["\xd8","\xf5","\xf8","Ǿ","ʘ","Ѻ","ם","","๏"],p:["Ƿ","Ҏ"],q:["্"],r:["\xae","Ʀ","Ȑ","Ɍ","ʀ","Я"],s:["\xa7","Ϟ","ϟ","Ϩ"],t:["Ł","Ŧ","ͳ"],u:["Ʊ","Ս"],v:["ט"],w:["Ш","Ѡ","Ѽ","൰"],x:["Ҳ","Ӿ","Ӽ","ӽ"],y:["\xa5","Ұ","Ӌ"],z:["Ƶ","ɀ"]};return e.forEach(function(e){var t=Math.floor(Math.random()*(n[e=e.toLowerCase()]||[" "]).length);void 0!==n[e]?r+=n[e][t]:r+=e}),r}},50750:function(e){e.exports=function(e,t){e=e||" he is here ";var r={up:["̍","̎","̄","̅","̿","̑","̆","̐","͒","͗","͑","̇","̈","̊","͂","̓","̈","͊","͋","͌","̃","̂","̌","͐","̀","́","̋","̏","̒","̓","̔","̽","̉","ͣ","ͤ","ͥ","ͦ","ͧ","ͨ","ͩ","ͪ","ͫ","ͬ","ͭ","ͮ","ͯ","̾","͛","͆","̚"],down:["̖","̗","̘","̙","̜","̝","̞","̟","̠","̤","̥","̦","̩","̪","̫","̬","̭","̮","̯","̰","̱","̲","̳","̹","̺","̻","̼","ͅ","͇","͈","͉","͍","͎","͓","͔","͕","͖","͙","͚","̣"],mid:["̕","̛","̀","́","͘","̡","̢","̧","̨","̴","̵","̶","͜","͝","͞","͟","͠","͢","̸","̷","͡"," ҉"]},n=[].concat(r.up,r.down,r.mid);function i(e){return Math.floor(Math.random()*e)}return function(e,t){var o,a,s="";for(a in(t=t||{}).up=void 0===t.up||t.up,t.mid=void 0===t.mid||t.mid,t.down=void 0===t.down||t.down,t.size=void 0!==t.size?t.size:"maxi",e=e.split(""))if(!function(e){var t=!1;return n.filter(function(r){t=r===e}),t}(a)){switch(s+=e[a],o={up:0,down:0,mid:0},t.size){case"mini":o.up=i(8),o.mid=i(2),o.down=i(8);break;case"maxi":o.up=i(16)+3,o.mid=i(4)+1,o.down=i(64)+3;break;default:o.up=i(8)+1,o.mid=i(6)/2,o.down=i(8)+1}var l=["up","mid","down"];for(var u in l)for(var c=l[u],f=0;f<=o[c];f++)t[c]&&(s+=r[c][i(r[c].length)])}return s}(e,t)}},36278:function(e){e.exports=function(e){return function(t,r,n){if(" "===t)return t;switch(r%3){case 0:return e.red(t);case 1:return e.white(t);case 2:return e.blue(t)}}}},38823:function(e){e.exports=function(e){var t=["red","yellow","green","blue","magenta"];return function(r,n,i){return" "===r?r:e[t[n++%t.length]](r)}}},79353:function(e){e.exports=function(e){var t=["underline","inverse","grey","yellow","red","green","blue","white","cyan","magenta","brightYellow","brightRed","brightGreen","brightBlue","brightWhite","brightCyan","brightMagenta"];return
Line truncated
|
||||||
|
Found: ${e.toString().split("\n")[0]}
|
||||||
|
`),Error.captureStackTrace(this,t)}}e.exports=e=>{if(e.length>2)throw new t(e);function r(e={}){this.options=e}function n(e){return new r(e)}return r.prototype.transform=e,n.Format=r,n}},13922:function(e,t,r){"use strict";let n=r(79235),{MESSAGE:i}=r(15396),o=r(87668);function a(e,t){return"bigint"==typeof t?t.toString():t}e.exports=n((e,t)=>{let r=o.configure(t);return e[i]=r(e,t.replacer||a,t.space),e})},30087:function(e,t,r){"use strict";r.d(t,{x:function(){return a}});var n=r(67294),i=r(77536),o=r(68187);r(38539);let a=n.forwardRef(function(e,t){let{className:r,name:a="InBodyAd",...s}=e;return n.createElement(o.r,{ref:t,className:(0,i.Sh)("media-ui-InBodyAds_inBodyAd-mz0YfknFCIM-",{className:r}),name:a,adType:"in-body",ariaLabel:"In-article advertisement",...s})})},27606:function(e,t,r){"use strict";r.d(t,{d:function(){return m}});var n=r(67294),i=r(96701),o=r(25434),a=r(77536),s=r(83682),l=r(60006),u=r(70390),c=r(54483),f=r.n(c),d=r(73935),h=r(67917);function p(e){let{children:t}=e;return h.sk?null:(0,d.createPortal)(t,document.body)}r(33974);let m=n.forwardRef(function(e,t){let{children:r,open:c=!1,name:d="drawer",onClose:h}=e,m=(0,o.f)(d),g=(0,a.Sh)(["media-ui-Drawer_base-OMyCh7D-kpY-"],e),y=(0,n.useRef)(null),b=(0,s.H)(y,t);return n.createElement(p,null,n.createElement(i.Z,{in:c,timeout:300,mountOnEnter:!0,nodeRef:y,classNames:{enter:"media-ui-Drawer_enter-sYbklEO8tyk-",enterActive:"media-ui-Drawer_enter-active-gk4621elygM-",exit:"media-ui-Drawer_exit-oPeMhsEbL5Y-",exitActive:"media-ui-Drawer_exit-active-QrTiMyZzx1A-"},unmountOnExit:!0},n.createElement("div",{className:g,ref:b,"data-component":m},n.createElement("div",{className:"overlay"}),n.createElement(f(),{active:c,focusTrapOptions:{fallbackFocus:".main",clickOutsideDeactivates:h,escapeDeactivates:h}},n.createElement("div",{className:"main",role:"dialog","aria-labelledby":"dialog_label","aria-modal":"true"},r,n.createElement(l.h,{className:"close-button",onClick:h,title:"Close menu",size:"small"},n.createElement(u.n$,null)))))))});m.Header=function(e){let{children:t,name:r="drawer-header",...i}=e;return n.createElement("div",{className:(0,a.Sh)(["media-ui-Drawer_header-s830oNhRdZE-"],i),"data-component":(0,o.f)(r),id:"dialog-label"},t)},m.Header.displayName="Drawer.Header",m.Content=function(e){let{children:t,name:r="drawer-content",...i}=e;return n.createElement("div",{className:(0,a.Sh)(["media-ui-Drawer_content-jZzp04L7Gao-"],i),"data-component":(0,o.f)(r)},t)},m.Content.displayName="Drawer.Content",m.Button=function(e){let{children:t,name:r="drawer-button",className:i,...s}=e;return n.createElement("button",{className:(0,a.Sh)(["media-ui-Drawer_button-Yf1U53WnCsA-"],{className:i,...s}),"data-component":(0,o.f)(r),...s},t)},m.Button.displayName="Drawer.Button"},74116:function(e,t,r){"use strict";r.d(t,{O:function(){return c}});var n=r(67294),i=r(67673),o=r(25434),a=r(77536),s=r(16562);r(19740);var l={terminalTout:"media-ui-TerminalTout_terminalTout-jMmQ--E35FQ-",background:"media-ui-TerminalTout_background-ugfAG8JrlcE-",cta:"media-ui-TerminalTout_cta-MhehFIQemMA-",icon:"media-ui-TerminalTout_icon-UNnzMeAfRHw-",centerAligned:"media-ui-TerminalTout_centerAligned-dU4kQ27OR90-",info:"media-ui-TerminalTout_info-7hWexZP6x-U-",highlight:"media-ui-TerminalTout_highlight-LKP-y7t--IQ-"};let u={en:"https://www.bloomberg.com/professional/solution/bloomberg-terminal-learn-more/?utm_source=bbg&utm_medium=intpro&utm_campaign=trmnl&utm_content=web_dotcom&tactic=794999",ja:"https://about.bloomberg.co.jp/solution/bloomberg-terminal/"},c=n.forwardRef(function(e,t){let{languageCode:r,name:c="TerminalTout",centerAligned:f=!1}=e,d=u[null!=r?r:"en"],[h]=(0,o.f)(c);return n.createElement("a",{href:d,target:"_blank",rel:"noreferrer",className:(0,a.Sh)([l.terminalTout,f&&l.centerAligned],e),ref:t,"data-component":h},n.createElement("div",{className:l.background},n.createElement("div",{className:l.info},n.createElement(s.j,{id:"media-ui-core_beforeItsHereItsOnTheBloombergTerminal",defaultMessage:"Before it’s here, it’s on the <span>Bloomberg Terminal</span>",values:{span:e=>n.createElement("span",{className:l.highlight},e)}})),n.createElement("div",{className:l.cta},n.createElement(i.oI,{className:l.icon})," ",n.createElement(s.j,{id:"media-ui-core_learnMore",defaultMessage:"LEARN MORE"}))))})},53633:function(e,t,r){"use strict";r.d(t,{P:function(){return h}});var n=r(67294),i=r(77536),o=r(33617),a=r(25434),s=r(9339),l=r(70390),u=r(58783),c=r(62299);r(98646);var f={wrapper:"media-ui-OutlinedDropdown_wrapper-jDVzlgd6BVg-","input-container":"media-ui-OutlinedDropdown_input-container--d6o57YImSo-","icon-button":"media-ui-OutlinedDropdown_icon-button-KLjKLzHAMZs-",error:"media-ui-OutlinedDropdown_error-ddrIvhkkooE-",chevron:"media-ui-OutlinedDropdown_chevron-1pMsIxL3WwY-",open:"media-ui-OutlinedDropdown_open-chpaPyMcCZw-",menu:"media-ui-OutlinedDropdown_menu-S8x6K0Uz8jw-","menu-open":"media-ui-OutlinedDropdown_menu-open-8HIWJAg-PKg-",item:"media-ui-OutlinedDropdown_i
Line truncated
|
||||||
|
${y}`,r=`,
|
||||||
|
${y}`);let n=Math.min(b.length,p),o=0;for(;o<n-1;o++){let n=e(String(o),b,c,m,g,y);t+=(void 0!==n?n:"null")+r}let a=e(String(o),b,c,m,g,y);if(t+=void 0!==a?a:"null",b.length-1>p){let e=b.length-p-1;t+=`${r}"... ${f(e)} not stringified"`}return""!==g&&(t+=`
|
||||||
|
${i}`),c.pop(),`[${t}]`}let u=Object.keys(b),_=u.length;if(0===_)return"{}";if(h<c.length+1)return'"[Object]"';let v="",w="";""!==g&&(y+=g,r=`,
|
||||||
|
${y}`,v=" ");let E=Math.min(_,p);s&&!l(b)&&(u=a(u,d)),c.push(b);for(let n=0;n<E;n++){let i=u[n],a=e(i,b,c,m,g,y);void 0!==a&&(t+=`${w}${o(i)}:${v}${a}`,w=r)}return _>p&&(t+=`${w}"...":${v}"${f(_-p)} not stringified"`,w=r),""!==g&&w.length>1&&(t=`
|
||||||
|
${y}${t}
|
||||||
|
${i}`),c.pop(),`{${t}}`}case"number":return isFinite(b)?String(b):t?t(b):"null";case"boolean":return!0===b?"true":"false";case"undefined":return;case"bigint":if(i)return String(b);default:return t?t(b):void 0}}("",{"":e},[],r,m,"");if(Array.isArray(r))return function e(r,a,s,l,u,c){switch("object"==typeof a&&null!==a&&"function"==typeof a.toJSON&&(a=a.toJSON(r)),typeof a){case"string":return o(a);case"object":{if(null===a)return"null";if(-1!==s.indexOf(a))return n;let t=c,r="",i=",";if(Array.isArray(a)){if(0===a.length)return"[]";if(h<s.length+1)return'"[Array]"';s.push(a),""!==u&&(c+=u,r+=`
|
||||||
|
${c}`,i=`,
|
||||||
|
${c}`);let n=Math.min(a.length,p),o=0;for(;o<n-1;o++){let t=e(String(o),a[o],s,l,u,c);r+=(void 0!==t?t:"null")+i}let d=e(String(o),a[o],s,l,u,c);if(r+=void 0!==d?d:"null",a.length-1>p){let e=a.length-p-1;r+=`${i}"... ${f(e)} not stringified"`}return""!==u&&(r+=`
|
||||||
|
${t}`),s.pop(),`[${r}]`}s.push(a);let d="";""!==u&&(c+=u,i=`,
|
||||||
|
${c}`,d=" ");let m="";for(let t of l){let n=e(t,a[t],s,l,u,c);void 0!==n&&(r+=`${m}${o(t)}:${d}${n}`,m=i)}return""!==u&&m.length>1&&(r=`
|
||||||
|
${c}${r}
|
||||||
|
${t}`),s.pop(),`{${r}}`}case"number":return isFinite(a)?String(a):t?t(a):"null";case"boolean":return!0===a?"true":"false";case"undefined":return;case"bigint":if(i)return String(a);default:return t?t(a):void 0}}("",e,[],function(e){let t=new Set;for(let r of e)("string"==typeof r||"number"==typeof r)&&t.add(String(r));return t}(r),m,"")}if(0!==m.length)return function e(r,c,m,g,y){switch(typeof c){case"string":return o(c);case"object":{if(null===c)return"null";if("function"==typeof c.toJSON){if("object"!=typeof(c=c.toJSON(r)))return e(r,c,m,g,y);if(null===c)return"null"}if(-1!==m.indexOf(c))return n;let t=y;if(Array.isArray(c)){if(0===c.length)return"[]";if(h<m.length+1)return'"[Array]"';m.push(c),y+=g;let r=`
|
||||||
|
${y}`,n=`,
|
||||||
|
${y}`,i=Math.min(c.length,p),o=0;for(;o<i-1;o++){let t=e(String(o),c[o],m,g,y);r+=(void 0!==t?t:"null")+n}let a=e(String(o),c[o],m,g,y);if(r+=void 0!==a?a:"null",c.length-1>p){let e=c.length-p-1;r+=`${n}"... ${f(e)} not stringified"`}return r+=`
|
||||||
|
${t}`,m.pop(),`[${r}]`}let i=Object.keys(c),b=i.length;if(0===b)return"{}";if(h<m.length+1)return'"[Object]"';y+=g;let _=`,
|
||||||
|
${y}`,v="",w="",E=Math.min(b,p);l(c)&&(v+=u(c,_,p),i=i.slice(c.length),E-=c.length,w=_),s&&(i=a(i,d)),m.push(c);for(let t=0;t<E;t++){let r=i[t],n=e(r,c[r],m,g,y);void 0!==n&&(v+=`${w}${o(r)}: ${n}`,w=_)}return b>p&&(v+=`${w}"...": "${f(b-p)} not stringified"`,w=_),""!==w&&(v=`
|
||||||
|
${y}${v}
|
||||||
|
${t}`),m.pop(),`{${v}}`}case"number":return isFinite(c)?String(c):t?t(c):"null";case"boolean":return!0===c?"true":"false";case"undefined":return;case"bigint":if(i)return String(c);default:return t?t(c):void 0}}("",e,[],m,"")}return function e(r,c,m){switch(typeof c){case"string":return o(c);case"object":{if(null===c)return"null";if("function"==typeof c.toJSON){if("object"!=typeof(c=c.toJSON(r)))return e(r,c,m);if(null===c)return"null"}if(-1!==m.indexOf(c))return n;let t="",i=void 0!==c.length;if(i&&Array.isArray(c)){if(0===c.length)return"[]";if(h<m.length+1)return'"[Array]"';m.push(c);let r=Math.min(c.length,p),n=0;for(;n<r-1;n++){let r=e(String(n),c[n],m);t+=(void 0!==r?r:"null")+","}let i=e(String(n),c[n],m);if(t+=void 0!==i?i:"null",c.length-1>p){let e=c.length-p-1;t+=`,"... ${f(e)} not stringified"`}return m.pop(),`[${t}]`}let g=Object.keys(c),y=g.length;if(0===y)return"{}";if(h<m.length+1)return'"[Object]"';let b="",_=Math.min(y,p);i&&l(c)&&(t+=u(c,",",p),g=g.slice(c.length),_-=c.length,b=","),s&&(g=a(g,d)),m.push(c);for(let r=0;r<_;r++){let n=g[r],i=e(n,c[n],m);void 0!==i&&(t+=`${b}${o(n)}:${i}`,b=",")}return y>p&&(t+=`${b}"...":"${f(y-p)} not stringified"`),m.pop(),`{${t}}`}case"number":return isFinite(c)?String(c):t?t(c):"null";case"boolean":return!0===c?"true":"false";case"undefined":return;case"bigint":if(i)return String(c);default:return t?t(c):void 0}}("",e,[])}}},77911:function(e,t){function r(e){for(var t in e)this[t]=e[t]}t.get=function(e){var r=Error.stackTraceLimit;Error.stackTraceLimit=1/0;var n={},i=Error.prepareStackTrace;Error.prepareStackTrace=function(e,t){return t},Error.captureStackTrace(n,e||t.get);var o=n.stack;return Error.prepareStackTrace=i,Error.stackTraceLimit=r,o},t.parse=function(e){if(!e.stack)return[];var t=this;return e.stack.split("\n").slice(1).map(function(e){if(e.match(/^\s*[-]{4,}$/))return t._createParsedCallSite({fileName:e,lineNumber:null,functionName:null,typeName:null,methodName:null,columnNumber:null,native:null});var r=e.match(/at (?:(.+)\s+\()?(?:(.+?):(\d+)(?::(\d+))?|([^)]+))\)?/);if(r){var n=null,i=null,o=null,a=null,s=null,l="native"===r[5];if(r[1]){var u=(o=r[1]).lastIndexOf(".");if("."==o[u-1]&&u--,u>0){n=o.substr(0,u),i=o.substr(u+1);var c=n.indexOf(".Module");c>0&&(o=o.substr(c+1),n=n.substr(0,c))}a=null}i&&(a=n,s=i),"<anonymous>"===i&&(s=null,o=null);var f={fileName:r[2]||null,lineNumber:parseInt(r[3],10)||null,functionName:o,typeName:a,methodName:s,columnNumber:parseInt(r[4],10)||null,native:l};return t._createParsedCallSite(f)}}).filter(function(e){return!!e})},["this","typeName","functionName","methodName","fileName","lineNumber","columnNumber","function","evalOrigin"].forEach(function(e){r.prototype[e]=null,r.prototype["get"+e[0].toUpperCase()+e.substr(1)]=function(){return this[e]}}),["topLevel","eval","native","constructor"].forEach(function(e){r.prototype[e]=!1,r.prototype["is"+e[0].toUpperCase()+e.substr(1)]=function(){return this[e]}}),t._createParsedCallSite=function(e){return new r(e)}},32553:function(e,t,r){"use strict";var n=r(89509).Buffer,i=n.isEncoding||function(e){switch((e=""+e)&&e.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function o(e){var t;switch(this.encoding=function(e){var t=function(e){var t;if(!e)return"utf8";for(;;)switch(e){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return e;default:if(t)return;e=(""+e).toLowerCase(),t=!0}}(e);if("string"!=typeof t&&(n.isEncoding===i||!i(e)))throw Error("Unknown encoding: "+e);return t||e}(e),this.encoding){case"utf16le":this.text=l,this.end=u,t=4;break;case"utf8":this.fillLast=s,t=4;break;case"base64":this.text=c,this.end=f,t=3;break;default:this.write=d,this.end=h;return}this.lastNeed=0,this.lastTotal=0,this.lastChar=n.allocUnsafe(t)}function a(e){return e<=127?0:e>>5==6?2:e>>4==14?3:e>>3==30?4:e>>6==2?-1:-2}function s(e){var t=this.lastTotal-this.lastNeed,r=function(e,t,r){if((192&t[0])!=128)return e.lastNeed=0,"�";if(e.lastNeed>1&&t.length>1){if((192&t[1])!=128)return e.lastNeed=1,"�";if(e.lastNeed>2&&t.length>2&&(192&t[2])!=128)return e.lastNeed=2,"�"}}(this,e,0);return void 0!==r?r:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):void(e.copy(this.lastChar,t,0,e.length),this.lastNeed-=e.length)}function l(e,t){if((e.length-t)%2==0){var r=e.toString("utf16le",t);if(r){var n=r.charCodeAt(r.length-1);if(n>=55296&&n<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString("utf16le",t,e.length-1)}function u(e){var t=e&&e.length?this.write(e):"";if(this.lastNeed){var r=this.lastTotal-this.la
Line truncated
|
||||||
|
- Upgrade docs: https://github.com/winstonjs/winston/blob/master/UPGRADE-3.0.md`)},a.prototype.close=function(){this.transport.close&&this.transport.close(),this.transport.__winstonError&&(this.transport.removeListener("error",this.transport.__winstonError),this.transport.__winstonError=null)}},51746:function(e,t,r){"use strict";let n=r(89539),i=r(64229),{LEVEL:o}=r(15396),a=e.exports=function(e={}){i.call(this,{objectMode:!0,highWaterMark:e.highWaterMark}),this.format=e.format,this.level=e.level,this.handleExceptions=e.handleExceptions,this.handleRejections=e.handleRejections,this.silent=e.silent,e.log&&(this.log=e.log),e.logv&&(this.logv=e.logv),e.close&&(this.close=e.close),this.once("pipe",e=>{this.levels=e.levels,this.parent=e}),this.once("unpipe",e=>{e===this.parent&&(this.parent=null,this.close&&this.close())})};n.inherits(a,i),a.prototype._write=function(e,t,r){if(this.silent||!0===e.exception&&!this.handleExceptions)return r(null);let n=this.level||this.parent&&this.parent.level;if(!n||this.levels[n]>=this.levels[e[o]]){let t,n;if(e&&!this.format)return this.log(e,r);try{n=this.format.transform(Object.assign({},e),this.format.options)}catch(e){t=e}if(t||!n){if(r(),t)throw t;return}return this.log(n,r)}return this._writableState.sync=!1,r(null)},a.prototype._writev=function(e,t){if(this.logv){let r=e.filter(this._accept,this);return r.length?this.logv(r,t):t(null)}for(let r=0;r<e.length;r++){let n,i;if(this._accept(e[r])){if(e[r].chunk&&!this.format){this.log(e[r].chunk,e[r].callback);continue}try{i=this.format.transform(Object.assign({},e[r].chunk),this.format.options)}catch(e){n=e}if(n||!i){if(e[r].callback(),n)throw t(null),n}else this.log(i,e[r].callback)}}return t(null)},a.prototype._accept=function(e){let t=e.chunk;if(this.silent)return!1;let r=this.level||this.parent&&this.parent.level;return(!0===t.exception||!r||this.levels[r]>=this.levels[t[o]])&&(!!this.handleExceptions||!0!==t.exception)},a.prototype._nop=function(){}},15832:function(e,t,r){"use strict";var n=r(6850),i=r(23221).warn;t.version=r(12561).version,t.transports=r(50557),t.config=r(8953),t.addColors=n.levels,t.format=n.format,t.createLogger=r(53040),t.Logger=r(47803),t.ExceptionHandler=r(69796),t.RejectionHandler=r(74841),t.Container=r(75100),t.Transport=r(94307),t.loggers=new t.Container;var o=t.createLogger();Object.keys(t.config.npm.levels).concat(["log","query","stream","add","remove","clear","profile","startTimer","handleExceptions","unhandleExceptions","handleRejections","unhandleRejections","configure","child"]).forEach(function(e){return t[e]=function(){return o[e].apply(o,arguments)}}),Object.defineProperty(t,"level",{get:function(){return o.level},set:function(e){o.level=e}}),Object.defineProperty(t,"exceptions",{get:function(){return o.exceptions}}),Object.defineProperty(t,"rejections",{get:function(){return o.rejections}}),["exitOnError"].forEach(function(e){Object.defineProperty(t,e,{get:function(){return o[e]},set:function(t){o[e]=t}})}),Object.defineProperty(t,"default",{get:function(){return{exceptionHandlers:o.exceptionHandlers,rejectionHandlers:o.rejectionHandlers,transports:o.transports}}}),i.deprecated(t,"setLevels"),i.forFunctions(t,"useFormat",["cli"]),i.forProperties(t,"useFormat",["padLevels","stripColors"]),i.forFunctions(t,"deprecated",["addRewriter","addFilter","clone","extend"]),i.forProperties(t,"deprecated",["emitErrs","levelLength"])},23221:function(e,t,r){"use strict";var n=r(89539).format;t.warn={deprecated:function(e){return function(){throw Error(n("{ %s } was removed in winston@3.0.0.",e))}},useFormat:function(e){return function(){throw Error([n("{ %s } was removed in winston@3.0.0.",e),"Use a custom winston.format = winston.format(function) instead."].join("\n"))}},forFunctions:function(e,r,n){n.forEach(function(n){e[n]=t.warn[r](n)})},forProperties:function(e,r,n){n.forEach(function(n){var i=t.warn[r](n);Object.defineProperty(e,n,{get:i,set:i})})}}},8953:function(e,t,r){"use strict";var n=r(6850),i=r(15396).configs;t.cli=n.levels(i.cli),t.npm=n.levels(i.npm),t.syslog=n.levels(i.syslog),t.addColors=n.levels},75100:function(e,t,r){"use strict";function n(e){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var i,o,a=r(53040);e.exports=(i=function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(function(e,t){if(!(e instanceof t))throw TypeError("Cannot call a class as a function")})(this,e),this.loggers=new Map,this.options=t},o=[{key:"add",value:function(e,t){var r=this;if(!this.loggers.has(e)){var n=(t=Object.assign({},t||this.options)).transports||this.options.transports;n?t.transports=Array.isArray(n)?n.slice():[n]:t.transports=[];var i=a(t);i.on("close",function(){return r._delete(e)}),this.loggers.set(e,i)}return this.loggers.get(e)}},{key:"get",value:function(e,t){return this.add(e,t)}},{key:"has",value
Line truncated
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3059],{7134:function(e,t,n){(window.__NEXT_P=window.__NEXT_P||[]).push(["/section-front/[[...slug]]",function(){return n(89816)}])},89816:function(e,t,n){"use strict";n.r(t),n.d(t,{__N_SSP:function(){return a3},default:function(){return a4}});var r,a,i,s,o=n(85893),l=n(67294),c=n(41762),d=n(87183),u=n(30087),m=n(74116),p=n(59628),h=n(53867),_=n(74943),g=n.n(_),f=n(28551),v=n.n(f),x=n(40281),y=n(77536),j=n(86896),k=n(43593),b=n.n(k),C=n(41664),w=n.n(C),N=n(25215),T=n.n(N),S=n(34093),M=n(8985),I=n(69298),D=n(13519),R=n(30939),P=n(11529),L=n(99464),A=n(59223);let E=e=>{if("number"==typeof e)return e;if("string"==typeof e){let t=e.trim();if("n/a"===t.toLowerCase())return Number.POSITIVE_INFINITY;let n=Number(t.replace(/,/g,""));return Number.isFinite(n)?n:Number.POSITIVE_INFINITY}return Number.POSITIVE_INFINITY},F=e=>{if("string"!=typeof e)return NaN;let t=e.trim().match(/^(\d{1,2}):(\d{2})\s*(AM|PM)$/i);if(!t)return NaN;let n=parseInt(t[1],10),r=parseInt(t[2],10);return n%=12,"PM"===t[3].toUpperCase()&&(n+=12),60*n+r};function B(e){let{columns:t,rows:n,className:r,sectionHeader:a,sectionUrl:i,subtitle:s,title:c,disclaimer:d}=e,[u,m]=(0,l.useState)(!1),[p,_]=(0,l.useState)({key:null,direction:null});(0,l.useEffect)(()=>{m(!0)},[]);let f=(0,l.useCallback)(e=>{let t=e.id;return"number"==typeof t?t:t?String(t):JSON.stringify(e)},[]),v=(0,l.useCallback)(e=>{let n=t.find(t=>t.key===e);if(n){let e="sort_by_".concat(n.key.toString().toLowerCase().replace(/ /g,"_"));(0,h.uH)("TableSort",e,"click","Market Data")}_(t=>t.key!==e?{key:e,direction:"asc"}:"asc"===t.direction?{key:e,direction:"desc"}:"desc"===t.direction?{key:e,direction:"asc"}:{key:null,direction:null}),(0,L.f)("SectionFrontTableSortClick",{columnName:e})},[t]),x=(0,l.useMemo)(()=>{var e,r,a;if(!u)return n;let{key:i,direction:s}=p;if(!i||!s)return n;let o=t.find(e=>e.key===i),l=null==o?void 0:null===(e=o.options)||void 0===e?void 0:e.columnType,c=null!==(a=null==o?void 0:null===(r=o.options)||void 0===r?void 0:r.backupKey)&&void 0!==a?a:i;return[...n].sort((e,t)=>{let n;let r=e[c],a=t[c];if(null===r)return 1;if(null===a)return -1;if("number"===l)n=E(r)-E(a);else if("time"===l)n=F(r)-F(a);else if("currency"===l){let r=e.id,a=t.id;n=String(r).localeCompare(String(a))}else n="number"==typeof r&&"number"==typeof a?r-a:String(r).localeCompare(String(a));return"asc"===s?n:-n})},[t,u,n,p]);return(0,o.jsxs)("div",{className:T().sectionFrontTable,children:[c&&(0,o.jsx)("div",{className:T().titleContainer,children:(0,o.jsxs)("div",{className:T().titleWrapper,children:[(0,o.jsx)("h2",{className:(0,y.Sh)([T().title,g().coreHeadlineSm]),children:i?(0,o.jsx)(w(),{className:T().sectionLink,href:i,children:(0,o.jsx)(A.oZ,{value:c})}):(0,o.jsx)("span",{children:(0,o.jsx)(A.oZ,{value:c})})})," ",(0,o.jsx)("h5",{className:T().subtitle,children:(0,o.jsx)(A.oZ,{value:s})})]})}),a,(0,o.jsx)("div",{className:T().scroll,children:(0,o.jsxs)(S.Z,{className:(0,y.Sh)([r,T().table]),children:[(0,o.jsx)(I.Z,{className:T().header,children:t.map((e,t)=>{var n;return(0,o.jsx)(M.Z,{column:e,className:0===t?(0,y.RD)([T().stickyCol,(null===(n=e.options)||void 0===n?void 0:n.disableQuickAdd)?T().quickAddAbsent:T().quickAddPresent]):void 0,sortState:p.key===e.key?p.direction:null,onSort:e.allowSorting?()=>v(e.key):void 0,children:(0,o.jsxs)("span",{className:g().coreShortTextXs,children:[(0,o.jsx)(A.oZ,{value:e.title})," "]})},e.key)})}),(0,o.jsx)(D.Z,{children:x.map(e=>(0,o.jsx)(R.Z,{rowData:e,columns:t,className:T().row,children:t.map((t,n)=>{var r;return(0,o.jsx)(P.Z,{rowData:e,column:t,className:0===n?(0,y.RD)([T().stickyCol,(null===(r=t.options)||void 0===r?void 0:r.disableQuickAdd)&&T().quickAddAbsent]):void 0},t.key)})},f(e)))})]})}),d&&(0,o.jsx)("div",{className:T().sectionNote,children:(0,o.jsx)("div",{className:T().tableDisclaimer,children:d})})]})}var V=n(86354),H=n.n(V),W=n(36136),O=n(50797);let U=(0,o.jsx)(o.Fragment,{children:(0,o.jsx)(O.jU,{id:"disclaimerWebsiteIsForInfo",defaultMessage:"Learn more about Bloomberg",values:{webUrl:(0,o.jsx)(W.r,{className:H().disclaimerLink,href:"https://www.bloomberg.com/professional/products/indices/fx-findings-reference-rates/#overview",children:(0,o.jsx)(O.jU,{id:"bloombergFixingsAndRefere_2",defaultMessage:"Bloomberg Fixings and Reference Rates"})})}})}),z=(0,o.jsx)(o.Fragment,{children:(0,o.jsx)(O.jU,{id:"currencyRatesAreRepresent",defaultMessage:"Learn more about Bloomberg",values:{webUrlDisclaimer:(0,o.jsx)(W.r,{className:H().disclaimerLink,href:"https://www.bloomberg.com/notices/jp/financial-data/",children:(0,o.jsx)(O.jU,{id:"detailsAndDisclaimer",defaultMessage:"Bloomberg Disclaimer"})})}})}),G=(0,o.jsx)(o.Fragment,{children:(0,o.jsx)(O.jU,{id:"disclaimerFxRatesMajorCurrEx",defaultMessage:"Foreign exchange rates of major world currencies. Compare key cross rates and currency exchange rates of U.S. Dollars, Euros, British Pounds, and others."})}),Z=(0,o.jsx)(o.Fragment,{children:(0Line truncated
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2888],{95957:function(e,t,n){"use strict";function a(e,t){var n=t&&t.cache?t.cache:s,a=t&&t.serializer?t.serializer:o;return(t&&t.strategy?t.strategy:function(e,t){var n,a,o=1===e.length?i:r;return n=t.cache.create(),a=t.serializer,o.bind(this,e,n,a)})(e,{cache:n,serializer:a})}function i(e,t,n,a){var i=null==a||"number"==typeof a||"boolean"==typeof a?a:n(a),r=t.get(i);return void 0===r&&(r=e.call(this,a),t.set(i,r)),r}function r(e,t,n){var a=Array.prototype.slice.call(arguments,3),i=n(a),r=t.get(i);return void 0===r&&(r=e.apply(this,a),t.set(i,r)),r}n.d(t,{A:function(){return d},H:function(){return a}});var o=function(){return JSON.stringify(arguments)},u=function(){function e(){this.cache=Object.create(null)}return e.prototype.get=function(e){return this.cache[e]},e.prototype.set=function(e,t){this.cache[e]=t},e}(),s={create:function(){return new u}},d={variadic:function(e,t){var n,a;return n=t.cache.create(),a=t.serializer,r.bind(this,e,n,a)},monadic:function(e,t){var n,a;return n=t.cache.create(),a=t.serializer,i.bind(this,e,n,a)}}},27751:function(e,t,n){"use strict";n.d(t,{wD:function(){return u},VG:function(){return c},rp:function(){return g},Ii:function(){return k},O4:function(){return h},uf:function(){return f},Wh:function(){return M},Jo:function(){return w},yx:function(){return b},Wi:function(){return v},HI:function(){return y},pe:function(){return p},Qc:function(){return ea}});var a,i,r,o,u,s,d,m,l=n(97582);function h(e){return e.type===u.literal}function c(e){return e.type===u.argument}function f(e){return e.type===u.number}function g(e){return e.type===u.date}function p(e){return e.type===u.time}function v(e){return e.type===u.select}function w(e){return e.type===u.plural}function b(e){return e.type===u.pound}function y(e){return e.type===u.tag}function M(e){return!!(e&&"object"==typeof e&&e.type===s.number)}function k(e){return!!(e&&"object"==typeof e&&e.type===s.dateTime)}(a=o||(o={}))[a.EXPECT_ARGUMENT_CLOSING_BRACE=1]="EXPECT_ARGUMENT_CLOSING_BRACE",a[a.EMPTY_ARGUMENT=2]="EMPTY_ARGUMENT",a[a.MALFORMED_ARGUMENT=3]="MALFORMED_ARGUMENT",a[a.EXPECT_ARGUMENT_TYPE=4]="EXPECT_ARGUMENT_TYPE",a[a.INVALID_ARGUMENT_TYPE=5]="INVALID_ARGUMENT_TYPE",a[a.EXPECT_ARGUMENT_STYLE=6]="EXPECT_ARGUMENT_STYLE",a[a.INVALID_NUMBER_SKELETON=7]="INVALID_NUMBER_SKELETON",a[a.INVALID_DATE_TIME_SKELETON=8]="INVALID_DATE_TIME_SKELETON",a[a.EXPECT_NUMBER_SKELETON=9]="EXPECT_NUMBER_SKELETON",a[a.EXPECT_DATE_TIME_SKELETON=10]="EXPECT_DATE_TIME_SKELETON",a[a.UNCLOSED_QUOTE_IN_ARGUMENT_STYLE=11]="UNCLOSED_QUOTE_IN_ARGUMENT_STYLE",a[a.EXPECT_SELECT_ARGUMENT_OPTIONS=12]="EXPECT_SELECT_ARGUMENT_OPTIONS",a[a.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE=13]="EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE",a[a.INVALID_PLURAL_ARGUMENT_OFFSET_VALUE=14]="INVALID_PLURAL_ARGUMENT_OFFSET_VALUE",a[a.EXPECT_SELECT_ARGUMENT_SELECTOR=15]="EXPECT_SELECT_ARGUMENT_SELECTOR",a[a.EXPECT_PLURAL_ARGUMENT_SELECTOR=16]="EXPECT_PLURAL_ARGUMENT_SELECTOR",a[a.EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT=17]="EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT",a[a.EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT=18]="EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT",a[a.INVALID_PLURAL_ARGUMENT_SELECTOR=19]="INVALID_PLURAL_ARGUMENT_SELECTOR",a[a.DUPLICATE_PLURAL_ARGUMENT_SELECTOR=20]="DUPLICATE_PLURAL_ARGUMENT_SELECTOR",a[a.DUPLICATE_SELECT_ARGUMENT_SELECTOR=21]="DUPLICATE_SELECT_ARGUMENT_SELECTOR",a[a.MISSING_OTHER_CLAUSE=22]="MISSING_OTHER_CLAUSE",a[a.INVALID_TAG=23]="INVALID_TAG",a[a.INVALID_TAG_NAME=25]="INVALID_TAG_NAME",a[a.UNMATCHED_CLOSING_TAG=26]="UNMATCHED_CLOSING_TAG",a[a.UNCLOSED_TAG=27]="UNCLOSED_TAG",(i=u||(u={}))[i.literal=0]="literal",i[i.argument=1]="argument",i[i.number=2]="number",i[i.date=3]="date",i[i.time=4]="time",i[i.select=5]="select",i[i.plural=6]="plural",i[i.pound=7]="pound",i[i.tag=8]="tag",(r=s||(s={}))[r.number=0]="number",r[r.dateTime=1]="dateTime";var P=/[ \xA0\u1680\u2000-\u200A\u202F\u205F\u3000]/,W=/(?:[Eec]{1,6}|G{1,5}|[Qq]{1,5}|(?:[yYur]+|U{1,5})|[ML]{1,5}|d{1,2}|D{1,3}|F{1}|[abB]{1,5}|[hkHK]{1,2}|w{1,2}|W{1}|m{1,2}|s{1,2}|[zZOvVxX]{1,4})(?=([^']*'[^']*')*[^']*$)/g,j=/[\t-\r \x85\u200E\u200F\u2028\u2029]/i,S=/^\.(?:(0+)(\*)?|(#+)|(0+)(#+))$/g,Z=/^(@+)?(\+|#+)?[rs]?$/g,x=/(\*)(0+)|(#+)(0+)|(0+)/g,T=/^(0+)$/;function z(e){var t={};return"r"===e[e.length-1]?t.roundingPriority="morePrecision":"s"===e[e.length-1]&&(t.roundingPriority="lessPrecision"),e.replace(Z,function(e,n,a){return"string"!=typeof a?(t.minimumSignificantDigits=n.length,t.maximumSignificantDigits=n.length):"+"===a?t.minimumSignificantDigits=n.length:"#"===n[0]?t.maximumSignificantDigits=n.length:(t.minimumSignificantDigits=n.length,t.maximumSignificantDigits=n.length+("string"==typeof a?a.length:0)),""}),t}function E(e){switch(e){case"sign-auto":return{signDisplay:"auto"};case"sign-accounting":case"()":return{currencySign:"accounting"};case"sign-always":case"+!":return{signDisplay:"always"};case"sign-accounting-always":case"()!":return{signDisplayLine truncated
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
self.__BUILD_MANIFEST=function(s,c,a,t,e,i,n,d,u,f,b,h,r,j,k,o,l,p,g,_,m,v,w,I,q,x,L,y,B,F){return{__rewrites:{afterFiles:[{has:p,source:"/:nextInternalLocale(en|ja|jp|ja\\-JP)/bazaar/api/:path*",destination:"/:nextInternalLocale/api/:path*"},{has:p,source:"/:nextInternalLocale(en|ja|jp|ja\\-JP)/quote/:path*/members",destination:"/:nextInternalLocale/quote/:path*?activeTab=members"},{has:[{type:"query",key:"variant",value:"ipo"}],source:"/:nextInternalLocale(en|ja|jp|ja\\-JP)/quote/:path*",destination:"/:nextInternalLocale/quote-ipo/:path*"}],beforeFiles:[],fallback:[]},"/":[b,"static/css/6eb9aeefa7a10543.css","static/chunks/pages/index-27b244e935884fd9.js"],"/_error":[a,s,c,t,e,i,"static/css/9907555aa2430996.css","static/chunks/pages/_error-4d6f841720d34b8e.js"],"/dev/i18n-test":["static/chunks/pages/dev/i18n-test-4c319377e233ff4f.js"],"/economic-calendar":[a,s,c,t,e,i,n,d,"static/css/3bcbae0aa8ff0b66.css","static/chunks/pages/economic-calendar-97c218a8c9c5f4ce.js"],"/email-unsubscribe-watchlist-alerts":[s,c,h,u,f,"static/css/9219ae569d5b0a1b.css","static/chunks/pages/email-unsubscribe-watchlist-alerts-0e584efa0adf8913.js"],"/phoenix-grid":[a,s,c,t,e,i,n,d,"static/css/2bd20542958b3485.css","static/chunks/pages/phoenix-grid-aac87f2b24aaa059.js"],"/quote/[...ticker]":[a,s,c,t,e,i,n,u,g,f,_,r,j,b,"static/chunks/2076-48d194898415201a.js",m,"static/chunks/6131-88a015d5bc807422.js",d,v,"static/css/a049eed0e182006b.css","static/chunks/pages/quote/[...ticker]-825162acdba47e0f.js"],"/quote-ipo/[...ticker]":[a,s,c,t,e,i,n,k,o,l,d,"static/css/a9f59ce28503f0f7.css","static/chunks/pages/quote-ipo/[...ticker]-9a89e99c8dac4ff1.js"],"/section-front/[[...slug]]":[a,w,s,c,t,e,i,n,h,u,k,o,g,l,f,I,_,r,j,q,b,x,L,y,m,"static/css/42223d36bd9d009d.css","static/chunks/9848-908ee027089c12d7.js",d,B,F,"static/css/58ec4ae3b0278ff4.css","static/chunks/pages/section-front/[[...slug]]-494e2a109e041a93.js"],"/survey-email-unsubscribe-watchlist-alerts":[s,"static/css/f52f95c8b596d750.css","static/chunks/pages/survey-email-unsubscribe-watchlist-alerts-eb44107b0873983d.js"],"/watchlist":[a,w,"static/chunks/674a26a7-706973588c9101ef.js",s,c,t,e,i,n,h,u,k,o,l,f,I,r,j,q,x,L,y,"static/chunks/4586-a7673cb2743ff6b1.js",d,B,"static/chunks/5460-6a593c0cdf06a2ba.js",F,"static/chunks/3094-7df6dd0b69f08c9d.js","static/chunks/1466-9283005bbbd24347.js",v,"static/css/5c4ccce03eea35c4.css","static/chunks/pages/watchlist-9960e4db7c9fd9ef.js"],"/with-nav":[a,s,c,t,e,"static/css/081d9a068a6801a1.css","static/chunks/pages/with-nav-705ca92301dae601.js"],sortedPages:["/","/_app","/_error","/dev/i18n-test","/economic-calendar","/email-unsubscribe-watchlist-alerts","/phoenix-grid","/quote/[...ticker]","/quote-ipo/[...ticker]","/section-front/[[...slug]]","/survey-email-unsubscribe-watchlist-alerts","/watchlist","/with-nav"]}}("static/chunks/9491-37f1513243ddd3ac.js","static/chunks/1626-cc487492cbd86add.js","static/chunks/5c0b189e-1a72a3c75385890d.js","static/css/fbb0b9a86876c741.css","static/chunks/7592-1a7f29923c252d64.js","static/chunks/7018-4a136dd45f9c84bc.js","static/chunks/6239-f7689ebc5734dc9d.js","static/chunks/2095-5f983cc1d5be46e8.js","static/chunks/8764-de71f68e8e20a4eb.js","static/chunks/1709-6ef136967372cf72.js","static/chunks/1664-9b8ca4ecc35d08d1.js","static/chunks/6336-0ef559f9ca6156bd.js","static/css/5830ff9c0cb152d3.css","static/chunks/7287-3615400021d28a4a.js","static/chunks/3934-ff427ed9511030ea.js","static/chunks/686-5b8c4a3d40d0d1d0.js","static/css/87c2764ae0951dfc.css",void 0,"static/chunks/3711-33c4ab59eacdfddd.js","static/chunks/8097-f7abdb73bed136f5.js","static/css/7b2aa8f0ad07b6a5.css","static/chunks/4084-0acbee068099c5b9.js","static/chunks/26770aaf-434672d6e837ff7e.js","static/chunks/4092-31cd7e68b12a9722.js","static/chunks/8433-b4588ba55097775f.js","static/css/1b94bbeabe1e643e.css","static/css/38bb7933384c1bf4.css","static/chunks/1860-fe5273b881ea5da9.js","static/chunks/8696-3c4873b2e81b1ab7.js","static/chunks/2806-73840ca6c0cfbafc.js"),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
self.__SSG_MANIFEST=new Set,self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB();
|
||||||
+2
@@ -0,0 +1,2 @@
|
|||||||
|
<html><head>
|
||||||
|
<meta http-equiv="content-type" content="text/html; charset=UTF-8"></head><body></body></html>
|
||||||
+2
@@ -0,0 +1,2 @@
|
|||||||
|
<html><head>
|
||||||
|
<meta http-equiv="content-type" content="text/html; charset=UTF-8"></head><body></body></html>
|
||||||
+2
@@ -0,0 +1,2 @@
|
|||||||
|
<html><head>
|
||||||
|
<meta http-equiv="content-type" content="text/html; charset=UTF-8"></head><body></body></html>
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):((e="undefined"!=typeof globalThis?globalThis:e||self).__bloomberg__=e.__bloomberg__||{},e.__bloomberg__._abbaClientClass=t())}(this,(function(){"use strict";var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function t(e){if(e.__esModule)return e;var t=Object.defineProperty({},"__esModule",{value:!0});return Object.keys(e).forEach((function(r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})})),t}function r(e){var t={exports:{}};return e(t,t.exports),t.exports}var n,i,o=function(e){return e&&e.Math==Math&&e},a=o("object"==typeof globalThis&&globalThis)||o("object"==typeof window&&window)||o("object"==typeof self&&self)||o("object"==typeof e&&e)||function(){return this}()||Function("return this")(),u=function(e){try{return!!e()}catch(e){return!0}},s=!u((function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")})),c=s,f=Function.prototype,l=f.apply,p=f.call,h="object"==typeof Reflect&&Reflect.apply||(c?p.bind(l):function(){return p.apply(l,arguments)}),d=Function.prototype,v=d.call,g=c&&d.bind.bind(v,v),b=c?g:function(e){return function(){return v.apply(e,arguments)}},m=b,y=m({}.toString),w=m("".slice),E=function(e){return w(y(e),8,-1)},x="object"==typeof document&&document.all,k={all:x,IS_HTMLDDA:void 0===x&&void 0!==x},_=k.all,S=k.IS_HTMLDDA?function(e){return"function"==typeof e||e===_}:function(e){return"function"==typeof e},I=!u((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})),A=Function.prototype.call,O=c?A.bind(A):function(){return A.apply(A,arguments)},T={}.propertyIsEnumerable,P=Object.getOwnPropertyDescriptor,R={f:P&&!T.call({1:2},1)?function(e){var t=P(this,e);return!!t&&t.enumerable}:T},C=Object,L=m("".split),j=u((function(){return!C("z").propertyIsEnumerable(0)}))?function(e){return"String"==E(e)?L(e,""):C(e)}:C,N=function(e){return null==e},D=TypeError,U=j,M=function(e){if(N(e))throw D("Can't call method on "+e);return e},F=S,B=k.all,z=k.IS_HTMLDDA?function(e){return"object"==typeof e?null!==e:F(e)||e===B}:function(e){return"object"==typeof e?null!==e:F(e)},$={},G=a,V=function(e){return F(e)?e:void 0},H=m({}.isPrototypeOf),q="undefined"!=typeof navigator&&String(navigator.userAgent)||"",W=G.process,Y=G.Deno,J=W&&W.versions||Y&&Y.version,X=J&&J.v8;X&&(i=(n=X.split("."))[0]>0&&n[0]<4?1:+(n[0]+n[1])),!i&&q&&(!(n=q.match(/Edge\/(\d+)/))||n[1]>=74)&&(n=q.match(/Chrome\/(\d+)/))&&(i=+n[1]);var K=i,Q=!!Object.getOwnPropertySymbols&&!u((function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&K&&K<41})),Z=Q,ee=Z&&!Symbol.sham&&"symbol"==typeof Symbol.iterator,te=function(e,t){return arguments.length<2?V($[e])||V(G[e]):$[e]&&$[e][t]||G[e]&&G[e][t]},re=H,ne=ee,ie=Object,oe=ne?function(e){return"symbol"==typeof e}:function(e){var t=te("Symbol");return F(t)&&re(t.prototype,ie(e))},ae=String,ue=function(e){try{return ae(e)}catch(e){return"Object"}},se=TypeError,ce=function(e){if(F(e))return e;throw se(ue(e)+" is not a function")},fe=O,le=z,pe=TypeError,he=Object.defineProperty,de=function(e,t){try{he(G,e,{value:t,configurable:!0,writable:!0})}catch(r){G[e]=t}return t},ve="__core-js_shared__",ge=G[ve]||de(ve,{}),be=!0,me=ge,ye=r((function(e){(e.exports=function(e,t){return me[e]||(me[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.30.1",mode:"pure",copyright:"© 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.30.1/LICENSE",source:"https://github.com/zloirock/core-js"})})),we=Object,Ee=function(e){return we(M(e))},xe=m({}.hasOwnProperty),ke=Object.hasOwn||function(e,t){return xe(Ee(e),t)},_e=0,Se=Math.random(),Ie=m(1..toString),Ae=ye,Oe=ke,Te=function(e){return"Symbol("+(void 0===e?"":e)+")_"+Ie(++_e+Se,36)},Pe=G.Symbol,Re=Ae("wks"),Ce=ne?Pe.for||Pe:Pe&&Pe.withoutSetter||Te,Le=oe,je=function(e,t){var r=e[t];return N(r)?void 0:ce(r)},Ne=function(e,t){var r,n;if("string"===t&&F(r=e.toString)&&!le(n=fe(r,e)))return n;if(F(r=e.valueOf)&&!le(n=fe(r,e)))return n;if("string"!==t&&F(r=e.toString)&&!le(n=fe(r,e)))return n;throw pe("Can't convert object to primitive value")},De=function(e){return Oe(Re,e)||(Re[e]=Z&&Oe(Pe,e)?Pe[e]:Ce("Symbol."+e)),Re[e]},Ue=TypeError,Me=De("toPrimitive"),Fe=function(e,t){if(!le(e)||Le(e))return e;var r,n=je(e,Me);if(n){if(void 0===t&&(t="default"),r=fe(n,e,t),!le(r)||Le(r))return r;throw Ue("Can't convert object to primitive value")}return void 0===t&&(t="number"),Ne(e,t)},Be=G.document,ze=le(Be)&&le(Be.createElement),$e=I,Ge=function(e){return ze?Be.createElement(e):{}},Ve=!$e&&!u((function(){return 7!=Object.defineProperty(Ge("div"),"a",{get:function(){return 7}}).a})),He=R,qe=function(e,t){return{enumerable:!(1&e),configurable:!(Line truncated
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports["plug-client"]=e():t["plug-client"]=e()}(this,function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)n.d(r,o,function(e){return t[e]}.bind(null,o));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=146)}([function(t,e,n){"use strict";n.d(e,"a",function(){return o});const r={trace:0,debug:1,info:2,warn:3,error:4};function o(t,...e){var n;const o=r[t];let i=r.warn;const a=function(t=window.location.href){const e={};return new URL(t).searchParams.forEach((t,n)=>{e[n]=t}),e}().plugLog;a&&Object.getOwnPropertyDescriptor(r,a)&&(i=r[a]),o<i||((o===r.error||a)&&console[t]("[PLUG_CLIENT]",new Date(Date.now()).toISOString(),...e),o>=r.warn&&["prod","stg"].includes("prod")&&(null===(n=null===window||void 0===window?void 0:window.newrelic)||void 0===n||n.addPageAction("PlugClient-Log",{env:"prod",level:t,messages:e})))}},function(t,e,n){(function(e){var n=function(t){return t&&t.Math==Math&&t};t.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof e&&e)||function(){return this}()||Function("return this")()}).call(this,n(96))},function(t,e,n){"use strict";n.d(e,"d",function(){return r}),n.d(e,"e",function(){return o}),n.d(e,"a",function(){return i}),n.d(e,"b",function(){return a}),n.d(e,"c",function(){return s});const r="plug-modal-outlet",o="plug-overlay",i="plug-banner-outlet",a="plug-close-button-clicked",s=864e5},function(t,e,n){var r=n(1),o=n(52),i=n(5),a=n(53),s=n(60),u=n(112),c=o("wks"),l=r.Symbol,f=u?l:l&&l.withoutSetter||a;t.exports=function(t){return i(c,t)||(s&&i(l,t)?c[t]=l[t]:c[t]=f("Symbol."+t)),c[t]}},function(t,e,n){t.exports=function(){"use strict";function t(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)t[r]=n[r]}return t}function e(n,r){function o(e,o,i){if("undefined"!=typeof document){"number"==typeof(i=t({},r,i)).expires&&(i.expires=new Date(Date.now()+864e5*i.expires)),i.expires&&(i.expires=i.expires.toUTCString()),e=encodeURIComponent(e).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape);var a="";for(var s in i)i[s]&&(a+="; "+s,!0!==i[s]&&(a+="="+i[s].split(";")[0]));return document.cookie=e+"="+n.write(o,e)+a}}function i(t){if("undefined"!=typeof document&&(!arguments.length||t)){for(var e=document.cookie?document.cookie.split("; "):[],r={},o=0;o<e.length;o++){var i=e[o].split("="),a=i.slice(1).join("=");try{var s=decodeURIComponent(i[0]);if(r[s]=n.read(a,s),t===s)break}catch(t){}}return t?r[t]:r}}return Object.create({set:o,get:i,remove:function(e,n){o(e,"",t({},n,{expires:-1}))},withAttributes:function(n){return e(this.converter,t({},this.attributes,n))},withConverter:function(n){return e(t({},this.converter,n),this.attributes)}},{attributes:{value:Object.freeze(r)},converter:{value:Object.freeze(n)}})}return e({read:function(t){return'"'===t[0]&&(t=t.slice(1,-1)),t.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent)},write:function(t){return encodeURIComponent(t).replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,decodeURIComponent)}},{path:"/"})}()},function(t,e){var n={}.hasOwnProperty;t.exports=function(t,e){return n.call(t,e)}},function(t,e,n){var r=n(11);t.exports=function(t){if(!r(t))throw TypeError(String(t)+" is not an object");return t}},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e,n){var r=n(13),o=n(14),i=n(24);t.exports=r?function(t,e,n){return o.f(t,e,i(1,n))}:function(t,e,n){return t[e]=n,t}},function(t,e,n){"use strict";var r=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.URLS_MAP=e.SOCIAL_SITE_PLACEHOLDER=e.APPLE_AUTH_INFO_FLAG_COOKIE_NAME=e.TWITTER_TOKEN_FLAG_COOKIE_NAME=e.FACEBOOK_ACCESS_TOKEN_FLAG_COOKIE_NAME=e.BSSO_ACCESS_TOKEN_FLAG_COOKIE_NAME=e.EXPERIENCE_PREFERENCE_COOKIE_NAME=e.COLLECTIVE_USER_DATA_COOKIE=e.CSRF_TOKEN_COOKIE_NAME=e.AGENT_ID=e.SESSION_KEY=e.SESSION_ID=e.SUBSCRIPTION_REFRESH_COOKIE_NAME=e.BREG_USER_COOKIE_NAME=e.BREG_USER_ID_COOKIE_NAME=e.BBGCOM_SITE_REGEX=void 0;var o=r(n(47Line truncated
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports["fast-path"]=t():e["fast-path"]=t()}(this,(()=>(()=>{"use strict";var e={r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};function r(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)e[n]=r[n]}return e}e.r(t);var n=function e(t,n){function o(e,o,i){if("undefined"!=typeof document){"number"==typeof(i=r({},n,i)).expires&&(i.expires=new Date(Date.now()+864e5*i.expires)),i.expires&&(i.expires=i.expires.toUTCString()),e=encodeURIComponent(e).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape);var a="";for(var s in i)i[s]&&(a+="; "+s,!0!==i[s]&&(a+="="+i[s].split(";")[0]));return document.cookie=e+"="+t.write(o,e)+a}}return Object.create({set:o,get:function(e){if("undefined"!=typeof document&&(!arguments.length||e)){for(var r=document.cookie?document.cookie.split("; "):[],n={},o=0;o<r.length;o++){var i=r[o].split("="),a=i.slice(1).join("=");try{var s=decodeURIComponent(i[0]);if(n[s]=t.read(a,s),e===s)break}catch(e){}}return e?n[e]:n}},remove:function(e,t){o(e,"",r({},t,{expires:-1}))},withAttributes:function(t){return e(this.converter,r({},this.attributes,t))},withConverter:function(t){return e(r({},this.converter,t),this.attributes)}},{attributes:{value:Object.freeze(n)},converter:{value:Object.freeze(t)}})}({read:function(e){return'"'===e[0]&&(e=e.slice(1,-1)),e.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent)},write:function(e){return encodeURIComponent(e).replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,decodeURIComponent)}},{path:"/"});const o="_user-data";var i,a;!function(e){e.BLOOMBERG_ALL="bbg-all",e.BLOOMBERG_DIGITAL="bbg-digital",e.BUSINESSWEEK_PRINT="bw-print",e.BUSINESSWEEK_DIGITAL="bw-digital",e.BUSINESSWEEK_ZINIO="bw-zinio",e.NEWSLETTER="newsletter-digital"}(i||(i={})),function(e){e.TECH_NEWSLETTER="TECH_NEWSLETTER"}(a||(a={}));const s="businessweek",l=["bingbot","googlebot","googlebot-news","mediapartners-google","facebot","publication-access-for-facebook","facebookcatalog","facebookexternalhit","slurp","spinn3r","wazzupcrawler","socialflow/0.10","socialflow/2014","socialflow/2015","socialflow/2016","isentia-ingestion-bloomberg","meltwaternews"];const c=function(e=window.location.href){const t={},r=new URL(e),n=r.searchParams.keys();for(const e of n){const n=r.searchParams.get(e);t[e]=n||!0}return t};var u,d;!function(e){e[e.error=0]="error",e[e.warn=1]="warn",e[e.info=2]="info",e[e.debug=3]="debug",e[e.trace=4]="trace"}(u||(u={})),function(e){e.unexpectedTSError="Unexpected TS error",e.breg="BLOOMBERG REGISTRATION",e.gatehouse="GATEHOUSE",e.eco="EMBEDDED CHECKOUT",e.abbaClient="ABBA Client",e.abbaParsing="ABBA CONFIG PARSING",e.extendedAccess="EXTENDED ACCESS",e.personalization="Personalization",e.urgentError="Urgent Error should trigger a BF",e.unexpectedNonCriticalError="Unexpected, but not critical error",e.rateplan="Rate plan related issue",e.wallE="WALL-E",e.wallEImpressionTracking="WALL-E IMPRESSION TRACKING",e.theWall="THE-WALL",e.statsigClient="STATSIG CLIENT",e.japanWall="JAPAN WALL",e.videoWall="VIDEO WALL",e.experiments="EXPERIMENTS"}(d||(d={}));const f=new class{constructor(e){this.isProd=e.isProd,this.isGreaterThanStg=e.isGreaterThanStg,this.prefix=e.prefix,this.logLevelLimit=this.isProd?u.warn:u.trace}log(e,...t){const r=u[e];let n,o;try{n=c().fortressLog,o=n&&u[n]}catch(e){console.log(`${this.prefix} unable to find query params`)}r>this.logLevelLimit&&o&&r>o||this.isProd&&!o||console[e](this.prefix,new Date(Date.now()).toISOString(),...t)}logError(e,t,r){var n;const o=r||new Error(t);console.error(this.prefix,new Date(Date.now()).toISOString(),e,t,o),this.isGreaterThanStg&&(null===(n=window.newrelic)||void 0===n||n.noticeError(o,{errorGroup:e,applicationCaller:"fortressClient",displayMessage:t}))}}({isProd:!0,isGreaterThanStg:!0,prefix:"[FORTRESS]"});function w(e,...t){f.log(e,...t)}const g=function(){return"www.bloomberg.com"===window.location.hostname},p=e=>{try{return window.localStorage.getItem(e)}catch(e){return null}},h=e=>{try{window.localStorage.removeItem(e)}catch(t){throw new Error(`Error removing key: ${e} from localStorage`)}},m=(e,t)=>{const r=p(e);if(!r)return null;const n=p(t);if(!n||(e=>{const t=new Date(e).getTime();return!!isNaN(t)||t<=Date.now()})(n))return h(e),h(t),null;try{return JSON.parse(r)}catch(e){return null}},E=()=>{var e;let t;const r=m("__$$user-data","__$$user-data-expiry");try{t=JSON.parse(n.get(o))}catch(e){}try{if(r&&Object.keys(r).length>0){if(!((e,t)=>{if(!e&&!t)return!0;if(!e||!t)return!1;if(e.status!==t.status)return!1;if(e.linkedAccounts!==t.linkedAccounts)return!1;const r=e.newsletterIds||[],n=t.newsletterIds||[];if(r.length!==n.length)return!1;for(let e=0;e<r.length;e++)if(r[e]!==n[e])return!1;const o=e.subscrLine truncated
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n(require("@foundation/statsig"),require("preact/compat")):"function"==typeof define&&define.amd?define(["@foundation/statsig","preact/compat"],n):"object"==typeof exports?exports["fortress-client"]=n(require("@foundation/statsig"),require("preact/compat")):e["fortress-client"]=n(e["@foundation/statsig"],e["preact/compat"])}(this,((e,n)=>(()=>{var t,i,r,a,o={9710:(e,n,t)=>{"use strict";t.r(n),t.d(n,{UserBrowserSession:()=>d});function i(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var i in t)"__proto__"!==i&&(e[i]=t[i])}return e}var r=function e(n,t){function r(e,r,a){if("undefined"!=typeof document){"number"==typeof(a=i({},t,a)).expires&&(a.expires=new Date(Date.now()+864e5*a.expires)),a.expires&&(a.expires=a.expires.toUTCString()),e=encodeURIComponent(e).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape);var o="";for(var l in a)a[l]&&(o+="; "+l,!0!==a[l]&&(o+="="+a[l].split(";")[0]));return document.cookie=e+"="+n.write(r,e)+o}}return Object.create({set:r,get:function(e){if("undefined"!=typeof document&&(!arguments.length||e)){for(var t=document.cookie?document.cookie.split("; "):[],i={},r=0;r<t.length;r++){var a=t[r].split("="),o=a.slice(1).join("=");try{var l=decodeURIComponent(a[0]);if(l in i||(i[l]=n.read(o,l)),e===l)break}catch(e){}}return e?i[e]:i}},remove:function(e,n){r(e,"",i({},n,{expires:-1}))},withAttributes:function(n){return e(this.converter,i({},this.attributes,n))},withConverter:function(n){return e(i({},this.converter,n),this.attributes)}},{attributes:{value:Object.freeze(t)},converter:{value:Object.freeze(n)}})}({read:function(e){return'"'===e[0]&&(e=e.slice(1,-1)),e.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent)},write:function(e){return encodeURIComponent(e).replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,decodeURIComponent)}},{path:"/"});class a{cookies=r;get length(){return Object.keys(this.cookies.get()).length}clear(){const e=this.cookies.get();Object.keys(e).forEach((e=>{this.cookies.remove(e)}))}getItem(e){const n=this.cookies.get(e);return void 0===n?null:n}key(e){return Object.keys(this.cookies.get())[e]||null}removeItem(e){this.cookies.remove(e)}setItem(e,n){this.cookies.set(e,n,{expires:7})}}const o="__bb-media",l=()=>{if("undefined"!=typeof window)return window[o]||(window[o]={}),window[o];throw new Error(`${o} store on Window object is undefined!`)};class s{get length(){return Object.keys(l()).length}clear(){const e=l();Object.keys(e).forEach((n=>{delete e[n]}))}getItem(e){const n=l()[e];return void 0===n?null:n}key(e){return Object.keys(l())[e]||null}removeItem(e){delete l()[e]}setItem(e,n){l()[e]=n}}class u{type;storage;reportErrorsToNewRelic=!1;storageContext;constructor(e,n){this.type=e,this.storage=(e=>{switch(e){case"window":return new s;case"local":return localStorage;case"session":return sessionStorage;default:return new a}})(e),this.reportErrorsToNewRelic=n?.reportErrorsToNewRelic??!1,this.storageContext=n?.storageContext}handleErrorReporting(e,n,t){this.reportErrorsToNewRelic&&((e,n,t)=>{const i=t?`[${t}] - ${e}: ${n}`:`[@bloomberg/media.browser-storage] - ${e}: ${n}`;window?.newrelic?.noticeError(i)})(`Failed to ${e} ${n} in ${this.type}Storage.`,t,this.storageContext)}setItem(e,n){try{return this.storage.setItem(e,JSON.stringify(n)),!0}catch(n){return this.handleErrorReporting("set",e,n),!1}}getItem(e){try{const n=this.storage.getItem(e);if(!n)return null;try{return JSON.parse(n)}catch(e){return n}}catch(n){return this.handleErrorReporting("get",e,n),null}}removeItem(e){try{return this.storage.removeItem(e),!0}catch(n){return this.handleErrorReporting("remove",e,n),!1}}}const c=e=>{switch(e){case"agentId":return"agent_id";case"gatehouseId":return"gatehouse_id";case"sessionId":return"session_id";case"sessionKey":return"session_key";case"userData":return"_user-data";case"bregUid":return"_breg-uid";case"bregUser":return"_breg-user";default:return e}};class d{windowBrowserStorage;sessionBrowserStorage;localBrowserStorage;cookiesBrowserStorage;constructor(){this.windowBrowserStorage=new u("window",{reportErrorsToNewRelic:!0,storageContext:"UserBrowserSession-Window"}),this.sessionBrowserStorage=new u("session",{reportErrorsToNewRelic:!0,storageContext:"UserBrowserSession-Session"}),this.localBrowserStorage=new u("local",{reportErrorsToNewRelic:!0,storageContext:"UserBrowserSession-Local"}),this.cookiesBrowserStorage=new u("cookies",{reportErrorsToNewRelic:!0,storageContext:"UserBrowserSession-Cookies"})}setAttribute(e,n){this.windowBrowserStorage.setItem(e,n),this.sessionBrowserStorage.setItem(e,n),this.localBrowserStorage.setItem(e,n)}getAttribute(e){return this.windowBrowserStorage.getItem(e)||this.sessionBrowserStorage.getItem(e)||this.localBrowserStorage.getItem(e)||this.cookiesBrowserStorage.getItem(c(e))}clearAttribute(e){this.windowBrowserStorage.removeItem(e),this.sessionBrowserStorage.removeItem(e),this.localBrowserStorage.removeItem(eLine truncated
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
!function(){"use strict";!function(){const e={VERSION:"1.2.1",SERVICE_URL:"https://www.bloomberg.com/artemis/"};try{if(process)return process.env=Object.assign({},process.env),void Object.assign(process.env,e)}catch(e){}globalThis.process={env:e}}();const e=/\/+/g,t=/\/$/;const r="::";class s extends Error{}class i{abort(){var e;null==(e=this.abortController)||e.abort()}get signal(){return this.abortController=!this.abortController||this.abortController.signal.aborted?new AbortController:this.abortController,this.abortController.signal}onTokenExpire(){return e=this,t=null,r=function*(){var e,t;try{this.accessToken=yield null==(e=this.tokenExpireHandler)?void 0:e.call(this),this.authDisabled=!0===this.accessToken}catch(e){this.accessToken=void 0,this.authDisabled=!1,null==(t=this.errorHandler)||t.call(this,e)}},new Promise(((s,i)=>{var n=e=>{try{a(r.next(e))}catch(e){i(e)}},o=e=>{try{a(r.throw(e))}catch(e){i(e)}},a=e=>e.done?s(e.value):Promise.resolve(e.value).then(n,o);a((r=r.apply(e,t)).next())}));var e,t,r}get headers(){return!0===this.accessToken?{}:{"x-access-token":this.accessToken||""}}setup(e,t){var r;this.errorHandler=e.onError,this.messageHandler=e.onMessage,this.tokenExpireHandler=e.onTokenExpire,this.retryOnError=null==(r=e.retryOnError)||r,this.options=t}}function n(e){let t,r,s,i=!1;return function(n){void 0===t?(t=n,r=0,s=-1):t=function(e,t){const r=new Uint8Array(e.length+t.length);return r.set(e),r.set(t,e.length),r}(t,n);const o=t.length;let a=0;for(;r<o;){i&&(10===t[r]&&(a=++r),i=!1);let n=-1;for(;r<o&&-1===n;++r)switch(t[r]){case 58:-1===s&&(s=r-a);break;case 13:i=!0;case 10:n=r}if(-1===n)break;e(t.subarray(a,n),s),a=r,s=-1}a===o?t=void 0:0!==a&&(t=t.subarray(a),r-=a)}}var o=window&&window.__rest||function(e,t){var r={};for(var s in e)Object.prototype.hasOwnProperty.call(e,s)&&t.indexOf(s)<0&&(r[s]=e[s]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(s=Object.getOwnPropertySymbols(e);i<s.length;i++)t.indexOf(s[i])<0&&Object.prototype.propertyIsEnumerable.call(e,s[i])&&(r[s[i]]=e[s[i]])}return r};const a="text/event-stream",l="last-event-id";function c(e,t){var{signal:r,headers:s,onopen:i,onmessage:c,onclose:d,onerror:u,openWhenHidden:p,fetch:v}=t,g=o(t,["signal","headers","onopen","onmessage","onclose","onerror","openWhenHidden","fetch"]);return new Promise(((t,o)=>{const m=Object.assign({},s);let b;function w(){b.abort(),document.hidden||O()}m.accept||(m.accept=a),p||document.addEventListener("visibilitychange",w);let f=1e3,y=0;function _(){document.removeEventListener("visibilitychange",w),window.clearTimeout(y),b.abort()}null==r||r.addEventListener("abort",(()=>{_(),t()}));const E=null!=v?v:window.fetch,T=null!=i?i:h;async function O(){var r;b=new AbortController;try{const r=await E(e,Object.assign(Object.assign({},g),{headers:m,signal:b.signal}));await T(r),await async function(e,t){const r=e.getReader();let s;for(;!(s=await r.read()).done;)t(s.value)}(r.body,n(function(e,t,r){let s={data:"",event:"",id:"",retry:void 0};const i=new TextDecoder;return function(n,o){if(0===n.length)null==r||r(s),s={data:"",event:"",id:"",retry:void 0};else if(o>0){const r=i.decode(n.subarray(0,o)),a=o+(32===n[o+1]?2:1),l=i.decode(n.subarray(a));switch(r){case"data":s.data=s.data?s.data+"\n"+l:l;break;case"event":s.event=l;break;case"id":e(s.id=l);break;case"retry":const r=parseInt(l,10);isNaN(r)||t(s.retry=r)}}}}((e=>{e?m[l]=e:delete m[l]}),(e=>{f=e}),c))),null==d||d(),_(),t()}catch(e){if(!b.signal.aborted)try{const t=null!==(r=null==u?void 0:u(e))&&void 0!==r?r:f;window.clearTimeout(y),y=window.setTimeout(O,t)}catch(e){_(),o(e)}}}O()}))}function h(e){const t=e.headers.get("content-type");if(!(null==t?void 0:t.startsWith(a)))throw new Error(`Expected content-type to be ${a}, Actual: ${t}`)}const d=class e extends EventTarget{constructor(e){super(),this._shouldAlert=!0,this._duration=e,document.addEventListener("visibilitychange",(()=>{document.hidden?this.stop():this.monitor()}))}monitor(){void 0===this._watchdogTimer&&this._duration&&(this._watchdogTimer=setInterval((()=>{this._shouldAlert&&this.dispatchEvent(new CustomEvent(e.events.ON_WATCHDOG_ALERT)),this._shouldAlert=!0}),this._duration))}stop(){this._watchdogTimer&&(clearInterval(this._watchdogTimer),this._watchdogTimer=void 0)}reset(){this._shouldAlert=!1}};d.events={ON_WATCHDOG_ALERT:"onWatchdogAlert"};let u=d;var p=Object.defineProperty,v=Object.defineProperties,g=Object.getOwnPropertyDescriptors,m=Object.getOwnPropertySymbols,b=Object.prototype.hasOwnProperty,w=Object.prototype.propertyIsEnumerable,f=(e,t,r)=>t in e?p(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,y=(e,t)=>{for(var r in t||(t={}))b.call(t,r)&&f(e,r,t[r]);if(m)for(var r of m(t))w.call(t,r)&&f(e,r,t[r]);return e},_=(e,t,r)=>new Promise(((s,i)=>{var n=e=>{try{a(r.next(e))}catch(e){i(e)}},o=e=>{try{a(r.throw(e))}catch(e){i(e)}},a=e=>e.done?s(e.value):Promise.resolve(e.value).then(n,o);a((r=r.apply(e,t)).next())}));class E extends Error{}Line truncated
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
!function(){"use strict";!function(){const e={VERSION:"3.4.1"};try{if(process)return process.env=Object.assign({},process.env),void Object.assign(process.env,e)}catch(e){}globalThis.process={env:e}}();const e="bbgconsentstring",t="cmpconsentmodal",n="consented",i="5f29641df70e58290010d5aa",o="5f2c366203c8584077858803",r=["en","ja"],a={ccpa:{ja:"私の個人情報を販売しない(カリフォルニア州消費者プライバシー法)",en:"Do Not Sell or Share My Personal Information"},gdpr:{ja:"クッキーを管理する",en:"Manage Cookies"}};function s(e,t,n){const i=new Date;i.setTime(i.getTime()+864e5*n),document.cookie=`${e}=${t};path=/;domain=${function(e){const t=e.split("bloomberg.");return(null==t?void 0:t.length)<=1?e:`.bloomberg.${t[1]}`}(window.location.hostname)};expires=${i.toUTCString()}`}const c=["usnat","usca","usco","usct","usut","usva"],d=e=>{for(const t of c)if(void 0!==e.parsedSections[t])return e.parsedSections[t]};var l,p,u,h,w,m,g,f,v,b,_,y,S,P,C,E,k,x,M,L,A,W,D=(e,t,n)=>{if(!t.has(e))throw TypeError("Cannot "+n)},j=(e,t,n)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,n)},T=(e,t,n)=>(D(e,t,"access private method"),n);class ${constructor({domain:e="sourcepointcmp.bloomberg.com",language:t="en"}){j(this,p),j(this,h),j(this,m),j(this,f),j(this,b),j(this,y),j(this,P),j(this,E),j(this,x),j(this,L),this.parseLanguage=e=>{var t;const n=null==e?void 0:e.toLowerCase().split("-")[0];return null!=(t=r.find((e=>e===n)))?t:"en"},j(this,l,(()=>{const e=window._sp_.config.targetingParams.isKisa?880326:817623;window._sp_.gdpr.loadPrivacyManagerModal&&window._sp_.gdpr.loadPrivacyManagerModal(e)})),this.baseEndpoint=`https://${e}`,this.startTime=Date.now(),this.loaded=!1,this.consentReadyEventFired=!1,this.language=this.parseLanguage(t),this.initialized=!1}init(){window.__tcfapi?(this.startTime=Date.now(),window.gtag_enable_tcf_support=!0,this.initialized=!0,window.__tcfapi("addEventListener",2,T(this,f,v).bind(this)),window.addEventListener("beforeunload",T(this,L,A).bind(this))):console.error("[cmp-client] CMP required tcfapi stub missing, exiting init")}addPrivacyManager(e){window.__tcfapi?window.__tcfapi("addEventListener",2,T(this,p,u).bind(this,e)):console.warn("[cmp-client] CMP required stub missing, exiting addPrivacyManager")}removeEventListener(e){window.__tcfapi("removeEventListener",2,(t=>{t||console.warn(`[cmp-client] Failed to remove __tcfapi event listener with id: ${e}`)}),e)}onGdprConsent(t,n){if(!n){const e=new Error("[cmp-client] Failed to `getCustomVendorConsents` with __tcfapi");return void console.error("[cmp-client]",e)}const r={req:"req1",fun:"fun0",pad:"pad0"};[...t.consentedPurposes,...t.legIntPurposes].forEach((e=>{if(e._id===i){r.fun="fun1";for(const[,e]of Object.entries(t.grants))i in e.purposeGrants&&!e.purposeGrants[i]&&(r.fun="fun0")}if(e._id===o){r.pad="pad1";for(const[,e]of Object.entries(t.grants))o in e.purposeGrants&&!e.purposeGrants[o]&&(r.pad="pad0")}}));const a=Object.values(r).join("");return s(e,a,365),T(this,y,S).call(this,a),console.log("[cmp-client] GDPR applies, custom consent string",a),a}onUSPSPing(t,n){if(!n)return console.error("[cmp-client] Failed to `ping` with __gpp"),"";if(0===t.applicableSections.filter((e=>-1!==e)).length){console.info("[cpm-client] this region doesn't apply GDPR nor MSPS");const t="req1fun1pad1";return s(e,t,365),T(this,y,S).call(this,t),""}if("ready"!==t.signalStatus)return console.info("[cmp-client] gpp ping data is not ready yet"),"";const i=d(t),o=2===(null==i?void 0:i.SaleOptOut)?"req1fun1pad1":"req1fun0pad0";return s(e,o,365),T(this,y,S).call(this,o),o}}let O;if(l=new WeakMap,p=new WeakSet,u=function(e,t,n){T(this,b,_).call(this,t,n)&&e&&(t.gdprApplies?(e.textContent=a.gdpr[this.language],e.onclick=()=>{return(e=this,t=l,D(e,t,"read from private field"),n?n.call(e):t.get(e)).call(this);var e,t,n}):(e.textContent=a.ccpa[this.language],e.onclick=()=>window._sp_.usnat.loadPrivacyManagerModal&&window._sp_.usnat.loadPrivacyManagerModal(987296)),this.removeEventListener(t.listenerId))},h=new WeakSet,w=function(e,t){if(!t){const e=new Error("[cmp-client] Failure received from __gpp `addEventListener`");return console.warn("[cmp-client]",e),void T(this,x,M).call(this,e)}this.onUSPSPing(e.pingData,t)},m=new WeakSet,g=function(){function e(e){return new Promise((t=>{let n=0;const i=()=>{const o=function(e){const t=document.cookie.match(`(^|;) ?${e}=([^;$]*)`);return t?t[2]:""}(e);o?t(o):n>=3e3?t(""):(n+=100,setTimeout(i,100))};i()}))}const i=e("geo_info"),o=e("_accesslist-membership"),r=e("_user-data"),a=e(t),c=navigator.userAgent.includes("BloombergHorseshoe"),d=window.location.href,l=(null==d?void 0:d.includes("utm_medium=email"))&&(null==d?void 0:d.includes("utm_source=newsletter")),p=(null==d?void 0:d.includes("/notices/tos"))||(null==d?void 0:d.includes("/notices/privacy")),u=null==d?void 0:d.includes("bloomberg.com/jp");Promise.all([i,o,r,a]).then(Line truncated
|
||||||
+996
@@ -0,0 +1,996 @@
|
|||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.0.woff2) format('woff2');
|
||||||
|
unicode-range: U+25ee8, U+25f23, U+25f5c, U+25fd4, U+25fe0, U+25ffb, U+2600c, U+26017, U+26060, U+260ed, U+26222, U+2626a, U+26270, U+26286, U+2634c, U+26402, U+2667e, U+266b0, U+2671d, U+268dd, U+268ea, U+26951, U+2696f, U+26999, U+269dd, U+26a1e, U+26a58, U+26a8c, U+26ab7, U+26aff, U+26c29, U+26c73, U+26c9e, U+26cdd, U+26e40, U+26e65, U+26f94, U+26ff6-26ff8, U+270f4, U+2710d, U+27139, U+273da-273db, U+273fe, U+27410, U+27449, U+27614-27615, U+27631, U+27684, U+27693, U+2770e, U+27723, U+27752, U+278b2, U+27985, U+279b4, U+27a84, U+27bb3, U+27bbe, U+27bc7, U+27c3c, U+27cb8, U+27d73, U+27da0, U+27e10, U+27eaf, U+27fb7, U+2808a, U+280bb, U+28277, U+28282, U+282f3, U+283cd, U+2840c, U+28455, U+284dc, U+2856b, U+285c8-285c9, U+286d7, U+286fa, U+28946, U+28949, U+2896b, U+28987-28988, U+289ba-289bb, U+28a1e, U+28a29, U+28a43, U+28a71, U+28a99, U+28acd, U+28add, U+28ae4, U+28bc1, U+28bef, U+28cdd, U+28d10, U+28d71, U+28dfb, U+28e0f, U+28e17, U+28e1f, U+28e36, U+28e89, U+28eeb, U+28ef6, U+28f32, U+28ff8, U+292a0, U+292b1, U+29490, U+295cf, U+2967f, U+296f0, U+29719, U+29750, U+29810, U+298c6, U+29a72, U+29d4b, U+29ddb, U+29e15, U+29e3d, U+29e49, U+29e8a, U+29ec4, U+29edb, U+29ee9, U+29fce, U+29fd7, U+2a01a, U+2a02f, U+2a082, U+2a0f9, U+2a190, U+2a2b2, U+2a38c, U+2a437, U+2a5f1, U+2a602, U+2a61a, U+2a6b2, U+2a9e6, U+2b746, U+2b751, U+2b753, U+2b75a, U+2b75c, U+2b765, U+2b776-2b777, U+2b77c, U+2b782, U+2b789, U+2b78b, U+2b78e, U+2b794, U+2b7ac, U+2b7af, U+2b7bd, U+2b7c9, U+2b7cf, U+2b7d2, U+2b7d8, U+2b7f0, U+2b80d, U+2b817, U+2b81a, U+2d544, U+2e278, U+2e569, U+2e6ea, U+2f804, U+2f80f, U+2f815, U+2f818, U+2f81a, U+2f822, U+2f828, U+2f82c, U+2f833, U+2f83f, U+2f846, U+2f852, U+2f862, U+2f86d, U+2f873, U+2f877, U+2f884, U+2f899-2f89a, U+2f8a6, U+2f8ac, U+2f8b2, U+2f8b6, U+2f8d3, U+2f8db-2f8dc, U+2f8e1, U+2f8e5, U+2f8ea, U+2f8ed, U+2f8fc, U+2f903, U+2f90b, U+2f90f, U+2f91a, U+2f920-2f921, U+2f945, U+2f947, U+2f96c, U+2f995, U+2f9d0, U+2f9de-2f9df, U+2f9f4;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.1.woff2) format('woff2');
|
||||||
|
unicode-range: U+1f235-1f23b, U+1f240-1f248, U+1f250-1f251, U+2000b, U+20089-2008a, U+200a2, U+200a4, U+200b0, U+200f5, U+20158, U+201a2, U+20213, U+2032b, U+20371, U+20381, U+203f9, U+2044a, U+20509, U+2053f, U+205b1, U+205d6, U+20611, U+20628, U+206ec, U+2074f, U+207c8, U+20807, U+2083a, U+208b9, U+2090e, U+2097c, U+20984, U+2099d, U+20a64, U+20ad3, U+20b1d, U+20b9f, U+20bb7, U+20d45, U+20d58, U+20de1, U+20e64, U+20e6d, U+20e95, U+20f5f, U+21201, U+2123d, U+21255, U+21274, U+2127b, U+212d7, U+212e4, U+212fd, U+2131b, U+21336, U+21344, U+213c4, U+2146d-2146e, U+215d7, U+21647, U+216b4, U+21706, U+21742, U+218bd, U+219c3, U+21a1a, U+21c56, U+21d2d, U+21d45, U+21d62, U+21d78, U+21d92, U+21d9c, U+21da1, U+21db7, U+21de0, U+21e33-21e34, U+21f1e, U+21f76, U+21ffa, U+2217b, U+22218, U+2231e, U+223ad, U+22609, U+226f3, U+2285b, U+228ab, U+2298f, U+22ab8, U+22b46, U+22b4f-22b50, U+22ba6, U+22c1d, U+22c24, U+22de1, U+22e42, U+22feb, U+231b6, U+231c3-231c4, U+231f5, U+23372, U+233cc, U+233d0, U+233d2-233d3, U+233d5, U+233da, U+233df, U+233e4, U+233fe, U+2344a-2344b, U+23451, U+23465, U+234e4, U+2355a, U+23594, U+235c4, U+23638-2363a, U+23647, U+2370c, U+2371c, U+2373f, U+23763-23764, U+237e7, U+237f1, U+237ff, U+23824, U+2383d, U+23a98, U+23c7f, U+23cbe, U+23cfe, U+23d00, U+23d0e, U+23d40, U+23dd3, U+23df9-23dfa, U+23f7e, U+2404b, U+24096, U+24103, U+241c6, U+241fe, U+242ee, U+243bc, U+243d0, U+24629, U+246a5, U+247f1, U+24896, U+248e9, U+24a4d, U+24b56, U+24b6f, U+24c16, U+24d14, U+24e04, U+24e0e, U+24e37, U+24e6a, U+24e8b, U+24ff2, U+2504a, U+25055, U+25122, U+251a9, U+251cd, U+251e5, U+2521e, U+2524c, U+2542e, U+2548e, U+254d9, U+2550e, U+255a7, U+2567f, U+25771, U+257a9, U+257b4, U+25874, U+259c4, U+259cc, U+259d4, U+25ad7, U+25ae3-25ae4, U+25af1, U+25bb2, U+25c4b, U+25c64, U+25da1, U+25e2e, U+25e56, U+25e62, U+25e65, U+25ec2, U+25ed8;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.2.woff2) format('woff2');
|
||||||
|
unicode-range: U+ffd7, U+ffda-ffdc, U+ffe0-ffe2, U+ffe4, U+ffe6, U+ffe8-ffee, U+1f100-1f10c, U+1f110-1f16c, U+1f170-1f1ac, U+1f200-1f202, U+1f210-1f234;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.3.woff2) format('woff2');
|
||||||
|
unicode-range: U+fa10, U+fa12-fa6d, U+fb00-fb04, U+fe10-fe19, U+fe30-fe42, U+fe44-fe52, U+fe54-fe66, U+fe68-fe6b, U+ff02, U+ff04, U+ff07, U+ff51, U+ff5b, U+ff5d, U+ff5f-ff60, U+ff66, U+ff69, U+ff87, U+ffa1-ffbe, U+ffc2-ffc7, U+ffca-ffcf, U+ffd2-ffd6;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.4.woff2) format('woff2');
|
||||||
|
unicode-range: U+f92d-f959, U+f95b-f9f2, U+f9f4-fa0b, U+fa0e-fa0f;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.5.woff2) format('woff2');
|
||||||
|
unicode-range: U+9e8b-9e8c, U+9e8e-9e8f, U+9e91-9e92, U+9e95-9e96, U+9e98, U+9e9b, U+9e9d-9e9e, U+9ea4-9ea5, U+9ea8-9eaa, U+9eac-9eb0, U+9eb3-9eb5, U+9eb8, U+9ebc-9ebf, U+9ec3, U+9ec6, U+9ec8, U+9ecb-9ecd, U+9ecf-9ed1, U+9ed4-9ed5, U+9ed8, U+9edb-9ee0, U+9ee4-9ee5, U+9ee7-9ee8, U+9eec-9ef2, U+9ef4-9ef9, U+9efb-9eff, U+9f02-9f03, U+9f07-9f09, U+9f0e-9f12, U+9f14-9f17, U+9f19-9f1b, U+9f1f-9f22, U+9f26, U+9f2a-9f2c, U+9f2f, U+9f31-9f32, U+9f34, U+9f37, U+9f39-9f3a, U+9f3c-9f3f, U+9f41, U+9f43-9f47, U+9f4a, U+9f4e-9f50, U+9f52-9f58, U+9f5a, U+9f5d-9f61, U+9f63, U+9f66-9f6a, U+9f6c-9f73, U+9f75-9f77, U+9f7a, U+9f7d, U+9f7f, U+9f8f-9f92, U+9f94-9f97, U+9f99, U+9f9c-9fa3, U+9fa5, U+9fb4, U+9fbc-9fc2, U+9fc4, U+9fc6, U+9fcc, U+f900-f92c;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.6.woff2) format('woff2');
|
||||||
|
unicode-range: U+9c3e, U+9c41, U+9c43-9c4a, U+9c4e-9c50, U+9c52-9c54, U+9c56, U+9c58, U+9c5a-9c61, U+9c63, U+9c65, U+9c67-9c6b, U+9c6d-9c6e, U+9c70, U+9c72, U+9c75-9c78, U+9c7a-9c7c, U+9ce6-9ce7, U+9ceb-9cec, U+9cf0, U+9cf2, U+9cf6-9cf7, U+9cf9, U+9d02-9d03, U+9d06-9d09, U+9d0b, U+9d0e, U+9d11-9d12, U+9d15, U+9d17-9d18, U+9d1b-9d1f, U+9d23, U+9d26, U+9d2a-9d2c, U+9d2f-9d30, U+9d32-9d34, U+9d3a, U+9d3c-9d3f, U+9d41-9d48, U+9d4a, U+9d50-9d54, U+9d59, U+9d5d-9d65, U+9d69-9d6c, U+9d6f-9d70, U+9d72-9d73, U+9d76-9d77, U+9d7a-9d7c, U+9d7e, U+9d83-9d84, U+9d86-9d87, U+9d89-9d8a, U+9d8d-9d8e, U+9d92-9d93, U+9d95-9d9a, U+9da1, U+9da4, U+9da9-9dac, U+9dae, U+9db1-9db2, U+9db5, U+9db8-9dbd, U+9dbf-9dc4, U+9dc6-9dc7, U+9dc9-9dca, U+9dcf, U+9dd3-9dd7, U+9dd9-9dda, U+9dde-9de0, U+9de3, U+9de5-9de7, U+9de9, U+9deb, U+9ded-9df0, U+9df3-9df4, U+9df8, U+9dfd-9dfe, U+9e02, U+9e07, U+9e0a, U+9e0d-9e0e, U+9e10-9e12, U+9e15-9e16, U+9e19-9e1f, U+9e75, U+9e79-9e7d, U+9e80-9e85, U+9e87-9e88;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.7.woff2) format('woff2');
|
||||||
|
unicode-range: U+9ae5-9ae7, U+9ae9, U+9aeb-9aec, U+9aee-9aef, U+9af1-9af5, U+9af7, U+9af9-9afb, U+9afd, U+9aff-9b06, U+9b08-9b09, U+9b0b-9b0e, U+9b10, U+9b12, U+9b16, U+9b18-9b1d, U+9b1f-9b20, U+9b22-9b23, U+9b25-9b2f, U+9b32-9b35, U+9b37, U+9b39-9b3b, U+9b3d, U+9b43-9b44, U+9b48, U+9b4b-9b4f, U+9b51, U+9b55-9b58, U+9b5b, U+9b5e, U+9b61, U+9b63, U+9b65-9b66, U+9b68, U+9b6a-9b6f, U+9b72-9b79, U+9b7f-9b80, U+9b83-9b87, U+9b89-9b8b, U+9b8d, U+9b8f-9b94, U+9b96-9b97, U+9b9a, U+9b9d-9ba0, U+9ba6-9ba7, U+9ba9-9baa, U+9bac, U+9bb0-9bb2, U+9bb4, U+9bb7-9bb9, U+9bbb-9bbc, U+9bbe-9bc1, U+9bc6-9bc8, U+9bca, U+9bce-9bd2, U+9bd4, U+9bd7-9bd8, U+9bdd, U+9bdf, U+9be1-9be5, U+9be7, U+9bea-9beb, U+9bee-9bf3, U+9bf5, U+9bf7-9bfa, U+9bfd, U+9bff-9c00, U+9c02, U+9c04, U+9c06, U+9c08-9c0d, U+9c0f-9c16, U+9c18-9c1e, U+9c21-9c2a, U+9c2d-9c32, U+9c35-9c37, U+9c39-9c3a, U+9c3d;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.8.woff2) format('woff2');
|
||||||
|
unicode-range: U+98eb, U+98ed-98ee, U+98f0-98f1, U+98f3, U+98f6, U+9902, U+9907-9909, U+9911-9912, U+9914-9918, U+991a-9922, U+9924, U+9926-9927, U+992b-992c, U+992e, U+9931-9935, U+9939-993e, U+9940-9942, U+9945-9949, U+994b-994e, U+9950-9952, U+9954-9955, U+9958-9959, U+995b-995c, U+995e-9960, U+9963, U+9997-9998, U+999b, U+999d-999f, U+99a3, U+99a5-99a6, U+99a8, U+99ad-99ae, U+99b0-99b2, U+99b5, U+99b9-99ba, U+99bc-99bd, U+99bf, U+99c1, U+99c3, U+99c8-99c9, U+99d1, U+99d3-99d5, U+99d8-99df, U+99e1-99e2, U+99e7, U+99ea-99ee, U+99f0-99f2, U+99f4-99f5, U+99f8-99f9, U+99fb-99fe, U+9a01-9a05, U+9a08, U+9a0a-9a0c, U+9a0f-9a11, U+9a16, U+9a1a, U+9a1e, U+9a20, U+9a22-9a24, U+9a27, U+9a2b, U+9a2d-9a2e, U+9a31, U+9a33, U+9a35-9a38, U+9a3e, U+9a40-9a45, U+9a47, U+9a4a-9a4e, U+9a51-9a52, U+9a54-9a58, U+9a5b, U+9a5d, U+9a5f, U+9a62, U+9a64-9a65, U+9a69-9a6c, U+9aaa, U+9aac-9ab0, U+9ab2, U+9ab4-9ab7, U+9ab9, U+9abb-9ac1, U+9ac3, U+9ac6, U+9ac8, U+9ace-9ad3, U+9ad5-9ad7, U+9adb-9adc, U+9ade-9ae0, U+9ae2-9ae4;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.9.woff2) format('woff2');
|
||||||
|
unicode-range: U+971d, U+9721-9724, U+9728, U+972a, U+9730-9731, U+9733, U+9736, U+9738-9739, U+973b, U+973d-973e, U+9741-9744, U+9746-974a, U+974d-974f, U+9751, U+9755, U+9757-9758, U+975a-975c, U+9760-9761, U+9763-9764, U+9766-9768, U+976a-976b, U+976e, U+9771, U+9773, U+9776-977d, U+977f-9781, U+9785-9786, U+9789, U+978b, U+978f-9790, U+9795-9797, U+9799-979a, U+979c, U+979e-97a0, U+97a2-97a3, U+97a6, U+97a8, U+97ab-97ac, U+97ae, U+97b1-97b6, U+97b8-97ba, U+97bc, U+97be-97bf, U+97c1, U+97c3-97ce, U+97d0-97d1, U+97d4, U+97d7-97d9, U+97db-97de, U+97e0-97e1, U+97e4, U+97e6, U+97ed-97ef, U+97f1-97f2, U+97f4-97f8, U+97fa, U+9804, U+9807, U+980a, U+980c-980f, U+9814, U+9816-9817, U+9819-981a, U+981c, U+981e, U+9820-9821, U+9823-9826, U+982b, U+982e-9830, U+9832-9835, U+9837, U+9839, U+983d-983e, U+9844, U+9846-9847, U+984a-984b, U+984f, U+9851-9853, U+9856-9857, U+9859-985b, U+9862-9863, U+9865-9866, U+986a-986c, U+986f-9871, U+9873-9875, U+98aa-98ab, U+98ad-98ae, U+98b0-98b1, U+98b4, U+98b6-98b8, U+98ba-98bc, U+98bf, U+98c2-98c8, U+98cb-98cc, U+98ce, U+98dc, U+98de, U+98e0-98e1, U+98e3, U+98e5-98e7, U+98e9-98ea;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.10.woff2) format('woff2');
|
||||||
|
unicode-range: U+944a, U+944c, U+9452-9453, U+9455, U+9459-945c, U+945e-9463, U+9468, U+946a-946b, U+946d-9472, U+9475, U+9477, U+947c-947f, U+9481, U+9483-9485, U+9578-9579, U+957e-957f, U+9582, U+9584, U+9586-9588, U+958a, U+958c-958f, U+9592, U+9594, U+9596, U+9598-9599, U+959d-95a1, U+95a4, U+95a6-95a9, U+95ab-95ad, U+95b1, U+95b4, U+95b6, U+95b9-95bf, U+95c3, U+95c6, U+95c8-95cd, U+95d0-95d6, U+95d9-95da, U+95dc-95e2, U+95e4-95e6, U+95e8, U+961d-961e, U+9621-9622, U+9624-9626, U+9628, U+962c, U+962e-962f, U+9631, U+9633-9634, U+9637-963a, U+963c-963d, U+9641-9642, U+964b-964c, U+964f, U+9652, U+9654, U+9656-9658, U+965c-965f, U+9661, U+9666, U+966a, U+966c, U+966e, U+9672, U+9674, U+9677, U+967b-967c, U+967e-967f, U+9681-9684, U+9689, U+968b, U+968d, U+9691, U+9695-9698, U+969a, U+969d, U+969f, U+96a4-96aa, U+96ae-96b4, U+96b6, U+96b8-96bb, U+96bd, U+96c1, U+96c9-96cb, U+96cd-96ce, U+96d2, U+96d5-96d6, U+96d8-96da, U+96dc-96df, U+96e9, U+96ef, U+96f1, U+96f9-96fa, U+9702-9706, U+9708-9709, U+970d-970f, U+9711, U+9713-9714, U+9716, U+9719-971b;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.11.woff2) format('woff2');
|
||||||
|
unicode-range: U+92bc-92bd, U+92bf-92c3, U+92c5-92c8, U+92cb-92d0, U+92d2-92d3, U+92d5, U+92d7-92d9, U+92dc-92dd, U+92df-92e1, U+92e3-92e5, U+92e7-92ea, U+92ec, U+92ee, U+92f0, U+92f2, U+92f7-92fb, U+92ff-9300, U+9302, U+9304, U+9308, U+930d, U+930f-9311, U+9314-9315, U+9318-931a, U+931c-931f, U+9321-9325, U+9327-932b, U+932e, U+9333-9337, U+933a-933b, U+9344, U+9347-934a, U+934d, U+9350-9352, U+9354-9358, U+935a, U+935c, U+935e, U+9360, U+9364-9365, U+9367, U+9369-936d, U+936f-9371, U+9373-9374, U+9376, U+937a, U+937d-9382, U+9388, U+938a-938b, U+938d, U+938f, U+9392, U+9394-9395, U+9397-9398, U+939a-939b, U+939e, U+93a1, U+93a3-93a4, U+93a6, U+93a8-93a9, U+93ab-93ad, U+93b0, U+93b4-93b6, U+93b9-93bb, U+93c1, U+93c3-93cd, U+93d0-93d1, U+93d3, U+93d6-93d9, U+93dc-93df, U+93e2, U+93e4-93e8, U+93f1, U+93f5, U+93f7-93fb, U+93fd, U+9401-9404, U+9407-9409, U+940d-9410, U+9413-9417, U+9419-941a, U+941f, U+9421, U+942b, U+942e-942f, U+9431-9434, U+9436, U+9438, U+943a-943b, U+943d, U+943f, U+9441, U+9443-9445, U+9448;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.12.woff2) format('woff2');
|
||||||
|
unicode-range: U+9143, U+9146-914c, U+914f, U+9153, U+9156-915b, U+9161, U+9163-9165, U+9167, U+9169, U+916d, U+9172-9174, U+9179-917b, U+9181-9183, U+9185-9187, U+9189-918b, U+918e, U+9191, U+9193-9195, U+9197-9198, U+919e, U+91a1-91a2, U+91a6, U+91a8, U+91aa-91b6, U+91ba-91bd, U+91bf-91c6, U+91c9, U+91cb, U+91d0, U+91d3-91d4, U+91d6-91d7, U+91d9-91db, U+91de-91df, U+91e1, U+91e4-91e6, U+91e9-91ea, U+91ec-91f1, U+91f5-91f7, U+91f9, U+91fb-91fd, U+91ff-9201, U+9204-9207, U+9209-920a, U+920c, U+920e, U+9210-9218, U+921c-921e, U+9223-9226, U+9228-9229, U+922c, U+922e-9230, U+9233, U+9235-923a, U+923c, U+923e-9240, U+9242-9243, U+9245-924b, U+924d-9251, U+9256-925a, U+925c-925e, U+9260-9261, U+9264-9269, U+926e-9270, U+9275-9279, U+927b-927f, U+9288-928a, U+928d-928e, U+9291-9293, U+9295-9297, U+9299, U+929b-929c, U+929f-92a0, U+92a4-92a5, U+92a7-92a8, U+92ab, U+92af, U+92b2-92b3, U+92b6-92bb;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.13.woff2) format('woff2');
|
||||||
|
unicode-range: U+8f52-8f55, U+8f57-8f58, U+8f5c-8f5e, U+8f61-8f66, U+8f9c-8f9d, U+8f9f-8fa2, U+8fa4-8fa8, U+8fad-8faf, U+8fb4-8fb8, U+8fbe, U+8fc0-8fc2, U+8fc6, U+8fc8, U+8fca-8fcb, U+8fcd, U+8fd0, U+8fd2-8fd3, U+8fd5, U+8fda, U+8fe0, U+8fe2-8fe5, U+8fe8-8fea, U+8fed-8fef, U+8ff1, U+8ff4-8ff6, U+8ff8-8ffb, U+8ffe, U+9002, U+9004-9005, U+9008, U+900b-900e, U+9011, U+9013, U+9015-9016, U+9018, U+901b, U+901e, U+9021, U+9027-902a, U+902c-902d, U+902f, U+9033-9037, U+9039, U+903c, U+903e-903f, U+9041, U+9043-9044, U+9049, U+904c, U+904f-9052, U+9056, U+9058, U+905b-905e, U+9062, U+9066-9068, U+906c, U+906f-9070, U+9072, U+9074, U+9076, U+9079, U+9080-9083, U+9085, U+9087-9088, U+908b-908c, U+908e-9090, U+9095, U+9097-9099, U+909b, U+90a0-90a2, U+90a5, U+90a8, U+90af-90b6, U+90bd-90be, U+90c3-90c5, U+90c7-90c9, U+90cc, U+90d2, U+90d5, U+90d7-90d9, U+90db-90df, U+90e2, U+90e4-90e5, U+90eb, U+90ef-90f0, U+90f2, U+90f4, U+90f6, U+90fe-9100, U+9102, U+9104-9106, U+9108, U+910d, U+9110, U+9112, U+9114-911a, U+911c, U+911e, U+9120, U+9122-9123, U+9125, U+9127, U+9129, U+912d-9132, U+9134, U+9136-9137, U+9139-913a, U+913c-913d;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.14.woff2) format('woff2');
|
||||||
|
unicode-range: U+8dc0, U+8dc2, U+8dc5-8dc8, U+8dca-8dcc, U+8dce-8dcf, U+8dd1, U+8dd4-8dd7, U+8dd9-8ddb, U+8ddf, U+8de3-8de5, U+8de7, U+8dea-8dec, U+8df0-8df2, U+8df4, U+8dfc-8dfd, U+8dff, U+8e01, U+8e04-8e06, U+8e08-8e09, U+8e0b-8e0c, U+8e10-8e11, U+8e14, U+8e16, U+8e1d-8e23, U+8e26-8e27, U+8e30-8e31, U+8e33-8e39, U+8e3d, U+8e40-8e42, U+8e44, U+8e47-8e50, U+8e54-8e55, U+8e59, U+8e5b-8e64, U+8e69, U+8e6c-8e6d, U+8e6f-8e72, U+8e75-8e77, U+8e79-8e7c, U+8e81-8e85, U+8e89, U+8e8b, U+8e90-8e95, U+8e98-8e9b, U+8e9d-8e9e, U+8ea1-8ea2, U+8ea7, U+8ea9-8eaa, U+8eac-8eb1, U+8eb3, U+8eb5-8eb6, U+8eba-8ebb, U+8ebe, U+8ec0-8ec1, U+8ec3-8ec8, U+8ecb, U+8ecf, U+8ed1, U+8ed4, U+8edb-8edc, U+8ee3, U+8ee8, U+8eeb, U+8eed-8eee, U+8ef0-8ef1, U+8ef7, U+8ef9-8efc, U+8efe, U+8f00, U+8f02, U+8f05, U+8f07-8f08, U+8f0a, U+8f0f-8f10, U+8f12-8f13, U+8f15-8f19, U+8f1b-8f1c, U+8f1e-8f21, U+8f23, U+8f25-8f28, U+8f2b-8f2f, U+8f33-8f37, U+8f39-8f3b, U+8f3e, U+8f40-8f43, U+8f45-8f47, U+8f49-8f4a, U+8f4c-8f4f, U+8f51;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.15.woff2) format('woff2');
|
||||||
|
unicode-range: U+8b2d, U+8b30, U+8b37, U+8b3c, U+8b3e, U+8b41-8b46, U+8b48-8b49, U+8b4c-8b4f, U+8b51-8b54, U+8b56, U+8b59, U+8b5b, U+8b5e-8b5f, U+8b63, U+8b69, U+8b6b-8b6d, U+8b6f, U+8b71, U+8b74, U+8b76, U+8b78-8b79, U+8b7c-8b81, U+8b84-8b85, U+8b8a-8b8f, U+8b92-8b96, U+8b99-8b9a, U+8b9c-8ba0, U+8c38-8c3a, U+8c3d-8c3f, U+8c41, U+8c45, U+8c47-8c49, U+8c4b-8c4c, U+8c4e-8c51, U+8c53-8c55, U+8c57-8c59, U+8c5b, U+8c5d, U+8c62-8c64, U+8c66, U+8c68-8c69, U+8c6b-8c6d, U+8c73, U+8c75-8c76, U+8c78, U+8c7a-8c7c, U+8c7e, U+8c82, U+8c85-8c87, U+8c89-8c8b, U+8c8d-8c8e, U+8c90, U+8c92-8c94, U+8c98-8c99, U+8c9b-8c9c, U+8c9f, U+8ca4, U+8cad-8cae, U+8cb2-8cb3, U+8cb6, U+8cb9-8cba, U+8cbd, U+8cc1-8cc2, U+8cc4-8cc6, U+8cc8-8cc9, U+8ccb, U+8ccd-8ccf, U+8cd2, U+8cd5-8cd6, U+8cd9-8cda, U+8cdd, U+8ce1, U+8ce3-8ce4, U+8ce6, U+8ce8, U+8cec, U+8cef-8cf2, U+8cf4-8cf5, U+8cf7-8cf8, U+8cfa-8cfb, U+8cfd-8cff, U+8d01, U+8d03-8d04, U+8d07, U+8d09-8d0b, U+8d0d-8d10, U+8d12-8d14, U+8d16-8d17, U+8d1b-8d1d, U+8d65, U+8d67, U+8d69, U+8d6b-8d6e, U+8d71, U+8d73, U+8d76, U+8d7f, U+8d81-8d82, U+8d84, U+8d88, U+8d8d, U+8d90-8d91, U+8d95, U+8d99, U+8d9e-8da0, U+8da6, U+8da8, U+8dab-8dac, U+8daf, U+8db2, U+8db5, U+8db7, U+8db9-8dbc, U+8dbe;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.16.woff2) format('woff2');
|
||||||
|
unicode-range: U+8973-8975, U+8977, U+897a-897e, U+8980, U+8983, U+8988-898a, U+898d, U+8990, U+8993-8995, U+8998, U+899b-899c, U+899f-89a1, U+89a5-89a6, U+89a9, U+89ac, U+89af-89b0, U+89b2, U+89b4-89b7, U+89ba, U+89bc-89bd, U+89bf-89c1, U+89d4-89d8, U+89da, U+89dc-89dd, U+89e5, U+89e7, U+89e9, U+89eb, U+89ed, U+89f1, U+89f3-89f4, U+89f6, U+89f8-89f9, U+89fd, U+89ff, U+8a01, U+8a04-8a05, U+8a07, U+8a0c, U+8a0f-8a12, U+8a14-8a16, U+8a1b, U+8a1d-8a1e, U+8a20-8a22, U+8a24-8a26, U+8a2b-8a2c, U+8a2f, U+8a35-8a37, U+8a3b, U+8a3d-8a3e, U+8a40-8a41, U+8a43, U+8a45-8a49, U+8a4d-8a4e, U+8a51-8a54, U+8a56-8a58, U+8a5b-8a5d, U+8a61-8a62, U+8a65, U+8a67, U+8a6c-8a6d, U+8a75-8a77, U+8a79-8a7c, U+8a7e-8a80, U+8a82-8a86, U+8a8b, U+8a8f-8a92, U+8a96-8a97, U+8a99-8a9a, U+8a9f, U+8aa1, U+8aa3, U+8aa5-8aaa, U+8aae-8aaf, U+8ab3, U+8ab6-8ab7, U+8abb-8abc, U+8abe, U+8ac2-8ac4, U+8ac6, U+8ac8-8aca, U+8acc-8acd, U+8ad0-8ad1, U+8ad3-8ad5, U+8ad7, U+8ada-8ae2, U+8ae4, U+8ae7, U+8aeb-8aec, U+8aee, U+8af0-8af1, U+8af3-8af7, U+8afa, U+8afc, U+8aff, U+8b01-8b02, U+8b04-8b07, U+8b0a-8b0d, U+8b0f-8b11, U+8b14, U+8b16, U+8b1a, U+8b1c, U+8b1e-8b20, U+8b26, U+8b28, U+8b2b-8b2c;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.17.woff2) format('woff2');
|
||||||
|
unicode-range: U+87e2-87e6, U+87ea-87ed, U+87ef, U+87f1, U+87f3, U+87f5-87f8, U+87fa-87fb, U+87fe-87ff, U+8801, U+8803, U+8805-8807, U+8809-880b, U+880d-8816, U+8818-881c, U+881e-881f, U+8821-8822, U+8827-8828, U+882d-882e, U+8830-8832, U+8835-8836, U+8839-883c, U+8841-8845, U+8848-884b, U+884d-884e, U+8851-8852, U+8855-8856, U+8858-885a, U+885c, U+885e-8860, U+8862, U+8864, U+8869, U+886b, U+886e-886f, U+8871-8872, U+8875, U+8877, U+8879, U+887b, U+887d-887e, U+8880-8882, U+8888, U+888d, U+8892, U+8897-889c, U+889e-88a0, U+88a2, U+88a4, U+88a8, U+88aa, U+88ae, U+88b0-88b1, U+88b5, U+88b7, U+88ba, U+88bc-88c0, U+88c3-88c4, U+88c6, U+88ca-88ce, U+88d1-88d4, U+88d8-88d9, U+88db, U+88dd-88e1, U+88e7-88e8, U+88ef-88f2, U+88f4-88f5, U+88f7, U+88f9, U+88fc, U+8901-8902, U+8904, U+8906, U+890a, U+890c-890f, U+8913, U+8915-8916, U+8918-891a, U+891c-891e, U+8920, U+8925-8928, U+892a-892b, U+8930-8932, U+8935-893b, U+893e, U+8940-8946, U+8949, U+894c-894d, U+894f, U+8952, U+8956-8957, U+895a-895c, U+895e, U+8960-8964, U+8966, U+896a-896b, U+896d-8970;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.18.woff2) format('woff2');
|
||||||
|
unicode-range: U+8655-8659, U+865b, U+865d-8664, U+8667, U+8669, U+866c, U+866f, U+8671, U+8675-8677, U+867a-867b, U+867d, U+8687-8689, U+868b-868d, U+8691, U+8693, U+8695-8696, U+8698, U+869a, U+869c-869d, U+86a1, U+86a3-86a4, U+86a6-86ab, U+86ad, U+86af-86b1, U+86b3-86b9, U+86bf-86c1, U+86c3-86c6, U+86c9, U+86cb, U+86ce, U+86d1-86d2, U+86d4-86d5, U+86d7, U+86da, U+86dc, U+86de-86e0, U+86e3-86e7, U+86e9, U+86ec-86ed, U+86ef, U+86f8-86fe, U+8700, U+8703-870b, U+870d-8714, U+8719-871a, U+871e-871f, U+8721-8723, U+8725, U+8728-8729, U+872e-872f, U+8731-8732, U+8734, U+8737, U+8739-8740, U+8743, U+8745, U+8749, U+874b-874e, U+8751, U+8753, U+8755, U+8757-8759, U+875d, U+875f-8761, U+8763-8766, U+8768, U+876a, U+876e-876f, U+8771-8772, U+8774, U+8778, U+877b-877c, U+877f, U+8782-8789, U+878b-878c, U+878e, U+8790, U+8793, U+8795, U+8797-8799, U+879e-87a0, U+87a2-87a3, U+87a7, U+87ab-87af, U+87b1, U+87b3, U+87b5, U+87bb, U+87bd-87c1, U+87c4, U+87c6-87cb, U+87ce, U+87d0, U+87d2, U+87d5-87d6, U+87d9-87da, U+87dc, U+87df-87e0;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.19.woff2) format('woff2');
|
||||||
|
unicode-range: U+84b4, U+84b9-84bb, U+84bd-84c2, U+84c6-84ca, U+84cc-84d1, U+84d3, U+84d6, U+84d9-84da, U+84dc, U+84e7, U+84ea, U+84ec, U+84ef-84f2, U+84f4, U+84f7, U+84fa-84fd, U+84ff-8500, U+8502-8503, U+8506-8507, U+850c, U+850e, U+8510, U+8514-8515, U+8517-8518, U+851a-851c, U+851e-851f, U+8521-8525, U+8527, U+852a-852c, U+852f, U+8532-8534, U+8536, U+853e-8541, U+8543, U+8546, U+8548, U+854a-854b, U+854f-8553, U+8555-855a, U+855c-8564, U+8569-856b, U+856d, U+856f, U+8577, U+8579-857b, U+857d-8581, U+8585-8586, U+8588-858c, U+858f-8591, U+8593, U+8597-8598, U+859b-859d, U+859f-85a0, U+85a2, U+85a4-85a5, U+85a7-85a8, U+85ad-85b0, U+85b4, U+85b6-85ba, U+85bc-85bf, U+85c1-85c2, U+85c7, U+85c9-85cb, U+85ce-85d0, U+85d5, U+85d8-85da, U+85dc, U+85df-85e1, U+85e5-85e6, U+85e8, U+85ed, U+85f3-85f4, U+85f6-85f7, U+85f9-85fa, U+85fc, U+85fe-8600, U+8602, U+8604-8606, U+860a-860b, U+860d-860e, U+8610-8613, U+8616-861b, U+861e, U+8621-8622, U+8624, U+8627, U+8629, U+862f-8630, U+8636, U+8638-863a, U+863c-863d, U+863f-8642, U+8646, U+864d, U+8652-8654;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.20.woff2) format('woff2');
|
||||||
|
unicode-range: U+82e8, U+82ea, U+82ed, U+82ef, U+82f3-82f4, U+82f6-82f7, U+82f9, U+82fb, U+82fd-82fe, U+8300-8301, U+8303, U+8306-8308, U+830a-830c, U+8316-8318, U+831b, U+831d-831f, U+8321-8323, U+832b-8335, U+8337, U+833a, U+833c-833d, U+8340, U+8342-8347, U+834a, U+834d-8351, U+8353-8357, U+835a, U+8362-8363, U+8370, U+8373, U+8375, U+8378, U+837c-837d, U+837f-8380, U+8382, U+8384-8387, U+838a, U+838d-838e, U+8392-8396, U+8398-83a0, U+83a2, U+83a6-83ad, U+83b1, U+83b5, U+83bd-83c1, U+83c7, U+83c9, U+83ce-83d1, U+83d4, U+83d6, U+83d8, U+83dd, U+83df-83e1, U+83e5, U+83e8, U+83ea-83eb, U+83f0, U+83f2, U+83f4, U+83f6-83f9, U+83fb-83fd, U+8401, U+8403-8404, U+8406-8407, U+840a-840b, U+840d, U+840f, U+8411, U+8413, U+8415, U+8417, U+8419, U+8420, U+8422, U+842a, U+842f, U+8431, U+8435, U+8438-8439, U+843c, U+8445-8448, U+844a, U+844d-844f, U+8451-8452, U+8456, U+8458-845a, U+845c, U+845f-8462, U+8464-8467, U+8469-846b, U+846d-8470, U+8473-8474, U+8476-847a, U+847c-847d, U+8481-8482, U+8484-8485, U+848b, U+8490, U+8492-8493, U+8495, U+8497, U+849c, U+849e-849f, U+84a1, U+84a6, U+84a8-84aa, U+84ad, U+84af, U+84b1;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.21.woff2) format('woff2');
|
||||||
|
unicode-range: U+814a, U+814c, U+8151-8153, U+8157, U+815f-8161, U+8165-8169, U+816d-816f, U+8171, U+8173-8174, U+8177, U+8180-8186, U+8188, U+818a-818b, U+818e, U+8190, U+8193, U+8195-8196, U+8198, U+819b, U+819e, U+81a0, U+81a2, U+81a4, U+81a9, U+81ae, U+81b0, U+81b2, U+81b4-81b5, U+81b8, U+81ba-81bb, U+81bd-81be, U+81c0-81c3, U+81c5-81c6, U+81c8-81cb, U+81cd-81cf, U+81d1, U+81d5-81db, U+81dd-81e1, U+81e4-81e5, U+81e7, U+81eb-81ec, U+81ef-81f2, U+81f5-81f6, U+81f8-81fb, U+81fd-8205, U+8209-820b, U+820d, U+820f, U+8212-8214, U+8216, U+8219-821d, U+8221-8222, U+8228-8229, U+822b, U+822e, U+8232-8235, U+8237-8238, U+823a, U+823c, U+8240, U+8243-8246, U+8249, U+824b, U+824e-824f, U+8251, U+8256-825a, U+825c-825d, U+825f-8260, U+8262-8264, U+8267-8268, U+826a-826b, U+826d-826e, U+8271, U+8274, U+8277, U+8279, U+827b, U+827d-8281, U+8283-8284, U+8287, U+8289-828a, U+828d-828e, U+8291-8294, U+8296, U+8298-829b, U+829f-82a1, U+82a3-82a4, U+82a7-82ac, U+82ae, U+82b0, U+82b2, U+82b4, U+82b7, U+82ba-82bc, U+82be-82bf, U+82c5-82c6, U+82d0, U+82d2-82d3, U+82d5, U+82d9-82da, U+82dc, U+82de-82e4, U+82e7;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.22.woff2) format('woff2');
|
||||||
|
unicode-range: U+7f77-7f79, U+7f7d-7f80, U+7f82-7f83, U+7f86-7f88, U+7f8b-7f8d, U+7f8f-7f91, U+7f94, U+7f96-7f97, U+7f9a, U+7f9c-7f9d, U+7fa1-7fa3, U+7fa6, U+7faa, U+7fad-7faf, U+7fb2, U+7fb4, U+7fb6, U+7fb8-7fb9, U+7fbc, U+7fbf-7fc0, U+7fc3, U+7fc5-7fc6, U+7fc8, U+7fca, U+7fce-7fcf, U+7fd5, U+7fdb, U+7fdf, U+7fe1, U+7fe3, U+7fe5-7fe6, U+7fe8-7fe9, U+7feb-7fec, U+7fee-7ff0, U+7ff2-7ff3, U+7ff9-7ffa, U+7ffd-7fff, U+8002, U+8004, U+8006-8008, U+800a-800f, U+8011-8014, U+8016, U+8018-8019, U+801c-8021, U+8024, U+8026, U+8028, U+802c, U+802e, U+8030, U+8034-8035, U+8037, U+8039-8040, U+8043-8044, U+8046, U+804a, U+8052, U+8058, U+805a, U+805f-8060, U+8062, U+8064, U+8066, U+8068, U+806d, U+806f-8073, U+8075-8076, U+8079, U+807b, U+807d-8081, U+8084-8088, U+808b, U+808e, U+8093, U+8099-809a, U+809c, U+809e, U+80a4, U+80a6-80a7, U+80ab-80ad, U+80b1, U+80b8-80b9, U+80c4-80c5, U+80c8, U+80ca, U+80cd, U+80cf, U+80d2, U+80d4-80db, U+80dd, U+80e0, U+80e4-80e6, U+80ed-80f3, U+80f5-80f7, U+80f9-80fc, U+80fe, U+8101, U+8103, U+8109, U+810b, U+810d, U+8116-8118, U+811b-811c, U+811e, U+8120, U+8123-8124, U+8127, U+8129, U+812b-812c, U+812f-8130, U+8135, U+8139-813a, U+813c-813e, U+8141, U+8145-8147;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.23.woff2) format('woff2');
|
||||||
|
unicode-range: U+7d57, U+7d59-7d5d, U+7d63, U+7d65, U+7d67, U+7d6a, U+7d6e, U+7d70, U+7d72-7d73, U+7d78, U+7d7a-7d7b, U+7d7d, U+7d7f, U+7d81-7d83, U+7d85-7d86, U+7d88-7d89, U+7d8b-7d8d, U+7d8f, U+7d91, U+7d93, U+7d96-7d97, U+7d9b-7da0, U+7da2-7da3, U+7da6-7da7, U+7daa-7dac, U+7dae-7db0, U+7db3, U+7db5-7db9, U+7dbd, U+7dc0, U+7dc2-7dc7, U+7dcc-7dce, U+7dd0, U+7dd5-7dd9, U+7ddc-7dde, U+7de1-7de6, U+7dea-7ded, U+7df1-7df2, U+7df5-7df6, U+7df9-7dfa, U+7e00, U+7e05, U+7e08-7e0b, U+7e10-7e12, U+7e15, U+7e17, U+7e1c-7e1d, U+7e1f-7e23, U+7e27-7e28, U+7e2c-7e2d, U+7e2f, U+7e31-7e33, U+7e35-7e37, U+7e39-7e3b, U+7e3d, U+7e3f, U+7e43-7e48, U+7e4e, U+7e50, U+7e52, U+7e56, U+7e58-7e5a, U+7e5d-7e5f, U+7e61-7e62, U+7e65-7e67, U+7e69-7e6b, U+7e6d-7e6f, U+7e73, U+7e75, U+7e78-7e79, U+7e7b-7e7f, U+7e81-7e83, U+7e86-7e8a, U+7e8c-7e8e, U+7e90-7e96, U+7e98, U+7e9a-7e9f, U+7f38, U+7f3a-7f3f, U+7f43-7f45, U+7f47, U+7f4c-7f50, U+7f52-7f55, U+7f58, U+7f5b-7f5d, U+7f5f, U+7f61, U+7f63-7f69, U+7f6b, U+7f6d, U+7f71;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.24.woff2) format('woff2');
|
||||||
|
unicode-range: U+7bc8, U+7bca-7bcc, U+7bcf, U+7bd4, U+7bd6-7bd7, U+7bd9-7bdb, U+7bdd, U+7be5-7be6, U+7be8-7bea, U+7bf0, U+7bf2-7bfa, U+7bfc, U+7bfe, U+7c00-7c04, U+7c06-7c07, U+7c09, U+7c0b-7c0f, U+7c11-7c14, U+7c17, U+7c19, U+7c1b, U+7c1e-7c20, U+7c23, U+7c25-7c28, U+7c2a-7c2c, U+7c2f, U+7c31, U+7c33-7c34, U+7c36-7c3a, U+7c3d-7c3e, U+7c40, U+7c42-7c43, U+7c45-7c46, U+7c4a, U+7c4c, U+7c4f-7c5f, U+7c61, U+7c63-7c65, U+7c67, U+7c69, U+7c6c-7c70, U+7c72, U+7c75, U+7c79, U+7c7b-7c7e, U+7c81-7c83, U+7c86-7c87, U+7c8d, U+7c8f-7c90, U+7c94, U+7c9e, U+7ca0-7ca2, U+7ca4-7ca6, U+7ca8, U+7cab, U+7cad-7cae, U+7cb0-7cb3, U+7cb6-7cb7, U+7cb9-7cbd, U+7cbf-7cc0, U+7cc2, U+7cc4-7cc5, U+7cc7-7cca, U+7ccd-7ccf, U+7cd2-7cd5, U+7cd7-7cda, U+7cdc-7cdd, U+7cdf-7ce0, U+7ce2, U+7ce6, U+7ce9, U+7ceb, U+7cef, U+7cf2, U+7cf4-7cf6, U+7cf9-7cfa, U+7cfe, U+7d02-7d03, U+7d06-7d0a, U+7d0f, U+7d11-7d13, U+7d15-7d16, U+7d1c-7d1e, U+7d23, U+7d26, U+7d2a, U+7d2c-7d2e, U+7d31-7d32, U+7d35, U+7d3c-7d41, U+7d43, U+7d45, U+7d47-7d48, U+7d4b, U+7d4d-7d4f, U+7d51, U+7d53, U+7d55-7d56;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.25.woff2) format('woff2');
|
||||||
|
unicode-range: U+7a17-7a19, U+7a1b, U+7a1e-7a21, U+7a27, U+7a2b, U+7a2d, U+7a2f-7a31, U+7a34-7a35, U+7a37-7a3b, U+7a3e, U+7a43-7a49, U+7a4c, U+7a4e, U+7a50, U+7a55-7a57, U+7a59, U+7a5c-7a5d, U+7a5f-7a63, U+7a65, U+7a67, U+7a69-7a6a, U+7a6d, U+7a70, U+7a75, U+7a78-7a79, U+7a7d-7a7e, U+7a80, U+7a82, U+7a84-7a86, U+7a88, U+7a8a-7a8b, U+7a90-7a91, U+7a94-7a98, U+7a9e, U+7aa0, U+7aa3, U+7aa9, U+7aac, U+7ab0, U+7ab3, U+7ab5-7ab6, U+7ab9-7abf, U+7ac3, U+7ac5-7aca, U+7acc-7acf, U+7ad1-7ad3, U+7ad5, U+7ada-7adb, U+7add, U+7adf, U+7ae1-7ae2, U+7ae6-7aed, U+7af0-7af1, U+7af4, U+7af8, U+7afa-7afb, U+7afd-7afe, U+7b02, U+7b04, U+7b06-7b08, U+7b0a-7b0b, U+7b0f, U+7b12, U+7b14, U+7b18-7b19, U+7b1e-7b1f, U+7b23, U+7b25, U+7b27-7b2b, U+7b2d-7b31, U+7b33-7b36, U+7b3b, U+7b3d, U+7b3f-7b41, U+7b45, U+7b47, U+7b4c-7b50, U+7b53, U+7b55, U+7b5d, U+7b60, U+7b64-7b66, U+7b69-7b6a, U+7b6c-7b75, U+7b77, U+7b79-7b7a, U+7b7f, U+7b84, U+7b86, U+7b89, U+7b8d-7b92, U+7b96, U+7b98-7ba0, U+7ba5, U+7bac-7bad, U+7baf-7bb0, U+7bb2, U+7bb4-7bb6, U+7bba-7bbd, U+7bc1-7bc2, U+7bc5-7bc6;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.26.woff2) format('woff2');
|
||||||
|
unicode-range: U+7851-7852, U+785c, U+785e, U+7860-7861, U+7863-7864, U+7868, U+786a, U+786e-786f, U+7872, U+7874, U+787a, U+787c, U+787e, U+7886-7887, U+788a, U+788c-788f, U+7893-7895, U+7898, U+789a, U+789d-789f, U+78a1, U+78a3-78a4, U+78a8-78aa, U+78ac-78ad, U+78af-78b3, U+78b5, U+78bb-78bf, U+78c5-78cc, U+78ce, U+78d1-78d6, U+78da-78db, U+78df-78e1, U+78e4, U+78e6-78e7, U+78ea, U+78ec, U+78f2-78f4, U+78f6-78f7, U+78f9-78fb, U+78fd-7901, U+7906-7907, U+790c, U+7910-7912, U+7919-791c, U+791e-7920, U+7925-792e, U+7930-7931, U+7934-7935, U+793b, U+793d, U+793f, U+7941-7942, U+7944-7946, U+794a-794b, U+794f, U+7951, U+7954-7955, U+7957-7958, U+795a-795c, U+795f-7960, U+7962, U+7967, U+7969, U+796b, U+7972, U+7977, U+7979-797c, U+797e-7980, U+798a-798e, U+7991, U+7993-7996, U+7998, U+799b-799d, U+79a1, U+79a6-79ab, U+79ae-79b1, U+79b3-79b4, U+79b8-79bb, U+79bd-79be, U+79c2, U+79c4, U+79c7-79ca, U+79cc-79cd, U+79cf, U+79d4-79d6, U+79da, U+79dd-79e3, U+79e5, U+79e7, U+79ea-79ed, U+79f1, U+79f8, U+79fc, U+7a02-7a03, U+7a05, U+7a07-7a0a, U+7a0c-7a0d, U+7a11, U+7a15;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.27.woff2) format('woff2');
|
||||||
|
unicode-range: U+768c-768e, U+7690, U+7693, U+7695-7696, U+7699-76a8, U+76aa, U+76ad, U+76af-76b0, U+76b4, U+76b6-76ba, U+76bd, U+76c1-76c3, U+76c5, U+76c8-76c9, U+76cb-76ce, U+76d2, U+76d4, U+76d6, U+76d9, U+76dc, U+76de, U+76e0-76e1, U+76e5-76e8, U+76ea-76ec, U+76f0-76f1, U+76f6, U+76f9, U+76fb-76fc, U+7700, U+7704, U+7706-7708, U+770a, U+770e, U+7712, U+7714-7715, U+7717, U+7719-771c, U+7722, U+7724-7726, U+7728, U+772d-772f, U+7734-7739, U+773d-773e, U+7742, U+7745-7747, U+774a, U+774d-774f, U+7752, U+7756-7758, U+775a-775c, U+775e-7760, U+7762, U+7764-7765, U+7767, U+776a-776c, U+7770, U+7772-7774, U+7779-777a, U+777c-7780, U+7784, U+778b-778e, U+7794-7796, U+779a, U+779e-77a0, U+77a2, U+77a4-77a5, U+77a7, U+77a9-77aa, U+77ae-77b1, U+77b5-77b7, U+77b9, U+77bb-77bf, U+77c3, U+77c7, U+77c9, U+77cd, U+77d1-77d2, U+77d5, U+77d7, U+77d9-77da, U+77dc, U+77de-77e0, U+77e3-77e4, U+77e6-77e7, U+77e9-77ea, U+77ec, U+77ee, U+77f0-77f1, U+77f4, U+77f8, U+77fb-77fc, U+7805-7806, U+7809, U+780c-780e, U+7811-7812, U+7819, U+781d, U+7820-7823, U+7826-7827, U+782c-782e, U+7830, U+7835, U+7837, U+783a, U+783f, U+7843-7845, U+7847-7848, U+784c, U+784e-784f;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.28.woff2) format('woff2');
|
||||||
|
unicode-range: U+7511-7513, U+7515-7517, U+751c, U+751e, U+7520-7522, U+7524, U+7526-7527, U+7529-752c, U+752f, U+7536, U+7538-7539, U+753c-7540, U+7543-7544, U+7546-754b, U+754d-7550, U+7552, U+7557, U+755a-755b, U+755d-755f, U+7561-7562, U+7564, U+7566-7567, U+7569, U+756b-756d, U+756f, U+7571-7572, U+7574-757e, U+7581-7582, U+7585-7587, U+7589-758c, U+758f-7590, U+7592-7595, U+7599-759a, U+759c-759d, U+75a2-75a5, U+75b0-75b1, U+75b3-75b5, U+75b7-75b8, U+75ba, U+75bd, U+75bf-75c4, U+75c6, U+75ca, U+75cc-75cf, U+75d3-75d4, U+75d7-75d8, U+75dc-75e1, U+75e3-75e4, U+75e7, U+75ec, U+75ee-75f3, U+75f9, U+75fc, U+75fe-7604, U+7607-760c, U+760f, U+7612-7613, U+7615-7616, U+7618-7619, U+761b-7629, U+762d, U+7630, U+7632-7635, U+7638-763c, U+7640-7641, U+7643-764b, U+764e, U+7655, U+7658-7659, U+765c, U+765f, U+7661-7662, U+7664-7665, U+7667-766a, U+766c-7672, U+7674, U+7676, U+7678, U+7680-7683, U+7685, U+7688, U+768b;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.29.woff2) format('woff2');
|
||||||
|
unicode-range: U+736c, U+736e-7371, U+7375, U+7377-737c, U+7380-7381, U+7383, U+7385-7386, U+738a, U+738e, U+7390, U+7393-7398, U+739c, U+739e-73a0, U+73a2, U+73a5-73a6, U+73a8, U+73aa-73ab, U+73ad, U+73b3, U+73b5, U+73b7, U+73b9-73bd, U+73bf, U+73c5-73c6, U+73c9-73cc, U+73ce-73cf, U+73d2-73d3, U+73d6, U+73d9, U+73dd-73de, U+73e1, U+73e3-73e7, U+73e9-73ea, U+73ee, U+73f1, U+73f4-73f5, U+73f7-73fb, U+73fd, U+73ff-7401, U+7404-7405, U+7407, U+740a, U+7411, U+7413, U+741a-741b, U+7421, U+7424, U+7426, U+7428-7431, U+7433, U+7439-743a, U+743f-7441, U+7443-7444, U+7446-7447, U+744b, U+744d, U+7451-7453, U+7455, U+7457, U+7459-745a, U+745c-745d, U+745f, U+7462-7464, U+7466-746b, U+746d-7473, U+7476, U+747e, U+7480-7481, U+7485-7489, U+748b, U+748f-7492, U+7497-749a, U+749c, U+749e-74a3, U+74a5-74a6, U+74a8-74ab, U+74ae-74af, U+74b1-74b2, U+74b5, U+74b9-74bb, U+74bd, U+74bf, U+74c8-74ca, U+74cc, U+74cf-74d0, U+74d3-74d4, U+74d6, U+74d8, U+74da-74db, U+74de-74e0, U+74e3-74e4, U+74e7-74eb, U+74ee-74f2, U+74f4, U+74f7-74f8, U+74fa-74fc, U+74ff, U+7501, U+7503-7506, U+750c-750e;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.30.woff2) format('woff2');
|
||||||
|
unicode-range: U+7166, U+7168, U+716c, U+7179, U+7180, U+7184-7185, U+7187-7188, U+718c, U+718f, U+7192, U+7194-7196, U+7199-719b, U+71a0, U+71a2, U+71a8, U+71ac, U+71ae-71b0, U+71b2-71b3, U+71b9-71ba, U+71be-71c1, U+71c4, U+71c9, U+71cb-71cc, U+71ce, U+71d0, U+71d2-71d4, U+71d6-71d7, U+71d9-71da, U+71dc, U+71df-71e0, U+71e6-71e7, U+71ec-71ee, U+71f4-71f5, U+71f8-71f9, U+71fc, U+71fe-7200, U+7207-7209, U+720d, U+7210, U+7213, U+7215, U+7217, U+721a, U+721d, U+721f, U+7224, U+7228, U+722b, U+722d, U+722f-7230, U+7232, U+7234, U+7238-7239, U+723b-723c, U+723e-7243, U+7245-7246, U+724b, U+724e-7250, U+7252-7253, U+7255-7258, U+725a, U+725c, U+725e, U+7260, U+7263, U+7268, U+726b, U+726e-726f, U+7271, U+7274, U+7277-7278, U+727b-727c, U+727e-7282, U+7284, U+7287, U+7289, U+728d-728e, U+7292-7293, U+7296, U+729b, U+72a2, U+72a7-72a8, U+72ad-72ae, U+72b0-72b2, U+72b4, U+72b9, U+72be, U+72c0-72c1, U+72c3-72c4, U+72c6-72c7, U+72c9, U+72cc, U+72ce, U+72d2, U+72d5-72d6, U+72d8, U+72df-72e2, U+72e5, U+72f3-72f4, U+72f7, U+72f9-72fb, U+72fd-72fe, U+7302, U+7304-7305, U+7307, U+730a-730b, U+730d, U+7312-7313, U+7316-7319, U+731c-731e, U+7322, U+7324, U+7327-7329, U+732c, U+732f, U+7331-7337, U+7339-733b, U+733d-733e, U+7343, U+734d-7350, U+7352, U+7356-7358, U+735d-7360, U+7366-736b;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.31.woff2) format('woff2');
|
||||||
|
unicode-range: U+6f58-6f5b, U+6f5d-6f5e, U+6f60-6f62, U+6f66, U+6f68, U+6f6c-6f6d, U+6f6f, U+6f74, U+6f78, U+6f7a, U+6f7c-6f7e, U+6f80, U+6f82-6f83, U+6f86-6f88, U+6f8b-6f8e, U+6f90-6f94, U+6f96-6f98, U+6f9a, U+6f9d, U+6f9f-6fa1, U+6fa3, U+6fa5-6fa8, U+6fae-6fb1, U+6fb3, U+6fb5-6fb7, U+6fb9, U+6fbc, U+6fbe, U+6fc2, U+6fc5-6fca, U+6fd4-6fd5, U+6fd8, U+6fda-6fdb, U+6fde-6fe0, U+6fe4, U+6fe8-6fe9, U+6feb-6fec, U+6fee, U+6ff0, U+6ff3, U+6ff5-6ff6, U+6ff9-6ffa, U+6ffc-6ffe, U+7000-7001, U+7005-7007, U+7009-700b, U+700d, U+700f, U+7011, U+7015, U+7017-7018, U+701a-701b, U+701d-7020, U+7023, U+7026, U+7028, U+702f-7030, U+7032, U+7034, U+7037, U+7039-703a, U+703c, U+703e, U+7043-7044, U+7047-704c, U+704e, U+7051, U+7054-7055, U+705d-705e, U+7064-7065, U+7069, U+706c, U+706e, U+7075-7076, U+707e, U+7081, U+7085-7086, U+7094-7098, U+709b, U+709f, U+70a4, U+70ab-70ac, U+70ae-70b1, U+70b3-70b4, U+70b7, U+70bb, U+70ca-70cb, U+70d1, U+70d3-70d6, U+70d8-70d9, U+70dc-70dd, U+70df, U+70e4, U+70ec, U+70f1, U+70fa, U+70fd, U+7103-7108, U+710b-710c, U+710f, U+7114, U+7119, U+711c, U+711e, U+7120, U+712b, U+712d-7131, U+7138, U+7141, U+7145-7147, U+7149-714b, U+7150-7153, U+7155-7157, U+715a, U+715c, U+715e, U+7160, U+7162, U+7164-7165;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.32.woff2) format('woff2');
|
||||||
|
unicode-range: U+6d7c, U+6d80-6d82, U+6d85, U+6d87, U+6d89-6d8a, U+6d8c-6d8e, U+6d91-6d98, U+6d9c, U+6daa-6dac, U+6dae, U+6db4-6db5, U+6db7-6db9, U+6dbd, U+6dbf, U+6dc2, U+6dc4-6dc8, U+6dca, U+6dcc, U+6dce-6dd0, U+6dd2, U+6dd5-6dd6, U+6dd8-6ddb, U+6ddd-6de0, U+6de2, U+6de4-6de6, U+6de8-6dea, U+6dec, U+6dee-6df0, U+6df2, U+6df4, U+6df6, U+6df8-6dfa, U+6dfc, U+6e00, U+6e04, U+6e0a, U+6e17, U+6e19, U+6e1d-6e20, U+6e22-6e25, U+6e27, U+6e2b, U+6e2d-6e2e, U+6e32, U+6e34, U+6e36, U+6e38-6e3c, U+6e42-6e45, U+6e48-6e49, U+6e4b-6e4f, U+6e51-6e54, U+6e57, U+6e5b-6e5f, U+6e62-6e63, U+6e68, U+6e6b, U+6e6e, U+6e72-6e73, U+6e76, U+6e7b, U+6e7d, U+6e82, U+6e89, U+6e8c-6e8d, U+6e8f, U+6e93, U+6e98-6e99, U+6e9f-6ea0, U+6ea5, U+6ea7, U+6eaa-6eab, U+6ead-6eaf, U+6eb1-6eb4, U+6eb7, U+6ebb-6ebd, U+6ebf-6ec4, U+6ec7-6eca, U+6ecc-6ecf, U+6ed3-6ed5, U+6ed9-6edb, U+6ee6, U+6eeb-6eef, U+6ef7-6ef9, U+6efb, U+6efd-6eff, U+6f04, U+6f08-6f0a, U+6f0c-6f0d, U+6f10-6f11, U+6f13, U+6f15-6f16, U+6f18, U+6f1a-6f1b, U+6f25-6f26, U+6f29-6f2a, U+6f2d, U+6f2f-6f33, U+6f35-6f36, U+6f38, U+6f3b-6f3c, U+6f3e-6f3f, U+6f41, U+6f45, U+6f4f, U+6f51-6f53, U+6f57;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.33.woff2) format('woff2');
|
||||||
|
unicode-range: U+6b85, U+6b89, U+6b8d, U+6b95, U+6b97-6b98, U+6b9b, U+6b9e-6ba0, U+6ba2-6ba4, U+6ba8-6bb3, U+6bb7-6bb9, U+6bbc-6bbe, U+6bc0, U+6bc3-6bc4, U+6bc6-6bc9, U+6bcb-6bcc, U+6bcf, U+6bd3, U+6bd6-6bd8, U+6bda, U+6bdf, U+6be1, U+6be3, U+6be6-6be7, U+6beb-6bec, U+6bee, U+6bf1, U+6bf3, U+6bf7, U+6bf9, U+6bff, U+6c02, U+6c04-6c05, U+6c08-6c0a, U+6c0d-6c0e, U+6c10, U+6c12-6c14, U+6c19, U+6c1b, U+6c1f, U+6c24, U+6c26-6c28, U+6c2c, U+6c2e, U+6c33, U+6c35-6c36, U+6c3a-6c3b, U+6c3e-6c40, U+6c4a-6c4b, U+6c4d, U+6c4f, U+6c52, U+6c54-6c55, U+6c59, U+6c5b-6c5e, U+6c62, U+6c67-6c68, U+6c6a-6c6b, U+6c6d, U+6c6f, U+6c73-6c74, U+6c76, U+6c78-6c79, U+6c7b, U+6c7e, U+6c81-6c87, U+6c89, U+6c8c-6c8d, U+6c90, U+6c92-6c95, U+6c97-6c98, U+6c9a-6c9c, U+6c9f, U+6caa-6cae, U+6cb0-6cb2, U+6cb4, U+6cba, U+6cbd-6cbe, U+6cc2, U+6cc5-6cc6, U+6ccd, U+6ccf-6cd4, U+6cd6-6cd7, U+6cd9-6cdd, U+6ce0, U+6ce7, U+6ce9-6cef, U+6cf1-6cf2, U+6cf4, U+6cfb, U+6d00-6d01, U+6d04, U+6d07, U+6d0a, U+6d0c, U+6d0e-6d0f, U+6d11, U+6d13, U+6d19-6d1a, U+6d1f, U+6d24, U+6d26-6d28, U+6d2b, U+6d2e-6d2f, U+6d31, U+6d33-6d36, U+6d38-6d39, U+6d3c-6d3d, U+6d3f, U+6d57-6d5b, U+6d5e-6d61, U+6d64-6d65, U+6d67, U+6d6c, U+6d6f-6d70, U+6d79;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.34.woff2) format('woff2');
|
||||||
|
unicode-range: U+69dd-69de, U+69e2-69e3, U+69e5, U+69e7-69eb, U+69ed-69ef, U+69f1-69f6, U+69f9, U+69fe-6a01, U+6a03, U+6a05, U+6a0a, U+6a0c, U+6a0f, U+6a11-6a15, U+6a17, U+6a1a-6a1b, U+6a1d-6a20, U+6a22-6a24, U+6a28, U+6a2e, U+6a30, U+6a32-6a38, U+6a3b, U+6a3e-6a3f, U+6a44-6a4a, U+6a4e, U+6a50-6a52, U+6a54-6a56, U+6a5b, U+6a61-6a62, U+6a64, U+6a66-6a67, U+6a6a-6a6b, U+6a71-6a73, U+6a78, U+6a7a, U+6a7e-6a7f, U+6a81, U+6a83-6a84, U+6a86-6a87, U+6a89, U+6a8b, U+6a8d, U+6a90-6a91, U+6a94, U+6a97, U+6a9b, U+6a9d-6aa3, U+6aa5, U+6aaa-6aac, U+6aae-6ab1, U+6ab3-6ab4, U+6ab8, U+6abb, U+6abd-6abf, U+6ac1-6ac3, U+6ac6, U+6ac8-6ac9, U+6acc, U+6ad0-6ad1, U+6ad3-6ad6, U+6ada-6adf, U+6ae2, U+6ae4, U+6ae7-6ae8, U+6aea, U+6aec, U+6af0-6af3, U+6af8, U+6afa, U+6afc-6afd, U+6b02-6b03, U+6b06-6b07, U+6b09-6b0b, U+6b0f-6b12, U+6b16-6b17, U+6b1b, U+6b1d-6b1f, U+6b23-6b24, U+6b28, U+6b2b-6b2c, U+6b2f, U+6b35-6b39, U+6b3b, U+6b3d, U+6b3f, U+6b43, U+6b46-6b47, U+6b49-6b4a, U+6b4d-6b4e, U+6b50, U+6b52, U+6b54, U+6b56, U+6b58-6b59, U+6b5b, U+6b5d, U+6b5f-6b61, U+6b65, U+6b67, U+6b6b-6b6c, U+6b6e, U+6b70, U+6b72, U+6b75, U+6b77-6b7a, U+6b7d-6b84;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.35.woff2) format('woff2');
|
||||||
|
unicode-range: U+6855, U+6857-6859, U+685b, U+685d, U+685f, U+6863, U+6867, U+686b, U+686e-6872, U+6874-6875, U+6877, U+6879-687c, U+687e-687f, U+6882-6884, U+6886, U+6888, U+688d-6890, U+6894, U+6896, U+6898-689c, U+689f-68a3, U+68a5-68a7, U+68a9-68ab, U+68ad-68af, U+68b2-68b5, U+68b9-68bc, U+68c3, U+68c5-68c6, U+68c8-68ca, U+68cc-68cd, U+68cf-68d1, U+68d3-68d9, U+68dc-68dd, U+68e0-68e1, U+68e3-68e5, U+68e7-68e8, U+68ea-68ed, U+68ef-68f1, U+68f5-68f7, U+68f9, U+68fb-68fd, U+6900-6901, U+6903-6904, U+6906-690c, U+690f-6911, U+6913, U+6916-6917, U+6919-691b, U+6921-6923, U+6925-6926, U+6928, U+692a, U+6930-6931, U+6933-6936, U+6938-6939, U+693b, U+693d, U+6942, U+6945-6946, U+6949, U+694e, U+6954, U+6957, U+6959, U+695b-695e, U+6961-6966, U+6968-696c, U+696e-6974, U+6977-697b, U+697e-6981, U+6986, U+698d, U+6991-6992, U+6994-6996, U+6998, U+699c, U+69a0-69a1, U+69a5-69a8, U+69ab, U+69ad, U+69af-69b2, U+69b4, U+69b7-69b8, U+69ba-69bc, U+69be-69c1, U+69c3, U+69c5, U+69c7-69c8, U+69ca, U+69ce-69d1, U+69d3, U+69d6-69d7, U+69d9;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.36.woff2) format('woff2');
|
||||||
|
unicode-range: U+667e-6680, U+6683-6684, U+6688, U+668b-668e, U+6690, U+6692, U+6698-669d, U+669f-66a0, U+66a2, U+66a4, U+66ad, U+66b1-66b3, U+66b5, U+66b8-66b9, U+66bb-66bc, U+66be-66c4, U+66c6, U+66c8-66c9, U+66cc, U+66ce-66cf, U+66d4, U+66da-66db, U+66dd, U+66df-66e0, U+66e6, U+66e8-66e9, U+66eb-66ec, U+66ee, U+66f5, U+66f7, U+66fa-66fc, U+6701, U+6705, U+6707, U+670c, U+670e-6710, U+6712-6716, U+6719, U+671c, U+671e, U+6720, U+6722, U+6725-6726, U+672e, U+6733, U+6735-6738, U+673e-673f, U+6741, U+6743, U+6745-6748, U+674c-674d, U+6753-6755, U+6759, U+675d-675e, U+6760, U+6762-6764, U+6766, U+676a, U+676c, U+676e, U+6770, U+6772-6774, U+6776-6777, U+677b-677c, U+6780-6781, U+6784-6785, U+6787, U+6789, U+678b-678c, U+678e-678f, U+6791-6793, U+6796, U+6798-6799, U+679b, U+67a1, U+67a4, U+67a6, U+67a9, U+67b0-67b5, U+67b7-67b9, U+67bb-67be, U+67c0-67c3, U+67c5-67c6, U+67c8-67c9, U+67ce, U+67d2, U+67d7-67d9, U+67db-67de, U+67e1-67e2, U+67e4, U+67e6-67e7, U+67e9, U+67ec, U+67ee-67f0, U+67f2, U+67f6-67f7, U+67f9-67fa, U+67fc, U+67fe, U+6801-6802, U+6805, U+6810, U+6814, U+6818-6819, U+681d, U+681f, U+6822, U+6827-6829, U+682b-682d, U+682f-6834, U+683b, U+683e-6840, U+6844-6846, U+6849-684a, U+684c-684e, U+6852-6854;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.37.woff2) format('woff2');
|
||||||
|
unicode-range: U+64d2, U+64d4-64d5, U+64d7-64d8, U+64da, U+64e0-64e1, U+64e3-64e5, U+64e7, U+64e9-64ea, U+64ed, U+64ef-64f2, U+64f4-64f7, U+64fa-64fb, U+64fd-6501, U+6504-6505, U+6508-650a, U+650f, U+6513-6514, U+6516, U+6518-6519, U+651b-651f, U+6522, U+6524, U+6526, U+6529-652c, U+652e, U+6531-6532, U+6534-6538, U+653a, U+653c-653d, U+6543-6544, U+6547-6549, U+654d-654e, U+6550, U+6552, U+6554-6556, U+6558, U+655d-6560, U+6567, U+656b, U+6572, U+6578, U+657a, U+657d, U+6581-6585, U+6588, U+658a, U+658c, U+6592, U+6595, U+6598, U+659b, U+659d, U+659f-65a1, U+65a3-65a6, U+65ab, U+65ae, U+65b2-65b5, U+65b7-65b8, U+65be-65bf, U+65c1-65c4, U+65c6, U+65c8-65c9, U+65cc, U+65ce, U+65d0, U+65d2, U+65d4, U+65d6, U+65d8-65d9, U+65db, U+65df-65e1, U+65e3, U+65f0-65f2, U+65f4-65f5, U+65f9, U+65fb-65fc, U+65fe-6600, U+6603-6604, U+6608-660a, U+660d, U+6611-6612, U+6615-6616, U+661c-661e, U+6621-6624, U+6626, U+6629-662c, U+662e, U+6630-6631, U+6633-6637, U+6639-663b, U+663f-6641, U+6644-6646, U+6648-664a, U+664c, U+664e-664f, U+6651, U+6657-6665, U+6667-6668, U+666a-666d, U+6670, U+6673, U+6675, U+6677-6679, U+667b-667c;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.38.woff2) format('woff2');
|
||||||
|
unicode-range: U+62cf, U+62d1, U+62d4-62d6, U+62da, U+62dc, U+62ea, U+62ee-62ef, U+62f1-62f2, U+62f4-62f5, U+62fc-62fd, U+62ff, U+6302-6304, U+6308-630d, U+6310, U+6313, U+6316, U+6318, U+631b, U+6327, U+6329-632a, U+632d, U+6332, U+6335-6336, U+6339-633c, U+633e, U+6341-6344, U+6346, U+634a-634e, U+6350, U+6352-6354, U+6358-6359, U+635b, U+6365-6366, U+6369, U+636b-636d, U+6371-6372, U+6374-6378, U+637a, U+637c-637d, U+637f-6380, U+6382, U+6384, U+6387, U+6389-638a, U+638e-6390, U+6394-6396, U+6399-639a, U+639e, U+63a0, U+63a3-63a4, U+63a6, U+63a9, U+63ab-63af, U+63b5, U+63bd-63be, U+63c0-63c1, U+63c4-63c6, U+63c8, U+63ce, U+63d1-63d6, U+63dc, U+63e0, U+63e3, U+63e5, U+63e9-63ed, U+63f2-63f3, U+63f5-63f9, U+6406, U+6409-640a, U+640f-6410, U+6412-6414, U+6416-6418, U+641e, U+6420, U+6422, U+6424-6426, U+6428-642a, U+642f-6430, U+6434-6436, U+643d, U+643f, U+644b, U+644e-644f, U+6451-6454, U+645a-645d, U+645f-6461, U+6463, U+6467, U+646d, U+6473-6474, U+6476, U+6478-6479, U+647b, U+647d, U+6485, U+6487-6488, U+648f-6491, U+6493, U+6495, U+6498-649b, U+649d-649f, U+64a1, U+64a3, U+64a6, U+64a8-64a9, U+64ac, U+64b3, U+64bb-64bf, U+64c2, U+64c4-64c5, U+64c7, U+64c9-64cc, U+64ce, U+64d0-64d1;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.39.woff2) format('woff2');
|
||||||
|
unicode-range: U+6117, U+6119, U+611c, U+611e, U+6120-6122, U+6127-6128, U+612a-612c, U+6130-6131, U+6134-6137, U+6139-613a, U+613c-613f, U+6141-6142, U+6144-6147, U+6149-614a, U+614d, U+6153, U+6158-615a, U+615d-6160, U+6164-6165, U+616b-616c, U+616f, U+6171-6175, U+6177-6178, U+617b-6181, U+6183-6184, U+6187, U+618a-618b, U+618d, U+6192-6194, U+6196-619a, U+619c-619d, U+619f-61a0, U+61a5, U+61a8, U+61aa-61ae, U+61b8-61ba, U+61bc, U+61be, U+61c0-61c3, U+61c6, U+61c8, U+61ca-61cf, U+61d5, U+61dc-61df, U+61e1-61e3, U+61e5-61e9, U+61ec-61ed, U+61ef, U+61f4-61f7, U+61fa, U+61fc-6201, U+6203-6204, U+6207-620a, U+620d-620e, U+6213-6215, U+621b-621e, U+6220-6223, U+6227, U+6229-622b, U+622e, U+6230-6233, U+6236, U+6239, U+623d-623e, U+6241-6244, U+6246, U+6248, U+624c, U+624e, U+6250-6252, U+6254, U+6256, U+6258, U+625a-625c, U+625e, U+6260-6261, U+6263-6264, U+6268, U+626d, U+626f, U+6273, U+627a-627e, U+6282-6283, U+6285, U+6289, U+628d-6290, U+6292-6294, U+6296, U+6299, U+629b, U+62a6, U+62a8, U+62ac, U+62b3, U+62b6-62b7, U+62ba-62bb, U+62be-62bf, U+62c2, U+62c4, U+62c6-62c8, U+62ca, U+62ce;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.40.woff2) format('woff2');
|
||||||
|
unicode-range: U+5f6c-5f6d, U+5f6f, U+5f72-5f75, U+5f78, U+5f7a, U+5f7d-5f7f, U+5f82-5f83, U+5f87-5f89, U+5f8d, U+5f8f, U+5f91, U+5f96, U+5f99, U+5f9c-5f9d, U+5fa0, U+5fa2, U+5fa4, U+5fa7-5fa8, U+5fab-5fad, U+5faf-5fb1, U+5fb5, U+5fb7-5fb8, U+5fbc-5fbd, U+5fc4, U+5fc7-5fc9, U+5fcb, U+5fd0-5fd4, U+5fdd-5fde, U+5fe1-5fe2, U+5fe4, U+5fe8-5fea, U+5fec-5ff3, U+5ff6, U+5ff8, U+5ffa-5ffd, U+5fff, U+6007, U+600a, U+600d-6010, U+6013-6015, U+6017-601b, U+601f, U+6021-6022, U+6024, U+6026, U+6029, U+602b, U+602d, U+6031, U+6033, U+6035, U+603a, U+6040-6043, U+6046-604a, U+604c-604d, U+6051, U+6054-6057, U+6059-605a, U+605d, U+605f-6064, U+6067, U+606a-606c, U+6070-6071, U+6077, U+607e-607f, U+6081-6086, U+6088-608e, U+6091-6093, U+6095-6098, U+609a-609b, U+609d-609e, U+60a2, U+60a4-60a5, U+60a7-60a8, U+60b0-60b1, U+60b3-60b5, U+60b7-60b8, U+60bb, U+60bd-60be, U+60c2, U+60c4, U+60c6-60cb, U+60ce-60cf, U+60d3-60d5, U+60d8-60d9, U+60db, U+60dd-60df, U+60e1-60e2, U+60e5, U+60ee, U+60f0-60f2, U+60f4-60f8, U+60fa-60fd, U+6100, U+6102-6103, U+6106-6108, U+610a, U+610c-610e, U+6110-6114, U+6116;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.41.woff2) format('woff2');
|
||||||
|
unicode-range: U+5d9b, U+5d9d, U+5d9f-5da0, U+5da2, U+5da4, U+5da7, U+5dab-5dac, U+5dae, U+5db0, U+5db2, U+5db4, U+5db7-5db9, U+5dbc-5dbd, U+5dc3, U+5dc7, U+5dc9, U+5dcb-5dce, U+5dd0-5dd3, U+5dd6-5dd9, U+5ddb, U+5de0, U+5de2, U+5de4, U+5de9, U+5df2, U+5df5, U+5df8-5df9, U+5dfd, U+5dff-5e00, U+5e07, U+5e0b, U+5e0d, U+5e11-5e12, U+5e14-5e15, U+5e18-5e1b, U+5e1f-5e20, U+5e25, U+5e28, U+5e2e, U+5e32, U+5e35-5e37, U+5e3e, U+5e40, U+5e43-5e44, U+5e47, U+5e49, U+5e4b, U+5e4e, U+5e50-5e51, U+5e54, U+5e56-5e58, U+5e5b-5e5c, U+5e5e-5e5f, U+5e62, U+5e64, U+5e68, U+5e6a-5e6e, U+5e70, U+5e75-5e77, U+5e7a, U+5e7f-5e80, U+5e87, U+5e8b, U+5e8e, U+5e96, U+5e99-5e9a, U+5ea0, U+5ea2, U+5ea4-5ea5, U+5ea8, U+5eaa, U+5eac, U+5eb1, U+5eb3, U+5eb8-5eb9, U+5ebd-5ebf, U+5ec1-5ec2, U+5ec6, U+5ec8, U+5ecb-5ecc, U+5ece-5ed6, U+5ed9-5ee2, U+5ee5, U+5ee8-5ee9, U+5eeb-5eec, U+5ef0-5ef1, U+5ef3-5ef4, U+5ef8-5ef9, U+5efc-5f00, U+5f02-5f03, U+5f06-5f09, U+5f0b-5f0e, U+5f11, U+5f16-5f17, U+5f19, U+5f1b-5f1e, U+5f21-5f24, U+5f27-5f29, U+5f2b-5f30, U+5f34, U+5f36, U+5f38, U+5f3a-5f3d, U+5f3f-5f41, U+5f44-5f45, U+5f47-5f48, U+5f4a, U+5f4c-5f4e, U+5f50-5f51, U+5f54, U+5f56-5f58, U+5f5b-5f5d, U+5f60, U+5f63-5f65, U+5f67, U+5f6a;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.42.woff2) format('woff2');
|
||||||
|
unicode-range: U+5bbc, U+5bc0-5bc1, U+5bc3, U+5bc7, U+5bc9, U+5bcd-5bd0, U+5bd3-5bd4, U+5bd6-5bda, U+5bde, U+5be0-5be2, U+5be4-5be6, U+5be8, U+5beb-5bec, U+5bef-5bf1, U+5bf3-5bf6, U+5bfd, U+5c03, U+5c05, U+5c07-5c09, U+5c0c-5c0d, U+5c12-5c14, U+5c17, U+5c19, U+5c1e-5c20, U+5c22-5c24, U+5c26, U+5c28-5c2e, U+5c30, U+5c32, U+5c35-5c36, U+5c38-5c39, U+5c46, U+5c4d-5c50, U+5c53, U+5c59-5c5c, U+5c5f-5c63, U+5c67-5c69, U+5c6c-5c70, U+5c74-5c76, U+5c79-5c7d, U+5c87-5c88, U+5c8a, U+5c8c, U+5c8f, U+5c91-5c92, U+5c94, U+5c9d, U+5c9f-5ca0, U+5ca2-5ca3, U+5ca6-5ca8, U+5caa-5cab, U+5cad, U+5cb1-5cb2, U+5cb4-5cb7, U+5cba-5cbc, U+5cbe, U+5cc5, U+5cc7, U+5cc9, U+5ccb, U+5cd0, U+5cd2, U+5cd7, U+5cd9, U+5cdd, U+5ce6, U+5ce8-5cea, U+5ced-5cee, U+5cf1-5cf2, U+5cf4-5cf5, U+5cfa-5cfb, U+5cfd, U+5d01, U+5d06, U+5d0b, U+5d0d, U+5d10-5d12, U+5d14-5d15, U+5d17-5d1b, U+5d1d, U+5d1f-5d20, U+5d22-5d24, U+5d26-5d27, U+5d2b, U+5d31, U+5d34, U+5d39, U+5d3d, U+5d3f, U+5d42-5d43, U+5d46-5d48, U+5d4a-5d4b, U+5d4e, U+5d51-5d53, U+5d55, U+5d59, U+5d5c, U+5d5f-5d62, U+5d64, U+5d69-5d6a, U+5d6c-5d6d, U+5d6f-5d70, U+5d73, U+5d76, U+5d79-5d7a, U+5d7e-5d7f, U+5d81-5d84, U+5d87-5d88, U+5d8a, U+5d8c, U+5d90, U+5d92-5d95, U+5d97, U+5d99;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.43.woff2) format('woff2');
|
||||||
|
unicode-range: U+598b-598e, U+5992, U+5995, U+5997, U+599b, U+599d, U+599f, U+59a3-59a4, U+59a7, U+59ad-59b0, U+59b2-59b3, U+59b7, U+59ba, U+59bc, U+59be, U+59c1, U+59c3-59c4, U+59c6, U+59c8, U+59ca, U+59cd, U+59d2, U+59d9-59da, U+59dd-59df, U+59e3-59e5, U+59e7-59e8, U+59ec, U+59ee-59ef, U+59f1-59f2, U+59f4, U+59f6-59f8, U+5a00, U+5a03-5a04, U+5a09, U+5a0c-5a0e, U+5a11-5a13, U+5a17, U+5a1a-5a1c, U+5a1e-5a1f, U+5a23-5a25, U+5a27-5a28, U+5a2a, U+5a2d, U+5a30, U+5a35-5a36, U+5a40-5a41, U+5a44-5a45, U+5a47-5a49, U+5a4c, U+5a50, U+5a55, U+5a5e, U+5a62-5a63, U+5a65, U+5a67, U+5a6a, U+5a6c-5a6d, U+5a77, U+5a7a-5a7b, U+5a7e, U+5a84, U+5a8b, U+5a90, U+5a93, U+5a96, U+5a99, U+5a9c, U+5a9e-5aa0, U+5aa2, U+5aa7, U+5aac, U+5ab1-5ab3, U+5ab5, U+5ab8, U+5aba-5abf, U+5ac2, U+5ac4, U+5ac6, U+5ac8, U+5acb, U+5acf-5ad0, U+5ad6-5ad7, U+5ada, U+5adc, U+5ae0-5ae1, U+5ae3, U+5ae5-5ae6, U+5ae9-5aea, U+5aee, U+5af0, U+5af5-5af6, U+5afa-5afb, U+5afd, U+5b00-5b01, U+5b08, U+5b0b, U+5b16-5b17, U+5b19, U+5b1b, U+5b1d, U+5b21, U+5b25, U+5b2a, U+5b2c-5b2d, U+5b30, U+5b32, U+5b34, U+5b36, U+5b38, U+5b3e, U+5b40-5b41, U+5b43, U+5b45, U+5b4b-5b4c, U+5b51-5b52, U+5b56, U+5b5a-5b5c, U+5b5e-5b5f, U+5b65, U+5b68-5b69, U+5b6e-5b71, U+5b73, U+5b75-5b76, U+5b7a, U+5b7c-5b84, U+5b86, U+5b8a-5b8b, U+5b8d-5b8e, U+5b90-5b91, U+5b93-5b94, U+5b96, U+5ba5-5ba6, U+5ba8-5ba9, U+5bac-5bad, U+5baf, U+5bb1-5bb2, U+5bb7-5bb8, U+5bba;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.44.woff2) format('woff2');
|
||||||
|
unicode-range: U+57b3, U+57b8, U+57bd, U+57c0, U+57c3, U+57c6-57c8, U+57cc, U+57cf, U+57d2-57d7, U+57dc-57de, U+57e0-57e1, U+57e3-57e4, U+57e6-57e7, U+57e9, U+57ed, U+57f0, U+57f4-57f6, U+57f8, U+57fb, U+57fd-57ff, U+5803-5804, U+5808-580d, U+5819, U+581b, U+581d-5821, U+5826-5827, U+582d, U+582f-5830, U+5832, U+5835, U+5839, U+583d, U+583f-5840, U+5849, U+584b-584d, U+584f-5852, U+5855, U+5858-5859, U+585f, U+5861-5862, U+5864, U+5867-5868, U+586d, U+5870, U+5872, U+5878-5879, U+587c, U+587f-5881, U+5885, U+5887-588d, U+588f-5890, U+5894, U+5896, U+5898, U+589d-589e, U+58a0-58a2, U+58a6, U+58a9-58ab, U+58ae, U+58b1-58b3, U+58b8-58bc, U+58be, U+58c2-58c5, U+58c8, U+58cd-58ce, U+58d0-58da, U+58dc-58e2, U+58e4-58e5, U+58e9, U+58ec, U+58ef, U+58f3-58f4, U+58f7, U+58f9, U+58fb-58fd, U+5902, U+5905-5906, U+590a-590d, U+5910, U+5912-5914, U+5918-5919, U+591b, U+591d, U+591f, U+5921, U+5923-5925, U+5928, U+592c-592d, U+592f-5930, U+5932-5933, U+5935-5936, U+5938-5939, U+593d-593f, U+5943, U+5946, U+594e, U+5950, U+5952-5953, U+5955, U+5957-595b, U+595d-5961, U+5963, U+5967, U+5969, U+596b-596d, U+596f, U+5972, U+5975-5976, U+5978-5979, U+597b-597c, U+5981;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.45.woff2) format('woff2');
|
||||||
|
unicode-range: U+5616-5617, U+5619, U+561b, U+5620, U+5628, U+562c, U+562f-5639, U+563b-563d, U+563f-5641, U+5643-5644, U+5646-5647, U+5649, U+564b, U+564d-5650, U+5653-5654, U+565e, U+5660-5664, U+5666, U+5669-566d, U+566f, U+5671-5672, U+5675-5676, U+5678, U+567a, U+5680, U+5684-5688, U+568a-568c, U+568f, U+5694-5695, U+5699-569a, U+569d-56a0, U+56a5-56a9, U+56ab-56ae, U+56b1-56b4, U+56b6-56b7, U+56bc, U+56be, U+56c0, U+56c2-56c3, U+56c5, U+56c8-56d1, U+56d3, U+56d7-56d9, U+56dc-56dd, U+56df, U+56e1, U+56e4-56e8, U+56eb, U+56ed-56ee, U+56f1, U+56f6-56f7, U+56f9, U+56ff-5704, U+5707-570a, U+570c-570d, U+5711, U+5713, U+5715-5716, U+5718, U+571a-571d, U+5720-5726, U+5729-572a, U+572c, U+572e-572f, U+5733-5734, U+5737-5738, U+573b, U+573d-573f, U+5745-5746, U+574c-574f, U+5751-5752, U+5759, U+575f, U+5761-5762, U+5764-5765, U+5767-5769, U+576b, U+576d-5771, U+5773-5775, U+5777, U+5779-577c, U+577e-577f, U+5781, U+5783, U+5788-5789, U+578c, U+5793-5795, U+5797, U+5799-579a, U+579c-57a1, U+57a4, U+57a7-57aa, U+57ac, U+57ae, U+57b0;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.46.woff2) format('woff2');
|
||||||
|
unicode-range: U+543f-5440, U+5443-5444, U+5447, U+544c-544f, U+5455, U+545e, U+5462, U+5464, U+5466-5467, U+5469, U+546b-546e, U+5470-5471, U+5474-5477, U+547b, U+547f-5481, U+5483-5486, U+5488-548b, U+548d-5492, U+5495-5496, U+549c, U+549f-54a2, U+54a4, U+54a6-54af, U+54b1, U+54b7-54bc, U+54be-54bf, U+54c2-54c4, U+54c6-54c8, U+54ca, U+54cd-54ce, U+54d8, U+54e0, U+54e2, U+54e5-54e6, U+54e8-54ea, U+54ec-54ef, U+54f1, U+54f3, U+54f6, U+54fc-5501, U+5505, U+5508-5509, U+550c-550f, U+5514-5516, U+5527, U+552a-552b, U+552e, U+5532-5533, U+5535-5536, U+5538-5539, U+553b-553d, U+5540-5541, U+5544-5545, U+5547, U+5549-554a, U+554c-554d, U+5550-5551, U+5556-5558, U+555a-555e, U+5560-5561, U+5563-5564, U+5566, U+557b-5583, U+5586-5588, U+558a, U+558e-558f, U+5591-5594, U+5597, U+5599, U+559e-559f, U+55a3-55a4, U+55a8-55a9, U+55ac-55ae, U+55b2, U+55bf, U+55c1, U+55c3-55c4, U+55c6-55c7, U+55c9, U+55cb-55cc, U+55ce, U+55d1-55d4, U+55d7-55d8, U+55da-55db, U+55dd-55df, U+55e2, U+55e4, U+55e9, U+55ec, U+55ee, U+55f1, U+55f6-55f9, U+55fd-55ff, U+5605, U+5607-5608, U+560a, U+560d-5612;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.47.woff2) format('woff2');
|
||||||
|
unicode-range: U+528d, U+5291-5298, U+529a, U+529c, U+52a4-52a7, U+52ab-52ad, U+52af-52b0, U+52b5-52b8, U+52ba-52be, U+52c0-52c1, U+52c4-52c6, U+52c8, U+52ca, U+52cc-52cd, U+52cf-52d2, U+52d4, U+52d6-52d7, U+52db-52dc, U+52de, U+52e0-52e1, U+52e3, U+52e5-52e6, U+52e8-52ea, U+52ec, U+52f0-52f1, U+52f3-52fb, U+5300-5301, U+5303, U+5306-5308, U+530a-530d, U+530f-5311, U+5313, U+5315, U+5318-531f, U+5321, U+5323-5325, U+5327-532d, U+532f-5333, U+5335, U+5338, U+533c-533e, U+5340, U+5342, U+5345-5346, U+5349, U+534b-534c, U+5359, U+535b, U+535e, U+5361, U+5363-5367, U+5369, U+536c-536e, U+5372, U+5377, U+5379-537b, U+537d-537f, U+5382-5383, U+5387-5389, U+538e, U+5393-5394, U+5396, U+5398-5399, U+539d, U+53a0-53a1, U+53a4-53a6, U+53a9-53ab, U+53ad-53b0, U+53b2, U+53b4-53b8, U+53ba, U+53bd, U+53c0-53c1, U+53c3-53c5, U+53cf, U+53d2-53d3, U+53d5, U+53da-53db, U+53dd-53e0, U+53e2, U+53e6-53e8, U+53ed-53ee, U+53f4-53f5, U+53fa, U+5401-5403, U+540b, U+540f, U+5412-5413, U+541a, U+541d-541e, U+5421, U+5424, U+5427-542a, U+542c-542f, U+5431, U+5433-5436, U+543c-543d;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.48.woff2) format('woff2');
|
||||||
|
unicode-range: U+50dd-50df, U+50e1-50e6, U+50e8-50e9, U+50ed-50f6, U+50f9-50fb, U+50fe, U+5101-5103, U+5106-5109, U+510b-510e, U+5110, U+5112, U+5114-511e, U+5121, U+5123, U+5127-5128, U+512c-512d, U+512f, U+5131, U+5133-5135, U+5137-513c, U+513f-5142, U+5147, U+514a, U+514c, U+514f, U+5152-5155, U+5157-5158, U+515f-5160, U+5162, U+5164, U+5166-5167, U+5169-516a, U+516e, U+5173-5174, U+5179, U+517b, U+517e, U+5180, U+5182-5184, U+5189, U+518b-518c, U+518e-5191, U+5193, U+5195-5196, U+5198, U+519d, U+51a1-51a4, U+51a6, U+51a9-51ab, U+51ad, U+51b0-51b3, U+51b5, U+51b8, U+51ba, U+51bc-51bf, U+51c2-51c3, U+51c5, U+51c8-51cb, U+51cf, U+51d1-51d6, U+51d8, U+51de-51e0, U+51e2, U+51e5, U+51e7, U+51e9, U+51ec-51ee, U+51f2-51f5, U+51f7, U+51fe, U+5201-5202, U+5204-5205, U+520b, U+520e, U+5212-5216, U+5218, U+5222, U+5226-5228, U+522a-522b, U+522e, U+5231-5233, U+5235, U+523c, U+5244-5245, U+5249, U+524b-524c, U+524f, U+5254-5255, U+5257-5258, U+525a, U+525c-5261, U+5266, U+5269, U+526c, U+526e, U+5271, U+5273-5274, U+5277-5279, U+527d, U+527f-5280, U+5282-5285, U+5288-528a, U+528c;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.49.woff2) format('woff2');
|
||||||
|
unicode-range: U+4f57-4f58, U+4f5a-4f5b, U+4f5d-4f5f, U+4f63-4f64, U+4f69-4f6a, U+4f6c, U+4f6e-4f71, U+4f76-4f7e, U+4f81-4f85, U+4f88-4f8a, U+4f8c, U+4f8e-4f90, U+4f92-4f94, U+4f96-4f9a, U+4f9e-4fa0, U+4fab, U+4fad, U+4faf, U+4fb2, U+4fb7, U+4fb9, U+4fbb-4fbe, U+4fc0-4fc1, U+4fc4-4fc6, U+4fc8-4fc9, U+4fcb-4fd4, U+4fd8, U+4fda-4fdc, U+4fdf-4fe0, U+4fe2, U+4fe4-4fe6, U+4fef-4ff2, U+4ff6, U+4ffc-5002, U+5004-5007, U+500a, U+500c, U+500e-5011, U+5013-5014, U+5016-5018, U+501a-501e, U+5021-5023, U+5025-502a, U+502c-502e, U+5030, U+5032-5033, U+5035, U+5039, U+503b, U+5040-5043, U+5045-5048, U+504a, U+504c, U+504e, U+5050-5053, U+5055-5057, U+5059-505a, U+505f-5060, U+5062-5063, U+5066-5067, U+506a, U+506c-506d, U+5070-5072, U+5077-5078, U+5080-5081, U+5083-5086, U+5088, U+508a, U+508e-5090, U+5092-5096, U+509a-509c, U+509e-50a3, U+50aa, U+50ad, U+50af-50b4, U+50b9-50bb, U+50bd, U+50c0, U+50c2-50c4, U+50c7, U+50c9-50ca, U+50cc, U+50ce, U+50d0-50d1, U+50d3-50d4, U+50d6, U+50d8-50d9, U+50dc;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.50.woff2) format('woff2');
|
||||||
|
unicode-range: U+4093, U+4103, U+4105, U+4148, U+414f, U+4163, U+41b4, U+41bf, U+41e6, U+41ee, U+41f3, U+4207, U+420e, U+4264, U+4293, U+42c6, U+42d6, U+42dd, U+4302, U+432b, U+4343, U+43ee, U+43f0, U+4408, U+440c, U+4417, U+441c, U+4422, U+4453, U+445b, U+4476, U+447a, U+4491, U+44b3, U+44be, U+44d4, U+4508, U+450d, U+4525, U+4543, U+457a, U+459d, U+45b8, U+45be, U+45e5, U+45ea, U+460f-4610, U+4641, U+4665, U+46a1, U+46ae-46af, U+470c, U+471f, U+4764, U+47e6, U+47fd, U+4816, U+481e, U+4844, U+484e, U+48b5, U+49b0, U+49e7, U+49fa, U+4a04, U+4a29, U+4abc, U+4b38, U+4b3b, U+4b7e, U+4bc2, U+4bca, U+4bd2, U+4be8, U+4c17, U+4c20, U+4c38, U+4cc4, U+4cd1, U+4ce1, U+4d07, U+4d77, U+4e02, U+4e04-4e05, U+4e0c, U+4e0f-4e12, U+4e15, U+4e17, U+4e19, U+4e1e-4e1f, U+4e23-4e24, U+4e28-4e2c, U+4e2e-4e31, U+4e35-4e37, U+4e3f-4e42, U+4e44, U+4e47-4e48, U+4e4d-4e4e, U+4e51, U+4e55-4e56, U+4e58, U+4e5a-4e5c, U+4e62-4e63, U+4e68-4e69, U+4e74-4e75, U+4e79, U+4e7f, U+4e82, U+4e85, U+4e8a, U+4e8d-4e8e, U+4e96-4e99, U+4e9d-4ea0, U+4ea2, U+4ea5-4ea6, U+4ea8, U+4eaf-4eb0, U+4eb3, U+4eb6, U+4eb9, U+4ebb-4ebc, U+4ec2-4ec4, U+4ec6-4ec8, U+4ecd, U+4ed0, U+4ed7, U+4eda-4edb, U+4edd-4ee2, U+4ee8, U+4eeb, U+4eed, U+4eef, U+4ef1, U+4ef3, U+4ef5, U+4ef7, U+4efc-4f00, U+4f02-4f03, U+4f08-4f09, U+4f0b-4f0d, U+4f12, U+4f15-4f17, U+4f19, U+4f1c, U+4f2b, U+4f2e, U+4f30-4f31, U+4f33, U+4f35-4f37, U+4f39, U+4f3b, U+4f3e, U+4f40, U+4f42-4f43, U+4f48-4f49, U+4f4b-4f4c, U+4f52, U+4f54, U+4f56;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.51.woff2) format('woff2');
|
||||||
|
unicode-range: U+3395-339b, U+339e-33a0, U+33a2-33ff, U+3402, U+3405-3406, U+3427, U+342c, U+342e, U+3468, U+346a, U+3488, U+3492, U+34b5, U+34bc, U+34c1, U+34c7, U+34db, U+351f, U+353e, U+355d-355e, U+3563, U+356e, U+35a6, U+35a8, U+35c5, U+35da, U+35de, U+35f4, U+3605, U+3614, U+364a, U+3691, U+3696, U+3699, U+36cf, U+3761-3762, U+376b-376c, U+3775, U+378d, U+37c1, U+37e2, U+37e8, U+37f4, U+37fd, U+3800, U+382f, U+3836, U+3840, U+385c, U+3861, U+38a1, U+38ad, U+38fa, U+3917, U+391a, U+396f, U+39a4, U+39b8, U+3a5c, U+3a6e, U+3a73, U+3a85, U+3ac4, U+3acb, U+3ad6-3ad7, U+3aea, U+3af3, U+3b0e, U+3b1a, U+3b1c, U+3b22, U+3b35, U+3b6d, U+3b77, U+3b87-3b88, U+3b8d, U+3ba4, U+3bb6, U+3bc3, U+3bcd, U+3bf0, U+3bf3, U+3c0f, U+3c26, U+3cc3, U+3cd2, U+3d11, U+3d1e, U+3d31, U+3d4e, U+3d64, U+3d9a, U+3dc0, U+3dcc, U+3dd4, U+3e05, U+3e3f-3e40, U+3e60, U+3e66, U+3e68, U+3e83, U+3e8a, U+3e94, U+3eda, U+3f57, U+3f72, U+3f75, U+3f77, U+3fae, U+3fb1, U+3fc9, U+3fd7, U+3fdc, U+4039, U+4058;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.52.woff2) format('woff2');
|
||||||
|
unicode-range: U+32b5-332b, U+332d-3394;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.53.woff2) format('woff2');
|
||||||
|
unicode-range: U+31c8-31e3, U+31f0-321e, U+3220-3230, U+3232-32b4;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.54.woff2) format('woff2');
|
||||||
|
unicode-range: U+3028-303f, U+3094-3096, U+309f-30a0, U+30ee, U+30f7-30fa, U+30ff, U+3105-312f, U+3131-3163, U+3165-318e, U+3190-31bb, U+31c0-31c7;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.55.woff2) format('woff2');
|
||||||
|
unicode-range: U+2f14-2fd5, U+2ff0-2ffb, U+3004, U+3013, U+3016-301b, U+301e, U+3020-3027;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.56.woff2) format('woff2');
|
||||||
|
unicode-range: U+25e4-25e6, U+2601-2603, U+2609, U+260e-260f, U+2616-2617, U+261c-261f, U+262f, U+2641, U+2660, U+2662-2664, U+2666-2668, U+266d-266e, U+2672-267d, U+26bd-26be, U+2702, U+271a, U+273d, U+2740, U+2756, U+2776-2793, U+27a1, U+2934-2935, U+29bf, U+29fa-29fb, U+2b05-2b07, U+2b1a, U+2b95, U+2e3a-2e3b, U+2e80-2e99, U+2e9b-2ef3, U+2f00-2f13;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.57.woff2) format('woff2');
|
||||||
|
unicode-range: U+24d1-24ff, U+2503-2513, U+2515-2516, U+2518-251b, U+251d-2522, U+2524-259f, U+25a2-25ab, U+25b1, U+25b7, U+25c0-25c1, U+25c9-25ca, U+25cc, U+25d0-25d3, U+25e2-25e3;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.58.woff2) format('woff2');
|
||||||
|
unicode-range: U+2105, U+2109-210a, U+210f, U+2116, U+2121, U+2126-2127, U+212b, U+212e, U+2135, U+213b, U+2194-2199, U+21b8-21b9, U+21c4-21c6, U+21cb-21cc, U+21d0, U+21e6-21e9, U+21f5, U+2202-2203, U+2205-2206, U+2208-220b, U+220f, U+2211, U+2213, U+2215, U+221a, U+221d, U+2220, U+2223, U+2225-2226, U+2228, U+222a-222e, U+2234-2237, U+223d, U+2243, U+2245, U+2248, U+224c, U+2260, U+2262, U+2264-2265, U+226e-226f, U+2272-2273, U+2276-2277, U+2283-2287, U+228a-228b, U+2295-2299, U+22a0, U+22a5, U+22bf, U+22da-22db, U+22ef, U+2305-2307, U+2318, U+2329-232a, U+23b0-23b1, U+23be-23cc, U+23ce, U+23da-23db, U+2423, U+2469-24d0;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.59.woff2) format('woff2');
|
||||||
|
unicode-range: U+a1-a4, U+a6-a7, U+aa, U+ac-ad, U+b5-b6, U+b8-ba, U+bc-c8, U+ca-cc, U+ce-d5, U+d9-db, U+dd-df, U+e6, U+ee, U+f0, U+f5, U+f7, U+f9, U+fb, U+fe-102, U+110-113, U+11a-11b, U+128-12b, U+143-144, U+147-148, U+14c, U+14e-14f, U+152-153, U+168-16d, U+192, U+1a0-1a1, U+1af, U+1cd-1dc, U+1f8-1f9, U+251, U+261, U+2bb, U+2c7, U+2c9, U+2ea-2eb, U+304, U+307, U+30c, U+1e3e-1e3f, U+1ea0-1ebe, U+1ec0-1ec6, U+1ec8-1ef9, U+2011-2012, U+2016, U+2018-201a, U+201e, U+2021, U+2030, U+2033, U+2035, U+2042, U+2047, U+2051, U+2074, U+20a9, U+20ab-20ac, U+20dd-20de, U+2100;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.60.woff2) format('woff2');
|
||||||
|
unicode-range: U+2227, U+26a0, U+2713, U+301f, U+4ff8, U+5239, U+526a, U+54fa, U+5740, U+5937, U+5993, U+59fb, U+5a3c, U+5c41, U+6028, U+626e, U+646f, U+647a, U+64b0, U+64e2, U+65a7, U+66fe, U+6727, U+6955, U+6bef, U+6f23, U+724c, U+767c, U+7a83, U+7ac4, U+7b67, U+8000, U+8471, U+8513, U+8599, U+86db, U+8718, U+87f2, U+88f3, U+8ad2, U+8e2a, U+8fa3, U+95a5, U+9798, U+9910, U+9957, U+9bab, U+9c3b, U+9daf, U+ff95;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.61.woff2) format('woff2');
|
||||||
|
unicode-range: U+a8, U+2032, U+2261, U+2282, U+3090, U+30f1, U+339c, U+535c, U+53d9, U+56a2, U+56c1, U+5806, U+589f, U+59d0, U+5a7f, U+60e0, U+639f, U+65af, U+68fa, U+69ae, U+6d1b, U+6ef2, U+71fb, U+725d, U+7262, U+75bc, U+7768, U+7940, U+79bf, U+7bed, U+7d68, U+7dfb, U+814b, U+8207, U+83e9, U+8494, U+8526, U+8568, U+85ea, U+86d9, U+87ba, U+8861, U+887f, U+8fe6, U+9059, U+9061, U+916a, U+976d, U+97ad, U+9ece;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.62.woff2) format('woff2');
|
||||||
|
unicode-range: U+2d9, U+21d4, U+301d, U+515c, U+52fe, U+5420, U+5750, U+5766, U+5954, U+5b95, U+5f8a, U+5f98, U+620c, U+621f, U+641c, U+66d9, U+676d, U+6775, U+67f5, U+694a, U+6a02, U+6a3a, U+6a80, U+6c23, U+6c72, U+6dcb, U+6faa, U+707c, U+71c8, U+7422, U+74e2, U+7791, U+7825, U+7a14, U+7a1c, U+7c95, U+7fc1, U+82a5, U+82db, U+8304, U+853d, U+8cd3, U+8de8, U+8f0c, U+8f3f, U+9091, U+91c7, U+929a, U+98af, U+9913;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.63.woff2) format('woff2');
|
||||||
|
unicode-range: U+2ca-2cb, U+2229, U+2468, U+2669, U+266f, U+273f, U+4ec0, U+4f60, U+4fb6, U+5347, U+540e, U+543b, U+5b0c, U+5d4c, U+5f14, U+5f9e, U+6155, U+62d0, U+6602, U+6666, U+66f3, U+67a2, U+67ca, U+69cc, U+6d29, U+6d9b, U+6e3e, U+6f81, U+7109, U+73c0, U+73c2, U+7425, U+7435-7436, U+7525, U+7554, U+785d, U+786b, U+7ae3, U+7b94, U+7d18, U+81bf, U+8511, U+8549, U+9075, U+9640, U+98e2, U+9e9f, U+ff96;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.64.woff2) format('woff2');
|
||||||
|
unicode-range: U+2467, U+4ece, U+4ed4, U+4f91, U+4fae, U+534d, U+53c9, U+54b3, U+586b, U+5944, U+5b78, U+5df7, U+5f77, U+6101, U+6167-6168, U+61a4, U+62d9, U+698a, U+699b, U+6a59, U+6cc4, U+6e07, U+7099, U+75d2, U+77ad, U+7953, U+7984, U+7a92, U+7baa, U+7dbb, U+817f, U+82ad, U+85e9, U+868a, U+8caa, U+8f44, U+9017, U+907c, U+908a, U+92f3, U+936e, U+9435, U+978d, U+9838, U+9a28, U+9b41, U+9ba8, U+9c57, U+9eb9;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.65.woff2) format('woff2');
|
||||||
|
unicode-range: U+b1, U+309b, U+4e5e, U+51f1, U+5506, U+55c5, U+58cc, U+59d1, U+5c51, U+5ef7, U+6284, U+62d7, U+6689, U+673d, U+6a2b, U+6a8e, U+6a9c, U+6d63, U+6dd1, U+70b8, U+7235, U+72db, U+72f8, U+7560, U+7c9b, U+7ce7, U+7e1e, U+80af, U+82eb, U+8463, U+8499, U+85dd, U+86ee, U+8a60, U+8a6e, U+8c79, U+8e87, U+8e8a, U+8f5f, U+9010, U+918d, U+9190, U+965b, U+97fb, U+9ab8, U+9bad, U+9d3b, U+9d5c, U+9dfa, U+9e93;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.66.woff2) format('woff2');
|
||||||
|
unicode-range: U+2020, U+3003, U+3231, U+4e9b, U+4f3d, U+4f47, U+51b6, U+51dc, U+53e1, U+5bc5, U+602f, U+60bc, U+61c9, U+633d, U+637b, U+6492, U+65fa, U+660f, U+66f0, U+6703, U+681e, U+6876, U+6893, U+6912, U+698e, U+6c7d, U+714c, U+7169, U+71d5, U+725f, U+72d7, U+745b, U+74dc, U+75e2, U+7891, U+7897, U+7dcb, U+810a, U+8218, U+8339, U+840e, U+852d, U+8823, U+8a0a, U+9089, U+919c, U+971c, U+9ad9, U+ff4a, U+ff5a;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.67.woff2) format('woff2');
|
||||||
|
unicode-range: U+2466, U+2600, U+4eab, U+4fe3, U+4ff5, U+51a5, U+51f0, U+536f, U+53d4, U+53f1, U+54a5, U+559d, U+55e3, U+58fa, U+5962, U+59ea, U+5c16, U+5cef, U+5d16, U+5f10, U+5fd6, U+6190, U+6216, U+634f, U+63bb, U+66d6, U+6756, U+6bc5, U+6e26, U+727d, U+731f, U+76f2, U+7729, U+7a7f, U+7aff, U+7c9f, U+818f, U+8236, U+82b9, U+8338, U+85aa, U+88b4, U+8b33, U+904d, U+93a7, U+96cc, U+96eb, U+9aed, U+9b8e, U+fa11;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.68.woff2) format('woff2');
|
||||||
|
unicode-range: U+251c, U+2523, U+4e14, U+545f, U+54bd, U+553e, U+55dc, U+56da, U+589c, U+5b55, U+5bb5, U+5ce1, U+5df4, U+5eb6, U+5ec9, U+6191, U+62f7, U+6357, U+64a5, U+6591, U+65bc, U+6897, U+6e1a, U+7063, U+711a, U+721b, U+722c, U+75b9, U+75d5, U+75fa, U+7766, U+7aae, U+7b48, U+7b8b, U+7d21, U+7e55, U+7f75, U+842c, U+8910, U+8a63, U+8b39, U+8b5a, U+8cdc, U+8d74, U+907d, U+91e7, U+9306, U+96bc, U+98f4, U+9ac4;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.69.woff2) format('woff2');
|
||||||
|
unicode-range: U+2003, U+2312, U+266c, U+4f86, U+51ea, U+5243, U+5256, U+541f, U+5841, U+59dc, U+5df3, U+601c, U+60e7, U+632b, U+638c, U+64ad, U+6881, U+697c, U+69cd, U+6c50, U+6d2a, U+6fc1, U+7027, U+7058, U+70f9, U+714e, U+7345, U+751a, U+760d, U+764c, U+77db, U+7d79, U+7e8f, U+80ce, U+814e, U+81fc, U+8247, U+8278, U+85a9, U+8a03, U+90ed, U+9784, U+9801, U+984e, U+99b3, U+9bc9, U+9bdb, U+9be8, U+9e78, U+ff6b;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.70.woff2) format('woff2');
|
||||||
|
unicode-range: U+266b, U+3006, U+5176, U+5197, U+51a8, U+51c6, U+52f2, U+5614, U+5875, U+5a2f, U+5b54, U+5ce0, U+5dba, U+5deb, U+5e63, U+5f59, U+5fcc, U+6068, U+6367, U+68b6, U+6a0b, U+6b64, U+6e15, U+6eba, U+7272, U+72a0, U+7947, U+7985, U+79e6, U+79e9, U+7a3d, U+7a9f, U+7aaf, U+7b95, U+7f60, U+7f9e, U+7fe0, U+8098, U+80ba, U+8106, U+82d4, U+831c, U+87f9, U+8a1f, U+8acf, U+90c1, U+920d, U+9756, U+fe43, U+ff94;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.71.woff2) format('woff2');
|
||||||
|
unicode-range: U+af, U+2465, U+2517, U+33a1, U+4f10, U+50c5, U+51b4, U+5384, U+5606, U+5bb0, U+5cac, U+5ee3, U+618e, U+61f2, U+62c9, U+66ab, U+66f9, U+6816, U+6960, U+6b3e, U+6f20, U+7078, U+72d0, U+73ed, U+7ad9, U+7b1b, U+7be4, U+7d62, U+7f51, U+80b4, U+80f4, U+8154, U+85fb, U+865c, U+8702, U+895f, U+8aed, U+8b90, U+8ced, U+8fbf, U+91d8, U+9418, U+9583, U+9591, U+9813, U+982c, U+9bd6, U+ff46, U+ff7f, U+ff88;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.72.woff2) format('woff2');
|
||||||
|
unicode-range: U+4e91, U+508d, U+50e7, U+514e, U+51f6, U+5446, U+5504, U+584a, U+59a8, U+59d3, U+5a46, U+5ac9, U+6020, U+60a6, U+6148, U+621a, U+6234, U+64c1, U+6523, U+675c, U+67d1, U+6953, U+6ccc, U+6df5, U+6e13, U+6f06, U+723a, U+7325, U+74e6, U+758e, U+75ab, U+75d9, U+7a40, U+8096, U+82fa, U+8587, U+8594, U+8a6b, U+8ab9, U+8b17, U+8b83, U+937c, U+963b, U+9673, U+96db, U+9ce9, U+9f4b, U+ff67, U+ff82, U+ff93;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.73.woff2) format('woff2');
|
||||||
|
unicode-range: U+221e, U+2514, U+51f9, U+5270, U+5449, U+5824, U+59a5, U+5a29, U+5d07, U+5e16, U+60e3, U+614c, U+6276, U+643e, U+64ab, U+6562, U+6681, U+670b, U+6734, U+67af, U+6a3d, U+6b05, U+6dc0, U+6e4a, U+7259, U+732a, U+7409, U+78a7, U+7a6b, U+8015, U+809b, U+817a, U+830e, U+837b, U+85ab, U+8a23, U+8a93, U+8b00, U+8b19, U+8b21, U+8cbf, U+8fb0, U+901d, U+91b8, U+9320, U+932c, U+9688, U+96f6, U+9df2, U+ff6a;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.74.woff2) format('woff2');
|
||||||
|
unicode-range: U+2002, U+2025, U+4f8d, U+51e1, U+51f8, U+5507, U+5598, U+58f1, U+5983, U+59ac, U+5c3c, U+5de7, U+5e7d, U+5eca, U+5f61, U+606d, U+60f9, U+636e, U+64ec, U+67da, U+67ff, U+6813, U+68f2, U+693f, U+6b6a, U+6bbb, U+6ef4, U+7092, U+717d, U+7261, U+73c8, U+7432, U+7483, U+76fe, U+7709, U+78d0, U+81a3, U+81b3, U+82af, U+8305, U+8309, U+8870, U+88fe, U+8cd1, U+8d66, U+906e, U+971e, U+9812, U+ff79, U+ff90;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.75.woff2) format('woff2');
|
||||||
|
unicode-range: U+2464, U+2501, U+2640, U+2642, U+339d, U+4f0e, U+5091, U+50b5, U+5132, U+51cc, U+558b, U+55aa, U+585e, U+5bee, U+5dfe, U+60b6, U+62b9, U+6349, U+6566, U+6590, U+6842, U+689d, U+6a58, U+6c70, U+6ff1, U+7815, U+7881, U+7aaa, U+7bc7, U+7def, U+7fa8, U+8017, U+8036, U+8061, U+821f, U+8429, U+8ce0, U+8e74, U+9019, U+90ca, U+9162, U+932f, U+93ae, U+9644, U+990c, U+9cf3, U+ff56, U+ff6e, U+ff7e, U+ff85;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.76.woff2) format('woff2');
|
||||||
|
unicode-range: U+2266-2267, U+4f2f, U+5208, U+5451, U+546a, U+5589, U+576a, U+5815, U+5a9a, U+5b9b, U+5c3a, U+5efb, U+5faa, U+6109, U+6643, U+6652, U+695a, U+69fd, U+6b86, U+6bb4, U+6daf, U+7089, U+70cf, U+7a00, U+7a4f, U+7b39, U+7d33, U+80e1, U+828b, U+82a6, U+86cd, U+8c8c, U+8cca, U+8df3, U+9077, U+9175, U+91dc, U+925b, U+9262, U+9271, U+92ed, U+9855, U+9905, U+9d28, U+ff3f, U+ff58, U+ff68, U+ff6d, U+ff9c;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.77.woff2) format('woff2');
|
||||||
|
unicode-range: U+2207, U+25ef, U+309c, U+4e4f, U+5146, U+51dd, U+5351, U+540a, U+5629, U+5eb5, U+5f04, U+5f13, U+60dc, U+6212, U+63b4, U+642c, U+6627, U+66a6, U+66c7, U+66fd, U+674e, U+6b96, U+6c4e, U+6df3, U+6e67, U+6f84, U+72fc, U+733f, U+7c97, U+7db1, U+7e4d, U+816b, U+82d1, U+84cb, U+854e, U+8607, U+86c7, U+871c, U+8776, U+8a89, U+8fc4, U+91a4, U+9285, U+9685, U+9903, U+9b31, U+9f13, U+ff42, U+ff74, U+ff91;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.78.woff2) format('woff2');
|
||||||
|
unicode-range: U+4e32, U+51db, U+53a8, U+53ea, U+5609, U+5674, U+5a92, U+5e7e, U+6115, U+611a, U+62cc, U+62ed, U+63c9, U+64b9, U+64e6, U+65cb, U+6606, U+6731, U+683d, U+6afb, U+7460, U+771e, U+78ef, U+7b26, U+7b51, U+7cde, U+7d10, U+7d2f, U+7d46, U+80de, U+819c, U+84b2, U+85cd, U+865a, U+8ecc, U+9022, U+90b8, U+9192, U+9675, U+96b7, U+99ff, U+ff44, U+ff55, U+ff6c, U+ff73, U+ff75, U+ff86, U+ff8d, U+ff92, U+ffe3;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.79.woff2) format('woff2');
|
||||||
|
unicode-range: U+25b3, U+30f5, U+4eae, U+4f46, U+4f51, U+5203, U+52ff, U+55a7, U+564c, U+565b, U+57f9, U+5805, U+5b64, U+5e06, U+5f70, U+5f90, U+60e8, U+6182, U+62f3, U+62fe, U+63aa, U+64a4, U+65d7, U+673a, U+6851, U+68cb, U+68df, U+6d1e, U+6e58, U+6e9d, U+77b3, U+7832, U+7c3f, U+7db4, U+7f70, U+80aa, U+80c6, U+8105, U+819d, U+8276, U+8679, U+8986, U+8c9d, U+8fc5, U+916c, U+9665, U+9699, U+96c0, U+9a19, U+ff8b;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.80.woff2) format('woff2');
|
||||||
|
unicode-range: U+2463, U+25a1, U+4ef0, U+5076, U+5098, U+51fd, U+5302, U+5448, U+54c9, U+570b, U+583a, U+5893, U+58a8, U+58ee, U+5949, U+5bdb, U+5f26, U+5f81, U+6052, U+6170, U+61c7, U+631f, U+635c, U+664b, U+69fb, U+6f01, U+7070, U+722a, U+745e, U+755c, U+76c6, U+78c1, U+79e4, U+7bb8, U+7d0b, U+81a8, U+82d7, U+8b5c, U+8f14, U+8fb1, U+8fbb, U+9283, U+9298, U+9a30, U+ff03, U+ff50, U+ff59, U+ff7b, U+ff8e-ff8f;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.81.woff2) format('woff2');
|
||||||
|
unicode-range: U+2010, U+2502, U+25b6, U+4f3a, U+514b, U+5265, U+52c3, U+5339, U+53ec, U+54c0, U+55b0, U+5854, U+5b8f, U+5cb3, U+5e84, U+60da, U+6247, U+6249, U+628a, U+62cd, U+65ac, U+6838, U+690e, U+6cf0, U+6f02, U+6f2c, U+6f70, U+708a, U+7434, U+75be, U+77ef, U+7c60, U+7c98, U+7d1b, U+7e2b, U+80a5, U+81e3, U+820c, U+8210, U+8475, U+862d, U+8650, U+8997, U+906d, U+91c8, U+9700, U+9727, U+9df9, U+ff3a, U+ff9a;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.82.woff2) format('woff2');
|
||||||
|
unicode-range: U+2103, U+5049, U+52b1, U+5320, U+5553, U+572d, U+58c7, U+5b5d, U+5bc2, U+5de3, U+5e61, U+5f80, U+61a9, U+67d0, U+67f4, U+6c88, U+6ca1, U+6ce5, U+6d78, U+6e9c, U+6f54, U+731b, U+73b2, U+74a7, U+74f6, U+75e9, U+7b20, U+7c8b, U+7f72, U+809d, U+8108, U+82b3, U+82bd, U+84b8, U+84c4, U+88c2, U+8ae6, U+8ef8, U+902e, U+9065, U+9326, U+935b, U+938c, U+9676, U+9694, U+96f7, U+9ed9, U+ff48, U+ff4c, U+ff81;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.83.woff2) format('woff2');
|
||||||
|
unicode-range: U+2500, U+3008-3009, U+4ead, U+4f0f, U+4fca, U+53eb, U+543e, U+57a2, U+5cf0, U+5e8f, U+5fe0, U+61b2, U+62d8, U+6442, U+64b2, U+6589, U+659c, U+67f1, U+68c4, U+6cb8, U+6d12, U+6de1, U+6fe1, U+70c8, U+723d, U+73e0, U+7656, U+773a, U+7948, U+7b87, U+7c92, U+7d3a, U+7e1b, U+7e4a, U+819a, U+8358, U+83c5, U+84bc, U+864e, U+8912, U+8c9e, U+8d05, U+92fc, U+9396, U+98fd, U+99d2, U+ff64, U+ff7a, U+ff83;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.84.woff2) format('woff2');
|
||||||
|
unicode-range: U+3014-3015, U+4e3c, U+5036, U+5075, U+533f, U+53e9, U+5531, U+5642, U+5984, U+59e6, U+5a01, U+5b6b, U+5c0b, U+5f25, U+6069, U+60a0, U+614e, U+62b5, U+62d2-62d3, U+6597, U+660c, U+674f, U+67cf, U+6841, U+6905, U+6cf3, U+6d32, U+6d69, U+6f64, U+716e, U+7761, U+7b52, U+7be0, U+7dbf, U+7de9, U+7f36, U+81d3, U+8302, U+8389, U+846c, U+84ee, U+8a69, U+9038, U+9d8f, U+ff47, U+ff4b, U+ff76, U+ff9b;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.85.woff2) format('woff2');
|
||||||
|
unicode-range: U+25c7, U+3007, U+504f, U+507d, U+51a0, U+52a3, U+5410, U+5510, U+559a, U+5782, U+582a, U+5c0a, U+5c3f, U+5c48, U+5f6b, U+6176, U+622f, U+6279, U+62bd, U+62dd, U+65ed, U+67b6, U+6817, U+6850, U+6d6a, U+6deb, U+6ea2, U+6edd, U+6f5c, U+72e9, U+73a9, U+7573, U+76bf, U+7950, U+7956, U+7f8a, U+7ffc, U+80a2, U+80c3, U+83ca, U+8a02, U+8a13, U+8df5, U+9375, U+983b, U+99b4, U+ff4e, U+ff71, U+ff89, U+ff97;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.86.woff2) format('woff2');
|
||||||
|
unicode-range: U+24, U+2022, U+2212, U+221f, U+2665, U+4ecf, U+5100, U+51cd, U+52d8, U+5378, U+53f6, U+574a, U+5982, U+5996, U+5c1a, U+5e1d, U+5f84, U+609f, U+61a7, U+61f8, U+6398, U+63ee, U+6676, U+6691, U+6eb6, U+7126, U+71e5, U+7687, U+7965, U+7d17, U+80a1, U+8107, U+8266, U+85a6, U+8987, U+8ca2, U+8cab, U+8e0a, U+9042, U+95c7, U+9810, U+9867, U+98fc, U+ff52-ff54, U+ff61, U+ff77, U+ff98-ff99;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.87.woff2) format('woff2');
|
||||||
|
unicode-range: U+b0, U+226a, U+2462, U+4e39, U+4fc3, U+4fd7, U+50be, U+50da, U+5200, U+5211, U+54f2, U+5618, U+596a, U+5b22, U+5bb4, U+5d50, U+60a3, U+63fa, U+658e, U+65e8, U+6669, U+6795, U+679d, U+67a0, U+6b3a, U+6e09, U+757f, U+7cd6, U+7dbe, U+7ffb, U+83cc, U+83f1, U+840c, U+845b, U+8846, U+8972, U+8a34, U+8a50, U+8a87, U+8edf, U+8ff0, U+90a6, U+9154, U+95a3, U+9663, U+9686, U+96c7, U+ff3c, U+ff7c, U+ff8a;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.88.woff2) format('woff2');
|
||||||
|
unicode-range: U+25bd, U+4e59, U+4ec1, U+4ff3, U+515a, U+518a, U+525b, U+5375, U+552f, U+57a3, U+5b9c, U+5c3d, U+5e3d, U+5e7b, U+5f0a, U+6094, U+6458, U+654f, U+67f3, U+6b8a, U+6bd2, U+6c37, U+6ce1, U+6e56, U+6e7f, U+6ed1, U+6ede, U+6f0f, U+70ad, U+7267, U+7363, U+786c, U+7a42, U+7db2, U+7f85, U+8178, U+829d, U+8896, U+8c5a, U+8cb0, U+8ce2, U+8ed2, U+9047, U+9177, U+970a, U+9ea6, U+ff1b, U+ff31, U+ff39, U+ff80;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.89.woff2) format('woff2');
|
||||||
|
unicode-range: U+a5, U+4e80, U+4f34, U+4f73, U+4f75, U+511f, U+5192, U+52aa, U+53c8, U+570f, U+57cb, U+596e, U+5d8b, U+5f66, U+5fd9, U+62db, U+62f6, U+6328, U+633f, U+63a7, U+6469, U+6bbf, U+6c41, U+6c57, U+6d44, U+6dbc, U+706f, U+72c2, U+72ed, U+7551, U+75f4, U+7949, U+7e26, U+7fd4, U+8150, U+8af8, U+8b0e, U+8b72, U+8ca7, U+934b, U+9a0e, U+9a12, U+9b42, U+ff41, U+ff43, U+ff45, U+ff49, U+ff4f, U+ff62-ff63;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.90.woff2) format('woff2');
|
||||||
|
unicode-range: U+4e18, U+4fb5, U+5104, U+52c7, U+5353, U+5374, U+53e5, U+587e, U+594f, U+5a20, U+5de1, U+5f18, U+5fcd, U+6291, U+62ab, U+6355, U+6392, U+63da, U+63e1, U+656c, U+6687, U+68b0-68b1, U+68d2, U+68da, U+6b27, U+6cbc, U+7159, U+7344, U+73cd, U+76df, U+790e, U+7cf8, U+8102, U+88c1, U+8aa0, U+8e0f, U+9178, U+92ad, U+9670, U+96c5, U+9cf4, U+9db4, U+ff3e, U+ff6f, U+ff72, U+ff78, U+ff7d, U+ff84, U+ff8c;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.91.woff2) format('woff2');
|
||||||
|
unicode-range: U+60, U+2200, U+226b, U+2461, U+517c, U+526f, U+5800, U+5b97, U+5bf8, U+5c01, U+5d29, U+5e4c, U+5e81, U+6065, U+61d0, U+667a, U+6696, U+6843, U+6c99, U+6d99, U+6ec5, U+6f22, U+6f6e, U+6fa4, U+6fef, U+71c3, U+72d9, U+7384, U+78e8, U+7a1a, U+7a32, U+7a3c, U+7adc, U+7ca7, U+7d2b, U+7dad, U+7e4b, U+80a9, U+8170, U+81ed, U+820e, U+8a17, U+8afe, U+90aa, U+914e, U+963f, U+99c4, U+9eba, U+9f3b, U+ff38;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.92.woff2) format('woff2');
|
||||||
|
unicode-range: U+2460, U+4e5f, U+4e7e, U+4ed9, U+501f, U+502b, U+5968, U+5974, U+5ac1, U+5b99, U+5ba3, U+5be7, U+5be9, U+5c64, U+5cb8, U+5ec3, U+5f1f, U+616e, U+6297, U+62e0, U+62ec, U+6368, U+642d, U+65e6, U+6717, U+676f, U+6b04, U+732e, U+7652, U+76ca, U+76d7, U+7802, U+7e70, U+7f6a, U+8133, U+81e8, U+866b, U+878d, U+88f8, U+8a5e, U+8cdb, U+8d08, U+907a, U+90e1, U+96f2, U+9f8d, U+ff35, U+ff37, U+ff40, U+ff9d;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.93.woff2) format('woff2');
|
||||||
|
unicode-range: U+21d2, U+25ce, U+300a-300b, U+4e89, U+4e9c, U+4ea1, U+5263, U+53cc, U+5426, U+5869, U+5947, U+598a, U+5999, U+5e55, U+5e72, U+5e79, U+5fae, U+5fb9, U+602a, U+6163, U+624d, U+6749, U+6c5a, U+6cbf, U+6d45, U+6dfb, U+6e7e, U+708e, U+725b, U+7763, U+79c0, U+7bc4, U+7c89, U+7e01, U+7e2e, U+8010, U+8033, U+8c6a, U+8cc3, U+8f1d, U+8f9b, U+8fb2, U+907f, U+90f7, U+9707, U+9818, U+9b3c, U+ff0a, U+ff4d;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.94.woff2) format('woff2');
|
||||||
|
unicode-range: U+2015, U+2190, U+4e43, U+5019, U+5247, U+52e7, U+5438, U+54b2, U+55ab, U+57f7, U+5bd2, U+5e8a, U+5ef6, U+6016, U+60b2, U+6162, U+6319, U+6551, U+6607, U+66b4, U+675f, U+67d4, U+6b20, U+6b53, U+6ce3, U+719f, U+75b2, U+770b, U+7720, U+77ac, U+79d2, U+7af9, U+7d05, U+7dca, U+8056, U+80f8, U+81f3, U+8352, U+885d, U+8a70, U+8aa4, U+8cbc, U+900f, U+9084, U+91e3, U+9451, U+96c4, U+99c6, U+9ad4, U+ff70;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.95.woff2) format('woff2');
|
||||||
|
unicode-range: U+2193, U+25b2, U+4e4b, U+516d, U+51c4, U+529f, U+52c9, U+5360, U+5442, U+5857, U+5915, U+59eb, U+5a9b, U+5c3b, U+6012, U+61b6, U+62b1, U+6311, U+6577, U+65e2, U+65ec, U+6613, U+6790, U+6cb9, U+7372, U+76ae, U+7d5e, U+7fcc, U+88ab, U+88d5, U+8caf, U+8ddd, U+8ecd, U+8f38, U+8f9e, U+8feb, U+9063, U+90f5, U+93e1, U+968a, U+968f, U+98fe, U+9ec4, U+ff1d, U+ff27, U+ff2a, U+ff36, U+ff3b, U+ff3d, U+ffe5;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.96.woff2) format('woff2');
|
||||||
|
unicode-range: U+4e03, U+4f38, U+50b7, U+5264, U+5348, U+5371, U+585a, U+58ca, U+5951, U+59b9, U+59d4, U+5b98, U+5f8b, U+6388, U+64cd, U+65e7, U+6803, U+6b6f, U+6d66, U+6e0b, U+6ecb, U+6fc3, U+72ac, U+773c, U+77e2, U+7968, U+7a74, U+7dba, U+7dd1, U+7e3e, U+808c, U+811a, U+8179, U+8239, U+8584, U+8a0e, U+8a72, U+8b66, U+8c46, U+8f29, U+90a3, U+9234, U+96f0, U+9769, U+9774, U+9aa8, U+ff26, U+ff28, U+ff9e-ff9f;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.97.woff2) format('woff2');
|
||||||
|
unicode-range: U+7e, U+b4, U+25c6, U+2661, U+4e92, U+4eee, U+4ffa, U+5144, U+5237, U+5287, U+52b4, U+58c1, U+5bff, U+5c04, U+5c06, U+5e95, U+5f31, U+5f93, U+63c3, U+640d, U+6557, U+6614, U+662f, U+67d3, U+690d, U+6bba, U+6e6f, U+72af, U+732b, U+7518, U+7ae0, U+7ae5, U+7af6, U+822a, U+89e6, U+8a3a, U+8a98, U+8cb8, U+8de1, U+8e8d, U+95d8, U+961c, U+96a3, U+96ea, U+9bae, U+ff20, U+ff22, U+ff29, U+ff2b-ff2c;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.98.woff2) format('woff2');
|
||||||
|
unicode-range: U+25cb, U+4e71, U+4f59, U+50d5, U+520a, U+5217, U+5230, U+523a-523b, U+541b, U+5439, U+5747, U+59c9, U+5bdf, U+5c31, U+5de8, U+5e7c, U+5f69, U+6050, U+60d1, U+63cf, U+663c, U+67c4, U+6885, U+6c38, U+6d6e, U+6db2, U+6df7, U+6e2c, U+6f5f, U+7532, U+76e3-76e4, U+7701, U+793c, U+79f0, U+7a93, U+7d00, U+7de0, U+7e54, U+8328, U+8840, U+969c, U+96e8, U+9811, U+9aea, U+9b5a, U+ff24, U+ff2e, U+ff57;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.99.woff2) format('woff2');
|
||||||
|
unicode-range: U+2191, U+505c, U+52e4, U+5305, U+535a, U+56e0, U+59bb, U+5acc, U+5b09, U+5b87, U+5c90, U+5df1, U+5e2d, U+5e33, U+5f3e, U+6298, U+6383, U+653b, U+6697, U+6804, U+6a39, U+6cca, U+6e90, U+6f2b, U+702c, U+7206, U+7236, U+7559, U+7565, U+7591, U+75c7, U+75db, U+7b4b, U+7bb1, U+7d99, U+7fbd, U+8131, U+885b, U+8b1d, U+8ff7, U+9003, U+9045, U+96a0, U+9732, U+990a, U+99d0, U+9e97, U+9f62, U+ff25, U+ff2d;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.100.woff2) format('woff2');
|
||||||
|
unicode-range: U+4e08, U+4f9d, U+5012, U+514d, U+51b7, U+5275, U+53ca, U+53f8, U+5584, U+57fc, U+5b9d, U+5bfa, U+5c3e, U+5f01, U+5fb4, U+5fd7, U+606f, U+62e1, U+6563, U+6674, U+6cb3, U+6d3e, U+6d74, U+6e1b, U+6e2f, U+718a, U+7247, U+79d8, U+7d14, U+7d66, U+7d71, U+7df4, U+7e41, U+80cc, U+8155, U+83d3, U+8a95, U+8ab2, U+8ad6, U+8ca1, U+9000, U+9006, U+9678, U+97d3, U+9808, U+98ef, U+9a5a, U+9b45, U+ff23, U+ff30;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.101.woff2) format('woff2');
|
||||||
|
unicode-range: U+25bc, U+3012, U+4ef2, U+4f0a, U+516b, U+5373, U+539a, U+53b3, U+559c, U+56f0, U+5727, U+5742, U+5965, U+59ff, U+5bc6, U+5dfb, U+5e45, U+5ead, U+5fb3, U+6211, U+6253, U+639b, U+63a8, U+6545, U+6575, U+6628, U+672d, U+68a8, U+6bdb, U+6d25, U+707d, U+767e, U+7834, U+7b46, U+7bc9, U+8074, U+82e6, U+8349, U+8a2a, U+8d70, U+8da3, U+8fce, U+91cc, U+967d, U+97ff, U+9996, U+ff1c, U+ff2f, U+ff32, U+ff34;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.102.woff2) format('woff2');
|
||||||
|
unicode-range: U+3d, U+5e, U+25cf, U+4e0e, U+4e5d, U+4e73, U+4e94, U+4f3c, U+5009, U+5145, U+51ac, U+5238, U+524a, U+53f3, U+547c, U+5802, U+5922, U+5a66, U+5c0e, U+5de6, U+5fd8, U+5feb, U+6797, U+685c, U+6b7b, U+6c5f-6c60, U+6cc9, U+6ce2, U+6d17, U+6e21, U+7167, U+7642, U+76db, U+8001, U+821e, U+8857, U+89d2, U+8b1b, U+8b70, U+8cb4, U+8cde, U+8f03, U+8f2a, U+968e, U+9b54, U+9e7f, U+9ebb, U+ff05, U+ff33;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.103.woff2) format('woff2');
|
||||||
|
unicode-range: U+500d, U+5074, U+50cd, U+5175, U+52e2, U+5352, U+5354, U+53f2, U+5409, U+56fa, U+5a18, U+5b88, U+5bdd, U+5ca9, U+5f92, U+5fa9, U+60a9, U+623f, U+6483, U+653f, U+666f, U+66ae, U+66f2, U+6a21, U+6b66, U+6bcd, U+6d5c, U+796d, U+7a4d, U+7aef, U+7b56, U+7b97, U+7c4d, U+7e04, U+7fa9, U+8377, U+83dc, U+83ef, U+8535, U+8863, U+88cf, U+88dc, U+8907, U+8acb, U+90ce, U+91dd, U+ff0b, U+ff0d, U+ff19, U+ff65;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.104.woff2) format('woff2');
|
||||||
|
unicode-range: U+4e01, U+4e21, U+4e38, U+52a9, U+547d, U+592e, U+5931, U+5b63, U+5c40, U+5dde, U+5e78, U+5efa, U+5fa1, U+604b, U+6075, U+62c5, U+632f, U+6a19, U+6c0f, U+6c11, U+6c96, U+6e05, U+70ba, U+71b1, U+7387, U+7403, U+75c5, U+77ed, U+795d, U+7b54, U+7cbe, U+7d19, U+7fa4, U+8089, U+81f4, U+8208, U+8336, U+8457, U+8a33, U+8c4a, U+8ca0, U+8ca8, U+8cc0, U+9014, U+964d, U+9803, U+983c, U+98db, U+ff17, U+ff21;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.105.woff2) format('woff2');
|
||||||
|
unicode-range: U+25, U+25a0, U+4e26, U+4f4e, U+5341, U+56f2, U+5bbf, U+5c45, U+5c55, U+5c5e, U+5dee, U+5e9c, U+5f7c, U+6255, U+627f, U+62bc, U+65cf, U+661f, U+666e, U+66dc, U+67fb, U+6975, U+6a4b, U+6b32, U+6df1, U+6e29, U+6fc0, U+738b, U+7686, U+7a76, U+7a81, U+7c73, U+7d75, U+7dd2, U+82e5, U+82f1, U+85ac, U+888b, U+899a, U+8a31, U+8a8c, U+8ab0, U+8b58, U+904a, U+9060, U+9280, U+95b2, U+984d, U+9ce5, U+ff18;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.106.woff2) format('woff2');
|
||||||
|
unicode-range: U+30f6, U+50ac, U+5178, U+51e6, U+5224, U+52dd, U+5883, U+5897, U+590f, U+5a5a, U+5bb3, U+5c65, U+5e03, U+5e2b, U+5e30, U+5eb7, U+6271, U+63f4, U+64ae, U+6574, U+672b, U+679a, U+6a29-6a2a, U+6ca2, U+6cc1, U+6d0b, U+713c, U+74b0, U+7981, U+7a0b, U+7bc0, U+7d1a, U+7d61, U+7fd2, U+822c, U+8996, U+89aa, U+8cac, U+8cbb, U+8d77, U+8def, U+9020, U+9152, U+9244, U+9662, U+967a, U+96e3, U+9759, U+ff16;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.107.woff2) format('woff2');
|
||||||
|
unicode-range: U+23, U+3c, U+2192, U+4e45, U+4efb, U+4f50, U+4f8b, U+4fc2, U+5024, U+5150, U+5272, U+5370, U+53bb, U+542b, U+56db, U+56e3, U+57ce, U+5bc4, U+5bcc, U+5f71, U+60aa, U+6238, U+6280, U+629c, U+6539, U+66ff, U+670d, U+677e-677f, U+6839, U+69cb, U+6b4c, U+6bb5, U+6e96, U+6f14, U+72ec, U+7389, U+7814, U+79cb, U+79d1, U+79fb, U+7a0e, U+7d0d, U+85e4, U+8d64, U+9632, U+96e2, U+9805, U+99ac, U+ff1e;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.108.woff2) format('woff2');
|
||||||
|
unicode-range: U+2605-2606, U+301c, U+4e57, U+4fee, U+5065, U+52df, U+533b, U+5357, U+57df, U+58eb, U+58f0, U+591c, U+592a-592b, U+5948, U+5b85, U+5d0e, U+5ea7, U+5ff5, U+6025, U+63a1, U+63a5, U+63db, U+643a, U+65bd, U+671d, U+68ee, U+6982, U+6b73, U+6bd4, U+6d88, U+7570, U+7b11, U+7d76, U+8077, U+8217, U+8c37, U+8c61, U+8cc7, U+8d85, U+901f, U+962a, U+9802, U+9806, U+9854, U+98f2, U+9928, U+99c5, U+9ed2;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.109.woff2) format('woff2');
|
||||||
|
unicode-range: U+266a, U+4f11, U+533a, U+5343, U+534a, U+53cd, U+5404, U+56f3, U+5b57-5b58, U+5bae, U+5c4a, U+5e0c, U+5e2f, U+5eab, U+5f35, U+5f79, U+614b, U+6226, U+629e, U+65c5, U+6625, U+6751, U+6821, U+6b69, U+6b8b, U+6bce, U+6c42, U+706b, U+7c21, U+7cfb, U+805e, U+80b2, U+82b8, U+843d, U+8853, U+88c5, U+8a3c, U+8a66, U+8d8a, U+8fba, U+9069, U+91cf, U+9752, U+975e, U+9999, U+ff0f-ff10, U+ff14-ff15;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.110.woff2) format('woff2');
|
||||||
|
unicode-range: U+40, U+4e86, U+4e95, U+4f01, U+4f1d, U+4fbf, U+5099, U+5171, U+5177, U+53cb, U+53ce, U+53f0, U+5668, U+5712, U+5ba4, U+5ca1, U+5f85, U+60f3, U+653e, U+65ad, U+65e9, U+6620, U+6750, U+6761, U+6b62, U+6b74, U+6e08, U+6e80, U+7248, U+7531, U+7533, U+753a, U+77f3, U+798f, U+7f6e, U+8449, U+88fd, U+89b3, U+8a55, U+8ac7, U+8b77, U+8db3, U+8efd, U+8fd4, U+9031-9032, U+9580, U+9589, U+96d1, U+985e;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.111.woff2) format('woff2');
|
||||||
|
unicode-range: U+2b, U+d7, U+300e-300f, U+4e07, U+4e8c, U+512a, U+5149, U+518d, U+5236, U+52b9, U+52d9, U+5468, U+578b, U+57fa, U+5b8c, U+5ba2, U+5c02, U+5de5, U+5f37, U+5f62, U+623b, U+63d0, U+652f, U+672a, U+6848, U+6d41, U+7136, U+7537, U+754c, U+76f4, U+79c1, U+7ba1, U+7d44, U+7d4c, U+7dcf, U+7dda, U+7de8, U+82b1, U+897f, U+8ca9, U+8cfc, U+904e, U+9664, U+982d, U+9858, U+98a8, U+9a13, U+ff13, U+ff5c;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.112.woff2) format('woff2');
|
||||||
|
unicode-range: U+4e16, U+4e3b, U+4ea4, U+4ee4, U+4f4d, U+4f4f, U+4f55, U+4f9b, U+5317, U+5358, U+53c2, U+53e4, U+548c, U+571f, U+59cb, U+5cf6, U+5e38, U+63a2, U+63b2, U+6559, U+662d, U+679c, U+6c7a, U+72b6, U+7523, U+767d, U+770c, U+7a2e, U+7a3f, U+7a7a, U+7b2c, U+7b49, U+7d20, U+7d42, U+8003, U+8272, U+8a08, U+8aac, U+8cb7, U+8eab, U+8ee2, U+9054-9055, U+90fd, U+914d, U+91cd, U+969b, U+97f3, U+984c, U+ff06;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.113.woff2) format('woff2');
|
||||||
|
unicode-range: U+26, U+5f, U+2026, U+203b, U+4e09, U+4eac, U+4ed5, U+4fa1, U+5143, U+5199, U+5207, U+539f, U+53e3, U+53f7, U+5411, U+5473, U+5546, U+55b6, U+5929, U+597d, U+5bb9, U+5c11, U+5c4b, U+5ddd, U+5f97, U+5fc5, U+6295, U+6301, U+6307, U+671b, U+76f8, U+78ba, U+795e, U+7d30, U+7d39, U+7d9a, U+89e3, U+8a00, U+8a73, U+8a8d, U+8a9e, U+8aad, U+8abf, U+8cea, U+8eca, U+8ffd, U+904b, U+9650, U+ff11-ff12;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.114.woff2) format('woff2');
|
||||||
|
unicode-range: U+3e, U+3005, U+4e0d, U+4e88, U+4ecb, U+4ee3, U+4ef6, U+4fdd, U+4fe1, U+500b, U+50cf, U+5186, U+5316, U+53d7, U+540c, U+544a, U+54e1, U+5728, U+58f2, U+5973, U+5b89, U+5c71, U+5e02, U+5e97, U+5f15, U+5fc3, U+5fdc, U+601d, U+611b, U+611f, U+671f, U+6728, U+6765, U+683c, U+6b21, U+6ce8, U+6d3b, U+6d77, U+7530, U+7740, U+7acb, U+7d50, U+826f, U+8f09, U+8fbc, U+9001, U+9053, U+91ce, U+9762, U+98df;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.115.woff2) format('woff2');
|
||||||
|
unicode-range: U+7c, U+3080, U+4ee5, U+5148, U+516c, U+521d, U+5225, U+529b, U+52a0, U+53ef, U+56de, U+56fd, U+5909, U+591a, U+5b66, U+5b9f, U+5bb6, U+5bfe, U+5e73, U+5e83, U+5ea6, U+5f53, U+6027, U+610f, U+6210, U+6240, U+660e, U+66f4, U+66f8, U+6709, U+6771, U+697d, U+69d8, U+6a5f, U+6c34, U+6cbb, U+73fe, U+756a, U+7684, U+771f, U+793a, U+7f8e, U+898f, U+8a2d, U+8a71, U+8fd1, U+9078, U+9577, U+96fb, U+ff5e;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.116.woff2) format('woff2');
|
||||||
|
unicode-range: U+a9, U+3010-3011, U+30e2, U+4e0b, U+4eca, U+4ed6, U+4ed8, U+4f53, U+4f5c, U+4f7f, U+53d6, U+540d, U+54c1, U+5730, U+5916, U+5b50, U+5c0f, U+5f8c, U+624b, U+6570, U+6587, U+6599, U+691c, U+696d, U+6cd5, U+7269, U+7279, U+7406, U+767a-767b, U+77e5, U+7d04, U+7d22, U+8005, U+80fd, U+81ea, U+8868, U+8981, U+89a7, U+901a, U+9023, U+90e8, U+91d1, U+9332, U+958b, U+96c6, U+9ad8, U+ff1a, U+ff1f;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.117.woff2) format('woff2');
|
||||||
|
unicode-range: U+4e, U+a0, U+3000, U+300c-300d, U+4e00, U+4e0a, U+4e2d, U+4e8b, U+4eba, U+4f1a, U+5165, U+5168, U+5185, U+51fa, U+5206, U+5229, U+524d, U+52d5, U+5408, U+554f, U+5831, U+5834, U+5927, U+5b9a, U+5e74, U+5f0f, U+60c5, U+65b0, U+65b9, U+6642, U+6700, U+672c, U+682a, U+6b63, U+6c17, U+7121, U+751f, U+7528, U+753b, U+76ee, U+793e, U+884c, U+898b, U+8a18, U+9593, U+95a2, U+ff01, U+ff08-ff09;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.118.woff2) format('woff2');
|
||||||
|
unicode-range: U+21-22, U+27-2a, U+2c-3b, U+3f, U+41-4d, U+4f-5d, U+61-7b, U+7d, U+ab, U+ae, U+b2-b3, U+b7, U+bb, U+c9, U+cd, U+d6, U+d8, U+dc, U+e0-e5, U+e7-ed, U+ef, U+f1-f4, U+f6, U+f8, U+fa, U+fc-fd, U+103, U+14d, U+1b0, U+300-301, U+1ebf, U+1ec7, U+2013-2014, U+201c-201d, U+2039-203a, U+203c, U+2048-2049, U+2113, U+2122, U+65e5, U+6708, U+70b9;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFow2oe2EcP5pp0erwTqsSWs9Jezazjcb4.119.woff2) format('woff2');
|
||||||
|
unicode-range: U+20, U+2027, U+3001-3002, U+3041-307f, U+3081-308f, U+3091-3093, U+3099-309a, U+309d-309e, U+30a1-30e1, U+30e3-30ed, U+30ef-30f0, U+30f2-30f4, U+30fb-30fe, U+ff0c, U+ff0e;
|
||||||
|
}
|
||||||
|
/* cyrillic */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFYxQgP6lY.woff2) format('woff2');
|
||||||
|
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||||
|
}
|
||||||
|
/* vietnamese */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFYzggP6lY.woff2) format('woff2');
|
||||||
|
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
|
||||||
|
}
|
||||||
|
/* latin-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFYzwgP6lY.woff2) format('woff2');
|
||||||
|
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||||
|
}
|
||||||
|
/* latin */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Noto Sans JP';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/notosansjp/v56/-F62fjtqLzI2JPCgQBnw7HFYwQgP.woff2) format('woff2');
|
||||||
|
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||||
|
}
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
!function(){"use strict";let e;!function(){const e={VERSION:"1.0.9",SERVICE_URL:"https://eventrecorder.cm.bloomberg.com/events/record"};try{if(process)return process.env=Object.assign({},process.env),void Object.assign(process.env,e)}catch(e){}globalThis.process={env:e}}();const t=new Uint8Array(16);function n(){if(!e&&(e="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!e))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return e(t)}const r=[];for(let e=0;e<256;++e)r.push((e+256).toString(16).slice(1));const o={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};function i(e,t,i){if(o.randomUUID&&!t&&!e)return o.randomUUID();const s=(e=e||{}).random||(e.rng||n)();return s[6]=15&s[6]|64,s[8]=63&s[8]|128,function(e,t=0){return r[e[t+0]]+r[e[t+1]]+r[e[t+2]]+r[e[t+3]]+"-"+r[e[t+4]]+r[e[t+5]]+"-"+r[e[t+6]]+r[e[t+7]]+"-"+r[e[t+8]]+r[e[t+9]]+"-"+r[e[t+10]]+r[e[t+11]]+r[e[t+12]]+r[e[t+13]]+r[e[t+14]]+r[e[t+15]]}(s)}var s;!function(e){e[e.AdRequested=0]="AdRequested",e[e.AdReceived=1]="AdReceived",e[e.PageLoaded=2]="PageLoaded",e[e.LinkPressed=3]="LinkPressed",e[e.TimeOrigin=4]="TimeOrigin"}(s||(s={}));const a=()=>{const e=(()=>{const e=window.getEventRecorderClient();return e?e.traceId:i()})();window.addEventListener("message",(t=>{if("ErTraceIdsRequest"===t.data){const n={type:"ErTraceIdsMessage",traceId:e};t.source&&t.source.postMessage(n,t.origin)}}))};var c;const{SERVICE_URL:d,VERSION:p}=process.env;class u{constructor(e){this.sendEvent=e=>{const t=navigator.sendBeacon(this.eventRecorderUrl,JSON.stringify(e));if(!t){const t={timestamp:Date.now(),eventId:i(),traceId:this.traceId,application:this.application,source:this.path,platform1:"web",platform2:navigator.userAgent,type:"beacon-error",flags:this.defaultFlags,content:JSON.stringify({event:e.type,content:e.content.substring(0,3e3)})};navigator.sendBeacon(this.eventRecorderUrl,JSON.stringify(t))}return t},this.fireEvent=(e,t=u.emptyMap,n="",r=Date.now())=>this.sendEvent({timestamp:r,eventId:i(),traceId:this.traceId,application:this.application,source:this.path,platform1:"web",platform2:navigator.userAgent,type:e,flags:{...this.defaultFlags,...t},content:JSON.stringify(n)}),this.eventRecorderUrl=e.url,this.traceId=i(),this.application=e.application,this.path=document.location.href,this.defaultFlags={appVersion:e.appVersion,erVersion:p}}}let l;if(u.emptyMap={},Object.defineProperty(window,"getEventRecorderClient",{value:function(e,t,n){return void 0!==l||(l=new u({url:t||d,application:e||"undefined",appVersion:n}),a(),window.performance.timeOrigin&&l.fireEvent(s[s.TimeOrigin],u.emptyMap,u.emptyMap,window.performance.timeOrigin)),l}}),Array.isArray(null===(c=null===window||void 0===window?void 0:window.eventRecorder)||void 0===c?void 0:c.cmd)){let e=window.eventRecorder.cmd.shift();for(;e;)e(),e=window.eventRecorder.cmd.shift();window.eventRecorder.cmd={push:e=>{e()}}}}();
|
||||||
+11
@@ -0,0 +1,11 @@
|
|||||||
|
(function(sttc){var window=this;if(window.googletag&&googletag.evalScripts){googletag.evalScripts();}if(window.googletag&&googletag._loaded_)return;var q,aa=typeof Object.create=="function"?Object.create:function(a){var b=function(){};b.prototype=a;return new b},ba=typeof Object.defineProperties=="function"?Object.defineProperty:function(a,b,c){if(a==Array.prototype||a==Object.prototype)return a;a[b]=c.value;return a},ca=function(a){a=["object"==typeof globalThis&&globalThis,a,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var b=0;b<a.length;++b){var c=a[b];if(c&&c.Math==Math)return c}throw Error("Cannot find global object");},da=ca(this),ea=typeof Symbol==="function"&&typeof Symbol("x")==="symbol",u={},fa={},v=function(a,b,c){if(!c||a!=null){c=fa[b];if(c==null)return a[b];c=a[c];return c!==void 0?c:a[b]}},w=function(a,b,c){if(b)a:{var d=a.split(".");a=d.length===1;var e=d[0],f;!a&&e in u?f=u:f=da;for(e=0;e<d.length-1;e++){var g=d[e];if(!(g in f))break a;f=f[g]}d=d[d.length-1];c=ea&&c==="es6"?f[d]:null;b=b(c);b!=null&&(a?ba(u,d,{configurable:!0,writable:!0,value:b}):b!==c&&(fa[d]===void 0&&(a=Math.random()*1E9>>>0,fa[d]=ea?da.Symbol(d):"$jscp$"+a+"$"+d),ba(f,fa[d],{configurable:!0,writable:!0,value:b})))}},ha;if(ea&&typeof Object.setPrototypeOf=="function")ha=Object.setPrototypeOf;else{var ia;a:{var ja={a:!0},ka={};try{ka.__proto__=ja;ia=ka.a;break a}catch(a){}ia=!1}ha=ia?function(a,b){a.__proto__=b;if(a.__proto__!==b)throw new TypeError(a+" is not extensible");return a}:null}var la=ha,x=function(a,b){a.prototype=aa(b.prototype);a.prototype.constructor=a;if(la)la(a,b);else for(var c in b)if(c!="prototype")if(Object.defineProperties){var d=Object.getOwnPropertyDescriptor(b,c);d&&Object.defineProperty(a,c,d)}else a[c]=b[c];a.Mb=b.prototype},ma=function(a){var b=0;return function(){return b<a.length?{done:!1,value:a[b++]}:{done:!0}}},y=function(a){var b=typeof u.Symbol!="undefined"&&v(u.Symbol,"iterator")&&a[v(u.Symbol,"iterator")];if(b)return b.call(a);if(typeof a.length=="number")return{next:ma(a)};throw Error(String(a)+" is not an iterable or ArrayLike");},A=function(a){if(!(a instanceof Array)){a=y(a);for(var b,c=[];!(b=a.next()).done;)c.push(b.value);a=c}return a},oa=function(a){return na(a,a)},na=function(a,b){a.raw=b;Object.freeze&&(Object.freeze(a),Object.freeze(b));return a},C=function(a,b){return Object.prototype.hasOwnProperty.call(a,b)},pa=ea&&typeof v(Object,"assign")=="function"?v(Object,"assign"):function(a,b){if(a==null)throw new TypeError("No nullish arg");a=Object(a);for(var c=1;c<arguments.length;c++){var d=arguments[c];if(d)for(var e in d)C(d,e)&&(a[e]=d[e])}return a};w("Object.assign",function(a){return a||pa},"es6");var qa=function(){for(var a=Number(this),b=[],c=a;c<arguments.length;c++)b[c-a]=arguments[c];return b};w("globalThis",function(a){return a||da},"es_2020");w("Symbol",function(a){if(a)return a;var b=function(f,g){this.g=f;ba(this,"description",{configurable:!0,writable:!0,value:g})};b.prototype.toString=function(){return this.g};var c="jscomp_symbol_"+(Math.random()*1E9>>>0)+"_",d=0,e=function(f){if(this instanceof e)throw new TypeError("Symbol is not a constructor");return new b(c+(f||"")+"_"+d++,f)};return e},"es6");w("Symbol.iterator",function(a){if(a)return a;a=(0,u.Symbol)("Symbol.iterator");ba(Array.prototype,a,{configurable:!0,writable:!0,value:function(){return ra(ma(this))}});return a},"es6");var ra=function(a){a={next:a};a[v(u.Symbol,"iterator")]=function(){return this};return a};w("Array.prototype.find",function(a){return a?a:function(b,c){a:{var d=this;d instanceof String&&(d=String(d));for(var e=d.length,f=0;f<e;f++){var g=d[f];if(b.call(c,g,f,d)){b=g;break a}}b=void 0}return b}},"es6");w("WeakMap",function(a){function b(){}function c(g){var h=typeof g;return h==="object"&&g!==null||h==="function"}if(function(){if(!a||!Object.seal)return!1;try{var g=Object.seal({}),h=Object.seal({}),k=new a([[g,2],[h,3]]);if(k.get(g)!=2||k.get(h)!=3)return!1;k.delete(g);k.set(h,4);return!k.has(g)&&k.get(h)==4}catch(m){return!1}}())return a;var d="$jscomp_hidden_"+Math.random(),e=0,f=function(g){this.g=(e+=Math.random()+1).toString();if(g){g=y(g);for(var h;!(h=g.next()).done;)h=h.value,this.set(h[0],h[1])}};f.prototype.set=function(g,h){if(!c(g))throw Error("Invalid WeakMap key");if(!C(g,d)){var k=new b;ba(g,d,{value:k})}if(!C(g,d))throw Error("WeakMap key fail: "+g);g[d][this.g]=h;return this};f.prototype.get=function(g){return c(g)&&C(g,d)?g[d][this.g]:void 0};f.prototype.has=function(g){return c(g)&&C(g,d)&&C(g[d],this.g)};f.prototype.delete=function(g){return c(g)&&C(g,d)&&C(g[d],this.g)?delete g[d][this.g]:!1};return f},"es6");w("Map",function(a){if(function(){if(!a||typeof a!="function"||!v(a.prototype,"entries")||typeof Object.seal!="function")return!1;try{var h=Object.seal({x:4}),k=new a(y([[h,"s"]]));if(k.get(h)!="s"||k.size!=1||k.get({x:4})||k.set({x:4},"t")!=k||k.size!=2)return!1;var m=v(k,"entries").call(k),n=m.next();ifLine truncated
|
||||||
|
|
||||||
|
Copyright The Closure Library Authors.
|
||||||
|
SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
var D=this||self,wa=function(a,b){var c=va("CLOSURE_FLAGS");a=c&&c[a];return a!=null?a:b},va=function(a){a=a.split(".");for(var b=D,c=0;c<a.length;c++)if(b=b[a[c]],b==null)return null;return b},xa=function(a){var b=typeof a;return b!="object"?b:a?Array.isArray(a)?"array":b:"null"},ya=function(a,b,c){a=a.split(".");c=c||D;for(var d;a.length&&(d=a.shift());)a.length||b===void 0?c[d]&&c[d]!==Object.prototype[d]?c=c[d]:c=c[d]={}:c[d]=b};function za(a){D.setTimeout(function(){throw a;},0)};var Aa=function(a){return/^[\s\xa0]*([\s\S]*?)[\s\xa0]*$/.exec(a)[1]};function Ba(a,b){var c=0;a=Aa(String(a)).split(".");b=Aa(String(b)).split(".");for(var d=Math.max(a.length,b.length),e=0;c==0&&e<d;e++){var f=a[e]||"",g=b[e]||"";do{f=/(\d*)(\D*)(.*)/.exec(f)||["","","",""];g=/(\d*)(\D*)(.*)/.exec(g)||["","","",""];if(f[0].length==0&&g[0].length==0)break;c=Ca(f[1].length==0?0:parseInt(f[1],10),g[1].length==0?0:parseInt(g[1],10))||Ca(f[2].length==0,g[2].length==0)||Ca(f[2],g[2]);f=f[3];g=g[3]}while(c==0)}return c}function Ca(a,b){return a<b?-1:a>b?1:0};var Da=wa(610401301,!1),Ea=wa(748402147,!0);var Fa,Ga=D.navigator;Fa=Ga?Ga.userAgentData||null:null;function Ha(a){if(!Da||!Fa)return!1;for(var b=0;b<Fa.brands.length;b++){var c=Fa.brands[b].brand;if(c&&c.indexOf(a)!=-1)return!0}return!1}function E(a){var b;a:{if(b=D.navigator)if(b=b.userAgent)break a;b=""}return b.indexOf(a)!=-1};function Ia(){return Da?!!Fa&&Fa.brands.length>0:!1}function Ja(){return Ia()?!1:E("Opera")}function Ka(){return E("Firefox")||E("FxiOS")}function La(){return E("Safari")&&!(Ma()||(Ia()?0:E("Coast"))||Ja()||(Ia()?0:E("Edge"))||(Ia()?Ha("Microsoft Edge"):E("Edg/"))||(Ia()?Ha("Opera"):E("OPR"))||Ka()||E("Silk")||E("Android"))}function Ma(){return Ia()?Ha("Chromium"):(E("Chrome")||E("CriOS"))&&!(Ia()?0:E("Edge"))||E("Silk")};var Na=function(a,b){return Array.prototype.map.call(a,b,void 0)};function Oa(a,b){a:{for(var c=typeof a==="string"?a.split(""):a,d=a.length-1;d>=0;d--)if(d in c&&b.call(void 0,c[d],d,a)){b=d;break a}b=-1}return b<0?null:typeof a==="string"?a.charAt(b):a[b]};var Pa=function(a){Pa[" "](a);return a};Pa[" "]=function(){};var Qa=null;function Ra(a){var b=[];Sa(a,function(c){b.push(c)});return b}function Sa(a,b){function c(k){for(;d<a.length;){var m=a.charAt(d++),n=Qa[m];if(n!=null)return n;if(!/^[\s\xa0]*$/.test(m))throw Error("Unknown base64 encoding at char: "+m);}return k}Ta();for(var d=0;;){var e=c(-1),f=c(0),g=c(64),h=c(64);if(h===64&&e===-1)break;b(e<<2|f>>4);g!=64&&(b(f<<4&240|g>>2),h!=64&&b(g<<6&192|h))}}function Ta(){if(!Qa){Qa={};for(var a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),b=["+/=","+/","-_=","-_.","-_"],c=0;c<5;c++)for(var d=a.concat(b[c].split("")),e=0;e<d.length;e++){var f=d[e];Qa[f]===void 0&&(Qa[f]=e)}}};function Ua(a,b){a.__closure__error__context__984382||(a.__closure__error__context__984382={});a.__closure__error__context__984382.severity=b};var Va=void 0,Wa;function Xa(a){if(Wa)throw Error("");Wa=function(b){D.setTimeout(function(){a(b)},0)}}function Ya(a){if(Wa)try{Wa(a)}catch(b){throw b.cause=a,b;}}function Za(a){a=Error(a);Ua(a,"warning");Ya(a);return a};function $a(){return typeof BigInt==="function"};var ab=typeof u.Symbol==="function"&&typeof(0,u.Symbol)()==="symbol";function bb(a,b,c){return typeof u.Symbol==="function"&&typeof(0,u.Symbol)()==="symbol"?(c===void 0?0:c)&&u.Symbol.for&&a?u.Symbol.for(a):a!=null?(0,u.Symbol)(a):(0,u.Symbol)():b}var eb=bb("jas",void 0,!0),fb=bb(void 0,"0di"),gb=bb(void 0,"1oa"),hb=bb(void 0,"0actk"),ib=bb("m_m","Lb",!0);var jb={fb:{value:0,configurable:!0,writable:!0,enumerable:!1}},kb=Object.defineProperties,F=ab?eb:"fb",lb,mb=[];G(mb,7);lb=Object.freeze(mb);function nb(a,b){ab||F in a||kb(a,jb);a[F]|=b}function G(a,b){ab||F in a||kb(a,jb);a[F]=b}function ob(a){if(4&a)return 512&a?512:1024&a?1024:0}function pb(a){nb(a,32);return a};var qb={};function H(a,b){return b===void 0?a.g!==rb&&!!(2&(a.i[F]|0)):!!(2&b)&&a.g!==rb}var rb={};function sb(a,b){if(typeof b!=="number"||b<0||b>=a.length)throw Error();}var tb=Object.freeze({}),ub=Object.freeze({});function vb(a){var b=wb;if(!a)throw Error((typeof b==="function"?b():b)||String(a));}function xb(a){a.Kb=!0;return a}var wb=void 0;var yb=xb(function(a){return typeof a==="number"}),zb=xb(function(a){return typeof a==="string"}),Ab=xb(function(a){return typeof a==="boolean"});var Bb=typeof D.BigInt==="function"&&typeof D.BigInt(0)==="bigint";function Cb(a){var b=a;if(zb(b)){if(!/^\s*(?:-?[1-9]\d*|0)?\s*$/.test(b))throw Error(String(b));}else if(yb(b)&&!v(Number,"isSafeInteger").call(Number,b))throw Error(String(b));return Bb?BigInt(a):a=Ab(a)?a?"1":"0":zb(a)?a.trim()||"0":String(a)}var Ib=xb(function(a){return Bb?a>=Db&&a<=Eb:a[0]==="-"?Fb(a,Gb):Fb(a,Hb)}),Gb=v(Number,"MIN_SAFE_INTEGER").toString(),Db=Bb?BigInt(v(Number,"MIN_SAFE_INTEGER")):void 0,Hb=v(Number,"MAX_SAFE_INTEGER").toString(),Eb=Bb?BigInt(v(Number,"MAX_SAFE_INTEGER")):void 0;function Fb(a,b){if(a.length>b.length)return!1;if(a.length<b.Line truncated
|
||||||
|
|
||||||
|
Copyright Google LLC
|
||||||
|
SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
var Dd;function Ed(){Dd===void 0&&(Dd=null);return Dd};var Fd=function(a){this.g=a};Fd.prototype.toString=function(){return this.g+""};function Gd(a){var b=Ed();a=b?b.createScriptURL(a):a;return new Fd(a)}function Hd(a){if(a instanceof Fd)return a.g;throw Error("");};var Id=/^\s*(?!javascript:)(?:[\w+.-]+:|[^:/?#]*(?:[/?#]|$))/i;var Jd=function(a){this.g=a};Jd.prototype.toString=function(){return this.g+""};function Kd(a){a=a===void 0?document:a;var b,c;a=(c=(b=a).querySelector)==null?void 0:c.call(b,"script[nonce]");return a==null?"":a.nonce||a.getAttribute("nonce")||""};function Ld(a,b){a.src=Hd(b);(b=Kd(a.ownerDocument))&&a.setAttribute("nonce",b)};var Md="alternate author bookmark canonical cite help icon license modulepreload next prefetch dns-prefetch prerender preconnect preload prev search subresource".split(" ");function Nd(a,b){var c=a.write;if(b instanceof Jd)b=b.g;else throw Error("");c.call(a,b)};var Od=Bd(function(){return(Da&&Fa?Fa.mobile:!Cd()&&(E("iPod")||E("iPhone")||E("Android")||E("IEMobile")))?2:Cd()?1:0});function Pd(a,b){if(a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&b(a[c],c,a)};function Qd(){if(!u.globalThis.crypto)return Math.random();try{var a=new Uint32Array(1);u.globalThis.crypto.getRandomValues(a);return a[0]/65536/65536}catch(b){return Math.random()}};var Rd,Sd=64;function Td(){try{return Rd!=null||(Rd=new Uint32Array(64)),Sd>=64&&(crypto.getRandomValues(Rd),Sd=0),Rd[Sd++]}catch(a){return Math.floor(Math.random()*4294967296)}};function Ud(a,b){if(!yb(a.goog_pvsid))try{var c=Td()+(Td()&2097151)*4294967296;Object.defineProperty(a,"goog_pvsid",{value:c,configurable:!1})}catch(d){b.G({methodName:784,I:d})}a=Number(a.goog_pvsid);(!a||a<=0)&&b.G({methodName:784,I:Error("Invalid correlator, "+a)});return a||-1};function Vd(a,b){a=Hd(a).toString();a='<script src="'+Wd(a)+'"';if(b==null?0:b.async)a+=" async";(b==null?void 0:b.attributionSrc)!==void 0&&(a+=' attributionsrc="'+Wd(b.attributionSrc)+'"');if(b==null?0:b.Wa)a+=' custom-element="'+Wd(b.Wa)+'"';if(b==null?0:b.defer)a+=" defer";if(b==null?0:b.id)a+=' id="'+Wd(b.id)+'"';if(b==null?0:b.nonce)a+=' nonce="'+Wd(b.nonce)+'"';if(b==null?0:b.type)a+=' type="'+Wd(b.type)+'"';if(b==null?0:b.Ha)a+=' crossorigin="'+Wd(b.Ha)+'"';b=a+">\x3c/script>";b=(a=Ed())?a.createHTML(b):b;return new Jd(b)}function Wd(a){return a.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")};function Xd(a){var b=qa.apply(1,arguments);if(b.length===0)return Gd(a[0]);for(var c=a[0],d=0;d<b.length;d++)c+=encodeURIComponent(b[d])+a[d+1];return Gd(c)}function Yd(a,b){a=Hd(a).toString();var c=a.split(/[?#]/),d=/[?]/.test(a)?"?"+c[1]:"";return Zd(c[0],d,/[#]/.test(a)?"#"+(d?c[2]:c[1]):"",b)}function Zd(a,b,c,d){function e(g,h){g!=null&&(Array.isArray(g)?g.forEach(function(k){return e(k,h)}):(b+=f+encodeURIComponent(h)+"="+encodeURIComponent(g),f="&"))}var f=b.length?"&":"?";d.constructor===Object&&(d=v(Object,"entries").call(Object,d));Array.isArray(d)?d.forEach(function(g){return e(g[1],g[0])}):d.forEach(e);return Gd(a+b+c)};function $d(a,b){if(a.length&&b.head){a=y(a);for(var c=a.next();!c.done;c=a.next())if((c=c.value)&&b.head){var d=ae("META");b.head.appendChild(d);d.httpEquiv="origin-trial";d.content=c}}}var be=function(a){return Ud(a,{G:function(){}})},ae=function(a,b){b=b===void 0?document:b;return b.createElement(String(a).toLowerCase())};function ce(a){var b=[],c=0,d;for(d in a)b[c++]=a[d];return b};var de={Fb:0,Eb:1,Bb:2,wb:3,Cb:4,xb:5,Db:6,zb:7,Ab:8,ub:9,yb:10,Gb:11};var ee={Ib:0,Jb:1,Hb:2};var fe=function(a){this.i=L(a)};x(fe,U);fe.prototype.getVersion=function(){return gd(this,2)};function ge(a){return Ra(a.length%4!==0?a+"A":a).map(function(b){return v(b.toString(2),"padStart").call(b.toString(2),8,"0")}).join("")}function he(a){if(!/^[0-1]+$/.test(a))throw Error("Invalid input ["+a+"] not a bit string.");return parseInt(a,2)}function ie(a){if(!/^[0-1]+$/.test(a))throw Error("Invalid input ["+a+"] not a bit string.");for(var b=[1,2,3,5],c=0,d=0;d<a.length-1;d++)b.length<=d&&b.push(b[d-1]+b[d-2]),c+=parseInt(a[d],2)*b[d];return c};function je(a){var b=ge(a),c=he(b.slice(0,6));a=he(b.slice(6,12));var d=new fe;c=md(d,1,c);a=md(c,2,a);b=b.slice(12);c=he(b.slice(0,12));d=[];for(var e=b.slice(12).replace(/0+$/,""),f=0;f<c;f++){if(e.length===0)throw Error("Found "+f+" of "+c+" sections ["+d+"] but reached end of input ["+b+"]");var g=he(e[0])===0;e=e.slice(1);var h=ke(e,b),k=d.length===0?0:d[d.length-1];k=ie(h)+k;e=e.slice(h.length);if(g)d.push(k);else{g=ke(e,b);h=ie(g);for(var m=0;m<=h;m++)d.push(k+m);e=e.slice(g.length)}}if(e.length>0)throw Error("Found "+c+" sections ["+d+"] but has remaining input ["+e+"], entire input ["+b+"]");return Qc(a,3,d,ac)}function ke(a,b){var c=a.indexOf("11");if(c===-1)throw Error("Expected section bitstring but not found in ["+a+"] part of ["+b+"]");return a.slice(0,c+2)};var le=ce(de).map(function(a){return Number(a)}),me=ce(ee).map(function(a){return NumbLine truncated
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
.media-ui-Checkbox_disabled-D-rGwWtEJC4-{cursor:default;opacity:.5}.media-ui-Checkbox_label-2qQCR3fseFY-{font-size:.75rem;line-height:.875rem}.media-ui-Checkbox_input--ZsIer8RegY-{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:1px solid;box-sizing:border-box;color:inherit;cursor:pointer;flex-shrink:0;height:1.25rem;margin-right:.625rem;position:relative;width:1.25rem}.media-ui-Checkbox_input--ZsIer8RegY-:after{border-color:currentcolor;border-style:solid;border-width:0 .1875rem .1875rem 0;box-sizing:border-box;content:"";display:none;height:70%;left:.5rem;left:35%;position:absolute;top:.125rem;top:6%;transform:rotate(45deg);width:35.5%;z-index:1}.media-ui-Checkbox_input--ZsIer8RegY-:indeterminate:after{--tw-rotate:0deg;border-color:currentColor;bottom:45%;display:block;height:.125rem;left:.3125rem;position:absolute;top:45%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));width:.5rem;z-index:1}.media-ui-Checkbox_input--ZsIer8RegY-:checked:after{display:block}.media-ui-Checkbox_input--ZsIer8RegY-:checked.media-ui-Checkbox_error-VRXSp1Ovhs8-{background-color:var(--color-red-100);color:var(--color-red-800)}.media-ui-Checkbox_input--ZsIer8RegY-:checked.media-ui-Checkbox_error-VRXSp1Ovhs8-:after{--tw-invert:invert(0);border-color:var(--color-white);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.media-ui-Checkbox_input--ZsIer8RegY-.media-ui-Checkbox_small-XkaKPsTQyeI-{height:1rem;width:1rem}.media-ui-Checkbox_input--ZsIer8RegY-.media-ui-Checkbox_small-XkaKPsTQyeI-:checked:after{border-width:0 .125rem .125rem 0}.media-ui-InputLabel_label-IjKQPLH-Rxg-{align-items:center;color:currentColor;display:flex;font-family:BWHaasGroteskWeb,BWHaasGroteskWeb-fallback,Helvetica,Arial,sans-serif;font-size:1rem;line-height:1.5rem;line-height:1.25rem}.media-ui-InputLabel_label-IjKQPLH-Rxg-.media-ui-InputLabel_small-W1-gfavZOFk-{font-size:.875rem;line-height:1.3125rem;line-height:1rem}.media-ui-InputLabel_alert-c4JRs9OkAaM-{color:var(--color-red-700)}.media-ui-InputLabel_nopoint-hgATVJe5xb8-{pointer-events:none}.media-ui-Nav_navContainer-hjs68ExRvE4-{font-family:BWHaasGroteskWeb,BWHaasGroteskWeb-fallback,Helvetica,Arial,sans-serif;max-width:100%;position:relative;width:100%;z-index:50}.media-ui-Nav_desktop-H4T7bcdLqpc-{display:none}@media (min-width:1123px){.media-ui-Nav_desktop-H4T7bcdLqpc-{display:block}.media-ui-Nav_mobile-G7SxDZ43xgY-{display:none}}.media-ui-SignInModal_signInModalContainer-9ZWvtOL5-tk-{align-items:center;animation:media-ui-SignInModal_fade-out-5J12VzT3-pg- .5s;background-color:hsla(0,0%,100%,.9);box-sizing:border-box;display:flex;height:100%;justify-content:center;left:0;overflow:auto;position:fixed;top:0;width:100%;z-index:10000000}.media-ui-SignInModal_signInModalContainer-9ZWvtOL5-tk-[data-status=show]{animation:media-ui-SignInModal_fade-in-vMt2D0Xsp-8- .5s;transform:translateX(0);visibility:visible}@keyframes media-ui-SignInModal_fade-in-vMt2D0Xsp-8-{0%{opacity:0}to{opacity:1}}@keyframes media-ui-SignInModal_fade-out-5J12VzT3-pg-{0%{opacity:1;visibility:visible}to{opacity:0;visibility:hidden}}.media-ui-SignInModal_signInModalContainer-9ZWvtOL5-tk- .media-ui-SignInModal_header-gE-fRmmBo6M-{display:flex;justify-content:space-between;padding-left:1rem;padding-right:1rem;padding-top:1rem;width:100%}.media-ui-SignInModal_signInModalContainer-9ZWvtOL5-tk- .media-ui-SignInModal_signInModal-JeKqtzwD48c-.media-ui-SignInModal_signInModal-JeKqtzwD48c-{--tw-shadow:0 0.625rem 0.9375rem -0.1875rem rgba(0,0,0,.1),0 0.25rem 0.375rem -0.25rem rgba(0,0,0,.1);--tw-shadow-colored:0 0.625rem 0.9375rem -0.1875rem var(--tw-shadow-color),0 0.25rem 0.375rem -0.25rem var(--tw-shadow-color);align-items:center;border:none;box-shadow:0 0 transparent,0 0 transparent,var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow,0 0 transparent),var(--tw-ring-shadow,0 0 transparent),var(--tw-shadow);display:flex;flex-direction:column;margin:auto;max-height:99vh;max-width:99vw;min-height:80vh;min-width:80vw;overflow:hidden!important}@media (min-width:600px){.media-ui-SignInModal_signInModalContainer-9ZWvtOL5-tk- .media-ui-SignInModal_signInModal-JeKqtzwD48c-.media-ui-SignInModal_signInModal-JeKqtzwD48c-{height:41.875rem;max-height:none;max-width:none;min-height:0;min-height:auto;min-width:0;min-width:auto;overflow:auto;width:43.75rem}}.media-ui-SignInModal_signInModalContainer-9ZWvtOL5-tk- .media-ui-SignInModal_signInModal-JeKqtzwD48c-.media-ui-SignInModal_signInModal-JeKqtzwD48c->div:nth-child(2){padding:.25rem}@media (min-width:600px){.media-ui-SignInModal_signInModalContainer-9ZWvtOL5-tk- .media-ui-SignInModal_signInModal-JeKqtzwD48c-.media-ui-SignInModal_signInModal-JeKqtzwD48c->div:nth-child(2){padding:1rem}}.media-ui-SignInModal_loginRegistration-2jTbLine truncated
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9774],{64448:function(e,n,t){var r,l,a,u,o,i,s=t(67294),c=t(63840);function f(e){for(var n="https://reactjs.org/docs/error-decoder.html?invariant="+e,t=1;t<arguments.length;t++)n+="&args[]="+encodeURIComponent(arguments[t]);return"Minified React error #"+e+"; visit "+n+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var d=new Set,p={};function m(e,n){h(e,n),h(e+"Capture",n)}function h(e,n){for(p[e]=n,e=0;e<n.length;e++)d.add(n[e])}var g=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),v=Object.prototype.hasOwnProperty,y=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,b={},k={};function w(e,n,t,r,l,a,u){this.acceptsBooleans=2===n||3===n||4===n,this.attributeName=r,this.attributeNamespace=l,this.mustUseProperty=t,this.propertyName=e,this.type=n,this.sanitizeURL=a,this.removeEmptyString=u}var S={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){S[e]=new w(e,0,!1,e,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var n=e[0];S[n]=new w(n,1,!1,e[1],null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(e){S[e]=new w(e,2,!1,e.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){S[e]=new w(e,2,!1,e,null,!1,!1)}),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){S[e]=new w(e,3,!1,e.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(e){S[e]=new w(e,3,!0,e,null,!1,!1)}),["capture","download"].forEach(function(e){S[e]=new w(e,4,!1,e,null,!1,!1)}),["cols","rows","size","span"].forEach(function(e){S[e]=new w(e,6,!1,e,null,!1,!1)}),["rowSpan","start"].forEach(function(e){S[e]=new w(e,5,!1,e.toLowerCase(),null,!1,!1)});var x=/[\-:]([a-z])/g;function E(e){return e[1].toUpperCase()}function _(e,n,t,r){var l,a=S.hasOwnProperty(n)?S[n]:null;(null!==a?0!==a.type:r||!(2<n.length)||"o"!==n[0]&&"O"!==n[0]||"n"!==n[1]&&"N"!==n[1])&&(function(e,n,t,r){if(null==n||function(e,n,t,r){if(null!==t&&0===t.type)return!1;switch(typeof n){case"function":case"symbol":return!0;case"boolean":if(r)return!1;if(null!==t)return!t.acceptsBooleans;return"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e;default:return!1}}(e,n,t,r))return!0;if(r)return!1;if(null!==t)switch(t.type){case 3:return!n;case 4:return!1===n;case 5:return isNaN(n);case 6:return isNaN(n)||1>n}return!1}(n,t,a,r)&&(t=null),r||null===a?(l=n,(!!v.call(k,l)||!v.call(b,l)&&(y.test(l)?k[l]=!0:(b[l]=!0,!1)))&&(null===t?e.removeAttribute(n):e.setAttribute(n,""+t))):a.mustUseProperty?e[a.propertyName]=null===t?3!==a.type&&"":t:(n=a.attributeName,r=a.attributeNamespace,null===t?e.removeAttribute(n):(t=3===(a=a.type)||4===a&&!0===t?"":""+t,r?e.setAttributeNS(r,n,t):e.setAttribute(n,t))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var n=e.replace(x,E);S[n]=new w(n,1,!1,e,null,!1,!1)}),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var n=e.replace(x,E);S[n]=new w(n,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(funcLine truncated
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
(window._sp_wp_jsonp=window._sp_wp_jsonp||[]).push([[4,3],{183:function(e,t,r){"use strict";r.r(t),r.d(t,"default",(function(){return P}));r(19),r(23),r(56),r(24),r(25),r(75),r(138),r(104),r(57),r(37),r(52),r(53),r(26),r(27),r(36),r(191),r(192),r(54),r(58),r(73),r(30),r(76),r(28),r(55),r(38),r(29);var n=r(0),o=r(14),i=r(61),u=r(197),a=r(205),c=r(203),s=null,l=r(148);function f(e){return(f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function p(e){return function(e){if(Array.isArray(e))return y(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return y(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return y(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function y(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function b(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function v(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?b(Object(r),!0).forEach((function(t){S(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):b(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function d(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,j(n.key),n)}}function m(e,t){return(m=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function h(e){var t=function(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return function(){return!!e}()}();return function(){var r,n=O(e);if(t){var o=O(this).constructor;r=Reflect.construct(n,arguments,o)}else r=n.apply(this,arguments);return g(this,r)}}function g(e,t){if(t&&("object"===f(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return w(e)}function w(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function O(e){return(O=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function S(e,t,r){return(t=j(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function j(e){var t=function(e,t){if("object"!=f(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=f(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==f(t)?t:t+""}var P=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&m(e,t)}(y,e);var t,r,u,f=h(y);function y(e,t,r){var n;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,y),S(w(n=f.call(this)),"category","gdpr"),n.config=Object(i.c)(e),n.campaignResponse=t,n.cmpApi={update:function(){}},n.propertyId=r,n}return t=y,(r=[{key:"init",value:function(){var e=this,t=this.config,r=t.accountId,o=t.cmpOrigin,i=t.groupPmId,u=t.includeTcfApi,l=t.mmsDomain,f=t.pmOrigin,p=t.propertyHref,y=t.pubData,b=t.msgOrigin,v=this.campaignResponse,d=v.actions,m=v.applies,h=v.cookies;return window._sp_.gdpr.deleteConsentCookies=function(){return Object(c.a)(o)},Object(n.setStateStorageInMemory)(m,"cookies","applies",this.category),Promise.all((d||[]).map(n.executeAction)).then((function(t){return Object(n.setCookiesAction)(h,l,e.category)})).then((function(){!1===u&&Object.assign(window._sp_.gdpr,Object(a.a)(o,l,e.propertyId)),m||e.cmpApi.update(null),window._sp_.gdpr.loadPrivacyManagerModal=function(t,u,a,c){return(t?Promise.resolve(t):function(e,t,r){return(s=s||Object(n.getStateStorageFromMemory)("childPmId",null,"gdpr"))?Promise.resolve(s):r?Object(n.fetch)("".concat(e,"/privacy-manager/childPmId"),{method:"GET",headers:{"Content-Type":"application/json"},params:{groupPmId:r,siteId:t}}).then(JSON.parse).then((funcLine truncated
|
||||||
+110
@@ -0,0 +1,110 @@
|
|||||||
|
/*******************************************************************************
|
||||||
|
|
||||||
|
uBlock Origin - a browser extension to block requests.
|
||||||
|
Copyright (C) 2019-present Raymond Hill
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see {http://www.gnu.org/licenses/}.
|
||||||
|
|
||||||
|
Home: https://github.com/gorhill/uBlock
|
||||||
|
*/
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
'use strict';
|
||||||
|
// https://developers.google.com/analytics/devguides/collection/analyticsjs/
|
||||||
|
const noopfn = function() {
|
||||||
|
};
|
||||||
|
//
|
||||||
|
const Tracker = function() {
|
||||||
|
};
|
||||||
|
const p = Tracker.prototype;
|
||||||
|
p.get = noopfn;
|
||||||
|
p.set = noopfn;
|
||||||
|
p.send = noopfn;
|
||||||
|
//
|
||||||
|
const w = window;
|
||||||
|
const gaName = w.GoogleAnalyticsObject || 'ga';
|
||||||
|
const gaQueue = w[gaName];
|
||||||
|
// https://github.com/uBlockOrigin/uAssets/pull/4115
|
||||||
|
const ga = function() {
|
||||||
|
const len = arguments.length;
|
||||||
|
if ( len === 0 ) { return; }
|
||||||
|
const args = Array.from(arguments);
|
||||||
|
let fn;
|
||||||
|
let a = args[len-1];
|
||||||
|
if ( a instanceof Object && a.hitCallback instanceof Function ) {
|
||||||
|
fn = a.hitCallback;
|
||||||
|
} else if ( a instanceof Function ) {
|
||||||
|
fn = ( ) => { a(ga.create()); };
|
||||||
|
} else {
|
||||||
|
const pos = args.indexOf('hitCallback');
|
||||||
|
if ( pos !== -1 && args[pos+1] instanceof Function ) {
|
||||||
|
fn = args[pos+1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ( fn instanceof Function === false ) { return; }
|
||||||
|
try {
|
||||||
|
fn();
|
||||||
|
} catch (ex) {
|
||||||
|
}
|
||||||
|
};
|
||||||
|
ga.create = function() {
|
||||||
|
return new Tracker();
|
||||||
|
};
|
||||||
|
ga.getByName = function() {
|
||||||
|
return new Tracker();
|
||||||
|
};
|
||||||
|
ga.getAll = function() {
|
||||||
|
return [new Tracker()];
|
||||||
|
};
|
||||||
|
ga.remove = noopfn;
|
||||||
|
// https://github.com/uBlockOrigin/uAssets/issues/2107
|
||||||
|
ga.loaded = true;
|
||||||
|
w[gaName] = ga;
|
||||||
|
// https://github.com/gorhill/uBlock/issues/3075
|
||||||
|
const dl = w.dataLayer;
|
||||||
|
if ( dl instanceof Object ) {
|
||||||
|
if ( dl.hide instanceof Object && typeof dl.hide.end === 'function' ) {
|
||||||
|
dl.hide.end();
|
||||||
|
dl.hide.end = ()=>{};
|
||||||
|
}
|
||||||
|
if ( typeof dl.push === 'function' ) {
|
||||||
|
const doCallback = function(item) {
|
||||||
|
if ( item instanceof Object === false ) { return; }
|
||||||
|
if ( typeof item.eventCallback !== 'function' ) { return; }
|
||||||
|
setTimeout(item.eventCallback, 1);
|
||||||
|
item.eventCallback = ()=>{};
|
||||||
|
};
|
||||||
|
dl.push = new Proxy(dl.push, {
|
||||||
|
apply: function(target, thisArg, args) {
|
||||||
|
doCallback(args[0]);
|
||||||
|
return Reflect.apply(target, thisArg, args);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if ( Array.isArray(dl) ) {
|
||||||
|
const q = dl.slice();
|
||||||
|
for ( const item of q ) {
|
||||||
|
doCallback(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// empty ga queue
|
||||||
|
if ( gaQueue instanceof Function && Array.isArray(gaQueue.q) ) {
|
||||||
|
const q = gaQueue.q.slice();
|
||||||
|
gaQueue.q.length = 0;
|
||||||
|
for ( const entry of q ) {
|
||||||
|
ga(...entry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})();
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html><head>
|
||||||
|
<meta http-equiv="content-type" content="text/html; charset=UTF-8"><meta charset="utf-8"><script defer="defer" src="m-outer-3437aaddcdf6922d623e172c2d6f9278_data/m-outer-15a2b40a058ddff1cffdb63779fe3de1_05Q6.js"></script></head><body><iframe src="https://m.stripe.network/inner.html#url=https%3A%2F%2Fwww.bloomberg.com%2Fmarkets%2Fstocks%2Fworld-indexes%2Feurope-africa-middle-east&title=European%2C%20Middle%20Eastern%20%26%20African%20Stocks%20-%20Bloomberg%20-%20Bloomberg%20Markets&referrer=https%3A%2F%2Fwww.bloomberg.com%2Fmarkets%2Fstocks%2Ffutures&muid=NA&sid=NA&version=6&preview=false&__shared_params__[version]=basil"></iframe></body></html>
|
||||||
+2
@@ -0,0 +1,2 @@
|
|||||||
|
<html><head>
|
||||||
|
<meta http-equiv="content-type" content="text/html; charset=UTF-8"></head><body></body></html>
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
!function(){"use strict";var e="https://m.stripe.network",n=window.location.hash,t=/preview=true/.test(n)?"inner-preview.html":"inner.html",o=document.createElement("iframe");o.src="".concat(e,"/").concat(t).concat(n);var i=function(n){if(n.origin===e){var t=window.opener||window.parent||window;if(!t)return;t.postMessage(n.data,"*")}else o.contentWindow.postMessage(n.data,"*")};window.addEventListener?window.addEventListener("message",i,!1):window.attachEvent("onMessage",i),document.body&&document.body.appendChild(o)}();
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[179],{84878:function(e,t){"use strict";function r(){return""}Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"getDeploymentIdQueryOrEmptyString",{enumerable:!0,get:function(){return r}})},40037:function(){"trimStart"in String.prototype||(String.prototype.trimStart=String.prototype.trimLeft),"trimEnd"in String.prototype||(String.prototype.trimEnd=String.prototype.trimRight),"description"in Symbol.prototype||Object.defineProperty(Symbol.prototype,"description",{configurable:!0,get:function(){var e=/\((.*)\)/.exec(this.toString());return e?e[1]:void 0}}),Array.prototype.flat||(Array.prototype.flat=function(e,t){return t=this.concat.apply([],this),e>1&&t.some(Array.isArray)?t.flat(e-1):t},Array.prototype.flatMap=function(e,t){return this.map(e,t).flat()}),Promise.prototype.finally||(Promise.prototype.finally=function(e){if("function"!=typeof e)return this.then(e,e);var t=this.constructor||Promise;return this.then(function(r){return t.resolve(e()).then(function(){return r})},function(r){return t.resolve(e()).then(function(){throw r})})}),Object.fromEntries||(Object.fromEntries=function(e){return Array.from(e).reduce(function(e,t){return e[t[0]]=t[1],e},{})}),Array.prototype.at||(Array.prototype.at=function(e){var t=Math.trunc(e)||0;if(t<0&&(t+=this.length),!(t<0||t>=this.length))return this[t]}),Object.hasOwn||(Object.hasOwn=function(e,t){if(null==e)throw TypeError("Cannot convert undefined or null to object");return Object.prototype.hasOwnProperty.call(Object(e),t)}),"canParse"in URL||(URL.canParse=function(e,t){try{return new URL(e,t),!0}catch(e){return!1}})},89470:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"addBasePath",{enumerable:!0,get:function(){return a}});let n=r(46286),o=r(98337);function a(e,t){return(0,o.normalizePathTrailingSlash)((0,n.addPathPrefix)(e,""))}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},65490:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"addLocale",{enumerable:!0,get:function(){return o}});let n=r(98337),o=function(e){for(var t=arguments.length,o=Array(t>1?t-1:0),a=1;a<t;a++)o[a-1]=arguments[a];return(0,n.normalizePathTrailingSlash)(r(3913).addLocale(e,...o))};("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},85708:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{ACTION:function(){return n},FLIGHT_PARAMETERS:function(){return s},NEXT_DID_POSTPONE_HEADER:function(){return c},NEXT_ROUTER_PREFETCH_HEADER:function(){return a},NEXT_ROUTER_STATE_TREE:function(){return o},NEXT_RSC_UNION_QUERY:function(){return l},NEXT_URL:function(){return i},RSC_CONTENT_TYPE_HEADER:function(){return u},RSC_HEADER:function(){return r}});let r="RSC",n="Next-Action",o="Next-Router-State-Tree",a="Next-Router-Prefetch",i="Next-Url",u="text/x-component",s=[[r],[o],[a]],l="_rsc",c="x-nextjs-postponed";("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},17169:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"getSocketUrl",{enumerable:!0,get:function(){return o}});let n=r(53395);function o(e){let t=(0,n.normalizedAssetPrefix)(e),r=function(e){let t=window.location.protocol;try{t=new URL(e).protocol}catch(e){}return"http:"===t?"ws:":"wss:"}(e||"");if(URL.canParse(t))return t.replace(/^http/,"ws");let{hostname:o,port:a}=window.location;return r+"//"+o+(a?":"+a:"")+t}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},84920:function(e,t,r){"use strict";let n;Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{addMessageListener:function(){return i},connectHMR:function(){return l},sendMessage:function(){return u}});let o=r(17169),a=[];function i(e){a.push(e)}function u(e){if(n&&n.readyState===n.OPEN)return n.send(e)}let s=0;function l(e){!function t(){let r;function i(){if(n.onerror=null,n.onclose=null,n.close(),++s>25){window.location.reload();return}clearTimeout(r),r=setTimeout(t,s>5?5e3:1e3)}n&&n.close();let u=(0,o.getSocketUrl)(e.assetPrefix);(n=new window.WebSocket(""+u+e.path)).onopen=function(){s=0,window.console.log("[HMR]Line truncated
|
||||||
BIN
Binary file not shown.
|
After Width: | Height: | Size: 6.8 KiB |
+1
@@ -0,0 +1 @@
|
|||||||
|
!function(){var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function e(t){var e={exports:{}};return t(e,e.exports),e.exports}var r,n,o=function(t){return t&&t.Math===Math&&t},i=o("object"==typeof globalThis&&globalThis)||o("object"==typeof window&&window)||o("object"==typeof self&&self)||o("object"==typeof t&&t)||o("object"==typeof t&&t)||function(){return this}()||Function("return this")(),a=function(t){try{return!!t()}catch(t){return!0}},u=!a(function(){return 7!==Object.defineProperty({},1,{get:function(){return 7}})[1]}),s=!a(function(){var t=function(){}.bind();return"function"!=typeof t||t.hasOwnProperty("prototype")}),c=Function.prototype.call,f=s?c.bind(c):function(){return c.apply(c,arguments)},l={}.propertyIsEnumerable,h=Object.getOwnPropertyDescriptor,p=h&&!l.call({1:2},1)?function(t){var e=h(this,t);return!!e&&e.enumerable}:l,v={f:p},d=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}},g=Function.prototype,y=g.call,m=s&&g.bind.bind(y,y),b=s?m:function(t){return function(){return y.apply(t,arguments)}},w=b({}.toString),S=b("".slice),E=function(t){return S(w(t),8,-1)},O=Object,x=b("".split),R=a(function(){return!O("z").propertyIsEnumerable(0)})?function(t){return"String"===E(t)?x(t,""):O(t)}:O,P=function(t){return null==t},A=TypeError,j=function(t){if(P(t))throw new A("Can't call method on "+t);return t},k=function(t){return R(j(t))},I="object"==typeof document&&document.all,T=void 0===I&&void 0!==I?function(t){return"function"==typeof t||t===I}:function(t){return"function"==typeof t},M=function(t){return"object"==typeof t?null!==t:T(t)},L=function(t,e){return arguments.length<2?T(r=i[t])?r:void 0:i[t]&&i[t][e];var r},U=b({}.isPrototypeOf),N=i.navigator,C=N&&N.userAgent,_=C?String(C):"",F=i.process,B=i.Deno,D=F&&F.versions||B&&B.version,z=D&&D.v8;z&&(n=(r=z.split("."))[0]>0&&r[0]<4?1:+(r[0]+r[1])),!n&&_&&(!(r=_.match(/Edge\/(\d+)/))||r[1]>=74)&&(r=_.match(/Chrome\/(\d+)/))&&(n=+r[1]);var W=n,q=i.String,H=!!Object.getOwnPropertySymbols&&!a(function(){var t=Symbol("symbol detection");return!q(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&W&&W<41}),$=H&&!Symbol.sham&&"symbol"==typeof Symbol.iterator,K=Object,G=$?function(t){return"symbol"==typeof t}:function(t){var e=L("Symbol");return T(e)&&U(e.prototype,K(t))},V=String,Y=function(t){try{return V(t)}catch(t){return"Object"}},X=TypeError,J=function(t){if(T(t))return t;throw new X(Y(t)+" is not a function")},Q=function(t,e){var r=t[e];return P(r)?void 0:J(r)},Z=TypeError,tt=Object.defineProperty,et=function(t,e){try{tt(i,t,{value:e,configurable:!0,writable:!0})}catch(r){i[t]=e}return e},rt=e(function(t){var e="__core-js_shared__",r=t.exports=i[e]||et(e,{});(r.versions||(r.versions=[])).push({version:"3.38.1",mode:"global",copyright:"© 2014-2024 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.38.1/LICENSE",source:"https://github.com/zloirock/core-js"})}),nt=function(t,e){return rt[t]||(rt[t]=e||{})},ot=Object,it=function(t){return ot(j(t))},at=b({}.hasOwnProperty),ut=Object.hasOwn||function(t,e){return at(it(t),e)},st=0,ct=Math.random(),ft=b(1..toString),lt=function(t){return"Symbol("+(void 0===t?"":t)+")_"+ft(++st+ct,36)},ht=i.Symbol,pt=nt("wks"),vt=$?ht.for||ht:ht&&ht.withoutSetter||lt,dt=function(t){return ut(pt,t)||(pt[t]=H&&ut(ht,t)?ht[t]:vt("Symbol."+t)),pt[t]},gt=TypeError,yt=dt("toPrimitive"),mt=function(t,e){if(!M(t)||G(t))return t;var r,n=Q(t,yt);if(n){if(void 0===e&&(e="default"),r=f(n,t,e),!M(r)||G(r))return r;throw new gt("Can't convert object to primitive value")}return void 0===e&&(e="number"),function(t,e){var r,n;if("string"===e&&T(r=t.toString)&&!M(n=f(r,t)))return n;if(T(r=t.valueOf)&&!M(n=f(r,t)))return n;if("string"!==e&&T(r=t.toString)&&!M(n=f(r,t)))return n;throw new Z("Can't convert object to primitive value")}(t,e)},bt=function(t){var e=mt(t,"string");return G(e)?e:e+""},wt=i.document,St=M(wt)&&M(wt.createElement),Et=function(t){return St?wt.createElement(t):{}},Ot=!u&&!a(function(){return 7!==Object.defineProperty(Et("div"),"a",{get:function(){return 7}}).a}),xt=Object.getOwnPropertyDescriptor,Rt={f:u?xt:function(t,e){if(t=k(t),e=bt(e),Ot)try{return xt(t,e)}catch(t){}if(ut(t,e))return d(!f(v.f,t,e),t[e])}},Pt=u&&a(function(){return 42!==Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype}),At=String,jt=TypeError,kt=function(t){if(M(t))return t;throw new jt(At(t)+" is not an object")},It=TypeError,Tt=Object.defineProperty,Mt=Object.getOwnPropertyDescriptor,Lt="enumerable",Ut="configurable",Nt="writable",Ct={f:u?Pt?function(t,e,r){if(kt(t),e=bt(e),kt(r),"function"==typeof t&&"prototype"===e&&"value"in r&&Nt in r&&!r[Nt]){var n=Mt(t,e);n&&n[Nt]&&(t[e]=r.value,r={configurable:Ut in r?r[Ut]:n[Ut],enumerable:Lt in r?r[Lt]:n[Lt],writable:!1})}return Tt(t,e,r)}:Tt:function(t,e,r){if(kt(t),e=bt(e),kt(r),Ot)try{return Tt(t,e,r)}catch(tLine truncated
|
||||||
+2
@@ -0,0 +1,2 @@
|
|||||||
|
/*! For license information please see sparkle.js.LICENSE.txt */
|
||||||
|
!function(){var e={4207:function(){window.__bloomberg__=window.__bloomberg__||{}},7722:function(){window.eventRecorder=window.eventRecorder||{cmd:[]}},4407:function(){window.googletag=window.googletag||{},window.googletag.cmd=window.googletag.cmd||[]},6798:function(){window.headertag=window.headertag||{},window.headertag.cmd=window.headertag.cmd||[]},4002:function(){window.Spritz=window.Spritz||{},window.Spritz.cmd=window.Spritz.cmd||[]},528:function(e,t,n){"use strict";n.r(t),n.d(t,{CmpClientLegacy:function(){return U},CmpClientScripts:function(){return T},cmpCookie:function(){return S},getCMPData:function(){return B},v2:function(){return g}});var i=n(5893);const r="sourcepointcmp.bloomberg.com",o="1425",s="_breg-uid",a="bbgconsentstring",c=2,u="5f29641df70e58290010d5aa",l="5f2c366203c8584077858803",d={ccpa:{ja:"私の個人情報を販売しない(カリフォルニア州消費者プライバシー法)",en:"Do Not Sell or Share My Personal Information"},gdpr:{ja:"クッキーを管理する",en:"Manage Cookies"}};var f;!function(e){e.GDPR='\n <script id="gdpr-stub-script">\n !function () { var e = function () { var e, t = "__tcfapiLocator", a = [], n = window; for (; n;) { try { if (n.frames[t]) { e = n; break } } catch (e) { } if (n === window.top) break; n = n.parent } e || (!function e() { var a = n.document, r = !!n.frames[t]; if (!r) if (a.body) { var i = a.createElement("iframe"); i.style.cssText = "display:none", i.name = t, a.body.appendChild(i) } else setTimeout(e, 5); return !r }(), n.__tcfapi = function () { for (var e, t = arguments.length, n = new Array(t), r = 0; r < t; r++)n[r] = arguments[r]; if (!n.length) return a; if ("setGdprApplies" === n[0]) n.length > 3 && 2 === parseInt(n[1], 10) && "boolean" == typeof n[3] && (e = n[3], "function" == typeof n[2] && n[2]("set", !0)); else if ("ping" === n[0]) { var i = { gdprApplies: e, cmpLoaded: !1, cmpStatus: "stub" }; "function" == typeof n[2] && n[2](i) } else a.push(n) }, n.addEventListener("message", (function (e) { var t = "string" == typeof e.data, a = {}; try { a = t ? JSON.parse(e.data) : e.data } catch (e) { } var n = a.__tcfapiCall; n && window.__tcfapi(n.command, n.version, (function (a, r) { var i = { __tcfapiReturn: { returnValue: a, success: r, callId: n.callId } }; t && (i = JSON.stringify(i)), e.source.postMessage(i, "*") }), n.parameter) }), !1)) }; "undefined" != typeof module ? module.exports = e : e() }();\n <\/script>\n ',e.CCPA='\n <script id="ccpa-stub-script">\n (function () { var e = false; var c = window; var t = document; function r() { if (!c.frames["__uspapiLocator"]) { if (t.body) { var a = t.body; var e = t.createElement("iframe"); e.style.cssText = "display:none"; e.name = "__uspapiLocator"; a.appendChild(e) } else { setTimeout(r, 5) } } } r(); function p() { var a = arguments; __uspapi.a = __uspapi.a || []; if (!a.length) { return __uspapi.a } else if (a[0] === "ping") { a[2]({ gdprAppliesGlobally: e, cmpLoaded: false }, true) } else { __uspapi.a.push([].slice.apply(a)) } } function l(t) { var r = typeof t.data === "string"; try { var a = r ? JSON.parse(t.data) : t.data; if (a.__cmpCall) { var n = a.__cmpCall; c.__uspapi(n.command, n.parameter, function (a, e) { var c = { __cmpReturn: { returnValue: a, success: e, callId: n.callId } }; t.source.postMessage(r ? JSON.stringify(c) : c, "*") }) } } catch (a) { } } if (typeof __uspapi !== "function") { c.__uspapi = p; __uspapi.msgHandler = l; c.addEventListener("message", l, false) } })();\n <\/script>\n ',e.GDPR_V2='\n <script id="gdpr-stub-script">\n function _typeof(t){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}!function(){for(var t,e,o=[],n=window,r=n;r;){try{if(r.frames.__tcfapiLocator){t=r;break}}catch(t){}if(r===n.top)break;r=n.parent}t||(function t(){var e=n.document,o=!!n.frames.__tcfapiLocator;if(!o)if(e.body){var r=e.createElement("iframe");r.style.cssText="display:none",r.name="__tcfapiLocator",e.body.appendChild(r)}else setTimeout(t,5);return!o}(),n.__tcfapi=function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];if(!n.length)return o;"setGdprApplies"===n[0]?n.length>3&&2===parseInt(n[1],10)&&"boolean"==typeof n[3]&&(e=n[3],"function"==typeof n[2]&&n[2]("set",!0)):"ping"===n[0]?"function"==typeof n[2]&&n[2]({gdprApplies:e,cmpLoaded:!1,cmpStatus:"stub"}):o.push(n)},n.addEventListener("message",(function(t){var e="string"==typeof t.data,o={};if(e)try{o=JSON.parse(t.data)}catch(t){}else o=t.data;var n="object"===_typeof(o)?o.__tcfapiCall:null;n&&window.__tcfapi(n.command,n.version,(function(o,r){var a={__tcfapiReturn:{returnValue:o,success:r,callId:n.callId}};t&&t.source&&t.source.postMessage&&t.source.postMessage(e?JSON.stringify(a):a,"*")}),n.parameter)}),!1))}();\n <\/scripLine truncated
|
||||||
+2
@@ -0,0 +1,2 @@
|
|||||||
|
/*! For license information please see sparkle.mjs.LICENSE.txt */
|
||||||
|
var e={4207:function(){window.__bloomberg__=window.__bloomberg__||{}},7722:function(){window.eventRecorder=window.eventRecorder||{cmd:[]}},4407:function(){window.googletag=window.googletag||{},window.googletag.cmd=window.googletag.cmd||[]},6798:function(){window.headertag=window.headertag||{},window.headertag.cmd=window.headertag.cmd||[]},4002:function(){window.Spritz=window.Spritz||{},window.Spritz.cmd=window.Spritz.cmd||[]},528:function(e,t,i){i.r(t),i.d(t,{CmpClientLegacy:function(){return U},CmpClientScripts:function(){return T},cmpCookie:function(){return S},getCMPData:function(){return B},v2:function(){return g}});var n=i(5893);const r="sourcepointcmp.bloomberg.com",s="1425",o="_breg-uid",a="bbgconsentstring",d=2,l="5f29641df70e58290010d5aa",c="5f2c366203c8584077858803",u={ccpa:{ja:"私の個人情報を販売しない(カリフォルニア州消費者プライバシー法)",en:"Do Not Sell or Share My Personal Information"},gdpr:{ja:"クッキーを管理する",en:"Manage Cookies"}};var h;!function(e){e.GDPR='\n <script id="gdpr-stub-script">\n !function () { var e = function () { var e, t = "__tcfapiLocator", a = [], n = window; for (; n;) { try { if (n.frames[t]) { e = n; break } } catch (e) { } if (n === window.top) break; n = n.parent } e || (!function e() { var a = n.document, r = !!n.frames[t]; if (!r) if (a.body) { var i = a.createElement("iframe"); i.style.cssText = "display:none", i.name = t, a.body.appendChild(i) } else setTimeout(e, 5); return !r }(), n.__tcfapi = function () { for (var e, t = arguments.length, n = new Array(t), r = 0; r < t; r++)n[r] = arguments[r]; if (!n.length) return a; if ("setGdprApplies" === n[0]) n.length > 3 && 2 === parseInt(n[1], 10) && "boolean" == typeof n[3] && (e = n[3], "function" == typeof n[2] && n[2]("set", !0)); else if ("ping" === n[0]) { var i = { gdprApplies: e, cmpLoaded: !1, cmpStatus: "stub" }; "function" == typeof n[2] && n[2](i) } else a.push(n) }, n.addEventListener("message", (function (e) { var t = "string" == typeof e.data, a = {}; try { a = t ? JSON.parse(e.data) : e.data } catch (e) { } var n = a.__tcfapiCall; n && window.__tcfapi(n.command, n.version, (function (a, r) { var i = { __tcfapiReturn: { returnValue: a, success: r, callId: n.callId } }; t && (i = JSON.stringify(i)), e.source.postMessage(i, "*") }), n.parameter) }), !1)) }; "undefined" != typeof module ? module.exports = e : e() }();\n <\/script>\n ',e.CCPA='\n <script id="ccpa-stub-script">\n (function () { var e = false; var c = window; var t = document; function r() { if (!c.frames["__uspapiLocator"]) { if (t.body) { var a = t.body; var e = t.createElement("iframe"); e.style.cssText = "display:none"; e.name = "__uspapiLocator"; a.appendChild(e) } else { setTimeout(r, 5) } } } r(); function p() { var a = arguments; __uspapi.a = __uspapi.a || []; if (!a.length) { return __uspapi.a } else if (a[0] === "ping") { a[2]({ gdprAppliesGlobally: e, cmpLoaded: false }, true) } else { __uspapi.a.push([].slice.apply(a)) } } function l(t) { var r = typeof t.data === "string"; try { var a = r ? JSON.parse(t.data) : t.data; if (a.__cmpCall) { var n = a.__cmpCall; c.__uspapi(n.command, n.parameter, function (a, e) { var c = { __cmpReturn: { returnValue: a, success: e, callId: n.callId } }; t.source.postMessage(r ? JSON.stringify(c) : c, "*") }) } } catch (a) { } } if (typeof __uspapi !== "function") { c.__uspapi = p; __uspapi.msgHandler = l; c.addEventListener("message", l, false) } })();\n <\/script>\n ',e.GDPR_V2='\n <script id="gdpr-stub-script">\n function _typeof(t){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}!function(){for(var t,e,o=[],n=window,r=n;r;){try{if(r.frames.__tcfapiLocator){t=r;break}}catch(t){}if(r===n.top)break;r=n.parent}t||(function t(){var e=n.document,o=!!n.frames.__tcfapiLocator;if(!o)if(e.body){var r=e.createElement("iframe");r.style.cssText="display:none",r.name="__tcfapiLocator",e.body.appendChild(r)}else setTimeout(t,5);return!o}(),n.__tcfapi=function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];if(!n.length)return o;"setGdprApplies"===n[0]?n.length>3&&2===parseInt(n[1],10)&&"boolean"==typeof n[3]&&(e=n[3],"function"==typeof n[2]&&n[2]("set",!0)):"ping"===n[0]?"function"==typeof n[2]&&n[2]({gdprApplies:e,cmpLoaded:!1,cmpStatus:"stub"}):o.push(n)},n.addEventListener("message",(function(t){var e="string"==typeof t.data,o={};if(e)try{o=JSON.parse(t.data)}catch(t){}else o=t.data;var n="object"===_typeof(o)?o.__tcfapiCall:null;n&&window.__tcfapi(n.command,n.version,(function(o,r){var a={__tcfapiReturn:{returnValue:o,success:r,callId:n.callId}};t&&t.source&&t.source.postMessage&&t.source.postMessage(e?JSON.stringify(a):a,"*")}),n.parameter)}),!1))}();\n <\/script>\n ',e.MSPS='\n
Line truncated
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
(()=>{"use strict";const e=/^http(.*)$/;function t(t){let r=t;e.test(r)||(r=location.protocol+r);const n=new URL(r),o=n.pathname.split("/").slice(-1)[0];return`${n.host}:${o}`}function r(e){return new Promise(((t,r)=>setTimeout(r,e)))}const n="script[src]";function o(e){const t={childList:!0},r=new MutationObserver(i.bind(null,e));r.observe(document.head,t),r.observe(document.body,t)}function i(e,r){r.forEach((r=>{Array.from(r.addedNodes).forEach((r=>{if(1!==r.nodeType||!r.matches(n))return;const o=t(r.src);e.add(o)})),Array.from(r.removedNodes).forEach((r=>{if(1!==r.nodeType||!r.matches(n))return;const o=t(r.src);e.delete(o)}))}))}function s(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if("object"!=typeof e||Array.isArray(e))return null;const t=Object.getPrototypeOf(e);return Object.getOwnPropertyNames(t).sort().join(":")}function u(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class c{constructor(e){u(this,"requestQueue",new Map),u(this,"loadedScripts",new Set),u(this,"version","1.2.0"),u(this,"cmd",[]);if(s(e)===s(this))return e;Array.from(document.scripts).forEach((e=>{if(!e.matches("script[src]"))return;const r=t(e.src);this.loadedScripts.add(r)})),o(this.loadedScripts),this.cmd=e&&e.cmd||[],this.cmd.push=e=>{"function"==typeof e&&e()}}isLoaded(e){const r=t(e);return this.loadedScripts.has(r)&&!this.requestQueue.has(r)}isRequested(e){const r=t(e);return this.requestQueue.has(r)}inject(e){let{timeout:n,ordered:o=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const i=t(e);return this.isRequested(e)?this.requestQueue.get(i):this.isLoaded(e)?Promise.resolve(e):(this.requestQueue.set(i,c.injectScript(e,document.head,o).then((e=>(this.requestQueue.delete(i),e)))),n?Promise.race([r(n),this.requestQueue.get(i)]).catch((()=>{throw this.requestQueue.delete(i),this.loadedScripts.delete(i),new Error(`ScriptInjector: Timed out loading "${e}" after ${n} ms`)})):this.requestQueue.get(i))}_flushQueue(){if(Array.isArray(this.cmd))for(;this.cmd.length;){const e=this.cmd.pop();"function"==typeof e&&e()}}static injectScript(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=document.createElement("script");return n.src=e,n.async=!r,new Promise(((r,o)=>{void 0!==n.onreadystatechange?n.onreadystatechange=function(){"loaded"===this.readyState&&(n.onreadystatechange=null,n=null,r(e))}:n.onload=n.onerror=function(i){if("error"===i.type)return o(`ScriptInjector: Error loading script "${e}"`),t.removeChild(n),n.onload=null,n.onerror=null,void(n=null);n.onload=null,n.onerror=null,n=null,r(e)},t.appendChild(n)}))}}const d=c;window.Spritz=new d(window.Spritz),window.Spritz._flushQueue()})();
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
var e={d:(t,r)=>{for(var o in r)e.o(r,o)&&!e.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:r[o]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)},t={};e.d(t,{t:()=>l});var r=/^http(.*)$/;function o(e){var t=e;r.test(t)||(t=location.protocol+t);var o=new URL(t),i=o.pathname.split("/").slice(-1)[0];return"".concat(o.host,":").concat(i)}function i(e){return new Promise(((t,r)=>setTimeout(r,e)))}var n="script[src]";function s(e){var t={childList:!0},r=new MutationObserver(a.bind(null,e));r.observe(document.head,t),r.observe(document.body,t)}function a(e,t){t.forEach((t=>{Array.from(t.addedNodes).forEach((t=>{if(1===t.nodeType&&t.matches(n)){var r=o(t.src);e.add(r)}})),Array.from(t.removedNodes).forEach((t=>{if(1===t.nodeType&&t.matches(n)){var r=o(t.src);e.delete(r)}}))}))}function c(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if("object"!=typeof e||Array.isArray(e))return null;var t=Object.getPrototypeOf(e);return Object.getOwnPropertyNames(t).sort().join(":")}function u(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,"string");if("object"!=typeof o)return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class d{constructor(e){if(u(this,"requestQueue",new Map),u(this,"loadedScripts",new Set),u(this,"version","1.2.0"),u(this,"cmd",[]),c(e)===c(this))return e;Array.from(document.scripts).forEach((e=>{if(e.matches("script[src]")){var t=o(e.src);this.loadedScripts.add(t)}})),s(this.loadedScripts),this.cmd=e&&e.cmd||[],this.cmd.push=e=>{"function"==typeof e&&e()}}isLoaded(e){var t=o(e);return this.loadedScripts.has(t)&&!this.requestQueue.has(t)}isRequested(e){var t=o(e);return this.requestQueue.has(t)}inject(e){var{timeout:t,ordered:r=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=o(e);return this.isRequested(e)?this.requestQueue.get(n):this.isLoaded(e)?Promise.resolve(e):(this.requestQueue.set(n,d.injectScript(e,document.head,r).then((e=>(this.requestQueue.delete(n),e)))),t?Promise.race([i(t),this.requestQueue.get(n)]).catch((()=>{throw this.requestQueue.delete(n),this.loadedScripts.delete(n),new Error('ScriptInjector: Timed out loading "'.concat(e,'" after ').concat(t," ms"))})):this.requestQueue.get(n))}_flushQueue(){if(Array.isArray(this.cmd))for(;this.cmd.length;){var e=this.cmd.pop();"function"==typeof e&&e()}}static injectScript(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=document.createElement("script");return o.src=e,o.async=!r,new Promise(((r,i)=>{void 0!==o.onreadystatechange?o.onreadystatechange=function(){"loaded"===this.readyState&&(o.onreadystatechange=null,o=null,r(e))}:o.onload=o.onerror=function(n){if("error"===n.type)return i('ScriptInjector: Error loading script "'.concat(e,'"')),t.removeChild(o),o.onload=null,o.onerror=null,void(o=null);o.onload=null,o.onerror=null,o=null,r(e)},t.appendChild(o)}))}}var l=new d(window.Spritz);window.Spritz=l,window.Spritz._flushQueue();var h=t.t;export{h as Spritz};
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
!function(){function e(t){var n=o[t];if(void 0!==n)return n.exports;var a=o[t]={id:t,loaded:!1,exports:{}};return r[t](a,a.exports,e),a.loaded=!0,a.exports}var t,n,r={2602:function(e,t,n){"use strict";function r(e){u.length||(i(),!0),u[u.length]=e}function o(){for(;d<u.length;){var e=d;if(d+=1,u[e].call(),d>1024){for(var t=0,n=u.length-d;t<n;t++)u[t]=u[t+d];u.length-=d,d=0}}u.length=0,d=0,!1}function a(e){return function(){function t(){clearTimeout(n),clearInterval(r),e()}var n=setTimeout(t,0),r=setInterval(t,50)}}e.exports=r;var i,c,s,l,u=[],d=0,p=void 0!==n.g?n.g:self,m=p.MutationObserver||p.WebKitMutationObserver;"function"==typeof m?(c=1,s=new m(o),l=document.createTextNode(""),s.observe(l,{characterData:!0}),i=function(){c=-c,l.data=c}):i=a(o),r.requestFlush=i,r.makeRequestCallFromTimer=a},20:function(e,t,n){e.exports=n.p+"fingerprinted/img/abnamro-4445e65420800f96f68cfc67a273f66b.svg"},7832:function(e,t,n){e.exports=n.p+"fingerprinted/img/asn-3d9b1bbff2f8f12105510992dbb37ae8.svg"},874:function(e,t,n){e.exports=n.p+"fingerprinted/img/bunq-4b42e7fb68fac0c5abb7ba3492115d81.svg"},2930:function(e,t,n){e.exports=n.p+"fingerprinted/img/ing-f4beb9f58834a82babe38427cec0ba95.svg"},2976:function(e,t,n){e.exports=n.p+"fingerprinted/img/knab-dbdf61d58d3004c23573158cb91e9569.svg"},8356:function(e,t,n){e.exports=n.p+"fingerprinted/img/n26-5ad3e0ae7677208c845a3b81e42bdd0e.svg"},7586:function(e,t,n){e.exports=n.p+"fingerprinted/img/nn-ef0da4b36142c28718ad24baedc58453.svg"},1310:function(e,t,n){e.exports=n.p+"fingerprinted/img/rabobank-dc5187e8413419975fda9a72a08c25a3.svg"},1022:function(e,t,n){e.exports=n.p+"fingerprinted/img/regiobank-d3d9929a79d4e6a127e09ea8abe201b9.svg"},5715:function(e,t,n){e.exports=n.p+"fingerprinted/img/revolut-bbd51dde92fa137e0060ac6210978827.svg"},1188:function(e,t,n){e.exports=n.p+"fingerprinted/img/sns-bfdac0e49115f2f30c9fe978b5221531.svg"},8070:function(e,t,n){e.exports=n.p+"fingerprinted/img/triodos-cf5d13d3dea9d1250d2b51a8eb0b53e8.svg"},3701:function(e,t,n){e.exports=n.p+"fingerprinted/img/vanlanschot-2b1bf938febce9173fe10ff6265e9657.svg"},3352:function(e,t,n){e.exports=n.p+"fingerprinted/img/yoursafe-c3cd00e5634e9c380c28ffe985359728.svg"},3145:function(e,t,n){e.exports=n.p+"fingerprinted/img/CitibankLogo-78480c77462a60a4b947afa68103eeb2.svg"},2560:function(e,t,n){e.exports=n.p+"fingerprinted/img/CompassLogo-deb285edc2544392b5e8312552670f3d.svg"},4583:function(e,t,n){e.exports=n.p+"fingerprinted/img/NavyFederalCreditUnionLogo-d9bc60bbdbe9ae0b1de004332c0ac5c3.svg"},5975:function(e,t,n){e.exports=n.p+"fingerprinted/img/SVBLogo-a98ea327388a832a6f6608656086126c.svg"},1154:function(e,t,n){e.exports=n.p+"fingerprinted/img/SuntrustLogo-1c62006661a287065c3df3572a091ba2.svg"},6038:function(e,t,n){e.exports=n.p+"fingerprinted/img/TDLogo-19c4074f388ea4ae4bad3574087cdafa.svg"},2140:function(e,t,n){e.exports=n.p+"fingerprinted/img/USAALogo-c03c680bb70106cbba083a46f5ec5594.svg"},9220:function(e,t,n){e.exports=n.p+"fingerprinted/img/USBankLogo-d95f3a6cdfc55215ddf752f5e034a548.svg"},4251:function(e,t,n){e.exports=n.p+"fingerprinted/img/amex-3440dd14f9308959e71dfef65267235f.svg"},8290:function(e,t,n){e.exports=n.p+"fingerprinted/img/mastercard-4868931ddf88ab0fc551d18a1a859ff7.svg"},8261:function(e,t,n){e.exports=n.p+"fingerprinted/img/visa-0daded1e4b9a21ae5304a6794bb9e46a.svg"},4059:function(e){"use strict";function t(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}var n=Object.getOwnPropertySymbols,r=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(e){return!1}}()?Object.assign:function(e){for(var a,i,c=t(e),s=1;s<arguments.length;s++){for(var l in a=Object(arguments[s]))r.call(a,l)&&(c[l]=a[l]);if(n){i=n(a);for(var u=0;u<i.length;u++)o.call(a,i[u])&&(c[i[u]]=a[i[u]])}}return c}},2689:function(e,t,n){"use strict";function r(){}function o(e){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("Promise constructor's argument is not a function");this._x=0,this._y=0,this._z=null,this._A=null,e!==r&&u(e,this)}function a(e,t){for(;3===e._y;)e=e._z;if(o._B&&o._B(e),0===e._y)return 0===e._x?(e._x=1,void(e._A=t)):1===e._x?(e._x=2,void(e._A=[e._A,t])):void e._A.push(t);!function(e,t){d((function(){var n=1===e._y?t.onFulfilled:t.onRejected;if(null!==n){var r=function(e,t){try{return e(t)}catch(e){return p=e,m}}(n,e._z);r===m?c(t.promise,p):i(t.promise,r)}else 1===e._y?i(t.promise,e._z):c(t.promise,e._z)}))}(e,t)}functioLine truncated
|
||||||
+100
@@ -0,0 +1,100 @@
|
|||||||
|
/*!********************************************************************************************************************************************************************************************************************!*\
|
||||||
|
!*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./src/components/BannerWrappers/ExpandableBanner/styles.module.scss ***!
|
||||||
|
\********************************************************************************************************************************************************************************************************************/
|
||||||
|
:root{--bowl-content-vh: 200vh;--base-pixel: 1px}html.jrL0vIGb2pDRSuYFnlLK{overflow-y:auto}body.jrL0vIGb2pDRSuYFnlLK{overflow:hidden !important;height:calc(var(--bowl-content-vh) + var(--base-pixel));width:100%}body.jrL0vIGb2pDRSuYFnlLK::before{content:"";position:fixed;top:0;right:0;bottom:0;left:0;background:linear-gradient(180deg, transparent, transparent, rgba(34, 34, 34, 0.6705882353));z-index:9998}body.bHw9W1zdunObX4S6WaIM{overflow:hidden;height:100vh}.dvz-v0-ad-top{position:relative;z-index:9999 !important}
|
||||||
|
/*!****************************************************************************************************************************************************************************************************************!*\
|
||||||
|
!*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./src/components/BannerWrappers/SlidingSheet/styles.module.scss ***!
|
||||||
|
\****************************************************************************************************************************************************************************************************************/
|
||||||
|
.uFThOrKy_ROXCB08el8B{position:fixed;bottom:0px;z-index:14678;display:block;width:100%;margin:0px;font-family:BWHaasGroteskWeb,BWHaasGroteskWeb-fallback,Helvetica,Arial,sans-serif;--color-black: black;--color-white: white;--color-gray-200: #efefef;left:initial;left:var(--banner-left, unset);right:initial;right:var(--banner-right, unset);max-width:100vw;max-width:var(--banner-max-width, 100vw);box-sizing:border-box;pointer-events:none}.uFThOrKy_ROXCB08el8B a,.uFThOrKy_ROXCB08el8B button{color:inherit;text-decoration:none}.uFThOrKy_ROXCB08el8B *{box-sizing:border-box}.uFThOrKy_ROXCB08el8B button{cursor:pointer}html.H4PGtbDfOEBnvPGCzcoa,body.H4PGtbDfOEBnvPGCzcoa{overflow:hidden !important;position:fixed !important;height:100% !important;width:100% !important;pointer-events:none !important}.UBW9aFX0nVee5eI7iNir body{width:100%;pointer-events:none;height:calc(100vh + 1px + var(--leaderboard-ad-height))}.UBW9aFX0nVee5eI7iNir .unsupported-browser-notification-container,.UBW9aFX0nVee5eI7iNir div[id=reg-ui-client],.UBW9aFX0nVee5eI7iNir nav,.UBW9aFX0nVee5eI7iNir div[id=modalContainer],.UBW9aFX0nVee5eI7iNir iframe{pointer-events:auto}.UBW9aFX0nVee5eI7iNir .Gp2dAdjEDfQX82vWZagw{height:100vh;overflow-y:hidden}.UBW9aFX0nVee5eI7iNir div[data-component=contextual-nav-container]{background-color:initial}.UBW9aFX0nVee5eI7iNir nav[data-component=nav]::after{content:"";position:absolute;width:100%;height:100vh;background:linear-gradient(180deg, rgba(255, 255, 255, 0.2) 0.57%, rgba(0, 0, 0, 0.4) 15.48%);z-index:10}@media screen and (max-width: 469px){.UBW9aFX0nVee5eI7iNir nav[data-component=nav]::after{background:linear-gradient(180deg, rgba(255, 255, 255, 0.2), rgba(0, 0, 0, 0.4) 18.3%)}}.vgwtwbg7zq7DRN5UTkL2{position:absolute;margin-left:8px;margin-bottom:10px;top:var(--toaster-top-position)}.bjFYdwMJ5SBZDLv0P_iM{position:fixed;bottom:0;height:100vh;overflow-y:hidden;z-index:9999}.DlF1cdmE44TWKoR2BQmj{position:absolute;left:1.5rem;top:1rem;width:1.5rem;height:1.5rem;background-color:rgba(0,0,0,0);transition-property:transform;transition-duration:500ms;color:currentColor;border-width:0;cursor:pointer;outline:0}.XHjYFcpcFQtIFzkf03Xz{display:flex;align-items:center;justify-content:space-between;min-height:60px}.r7PU5pPtcBfyZk7yi1Zq{height:100%;width:100%;text-align:center;display:flex;align-items:center;justify-content:center;padding-left:48px;padding-right:48px}.gOd8vE9XP37ZNrhcEO8o{will-change:transform;position:relative;height:var(--banner-height);top:200vh;width:100%;padding:0;pointer-events:auto}.gOd8vE9XP37ZNrhcEO8o.e0fvyukrpqtAOhcmlcfC{top:100vh}.gOd8vE9XP37ZNrhcEO8o.lQavdEW1XUimtPgYTqC1{animation:_ficZa0McC0rPWaHKaSH .75s forwards;animation-iteration-count:1}.gOd8vE9XP37ZNrhcEO8o.EM37iWv_83CXjXyTo0Ph{animation:RrAkMjPr4z71KKALGF5L .25s forwards;animation-iteration-count:1}.gOd8vE9XP37ZNrhcEO8o.w5KMxD5P2TS9c9WPxWce{transform:translateY(calc(-1 * var(--banner-visible-height)))}@keyframes _ficZa0McC0rPWaHKaSH{0%{transform:translateY(0px)}100%{transform:translateY(calc(-1 * var(--banner-height)))}}@keyframes RrAkMjPr4z71KKALGF5L{0%{transform:translateY(calc(-1 * var(--banner-height)))}100%{transform:translateY(calc(-1 * var(--banner-visible-height)))}}.pfLttCFqiVAQuBnpREY5{min-height:60px;display:flex;flex-direction:column;align-items:center;justify-content:center}.I4XJtowjJRZaKySvCJdc{height:24px}.MvFXhQi9CopiG5KJ82gc{height:55px;background:var(--banner-background)}@media screen and (min-width: 600px){.MvFXhQi9CopiG5KJ82gc{height:0px}}.hqK2xL_DMNT3ngpozjLc{overflow:hidden;display:flex;align-items:center;justify-content:center;padding-bottom:16px;font-size:16px;line-height:18px;padding-left:16px;padding-right:16px;width:100%}.gOd8vE9XP37ZNrhcEO8o,.iXFvjljX5OZzfPKi6CCg,.hqK2xL_DMNT3ngpozjLc{background:var(--banner-background);color:var(--banner-color)}.zIJ3UlIYNhYvfrbeWm5w{html-overflow:auto}.zIJ3UlIYNhYvfrbeWm5w body,.zIJ3UlIYNhYvfrbeWm5w html{height:100vh}.OeNEz2KoihvtAHH_ZDgi body{touch-action:none !important;position:fixed !important;top:calc(-1*var(--leaderboard-ad-height, 100));left:0;right:0}.OeNEz2KoihvtAHH_ZDgi body nav[data-component=nav]::after{content:"";position:absolute;width:100vw;height:100vh;background:linear-gradient(180deg, rgba(255, 255, 255, 0.2), rgba(0, 0, 0, 0.4) 18.3%);z-index:10}.ByjvVpwsD8WNtNM_6MDw{position:fixed;bottom:0;height:100vh;overflow-y:hidden;z-index:9999;pointer-events:none}.sDOddkmtQWHsgnhcUjnn{top:calc(100vh - var(--banner-height))}
|
||||||
|
/*!************************************************************************************************************************************************************************************************************************!*\
|
||||||
|
!*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./src/components/EmbeddedCheckout/TermsAndConditions/styles.module.scss ***!
|
||||||
|
\************************************************************************************************************************************************************************************************************************/
|
||||||
|
.msTHv_GewLRklN3D_ikx.msTHv_GewLRklN3D_ikx p{font-family:"BWHaasGroteskWeb","Helvetica",sans-serif;font-style:normal;font-weight:400;font-size:14px;line-height:16px;text-align:left;color:var(--banner-color)}.KYSDiNscEnLFgClPOoqO .msTHv_GewLRklN3D_ikx.msTHv_GewLRklN3D_ikx p{font-family:"Noto Sans JP","BWHaasGroteskWeb","Helvetica",sans-serif}.o7y0nzob2tvIYLxj_4Uh:hover{cursor:pointer}.d6_9aqaI9Gfo0h8_xosa,.d6_9aqaI9Gfo0h8_xosa.d6_9aqaI9Gfo0h8_xosa p:last-of-type{align-items:flex-start;margin-top:0px;font-family:"BWHaasGroteskWeb","Helvetica",sans-serif;font-style:normal;font-weight:400;font-size:14px;line-height:16px;color:var(--banner-color)}.KYSDiNscEnLFgClPOoqO .d6_9aqaI9Gfo0h8_xosa,.KYSDiNscEnLFgClPOoqO .d6_9aqaI9Gfo0h8_xosa.d6_9aqaI9Gfo0h8_xosa p:last-of-type{font-family:"Noto Sans JP","BWHaasGroteskWeb","Helvetica",sans-serif}.MvoGlIque3QLwRw4_e1R,.MvoGlIque3QLwRw4_e1R.MvoGlIque3QLwRw4_e1R p:last-of-type{color:#f34f4e}.PdjNfTy1TMJPHdjSXI0r{width:min(335px,100vw);height:auto;margin:5px auto 16px;padding:0 5px;display:flex;flex-direction:column;gap:16px}@media screen and (min-width: 600px){.PdjNfTy1TMJPHdjSXI0r{margin-bottom:24px;width:min(568px,100vw)}}.RuFoRlt5reHCos5axD4a{gap:16px;margin:0 auto}@media screen and (min-width: 600px){.RuFoRlt5reHCos5axD4a{gap:20px}}.WNRSluCQhQWn778xNDfL{display:flex;flex-direction:column;gap:8px}.ZUqgolYnZus9pqOnRtQp{font-family:"BWHaasGroteskWeb","Helvetica",sans-serif;font-size:14px;line-height:normal;color:var(--banner-color);margin:0}.KYSDiNscEnLFgClPOoqO .ZUqgolYnZus9pqOnRtQp{font-family:"Noto Sans JP","BWHaasGroteskWeb","Helvetica",sans-serif}.j9YJ0YH7Xws8D4EUo8_b{font-family:"BWHaasGroteskWeb","Helvetica",sans-serif;font-weight:700;font-style:normal}.KYSDiNscEnLFgClPOoqO .j9YJ0YH7Xws8D4EUo8_b{font-family:"Noto Sans JP","BWHaasGroteskWeb","Helvetica",sans-serif}.XTT3atSSaVH10TQG2Ckx{font-family:"BWHaasGroteskWeb","Helvetica",sans-serif;font-style:italic;font-weight:400}.KYSDiNscEnLFgClPOoqO .XTT3atSSaVH10TQG2Ckx{font-family:"Noto Sans JP","BWHaasGroteskWeb","Helvetica",sans-serif}.YSrhrZwcUSr5ahJMFLZV{display:flex;flex-direction:column}.YSrhrZwcUSr5ahJMFLZV p{font-family:"BWHaasGroteskWeb","Helvetica",sans-serif;font-style:normal;font-weight:400;font-size:14px;line-height:normal;text-align:left;color:var(--banner-color);margin:0 0 6px 0}.KYSDiNscEnLFgClPOoqO .YSrhrZwcUSr5ahJMFLZV p{font-family:"Noto Sans JP","BWHaasGroteskWeb","Helvetica",sans-serif}.YSrhrZwcUSr5ahJMFLZV p:last-child{margin-bottom:0}
|
||||||
|
/*!******************************************************************************************************************************************************************************************************************!*\
|
||||||
|
!*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./src/components/ComponentsForExpandableBanner/styles.module.scss ***!
|
||||||
|
\******************************************************************************************************************************************************************************************************************/
|
||||||
|
.itBv_TPl1U_Ppy0WU0BF{position:absolute;left:1.5rem;top:1.5rem;width:1.5rem;height:1.5rem;background-color:rgba(0,0,0,0);transition-property:transform;transition-duration:500ms;color:currentColor;border-width:0;cursor:pointer;outline:0}.nQdpMTWnmZDVagPskrPY{color:#000;padding-bottom:20px}.jGMSwvzVsCufmJq2SmOq{height:44px}.jGMSwvzVsCufmJq2SmOq div{margin:0}.u0Sr0acO2TbPfopah2S4{display:flex;justify-content:center;align-items:center;text-align:center}.u0Sr0acO2TbPfopah2S4 .dBqFiFdKbt4lHt3tVf00{font-size:14px;color:var(--banner-color)}.u0Sr0acO2TbPfopah2S4 .dBqFiFdKbt4lHt3tVf00.mcBTcCQfL03TgNHpu5f5{font-weight:bold}.u0Sr0acO2TbPfopah2S4 button{margin:0 0 0 5px;text-decoration:underline;padding:0 !important;min-width:0 !important}.iQOYzym0NjkBZAJ0MUww{margin-bottom:20px;display:none;text-align:center}@media screen and (min-width: 470px){.iQOYzym0NjkBZAJ0MUww{display:flex}}.LJWpY1Oabgl21pf46szG{margin-bottom:20px;display:block;text-align:center}.GykiumNIohTtrB62acV3{margin:25px 0 0 0;flex-flow:column;flex-direction:column;justify-content:center}@media screen and (min-width: 470px){.GykiumNIohTtrB62acV3{display:none}}.GykiumNIohTtrB62acV3 .CWSMrTmvol1QmOqL96P_{display:flex;align-items:center}.GykiumNIohTtrB62acV3 button{height:20px !important}.iszx62HPadgT28h2NOD8{color:var(--banner-color) !important}.sMDGntobuKjJdgkUI64x{display:flex;flex-direction:column;align-items:center;padding-bottom:1rem}.sMDGntobuKjJdgkUI64x .tDT2mzt6LbaHqiWrZe7w{margin-bottom:10px;font-size:24px;line-height:26px;font-weight:bold;font-family:"BWHaasGroteskWeb","Helvetica",sans-serif;font-weight:700;-webkit-font-smoothing:antialiased;text-align:center;padding-bottom:unset;width:auto}.jMByS1ad7Z7z8egrlETy .sMDGntobuKjJdgkUI64x .tDT2mzt6LbaHqiWrZe7w{font-family:"Noto Sans JP","BWHaasGroteskWeb","Helvetica",sans-serif}@media screen and (min-width: 760px){.sMDGntobuKjJdgkUI64x .tDT2mzt6LbaHqiWrZe7w{font-size:28px;line-height:30px}}@media screen and (min-width: 1020px){.sMDGntobuKjJdgkUI64x .tDT2mzt6LbaHqiWrZe7w{font-size:32px;line-height:32px;max-width:1000px}}@media screen and (min-width: 1280px){.sMDGntobuKjJdgkUI64x .tDT2mzt6LbaHqiWrZe7w{max-width:1230px}}.sMDGntobuKjJdgkUI64x .tDT2mzt6LbaHqiWrZe7w.jckW3lRV_2EszAsE70EZ{color:#fff}.sMDGntobuKjJdgkUI64x .tDT2mzt6LbaHqiWrZe7w.iZfmMhzslxL3P7QRIkqT{color:#000}.sMDGntobuKjJdgkUI64x .tDT2mzt6LbaHqiWrZe7w.aFxNO0SfQsoscaEVPRuf{font-size:20px}.sMDGntobuKjJdgkUI64x .l0snuYeZTNXFJESuvy2L{margin-bottom:15px;display:none}@media screen and (min-width: 600px){.sMDGntobuKjJdgkUI64x .l0snuYeZTNXFJESuvy2L{display:block}}.sMDGntobuKjJdgkUI64x .l0snuYeZTNXFJESuvy2L .rm1X5xENrYx3L6BzFPnC{display:flex}.sMDGntobuKjJdgkUI64x .l0snuYeZTNXFJESuvy2L .y9NrcQVp_2W6eVtfbYaQ{font-weight:400}.sMDGntobuKjJdgkUI64x .l0snuYeZTNXFJESuvy2L .y9NrcQVp_2W6eVtfbYaQ ._J4uZf_E_tEi04VPempr{display:block;text-align:center}.sMDGntobuKjJdgkUI64x .l0snuYeZTNXFJESuvy2L .y9NrcQVp_2W6eVtfbYaQ .agdp_77ugs0CuyeYRYit{font-size:14px}.sMDGntobuKjJdgkUI64x .l0snuYeZTNXFJESuvy2L .y9NrcQVp_2W6eVtfbYaQ .jLNLBCH7GihHnBYS5UPG{font-size:16px}.sMDGntobuKjJdgkUI64x .l0snuYeZTNXFJESuvy2L .y9NrcQVp_2W6eVtfbYaQ .XK9_WhgkwV1Fm02yX6is{color:var(--color-black)}.sMDGntobuKjJdgkUI64x .l0snuYeZTNXFJESuvy2L .y9NrcQVp_2W6eVtfbYaQ .RQA0PzrqendGVzOe3h3g{color:var(--color-white)}.sMDGntobuKjJdgkUI64x .ldKfDUOBYA0PgMuDZZKV{margin-bottom:20px;font-size:24px;line-height:26px;font-weight:bold;font-family:"BWHaasGroteskWeb","Helvetica",sans-serif;font-weight:700;-webkit-font-smoothing:antialiased;text-align:center}.jMByS1ad7Z7z8egrlETy .sMDGntobuKjJdgkUI64x .ldKfDUOBYA0PgMuDZZKV{font-family:"Noto Sans JP","BWHaasGroteskWeb","Helvetica",sans-serif}.sMDGntobuKjJdgkUI64x .ldKfDUOBYA0PgMuDZZKV div{font-size:24px;line-height:26px;width:335px;height:auto}.sMDGntobuKjJdgkUI64x .ldKfDUOBYA0PgMuDZZKV.tJdFAYVOwpIIN58t85Sj div{width:375px}@media screen and (min-width: 600px){.sMDGntobuKjJdgkUI64x .ldKfDUOBYA0PgMuDZZKV{display:none}}.sMDGntobuKjJdgkUI64x .ldKfDUOBYA0PgMuDZZKV.jckW3lRV_2EszAsE70EZ{color:#fff}.sMDGntobuKjJdgkUI64x .ldKfDUOBYA0PgMuDZZKV.iZfmMhzslxL3P7QRIkqT{color:#000}.sMDGntobuKjJdgkUI64x .ldKfDUOBYA0PgMuDZZKV .rm1X5xENrYx3L6BzFPnC{display:flex;align-items:center}.sMDGntobuKjJdgkUI64x .ldKfDUOBYA0PgMuDZZKV .rm1X5xENrYx3L6BzFPnC:not(.VVwLwonlorIZuvrN7_KJ) span,.sMDGntobuKjJdgkUI64x .ldKfDUOBYA0PgMuDZZKV .rm1X5xENrYx3L6BzFPnC:not(.VVwLwonlorIZuvrN7_KJ) div{font-size:20px}.sMDGntobuKjJdgkUI64x .ldKfDUOBYA0PgMuDZZKV .rm1X5xENrYx3L6BzFPnC.VVwLwonlorIZuvrN7_KJ{margin-bottom:16px}.sMDGntobuKjJdgkUI64x .ldKfDUOBYA0PgMuDZZKV .y9NrcQVp_2W6eVtfbYaQ{font-weight:400}.sMDGntobuKjJdgkUI64x .ldKfDUOBYA0PgMuDZZKV .y9NrcQVp_2W6eVtfbYaQ ._J4uZf_E_tEi04VPempr{display:block;text-align:center}.sMDGntobuKjJdgkUI64x .ldKfDUOBYA0PgMuDZZKV .y9NrcQVp_2W6eVtfbYaQ .agdp_77ugs0CuyeYRYit{font-size:14px}.sMDGntobuKjJdgkUI64x .ldKfDUOBYA0PgMuDZZKV .y9NrcQVp_2W6eVtfbYaQ .jLNLBCH7GihHnBYS5UPG{font-size:16px}.sMDGntobuKjJdgkUI64x .ldKfDUOBYA0PgMuDZZKV .y9NrcQVp_2W6eVtfbYaQ .XK9_WhgkwV1Fm02yX6is{color:var(Line truncated
|
||||||
|
/*!****************************************************************************************************************************************************************************************************************************!*\
|
||||||
|
!*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./src/components/EmbeddedCheckout/expandablePaywallBannerStyles.module.scss ***!
|
||||||
|
\****************************************************************************************************************************************************************************************************************************/
|
||||||
|
.TuNJV5mjRS189g9cjRAB{position:absolute;left:1.5rem;top:1.5rem;width:1.5rem;height:1.5rem;background-color:rgba(0,0,0,0);transition-property:transform;transition-duration:500ms;color:currentColor;border-width:0;cursor:pointer;outline:0}.p3j2YEAnuOyMRZTyl5En{display:flex;flex-direction:column;align-items:center;padding-bottom:1rem}.p3j2YEAnuOyMRZTyl5En .c82JDQADVlZQmFmxsCsd{margin-bottom:10px;font-size:24px;line-height:26px;font-weight:bold;font-family:"BWHaasGroteskWeb","Helvetica",sans-serif;font-weight:700;-webkit-font-smoothing:antialiased;text-align:center;padding-bottom:unset}.iZBIg1HWRXcfVquZqfYp .p3j2YEAnuOyMRZTyl5En .c82JDQADVlZQmFmxsCsd{font-family:"Noto Sans JP","BWHaasGroteskWeb","Helvetica",sans-serif}@media screen and (min-width: 760px){.p3j2YEAnuOyMRZTyl5En .c82JDQADVlZQmFmxsCsd{font-size:28px;line-height:30px}}@media screen and (min-width: 1020px){.p3j2YEAnuOyMRZTyl5En .c82JDQADVlZQmFmxsCsd{font-size:30px;line-height:32px;max-width:1000px}}@media screen and (min-width: 1280px){.p3j2YEAnuOyMRZTyl5En .c82JDQADVlZQmFmxsCsd{max-width:1230px}}.p3j2YEAnuOyMRZTyl5En .c82JDQADVlZQmFmxsCsd._tyJbcuf9CWAzhTqUtIA{color:#fff}.p3j2YEAnuOyMRZTyl5En .c82JDQADVlZQmFmxsCsd.mO98gQnw6Ylr4PXz0ZKZ{color:#000}.p3j2YEAnuOyMRZTyl5En .c82JDQADVlZQmFmxsCsd.iLP7bSCwP20pppTqCyGp{font-size:20px}.p3j2YEAnuOyMRZTyl5En .KM5Guf2ichxZShOD6Bzj{margin-bottom:15px;display:none}@media screen and (min-width: 600px){.p3j2YEAnuOyMRZTyl5En .KM5Guf2ichxZShOD6Bzj{display:block}}.p3j2YEAnuOyMRZTyl5En .KM5Guf2ichxZShOD6Bzj .Xg_tz3By_8pejeVFS0dg{display:flex;align-items:center}.p3j2YEAnuOyMRZTyl5En .KM5Guf2ichxZShOD6Bzj .MshQbxJ5tTr45Lxbp31t{font-weight:400}.p3j2YEAnuOyMRZTyl5En .KM5Guf2ichxZShOD6Bzj .MshQbxJ5tTr45Lxbp31t .v9peNh0iv7rlutFWvyJP{display:block;text-align:center}.p3j2YEAnuOyMRZTyl5En .KM5Guf2ichxZShOD6Bzj .MshQbxJ5tTr45Lxbp31t .KjAK9mqBjhcl3zceq7Nk{font-size:14px}.p3j2YEAnuOyMRZTyl5En .KM5Guf2ichxZShOD6Bzj .MshQbxJ5tTr45Lxbp31t .PfATBmb4UbJjmbOCLArt{font-size:16px}.p3j2YEAnuOyMRZTyl5En .KM5Guf2ichxZShOD6Bzj .MshQbxJ5tTr45Lxbp31t .gmXcR0hry5PwafNkBs2A{color:var(--color-black)}.p3j2YEAnuOyMRZTyl5En .KM5Guf2ichxZShOD6Bzj .MshQbxJ5tTr45Lxbp31t .MrTid0VehlvDFB_Pylr1{color:var(--color-white)}.p3j2YEAnuOyMRZTyl5En .lY0aOpSI3G6ZWpbtgiRp{margin-bottom:20px;font-size:24px;line-height:26px;font-weight:bold;font-family:"BWHaasGroteskWeb","Helvetica",sans-serif;font-weight:700;-webkit-font-smoothing:antialiased;text-align:center}.iZBIg1HWRXcfVquZqfYp .p3j2YEAnuOyMRZTyl5En .lY0aOpSI3G6ZWpbtgiRp{font-family:"Noto Sans JP","BWHaasGroteskWeb","Helvetica",sans-serif}@media screen and (min-width: 600px){.p3j2YEAnuOyMRZTyl5En .lY0aOpSI3G6ZWpbtgiRp{display:none}}.p3j2YEAnuOyMRZTyl5En .lY0aOpSI3G6ZWpbtgiRp._tyJbcuf9CWAzhTqUtIA{color:#fff}.p3j2YEAnuOyMRZTyl5En .lY0aOpSI3G6ZWpbtgiRp.mO98gQnw6Ylr4PXz0ZKZ{color:#000}.p3j2YEAnuOyMRZTyl5En .lY0aOpSI3G6ZWpbtgiRp .Xg_tz3By_8pejeVFS0dg{display:flex;align-items:center;font-size:20px;margin-bottom:16px}.p3j2YEAnuOyMRZTyl5En .lY0aOpSI3G6ZWpbtgiRp .MshQbxJ5tTr45Lxbp31t{font-weight:400}.p3j2YEAnuOyMRZTyl5En .lY0aOpSI3G6ZWpbtgiRp .MshQbxJ5tTr45Lxbp31t .v9peNh0iv7rlutFWvyJP{display:block;text-align:center}.p3j2YEAnuOyMRZTyl5En .lY0aOpSI3G6ZWpbtgiRp .MshQbxJ5tTr45Lxbp31t .KjAK9mqBjhcl3zceq7Nk{font-size:14px}.p3j2YEAnuOyMRZTyl5En .lY0aOpSI3G6ZWpbtgiRp .MshQbxJ5tTr45Lxbp31t .PfATBmb4UbJjmbOCLArt{font-size:16px}.p3j2YEAnuOyMRZTyl5En .lY0aOpSI3G6ZWpbtgiRp .MshQbxJ5tTr45Lxbp31t .gmXcR0hry5PwafNkBs2A{color:var(--color-black)}.p3j2YEAnuOyMRZTyl5En .lY0aOpSI3G6ZWpbtgiRp .MshQbxJ5tTr45Lxbp31t .MrTid0VehlvDFB_Pylr1{color:var(--color-white)}.p3j2YEAnuOyMRZTyl5En .ONHoS8AIS6NZIEa7kklc{position:relative;bottom:25px;padding-top:16px}.p3j2YEAnuOyMRZTyl5En .ONHoS8AIS6NZIEa7kklc span{font-size:16px;text-align:center}.p3j2YEAnuOyMRZTyl5En .ONHoS8AIS6NZIEa7kklc span.FzQA_OHGHNq24z9oSLji{color:var(--color-black)}.p3j2YEAnuOyMRZTyl5En .ONHoS8AIS6NZIEa7kklc span.FGWxASrN3vLowzrzr3iZ{color:var(--color-white)}@media screen and (min-width: 470px){.p3j2YEAnuOyMRZTyl5En .ONHoS8AIS6NZIEa7kklc{display:none}}.p3j2YEAnuOyMRZTyl5En .J0MOz1oihFmzt3IBaMTn{font-size:14px}.p3j2YEAnuOyMRZTyl5En .J0MOz1oihFmzt3IBaMTn.IqDSNL4JSUxsZCNMwbon{color:var(--color-black)}.p3j2YEAnuOyMRZTyl5En .J0MOz1oihFmzt3IBaMTn.KoA0RyNOKfCL50nTaeIw{color:var(--color-gray-300)}.p3j2YEAnuOyMRZTyl5En .pE9x7b2oFjCVc5byuAcQ{background-color:rgba(0,0,0,0);border:none;padding:0;cursor:pointer;text-decoration:underline;text-decoration-color:#ccc;white-space:nowrap;outline:0}.p3j2YEAnuOyMRZTyl5En .pE9x7b2oFjCVc5byuAcQ.bnGnysrWeDTnW89KJLiO:focus-visible{outline:5px auto -webkit-focus-ring-color}.p3j2YEAnuOyMRZTyl5En .Gtv2AGP1HhOTCLB9govw{background-color:rgba(0,0,0,0);border:none;padding:0;cursor:pointer;text-decoration:underline;text-decoration-color:#000;white-space:nowrap;outline:0}.p3j2YEAnuOyMRZTyl5En .Gtv2AGP1HhOTCLB9govw.bnGnysrWeDTnW89KJLiO:focus-visible{outline:5px auto -webkit-focus-ring-color}.p3j2YEAnuOyMRZTyl5En .y9j87hYDhiUdNP9i0NtE{text-align:center;min-height:60px;padLine truncated
|
||||||
|
/*!*****************************************************************************************************************************************************************************************************!*\
|
||||||
|
!*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./src/components/EmbeddedCheckout/styles.module.scss ***!
|
||||||
|
\*****************************************************************************************************************************************************************************************************/
|
||||||
|
.OfM_YJB2SSzmTND89iLD.WEN447zbv2WRHO_54Htu.o7M2bQ781pIuZLaTU516{margin-bottom:-8px}.OfM_YJB2SSzmTND89iLD.RL4QJW202XcsfabF92y_{margin-bottom:8px}@media screen and (min-width: 600px){.OfM_YJB2SSzmTND89iLD{margin-bottom:16px}}.BdKGaafqjVDhmzaOs7yj.BdKGaafqjVDhmzaOs7yj{display:flex;flex-direction:column;gap:16px}@media screen and (min-width: 600px){.BdKGaafqjVDhmzaOs7yj.BdKGaafqjVDhmzaOs7yj{gap:20px}}.QaQU9LIftPbt1cibuyNn:hover{cursor:pointer}.OJ_k0k_afW8HX5nSvI3Y{width:287px;height:19px;font-size:16px;font-family:"BWHaasGroteskWeb","Helvetica",sans-serif;font-weight:500;font-style:normal;line-height:19px;flex:none;order:0;flex-grow:1}.GIOrowxS_gTbIeWKZMwS .OJ_k0k_afW8HX5nSvI3Y{font-family:"Noto Sans JP","BWHaasGroteskWeb","Helvetica",sans-serif}.FI__tB5E6Al5qUDCrJ_8{width:287px;height:18px;font-size:14px;line-height:18px;flex:none;order:0;flex-grow:1;font-family:"BWHaasGroteskWeb","Helvetica",sans-serif;font-weight:400;font-style:normal}.GIOrowxS_gTbIeWKZMwS .FI__tB5E6Al5qUDCrJ_8{font-family:"Noto Sans JP","BWHaasGroteskWeb","Helvetica",sans-serif}.xga3Ew9wLMFJYiInRA7k{width:239px;height:18px;font-size:14px;line-height:18px;flex:none;order:0;flex-grow:1;font-family:"BWHaasGroteskWeb","Helvetica",sans-serif;font-weight:700;font-style:normal}.GIOrowxS_gTbIeWKZMwS .xga3Ew9wLMFJYiInRA7k{font-family:"Noto Sans JP","BWHaasGroteskWeb","Helvetica",sans-serif}.K1FKfOTVsS9AOMPNB2Mk.K1FKfOTVsS9AOMPNB2Mk{font-family:"BWHaasGroteskWeb","Helvetica",sans-serif;width:335px;height:auto;font-style:normal;font-weight:700;font-size:24px;line-height:28px;text-align:center;color:var(--banner-color);flex:none;order:0;flex-grow:0}.GIOrowxS_gTbIeWKZMwS .K1FKfOTVsS9AOMPNB2Mk.K1FKfOTVsS9AOMPNB2Mk{font-family:"Noto Sans JP","BWHaasGroteskWeb","Helvetica",sans-serif}@media screen and (min-width: 600px){.K1FKfOTVsS9AOMPNB2Mk.K1FKfOTVsS9AOMPNB2Mk{font-size:32px;width:auto;padding:0px 68px 0px 68px}}.zcFmwbDs5wzrOLF0CqYQ{width:300px;height:auto;margin-left:auto;margin-right:auto;margin-top:24px;display:block}@media screen and (min-width: 600px){.zcFmwbDs5wzrOLF0CqYQ{width:auto;padding:0px 68px 0px 68px}}.xlj83wML4YgPQIUiow_N{width:100%;padding:0;margin-top:0}@media screen and (min-width: 600px){.jI6Pke1OcTtsEcfmhGXg{margin:auto;width:300px}}.jI6Pke1OcTtsEcfmhGXg.ie67rUAeyC52xXMea0yh{display:flex;flex-direction:column;align-items:center;gap:24px;align-self:stretch}.WEN447zbv2WRHO_54Htu{text-align:center}.zdyrvv_EuxBmneyZKJ4y{width:268px}@media screen and (max-width: 599px){.KiwL7lu0jgKAIPBWStut{max-width:300px;margin:auto}}.ag0KBKU5tN7jNkdOarhV{height:auto;margin:auto auto 10px auto;display:block}.ag0KBKU5tN7jNkdOarhV.QqOi_bu9NzT9CaRAV6kT{margin:0 auto}.U6r4o6_FkOdzyuYmSF_j{text-decoration:underline;font-family:"BWHaasGroteskWeb","Helvetica",sans-serif;width:335px;height:84px;font-style:normal;font-weight:700;font-size:16px;line-height:16px;text-align:center;color:var(--banner-color);flex:none;order:0;flex-grow:0}.GIOrowxS_gTbIeWKZMwS .U6r4o6_FkOdzyuYmSF_j{font-family:"Noto Sans JP","BWHaasGroteskWeb","Helvetica",sans-serif}.U6r4o6_FkOdzyuYmSF_j:hover{color:#ccc}.zyNOsLRY6YT8OVnvuD5F{width:100%}.piUw4ZoKOhGmpleTWJCq{padding:20px;display:block}.HT137lwuZKV6nr805tSH{display:var(--fortress-content-display)}.eBZnUCHEVv_uxerlXXcj{position:absolute;left:1.5rem;top:1rem;width:1.5rem;height:1.5rem;background-color:rgba(0,0,0,0);transition-property:transform;transition-duration:500ms;color:currentColor;border-width:0;cursor:pointer;outline:0}.Zq3ZiEOw5UdmRYPPNmAx.Zq3ZiEOw5UdmRYPPNmAx p{font-family:"BWHaasGroteskWeb","Helvetica",sans-serif;font-size:14px;font-weight:400;font-style:normal;text-align:center;line-height:14px;color:#999;width:min(335px,100vw);height:auto;margin:auto}.GIOrowxS_gTbIeWKZMwS .Zq3ZiEOw5UdmRYPPNmAx.Zq3ZiEOw5UdmRYPPNmAx p{font-family:"Noto Sans JP","BWHaasGroteskWeb","Helvetica",sans-serif}.zaiWnzJHI2BJoOLUJx93.zaiWnzJHI2BJoOLUJx93 p{text-align:left;line-height:16px;margin:0}@media screen and (min-width: 600px){.zaiWnzJHI2BJoOLUJx93.zaiWnzJHI2BJoOLUJx93 p{text-align:center;width:100%;white-space:nowrap}}div.lQl2m4Tl4xVFxQ3LSM13{width:100%;height:12px;border-bottom:1px solid var(--banner-color);text-align:center;margin-bottom:10px}div.lQl2m4Tl4xVFxQ3LSM13 span.MfAO1ubpxLahhPC_f4DG{font-size:14px;color:var(--banner-color);background-color:var(--banner-background);padding:0 10px}.oy9ZiepJtshiw1PTS4lq{border-style:solid;border-color:var(--banner-color);border-width:1px;border-radius:5px;padding:10px;margin-bottom:32px}.WMsA3jlnh0NFUHuYNCG_{display:flex;gap:10px;justify-content:center;align-items:center}.WMsA3jlnh0NFUHuYNCG_>a{color:var(--banner-color)}.SSn1UsCqazmFua6b6WqB{display:flex;gap:10px;flex-direction:column}.obBBDahvvDwxto2eN3Lq{display:flex;gap:10px;justify-content:center;align-items:center;flex-direction:column}@media screen and (max-width: 599px){.obBBDahvvDwxto2eN3Lq{display:none}}.obBBDahvvDwxto2eN3Lq.U_bpT5tEhP0RTqNIA9SK{display:none}@media screen and (max-width: 599px){.obBBDahvvDwxto2eN3Lq.U_bpT5tEhP0RTqNIA9SK{displLine truncated
|
||||||
|
/*!********************************************************************************************************************************************************************************************!*\
|
||||||
|
!*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./src/components/Toaster/styles.module.scss ***!
|
||||||
|
\********************************************************************************************************************************************************************************************/
|
||||||
|
.w0aShK1nAJUMiVRmPhhH{color:var(--color-green-600)}.gU1uJLyx0fu7HBw5BcgJ{z-index:14679}.KeuZUq5XJZ1E0VAErOGI{position:relative;margin-left:8px;margin-bottom:10px}.zQp8PaF_m0yvobiBP0yE{font-family:"BWHaasGroteskWeb","Helvetica",sans-serif;-webkit-font-smoothing:antialiased;font-size:14px}.GCEPZG2QQfrBcwAaksfr .zQp8PaF_m0yvobiBP0yE{font-family:"Noto Sans JP","BWHaasGroteskWeb","Helvetica",sans-serif}.FFoCKwcOQy4_aIwIQuDP{display:block;margin-top:10px;text-decoration:underline;color:inherit}.NR4sE6esOPFJhGwd3R8b{font-family:"BWHaasGroteskWeb","Helvetica",sans-serif;font-weight:700;-webkit-font-smoothing:antialiased}.GCEPZG2QQfrBcwAaksfr .NR4sE6esOPFJhGwd3R8b{font-family:"Noto Sans JP","BWHaasGroteskWeb","Helvetica",sans-serif}
|
||||||
|
/*!**************************************************************************************************************************************************************************************************!*\
|
||||||
|
!*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./src/components/MultiRateplan/styles.module.scss ***!
|
||||||
|
\**************************************************************************************************************************************************************************************************/
|
||||||
|
.FfJ0llZHk4e2A6yB7NDu{display:flex;justify-content:center;gap:20px;min-height:110px}@media screen and (max-width: 831px){.FfJ0llZHk4e2A6yB7NDu{flex-direction:column;gap:15px;min-height:220px}}.FfJ0llZHk4e2A6yB7NDu.n26OAb06kB_qUpaoOYeE{display:flex;flex-direction:row;justify-content:space-between;gap:16px;min-height:110px}@media screen and (min-width: 832px){.FfJ0llZHk4e2A6yB7NDu.n26OAb06kB_qUpaoOYeE{gap:20px;justify-content:center;max-width:min-content}}.B4CH3QUmQ7sRuz5L3gp5{display:flex;justify-content:center;flex-wrap:wrap;flex-direction:column;gap:15px;padding-bottom:15px;max-width:750px}.ibBnqXpGxJM874o1Sqeb{text-align:center;font-style:normal;font-weight:700;font-size:24px;padding:5px 10px 10px;line-height:28px}@media screen and (max-width: 599px){.ibBnqXpGxJM874o1Sqeb{display:none}}.ibBnqXpGxJM874o1Sqeb.ZdDdoHgaIv9KlJ6XzgmX{display:none}@media screen and (max-width: 599px){.ibBnqXpGxJM874o1Sqeb.ZdDdoHgaIv9KlJ6XzgmX{display:block}}.Wvi2B37K7fuwzt4HlsMB,button.Wvi2B37K7fuwzt4HlsMB{display:flex;flex-direction:column;font-weight:400}.Wvi2B37K7fuwzt4HlsMB>button,button.Wvi2B37K7fuwzt4HlsMB>button{font-weight:600;max-width:100%}@media screen and (min-width: 470px){.Wvi2B37K7fuwzt4HlsMB,button.Wvi2B37K7fuwzt4HlsMB{max-width:100%}.Wvi2B37K7fuwzt4HlsMB>button,button.Wvi2B37K7fuwzt4HlsMB>button{max-width:100%}}@media screen and (min-width: 760px){.Wvi2B37K7fuwzt4HlsMB,button.Wvi2B37K7fuwzt4HlsMB{min-height:46px}.Wvi2B37K7fuwzt4HlsMB>span,button.Wvi2B37K7fuwzt4HlsMB>span{line-height:24px;font-size:16px}.Wvi2B37K7fuwzt4HlsMB>button,button.Wvi2B37K7fuwzt4HlsMB>button{min-height:46px}.Wvi2B37K7fuwzt4HlsMB>button>span,button.Wvi2B37K7fuwzt4HlsMB>button>span{font-size:16px}}button.wGWpNVdxgXdbVsO0ug5t{background-color:var(--color-white)}button.wGWpNVdxgXdbVsO0ug5t.n26OAb06kB_qUpaoOYeE{background-color:var(--color-white);font-weight:500;justify-content:center;padding:15px}@media screen and (min-width: 832px){button.wGWpNVdxgXdbVsO0ug5t.n26OAb06kB_qUpaoOYeE{margin:auto;max-width:247px;min-width:247px}}
|
||||||
|
/*!**********************************************************************************************************************************************************************************************************************!*\
|
||||||
|
!*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./src/components/MultiRateplan/RateplanRadioButton/styles.module.scss ***!
|
||||||
|
\**********************************************************************************************************************************************************************************************************************/
|
||||||
|
.oJh5CEfVwyKJGm1tQ5Bu{flex:1 1 0;display:flex;flex-direction:column}.bepzFOtFsNhylJvG7Ms_{min-width:calc(100vw - 20px);position:relative;padding:16px;cursor:pointer;margin-right:auto;margin-left:1px;border:1px solid var(--banner-color)}@media screen and (min-width: 470px){.bepzFOtFsNhylJvG7Ms_{min-width:350px}}.ngau3vc7JMHaufDsHO52{position:relative;padding:16px;cursor:pointer;margin-right:none;margin-left:1px;border:1px solid var(--banner-color);border-radius:8px}@media screen and (min-width: 832px){.ngau3vc7JMHaufDsHO52{margin-right:auto;min-width:350px;flex:1;display:flex;flex-direction:column}}.bepzFOtFsNhylJvG7Ms_:hover.tPDxdHE88znhEcoVsIVj,.qv2HzprGh2FTJKChrNur.tPDxdHE88znhEcoVsIVj{background:#3c3c3c}.bepzFOtFsNhylJvG7Ms_:hover.nU71kaAkJsGtMUmTr1ej,.qv2HzprGh2FTJKChrNur.nU71kaAkJsGtMUmTr1ej{background:#e8e8e8}.n5V1jSV1q6GEOW3Fs2ff{font-weight:700}.n5V1jSV1q6GEOW3Fs2ff.dB2f1yJRDUP00POq3Azl{font-size:16px;font-weight:700}.rmLjHUWOfaWXeSaXtu2A.dB2f1yJRDUP00POq3Azl{font-size:14px;font-style:normal}@media screen and (min-width: 832px){.rmLjHUWOfaWXeSaXtu2A.dB2f1yJRDUP00POq3Azl{font-size:16px}}.IRT3J2gvjXEqw_BVUdOD{color:#ccc;display:none;font-size:16px;font-style:normal;font-weight:400;text-align:center}@media screen and (min-width: 832px){.IRT3J2gvjXEqw_BVUdOD{display:block;padding-top:5px}}.twGKcczW0j5kyySS9OU6{color:#ccc;visibility:hidden;font-size:14px;font-style:normal;font-weight:400;padding-top:4px}@media screen and (min-width: 832px){.twGKcczW0j5kyySS9OU6{display:none}}.twGKcczW0j5kyySS9OU6.qv2HzprGh2FTJKChrNur{display:block;visibility:visible}@media screen and (min-width: 832px){.twGKcczW0j5kyySS9OU6.qv2HzprGh2FTJKChrNur{display:none}}._whBwkDj82FpNeGqsnwI{display:block;font-size:14px;text-align:left}@media screen and (min-width: 832px){._whBwkDj82FpNeGqsnwI{display:none}}.Ok1kwHJ8jLHSDRFjkL4d{text-align:center}.Ok1kwHJ8jLHSDRFjkL4d.dB2f1yJRDUP00POq3Azl{display:none;font-size:16px;text-align:center}@media screen and (min-width: 832px){.Ok1kwHJ8jLHSDRFjkL4d.dB2f1yJRDUP00POq3Azl{display:block}}.f9HqxQFI7GI52o0xMymc{position:absolute;top:-10px;left:-7px;font-weight:500;background:#7eedc8;color:#000;padding:2px 8px;font-size:14px}.f9HqxQFI7GI52o0xMymc.dB2f1yJRDUP00POq3Azl{position:absolute;top:-10px;left:auto;right:16px;font-weight:500;background:#ffcd1e;color:#000;padding:2px 8px;font-size:14px;border-radius:4px}@media screen and (min-width: 832px){.f9HqxQFI7GI52o0xMymc.dB2f1yJRDUP00POq3Azl{left:auto}}.EVblmmYJazehvh8KnjaQ{text-align:center;font-style:normal;font-weight:700;font-size:20px;padding:5px 10px 10px}.EVblmmYJazehvh8KnjaQ.dB2f1yJRDUP00POq3Azl{text-align:left;font-style:normal;font-weight:500;font-size:16px;padding:0px}@media screen and (min-width: 832px){.EVblmmYJazehvh8KnjaQ.dB2f1yJRDUP00POq3Azl{text-align:center;font-size:24px;font-weight:700;padding:5px 10px 10px}}.Ibb2Pjxrl_dhG13ovwYK::before,.Ibb2Pjxrl_dhG13ovwYK::after{position:absolute;left:14px;transform:translate(-20%, 7%);content:""}.zznim04EELO3TYPBmibQ::before,.zznim04EELO3TYPBmibQ::after{display:none}@media screen and (min-width: 832px){.zznim04EELO3TYPBmibQ::before,.zznim04EELO3TYPBmibQ::after{display:block;position:absolute;left:14px;transform:translate(-20%, 7%);content:""}}.Ibb2Pjxrl_dhG13ovwYK::before,.zznim04EELO3TYPBmibQ::before{width:18px;height:18px;border:2px solid var(--banner-color);border-radius:100%;top:44px;left:14px}.Ibb2Pjxrl_dhG13ovwYK::after,.zznim04EELO3TYPBmibQ::after{top:13px}.Ibb2Pjxrl_dhG13ovwYK[aria-checked=true]::before,.zznim04EELO3TYPBmibQ[aria-checked=true]::before{background:var(--background-color)}.Ibb2Pjxrl_dhG13ovwYK[aria-checked=true]::after,.zznim04EELO3TYPBmibQ[aria-checked=true]::after{display:block;border:4px solid var(--banner-color);border-radius:100%;transform:translate(20%, -50%);top:54px}.Ibb2Pjxrl_dhG13ovwYK.DDcNgLG3wIYl1pN2OX1u[aria-checked=true]::after,.zznim04EELO3TYPBmibQ.DDcNgLG3wIYl1pN2OX1u[aria-checked=true]::after{transform:translate(-70%, -50%)}.Ibb2Pjxrl_dhG13ovwYK[aria-checked=true]:active::before,.zznim04EELO3TYPBmibQ[aria-checked=true]:active::before{background:var(--background-color)}.Ibb2Pjxrl_dhG13ovwYK.jcSRiM_2J7cpB8vkmYcU::before,.zznim04EELO3TYPBmibQ.jcSRiM_2J7cpB8vkmYcU::before{left:9px}.Ibb2Pjxrl_dhG13ovwYK[aria-checked=true].jcSRiM_2J7cpB8vkmYcU::after,.zznim04EELO3TYPBmibQ[aria-checked=true].jcSRiM_2J7cpB8vkmYcU::after{transform:translate(-6%, -50%)}
|
||||||
|
/*!*******************************************************************************************************************************************************************************************!*\
|
||||||
|
!*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./src/components/shared/styles.module.scss ***!
|
||||||
|
\*******************************************************************************************************************************************************************************************/
|
||||||
|
.uyGkZe_EJZW3UQ06KeCD{border:.5px solid #f2f2f2;margin:30px 0 40px}
|
||||||
|
/*!*****************************************************************************************************************************************************************************************************************************!*\
|
||||||
|
!*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./src/components/ComponentsForExpandableBanner/RedditIcon/styles.module.scss ***!
|
||||||
|
\*****************************************************************************************************************************************************************************************************************************/
|
||||||
|
.je3zfS15VuP5JgO4F4pe{width:32px !important;height:32px !important;display:inline-block !important;margin-right:8px !important}@media screen and (min-width: 470px){.je3zfS15VuP5JgO4F4pe{width:40px !important;height:40px !important}}.yRkzIYIs39XmgmJRnjn6{width:20px !important;height:20px !important;display:inline-block !important;margin-right:8px !important;position:relative !important;top:3px !important}
|
||||||
|
/*!************************************************************************************************************************************************************************************************************************************!*\
|
||||||
|
!*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./src/components/ComponentsForExpandableBanner/GiftedArticleIcon/styles.module.scss ***!
|
||||||
|
\************************************************************************************************************************************************************************************************************************************/
|
||||||
|
.b9lW64nMq40IKCgsk3Sm{width:34px !important;height:34px !important;display:inline-block !important;margin-right:-12px !important}.b9lW64nMq40IKCgsk3Sm svg{width:34px !important;height:34px !important}@media screen and (min-width: 600px){.b9lW64nMq40IKCgsk3Sm{margin-right:8px !important}}.KNpl2cW1gjalQDilN1ND{width:34px !important;height:34px !important;display:inline-block !important;margin-right:8px !important;top:3px !important}.KNpl2cW1gjalQDilN1ND svg{width:34px !important;height:34px !important}@media screen and (min-width: 600px){.KNpl2cW1gjalQDilN1ND{margin-right:8px !important;width:24px !important;height:24px !important}.KNpl2cW1gjalQDilN1ND svg{width:24px !important;height:24px !important}}
|
||||||
|
/*!**********************************************************************************************************************************************************************************************************************************!*\
|
||||||
|
!*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./src/components/ComponentsForExpandableBanner/ElectionContent/styles.module.scss ***!
|
||||||
|
\**********************************************************************************************************************************************************************************************************************************/
|
||||||
|
.UATgXJBy8L7GZm0JqUAg{display:flex;padding:0px 24px 0px 24px;flex-direction:column;justify-content:center;align-items:center;gap:20px;align-self:stretch}.UATgXJBy8L7GZm0JqUAg.NkHyLpT4qKFly3Y13Esz{padding-top:4px}@media screen and (min-width: 600px){.UATgXJBy8L7GZm0JqUAg{display:flex;padding:32px 2% 24px 8%;flex-direction:row;justify-content:center;gap:0px;align-self:stretch}.UATgXJBy8L7GZm0JqUAg.O9R61_KkZD1Nui_DfE5o{padding:32px 2% 4px 8%}.UATgXJBy8L7GZm0JqUAg.NkHyLpT4qKFly3Y13Esz{padding-top:12px}}@media screen and (min-width: 760px){.UATgXJBy8L7GZm0JqUAg{gap:60px}}@media screen and (min-width: 1020px){.UATgXJBy8L7GZm0JqUAg{gap:126px}}.UTsKqxyCsUVq5EqwIFtt{display:flex;width:340px;flex-direction:column;align-items:center;gap:24px}@media screen and (min-width: 600px){.UTsKqxyCsUVq5EqwIFtt{width:670px;align-items:flex-start}}.pHtrp9_zmjLoLnWyIj1o{display:none}@media screen and (min-width: 760px){.pHtrp9_zmjLoLnWyIj1o{display:block}}.nGTFSpPMYJsaKYi1S6lN{display:flex;gap:24px;justify-content:center;align-items:normal;flex-direction:column}@media screen and (max-width: 599px){.nGTFSpPMYJsaKYi1S6lN{display:none}}.nGTFSpPMYJsaKYi1S6lN.eRfp5Ku0T77jZbkQw6mY{display:none}@media screen and (max-width: 599px){.nGTFSpPMYJsaKYi1S6lN.eRfp5Ku0T77jZbkQw6mY{display:block}}.nGTFSpPMYJsaKYi1S6lN.eRfp5Ku0T77jZbkQw6mY .MOJGOmWMw5SyKg24i63_{font-family:"BWHaasGroteskWeb","Helvetica",sans-serif;text-align:center;font-size:24px;font-style:normal;font-weight:700;line-height:normal}.u93mID8c6QpYF_a52kZR .nGTFSpPMYJsaKYi1S6lN.eRfp5Ku0T77jZbkQw6mY .MOJGOmWMw5SyKg24i63_{font-family:"Noto Sans JP","BWHaasGroteskWeb","Helvetica",sans-serif}.nGTFSpPMYJsaKYi1S6lN .MOJGOmWMw5SyKg24i63_{font-family:"BWHaasGroteskWeb","Helvetica",sans-serif;height:auto;font-style:normal;font-weight:700;font-size:32px;line-height:normal;text-align:left;color:var(--banner-color);flex:none;order:0;flex-grow:0}.u93mID8c6QpYF_a52kZR .nGTFSpPMYJsaKYi1S6lN .MOJGOmWMw5SyKg24i63_{font-family:"Noto Sans JP","BWHaasGroteskWeb","Helvetica",sans-serif}@media screen and (min-width: 600px){.nGTFSpPMYJsaKYi1S6lN .MOJGOmWMw5SyKg24i63_{width:auto}}.gYYPfO4GEbwkhJJZzRlA{line-height:normal;font-weight:500}.IXlEnpBdcLWjkLoh_mZF{width:45px;margin-right:4px}.IXlEnpBdcLWjkLoh_mZF svg{margin-left:auto;margin-right:auto}.vwFuWtCYNDreCl76nDhl{width:20px;margin-right:4px}.vwFuWtCYNDreCl76nDhl svg{margin-left:0px;margin-right:auto}.dzdt1W8Nug_zS2Yj_DgI{display:flex;flex-direction:column;align-items:flex-start;gap:16px}.dzdt1W8Nug_zS2Yj_DgI>div{display:flex;font-size:16px;font-weight:normal;align-items:center}.dzdt1W8Nug_zS2Yj_DgI>div>span>span{font-size:16px;line-height:normal;font-weight:normal}.dzdt1W8Nug_zS2Yj_DgI>div>span>span:first-child{font-weight:700}.tokk0CX1aInOztfkyKxe{display:flex;flex-direction:column;align-items:flex-start;gap:16px}.tokk0CX1aInOztfkyKxe>div{display:flex;font-size:16px;font-weight:normal;align-items:center}.tokk0CX1aInOztfkyKxe>div>span>span{font-size:16px;line-height:normal;font-weight:normal}.piI_Q0JA9VRUpMGqkCYD{width:100%}@media screen and (min-width: 600px){.piI_Q0JA9VRUpMGqkCYD{width:247px}}.piI_Q0JA9VRUpMGqkCYD.Fn0vYrBOMtN85lJpk2T2{height:45px}.piI_Q0JA9VRUpMGqkCYD.I8wrIvgxT1Ad1FlTqOWh{text-align:center}
|
||||||
|
/*!**************************************************************************************************************************************************************************************************************!*\
|
||||||
|
!*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./src/components/SplitContainer/ValueProps/styles.module.scss ***!
|
||||||
|
\**************************************************************************************************************************************************************************************************************/
|
||||||
|
.fdeypIMj5II41Ffsww39{background-color:rgba(0,0,0,0)}.d5wHHYshWIHHUYll2ZYr{text-transform:uppercase;font-size:14px;font-weight:bold;margin-bottom:10px}.hSZSzKjOFILdPLBSTgvx{padding-inline-start:22px}.RVk8ylIppzcGSoGDxaOZ{list-style-type:none;position:relative;text-align:left;padding-bottom:5px}.Gh13aHqnLKkIMGTuPQPN{position:absolute;left:-23px;color:var(--banner-color)}.Gh13aHqnLKkIMGTuPQPN svg{width:18px;height:18px}._2a_Wa9_QuNXWlZro4QF{padding-left:5px;padding-right:5px;height:100% !important}
|
||||||
|
/*!***************************************************************************************************************************************************************************************************!*\
|
||||||
|
!*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./src/components/SplitContainer/styles.module.scss ***!
|
||||||
|
\***************************************************************************************************************************************************************************************************/
|
||||||
|
.zQQZ9pI1oLopZDB8_ct5{width:100%;max-width:1160px;margin:0 auto}@media screen and (min-width: 1020px){.zQQZ9pI1oLopZDB8_ct5{margin-bottom:14px}}.bFkN0zZ91bjZE66khRpE{font-size:24px;font-weight:700;line-height:26px;text-align:center;margin-bottom:30px}@media screen and (min-width: 1020px){.bFkN0zZ91bjZE66khRpE{font-size:28px;line-height:28px}}.L1LMbu4aLViU5b0Bchaj{display:flex;flex-direction:row;justify-content:space-around}.L1LMbu4aLViU5b0Bchaj.PrbzojOds4HEOuiox1ZE{flex-direction:column;text-align:center}.L1LMbu4aLViU5b0Bchaj.PrbzojOds4HEOuiox1ZE>*{margin:10px 0}.L1LMbu4aLViU5b0Bchaj.PrbzojOds4HEOuiox1ZE:not(:first-child){margin-bottom:16px}@media screen and (min-width: 1020px){.L1LMbu4aLViU5b0Bchaj.PrbzojOds4HEOuiox1ZE:not(:first-child){margin-bottom:30px}}.L1LMbu4aLViU5b0Bchaj>*{flex-grow:1;flex-shrink:0;flex-basis:0;min-width:150px;margin:0 10px}.L1LMbu4aLViU5b0Bchaj>*:first-child:last-child{margin:0 20px}@media screen and (min-width: 1020px){.L1LMbu4aLViU5b0Bchaj>*{flex-grow:0;flex-shrink:0;min-width:320px}.L1LMbu4aLViU5b0Bchaj>*:first-child:last-child{min-width:500px}.L1LMbu4aLViU5b0Bchaj>*:first-child:last-child button{max-width:unset}}.L1LMbu4aLViU5b0Bchaj:not(:first-child){margin-top:16px}@media screen and (min-width: 1020px){.L1LMbu4aLViU5b0Bchaj:not(:first-child){margin-top:30px}}
|
||||||
|
/*!**************************************************************************************************************************************************************************************************!*\
|
||||||
|
!*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./src/components/SocialButtons/styles.module.scss ***!
|
||||||
|
\**************************************************************************************************************************************************************************************************/
|
||||||
|
div.ZFkQho_ZHqUnFR4Px_G4{width:100%;height:12px;border-bottom:1px solid #ccc;text-align:center;margin-bottom:10px}div.ZFkQho_ZHqUnFR4Px_G4 span.opH2NRlieaRv19CD1Ye4{font-size:14px;color:var(--banner-color);background-color:var(--banner-background);padding:0 10px}div.tqKpqA6M8s8sFt6hq9hf{margin-bottom:20px}div.tqKpqA6M8s8sFt6hq9hf div{font-weight:400}div.tqKpqA6M8s8sFt6hq9hf svg.hHnUhWmh_CouZa5lqQpO{color:#0165e1}div.tqKpqA6M8s8sFt6hq9hf button{background-color:var(--color-white);max-width:unset}
|
||||||
|
/*!**************************************************************************************************************************************************************************************************************!*\
|
||||||
|
!*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./src/components/SignedOutSubscriberBanner/styles.module.scss ***!
|
||||||
|
\**************************************************************************************************************************************************************************************************************/
|
||||||
|
.u86mjbDeP9hBO6Ilbe05{font-size:16px;font-weight:bold}.u86mjbDeP9hBO6Ilbe05 .wgePqIVcdk0YyKsE3BFY{color:var(--color-black)}.u86mjbDeP9hBO6Ilbe05 .KGLFmeo709EX2a7bIByI{color:var(--color-white)}.v5A5N3cXJ_V4Yx7TsMgX{display:flex;flex-direction:column;align-items:center;padding-bottom:1rem}.v5A5N3cXJ_V4Yx7TsMgX .LbV_FpvYEd76CIo2GEnX{margin-bottom:10px;font-size:24px;line-height:26px;font-weight:bold;font-family:"BWHaasGroteskWeb","Helvetica",sans-serif;font-weight:700;-webkit-font-smoothing:antialiased;text-align:center;padding-bottom:unset}.orkMtiXiAEX_ZRkpx8Mw .v5A5N3cXJ_V4Yx7TsMgX .LbV_FpvYEd76CIo2GEnX{font-family:"Noto Sans JP","BWHaasGroteskWeb","Helvetica",sans-serif}@media screen and (min-width: 760px){.v5A5N3cXJ_V4Yx7TsMgX .LbV_FpvYEd76CIo2GEnX{font-size:28px;line-height:30px}}@media screen and (min-width: 1020px){.v5A5N3cXJ_V4Yx7TsMgX .LbV_FpvYEd76CIo2GEnX{font-size:30px;line-height:32px;max-width:1000px}}@media screen and (min-width: 1280px){.v5A5N3cXJ_V4Yx7TsMgX .LbV_FpvYEd76CIo2GEnX{max-width:1230px}}.v5A5N3cXJ_V4Yx7TsMgX .LbV_FpvYEd76CIo2GEnX.uKmxDyDO_VV5RngYU4O_{color:#fff}.v5A5N3cXJ_V4Yx7TsMgX .LbV_FpvYEd76CIo2GEnX.uhSA6nltJTSTHNWQWCPo{color:#000}.v5A5N3cXJ_V4Yx7TsMgX .LbV_FpvYEd76CIo2GEnX.ukkYj1cSVG4z6026HweN{font-size:20px}.v5A5N3cXJ_V4Yx7TsMgX .j2gpFTxDV2uIZfnUMRHy{margin-bottom:15px;display:none}@media screen and (min-width: 600px){.v5A5N3cXJ_V4Yx7TsMgX .j2gpFTxDV2uIZfnUMRHy{display:block}}.v5A5N3cXJ_V4Yx7TsMgX .j2gpFTxDV2uIZfnUMRHy .p61I_mNMVsrcNLsbNisO{display:flex;align-items:center}.v5A5N3cXJ_V4Yx7TsMgX .qNMJA_LorKaouOb4A8zy{margin-bottom:20px;font-size:24px;line-height:26px;font-weight:bold;font-family:"BWHaasGroteskWeb","Helvetica",sans-serif;font-weight:700;-webkit-font-smoothing:antialiased;text-align:center}.orkMtiXiAEX_ZRkpx8Mw .v5A5N3cXJ_V4Yx7TsMgX .qNMJA_LorKaouOb4A8zy{font-family:"Noto Sans JP","BWHaasGroteskWeb","Helvetica",sans-serif}@media screen and (min-width: 600px){.v5A5N3cXJ_V4Yx7TsMgX .qNMJA_LorKaouOb4A8zy{display:none}}.v5A5N3cXJ_V4Yx7TsMgX .qNMJA_LorKaouOb4A8zy.uKmxDyDO_VV5RngYU4O_{color:#fff}.v5A5N3cXJ_V4Yx7TsMgX .qNMJA_LorKaouOb4A8zy.uhSA6nltJTSTHNWQWCPo{color:#000}.v5A5N3cXJ_V4Yx7TsMgX .qNMJA_LorKaouOb4A8zy .p61I_mNMVsrcNLsbNisO{display:flex;align-items:center;font-size:20px;margin-bottom:16px}.v5A5N3cXJ_V4Yx7TsMgX .qNMJA_LorKaouOb4A8zy .nVA6cvwkPJzUbQAUPVaV{font-weight:400}.v5A5N3cXJ_V4Yx7TsMgX .dFLkrmv8NCITFiA1dX4D{margin-bottom:28px}@media screen and (min-width: 470px){.v5A5N3cXJ_V4Yx7TsMgX{padding-bottom:unset}}
|
||||||
|
/*!*********************************************************************************************************************************************************************************************************!*\
|
||||||
|
!*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./src/components/ArticleGiftingBanner/styles.module.scss ***!
|
||||||
|
\*********************************************************************************************************************************************************************************************************/
|
||||||
|
.YPA5I3Gse34ukQslxw8H{width:100%;font-size:16px;background-color:var(--banner-background);color:var(--banner-color);text-decoration-color:var(--banner-color);justify-content:center;align-items:center;display:flex;flex-direction:row;bottom:0;position:fixed;z-index:20}@media screen and (max-width: 1019px){.YPA5I3Gse34ukQslxw8H{line-height:19px}}.aBt_T2EWjIMwRz5bBwzk{background-color:rgba(0,0,0,0);border-width:0;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;line-height:inherit;padding:0}.ldsNAud7fiWOPfik8bmR{text-decoration:underline;color:inherit;font-family:"BWHaasGroteskWeb","Helvetica",sans-serif;font-weight:700;-webkit-font-smoothing:antialiased;cursor:pointer}.IPBZqj8RQJrJfWH_fjMb .ldsNAud7fiWOPfik8bmR{font-family:"Noto Sans JP","BWHaasGroteskWeb","Helvetica",sans-serif}.yq5pQbS5cB0STiISOjps{margin-right:5px;width:24px;height:24px;color:var(--banner-color)}.IjVD5z3P4MrDWrxgiMfs{padding-top:13px;padding-bottom:13px;padding-right:16px;display:inline;font-family:"BWHaasGroteskWeb","Helvetica",sans-serif;-webkit-font-smoothing:antialiased}.IPBZqj8RQJrJfWH_fjMb .IjVD5z3P4MrDWrxgiMfs{font-family:"Noto Sans JP","BWHaasGroteskWeb","Helvetica",sans-serif}.ziHvsphx_VRVykaUQqH4{color:var(--banner-color);text-decoration:underline;cursor:pointer}.ziHvsphx_VRVykaUQqH4:visited{color:var(--banner-color);text-decoration:underline;cursor:pointer}
|
||||||
|
/*!*******************************************************************************************************************************************************************************************************!*\
|
||||||
|
!*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./src/components/BusinessweekBanner/styles.module.scss ***!
|
||||||
|
\*******************************************************************************************************************************************************************************************************/
|
||||||
|
.eAaqPoqEgkOrCgvjTNXU{font-size:16px;font-weight:bold}.eAaqPoqEgkOrCgvjTNXU.gMF9Y93CvzChd0NDVCoK{color:var(--color-black)}.eAaqPoqEgkOrCgvjTNXU.Fstat850OQuO0nQB3b3g{color:var(--color-white)}.gKx0SKCQ5kECSrZow8Bm{font-size:18px}.gKx0SKCQ5kECSrZow8Bm.VyaCeAhwDRFkOLhIPgqc{font-weight:bold}.gKx0SKCQ5kECSrZow8Bm.N1Wp583KbMJ5qIvErMSQ{color:var(--color-black)}.gKx0SKCQ5kECSrZow8Bm.XDy0_vrsVg_0SmPXtvWD{color:var(--color-white)}.NS6SLfoEI7N49PpDE2fE{display:flex;flex-direction:column;align-items:center;padding-bottom:1rem}.NS6SLfoEI7N49PpDE2fE .r5veqP2H63VbNTI1V1eo{margin-bottom:10px;font-size:24px;line-height:26px;font-weight:bold;font-family:"BWHaasGroteskWeb","Helvetica",sans-serif;font-weight:700;-webkit-font-smoothing:antialiased;text-align:center;padding-bottom:unset}.gmr0Nx0WQVaAv11ytspT .NS6SLfoEI7N49PpDE2fE .r5veqP2H63VbNTI1V1eo{font-family:"Noto Sans JP","BWHaasGroteskWeb","Helvetica",sans-serif}@media screen and (min-width: 760px){.NS6SLfoEI7N49PpDE2fE .r5veqP2H63VbNTI1V1eo{font-size:28px;line-height:30px}}@media screen and (min-width: 1020px){.NS6SLfoEI7N49PpDE2fE .r5veqP2H63VbNTI1V1eo{font-size:30px;line-height:32px;max-width:1000px}}@media screen and (min-width: 1280px){.NS6SLfoEI7N49PpDE2fE .r5veqP2H63VbNTI1V1eo{max-width:1230px}}.NS6SLfoEI7N49PpDE2fE .r5veqP2H63VbNTI1V1eo.bcmC_0a08K1F1B6vd6Fk{color:#fff}.NS6SLfoEI7N49PpDE2fE .r5veqP2H63VbNTI1V1eo.KIzL7fi535Gnd7l4R2Gb{color:#000}.NS6SLfoEI7N49PpDE2fE .r5veqP2H63VbNTI1V1eo.Z5c7u4Ee9hmf7qQHCjMR{font-size:20px}.NS6SLfoEI7N49PpDE2fE .FwIR2c08X9LwVlyDmuie{margin-bottom:15px;display:none}@media screen and (min-width: 600px){.NS6SLfoEI7N49PpDE2fE .FwIR2c08X9LwVlyDmuie{display:block}}.NS6SLfoEI7N49PpDE2fE .FwIR2c08X9LwVlyDmuie .CFsOcGElDEDSiDXTQOOC{display:flex;align-items:center}.NS6SLfoEI7N49PpDE2fE .oz87kuOKoyjeIEzTYmg5{margin-bottom:20px;font-size:24px;line-height:26px;font-weight:bold;font-family:"BWHaasGroteskWeb","Helvetica",sans-serif;font-weight:700;-webkit-font-smoothing:antialiased;text-align:center}.gmr0Nx0WQVaAv11ytspT .NS6SLfoEI7N49PpDE2fE .oz87kuOKoyjeIEzTYmg5{font-family:"Noto Sans JP","BWHaasGroteskWeb","Helvetica",sans-serif}@media screen and (min-width: 600px){.NS6SLfoEI7N49PpDE2fE .oz87kuOKoyjeIEzTYmg5{display:none}}.NS6SLfoEI7N49PpDE2fE .oz87kuOKoyjeIEzTYmg5.bcmC_0a08K1F1B6vd6Fk{color:#fff}.NS6SLfoEI7N49PpDE2fE .oz87kuOKoyjeIEzTYmg5.KIzL7fi535Gnd7l4R2Gb{color:#000}.NS6SLfoEI7N49PpDE2fE .oz87kuOKoyjeIEzTYmg5 .CFsOcGElDEDSiDXTQOOC{display:flex;align-items:center;font-size:20px;margin-bottom:16px}.NS6SLfoEI7N49PpDE2fE .oz87kuOKoyjeIEzTYmg5 .DnsWv8uTUdb6NihTswFT{font-weight:400}.NS6SLfoEI7N49PpDE2fE .IXBzX61muTHRHlBda7KT{margin-bottom:28px}@media screen and (min-width: 470px){.NS6SLfoEI7N49PpDE2fE{padding-bottom:unset}}
|
||||||
|
/*!*********************************************************************************************************************************************************************************************************!*\
|
||||||
|
!*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./src/components/ResponsiveOnboarding/styles.module.scss ***!
|
||||||
|
\*********************************************************************************************************************************************************************************************************/
|
||||||
|
.LOxbYlYkNhw5bCR3uUbZ{width:100%}.LOxbYlYkNhw5bCR3uUbZ .O3FS2ylPnAehAQsU1Yf4{display:flex;justify-content:space-between;align-items:end;margin-bottom:8px;width:100%;font-family:"BWHaasGroteskWeb","Helvetica",sans-serif}.Ssqn5s_Cyhv_yxRj5UOc .LOxbYlYkNhw5bCR3uUbZ .O3FS2ylPnAehAQsU1Yf4{font-family:"Noto Sans JP","BWHaasGroteskWeb","Helvetica",sans-serif}.LOxbYlYkNhw5bCR3uUbZ .O3FS2ylPnAehAQsU1Yf4 .we3VWpECWPyQbIMfc_Hl{text-align:left;font-weight:700;font-size:16px}.LOxbYlYkNhw5bCR3uUbZ .O3FS2ylPnAehAQsU1Yf4 .wd0QmfJ4BJdnwccgZhjr{text-align:right;color:#545454;font-size:12px}@media screen and (max-width: 469px){.LtNkTHAt5kF1CVpM7Tm6 [class*=_titleContent_]{padding-left:20px}}.LtNkTHAt5kF1CVpM7Tm6 [class*=ExpandableBanner_content_] div{width:inherit}.LtNkTHAt5kF1CVpM7Tm6 [class*=ExpandableBanner_content_] div iframe{width:inherit;margin-top:-10px}.axm__q1q0l6TNF0w2yOw [class*=ExpandableBanner_content_] div{width:inherit}.axm__q1q0l6TNF0w2yOw [class*=ExpandableBanner_content_] div iframe{width:inherit;margin-top:-10px;padding-top:7px;padding-right:5px}.axm__q1q0l6TNF0w2yOw [class*=ExpandableBanner_content_]{padding:0px}
|
||||||
|
/*!****************************************************************************************************************************************************************************************************!*\
|
||||||
|
!*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./src/components/AppDownloadWall/styles.module.scss ***!
|
||||||
|
\****************************************************************************************************************************************************************************************************/
|
||||||
|
.ffSD8LBZkPio_vGcETOi{width:24px;margin-right:4px}.ffSD8LBZkPio_vGcETOi svg{margin-left:auto;margin-right:auto}.PCprnMeiDn5cf1Oq5Cf3{width:239px;height:18px;font-size:14px;line-height:18px;flex:none;order:0;flex-grow:1;font-family:"BWHaasGroteskWeb","Helvetica",sans-serif;font-weight:700;font-style:normal}.SM6nTR89VT6o5kLjgTA2 .PCprnMeiDn5cf1Oq5Cf3{font-family:"Noto Sans JP","BWHaasGroteskWeb","Helvetica",sans-serif}
|
||||||
|
/*!*****************************************************************************************************************************************************************************************************!*\
|
||||||
|
!*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./src/components/WatchlistPaywall/styles.module.scss ***!
|
||||||
|
\*****************************************************************************************************************************************************************************************************/
|
||||||
|
.jZPZ1qsito4zGGDslGzt{align-self:stretch;width:100%}@media(min-width: 768px){.jZPZ1qsito4zGGDslGzt [data-component=carousel-nav]>div:last-child button{display:none}}.Lu1EnCDHKnO3lw1pNBAU{display:grid;grid-template-columns:repeat(3, 1fr);gap:16px;margin-bottom:24px}.ytSCgJDhoHLOCYGiDOx3{display:flex;flex-direction:column;align-items:center;gap:4px;align-self:stretch;text-align:center}@media(max-width: 768px){.ytSCgJDhoHLOCYGiDOx3{width:100%;margin-top:7px}}@media(width: 768px){.ytSCgJDhoHLOCYGiDOx3{margin-bottom:9px}}@media screen and (max-width: 469px){.ytSCgJDhoHLOCYGiDOx3{margin-top:4px}}.TFAB76NVWalOIgcyt0Z1{font-size:24px;font-style:normal;font-weight:500;line-height:130%}.WOVwGlNLJTkfG446vDqM{width:247px;font-size:16px;font-style:normal;font-weight:400;line-height:130%}.nBY2MdU7KEQU5W76dtgX{display:flex;width:247px;height:48px;padding:10px 24px;justify-content:center;align-items:center;margin-bottom:8px}@media(max-width: 767px){.nBY2MdU7KEQU5W76dtgX{margin-top:11px;width:100%}}@media(width: 768px){.nBY2MdU7KEQU5W76dtgX{margin-top:20px}}@media screen and (max-width: 469px){.nBY2MdU7KEQU5W76dtgX{margin-bottom:-8px}}.Zfc7PV2wR2AK6TMpMGNL{font-size:.75rem;color:#888;text-align:center}
|
||||||
|
/*!*************************************************************************************************************************************************************************************************!*\
|
||||||
|
!*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./src/components/GamesPaywall/styles.module.scss ***!
|
||||||
|
\*************************************************************************************************************************************************************************************************/
|
||||||
|
.mSGWBMv9R25PPttC9iNQ{align-self:stretch;width:100%}.mSGWBMv9R25PPttC9iNQ [data-component=carousel-nav]>div:last-child button{display:none}.qrF4zizDViYWC2ifA_Zg{display:grid;grid-template-columns:repeat(3, 1fr);gap:16px;margin-bottom:24px}.Vs7v9dfuniEdC8knfZPe{display:flex;flex-direction:column;align-items:center;gap:4px;align-self:stretch;text-align:center}@media(max-width: 768px){.Vs7v9dfuniEdC8knfZPe{width:100%;margin-top:7px}}@media(width: 768px){.Vs7v9dfuniEdC8knfZPe{margin-bottom:9px}}@media screen and (max-width: 469px){.Vs7v9dfuniEdC8knfZPe{margin-top:4px}}.PzaujcMqq6AVAuaPf7wf{font-size:21px;font-style:normal;font-weight:500;line-height:130%}.tVcIfFogPsvPhjhgYpVN{width:247px;font-size:16px;font-style:normal;font-weight:400;line-height:130%}.zpUFir1igrDwtfZP0L7q{display:flex;width:247px;height:48px;padding:10px 24px;justify-content:center;align-items:center;margin-bottom:8px}@media(max-width: 767px){.zpUFir1igrDwtfZP0L7q{margin-top:11px;width:100%}}@media(width: 768px){.zpUFir1igrDwtfZP0L7q{margin-top:20px}}@media screen and (max-width: 469px){.zpUFir1igrDwtfZP0L7q{margin-bottom:-8px}}.yNXy8naV9vBiocZW5w82{font-size:.75rem;color:#888;text-align:center}.DVfQ0n6_YS4AL7NVoMtr{max-height:75px}
|
||||||
|
/*!********************************************************************************************************************************************************************************************************************************!*\
|
||||||
|
!*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./src/components/BusinessWeekSplitContainerBanner/ValueProps/styles.module.scss ***!
|
||||||
|
\********************************************************************************************************************************************************************************************************************************/
|
||||||
|
.DKLQgs1wNe41AJs7bO73{background-color:rgba(0,0,0,0)}.qdf0QsQG3EpUSm0hRZHC{text-transform:uppercase;font-size:14px;font-weight:bold;margin-bottom:10px}.BjEJtwE9DaiQRTr73i9j{padding-inline-start:22px}.JroKEIudpTqoBl373TP2{list-style-type:none;position:relative;text-align:left;padding-bottom:5px}.sk3XgXbweAaKCgl8cJYP{position:absolute;left:-23px;color:var(--banner-color)}.sk3XgXbweAaKCgl8cJYP svg{width:18px;height:18px}.J7ABkRhM54CFraiGwrhp{padding-left:5px;padding-right:5px;height:100% !important}
|
||||||
|
/*!*********************************************************************************************************************************************************************************************************************!*\
|
||||||
|
!*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].use[1]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[5].use[2]!./src/components/BusinessWeekSplitContainerBanner/styles.module.scss ***!
|
||||||
|
\*********************************************************************************************************************************************************************************************************************/
|
||||||
|
.oyPJwJ4s9HwvzE9fJvnw{width:100%;max-width:1160px;margin:0 auto}@media screen and (min-width: 1020px){.oyPJwJ4s9HwvzE9fJvnw{margin-bottom:14px}}.th5uyIQXWEYHlEuaeaXb{display:none}@media screen and (min-width: 600px){.th5uyIQXWEYHlEuaeaXb{display:block}}.ud2pW51JyerTNtylgNeT{display:block}@media screen and (min-width: 600px){.ud2pW51JyerTNtylgNeT{display:none}}.aD14eJyoe8Q4d7N5s0X3{font-size:24px;font-weight:700;line-height:26px;text-align:center;margin-bottom:30px}@media screen and (min-width: 1020px){.aD14eJyoe8Q4d7N5s0X3{font-size:28px;line-height:28px}}.Tnvb8oNvBAgk34hNK0CR{display:flex;flex-direction:row;justify-content:space-around}.Tnvb8oNvBAgk34hNK0CR.dheFPIQoynP1G3JZ1xEI{flex-direction:column;text-align:center}.Tnvb8oNvBAgk34hNK0CR.dheFPIQoynP1G3JZ1xEI>*{margin:10px 0}.Tnvb8oNvBAgk34hNK0CR.dheFPIQoynP1G3JZ1xEI:not(:first-child){margin-bottom:16px}@media screen and (min-width: 1020px){.Tnvb8oNvBAgk34hNK0CR.dheFPIQoynP1G3JZ1xEI:not(:first-child){margin-bottom:30px}}.Tnvb8oNvBAgk34hNK0CR>*{flex-grow:1;flex-shrink:0;flex-basis:0;min-width:150px;margin:0 10px}.Tnvb8oNvBAgk34hNK0CR>*:first-child:last-child{margin:0 20px}@media screen and (min-width: 1020px){.Tnvb8oNvBAgk34hNK0CR>*{flex-grow:0;flex-shrink:0;min-width:320px}.Tnvb8oNvBAgk34hNK0CR>*:first-child:last-child{min-width:500px}.Tnvb8oNvBAgk34hNK0CR>*:first-child:last-child button{max-width:unset}}.Tnvb8oNvBAgk34hNK0CR:not(:first-child){margin-top:16px}@media screen and (min-width: 1020px){.Tnvb8oNvBAgk34hNK0CR:not(:first-child){margin-top:30px}}
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
(()=>{var Spotlight={selectors:{that:"bb-that",spotlight:".bb-that-spotlight",spotlightActive:"bb-that-spotlight--active",dataEndpoint:"data-spotlight-service"},logs:{invalidTHAT:"THAT was not rendered correctly. ",noEndpoint:"Spotlight retrieval endpoint not set. ",noSpotlight:"There are no spotlights to display at the moment ",parsingError:"There was an error when parsing the spotlight response ",invalidResponse:"There was an error when retrieving the spotlight ",spotlightSeen:"The spotlight has already been seen and closed."},cookieName:"bloomberg.that.spotlight",cookieDuration:1,spotlightEvent:"bloomberg.that.spotlight",endpoint:"",tophat:null,init:function(){this.validateTHAT()&&this.retrieveSpotlight()},validateTHAT:function(){var $valid=!1;return this.tophat=document.querySelector("div#"+this.selectors.that),this.tophat?(this.endpoint=this.tophat.getAttribute(this.selectors.dataEndpoint),this.endpoint?$valid=!0:this.log(!0,this.logs.noEndpoint)):this.log(!0,this.logs.invalidTHAT),$valid},retrieveSpotlight:function(){var xmlhttp=new XMLHttpRequest;xmlhttp.onreadystatechange=function(){if(xmlhttp.readyState===XMLHttpRequest.DONE)if(200===xmlhttp.status)try{var $response=JSON.parse(xmlhttp.responseText);$response.hasOwnProperty("spotlights")&&Array.isArray($response.spotlights)&&0<$response.spotlights.length&&Spotlight.renderSpotlight($response.spotlights[0])}catch(e){Spotlight.log(!0,Spotlight.logs.parsingError,e)}else Spotlight.log(!0,Spotlight.logs.invalidResponse,xmlhttp.status)},xmlhttp.open("GET",this.endpoint,!0),xmlhttp.send()},renderSpotlight:function(spotlight){this.getCookie(this.cookieName)?this.log(!1,this.logs.spotlightSeen):(this.tophat.insertAdjacentHTML("beforeend",spotlight),document.querySelector(this.selectors.spotlight))},bindClose:function(){document.querySelector(this.selectors.spotlightClose).addEventListener("click",function(){Spotlight.tophat.removeChild(document.querySelector(Spotlight.selectors.spotlight)),Spotlight.setCookie(Spotlight.cookieName,!0,Spotlight.cookieDuration),Spotlight.log(!1,Spotlight.logs.spotlightClose)})},setCookie:function(name,value,xdays){var d=new Date;d.setTime(d.getTime()+864e5*xdays),document.cookie=name+"="+value+";path=/;expires="+d.toUTCString()},getCookie:function(name){name=document.cookie.match("(^|;) ?"+name+"=([^;]*)(;|$)");return name?name[2]:null},deleteCookie:function(name){this.setCookie(name,"",-1)},log:function(error,message,extra){error?window.console.error(this.spotlightEvent,{message:message,extra:extra}):window.console.log(this.spotlightEvent,{message:message,extra:extra})}};document.addEventListener(Spotlight.spotlightEvent,function(){Spotlight.init()})})(),(()=>{var That={selectors:{container:"#bb-that--container",header:".bb-that-header",jumpContentLink:".skiplink__hide-until-focus",jumpContentLinkFallback:".bb-that__skip-to-content",jumpContentTarget:"#that-jump-content",jumpContentTargetFallback:"#that-jump-content--default",mobileCategories:".bb-that--visible-xs .bb-that-category:not(.bb-that-category--sub) .bb-that-category__title",sitemapClose:".bb-that__close",sitemapLink:".bb-that-header--sitemap-trigger",tabbableHeaderLinks:".bb-that-header__link",tabbableSitemapLinks:'[tabindex="0"]',wrapper:"#bb-that .bb-that:not(.bb-that--static)",spotlight:"bb-that-spotlight",mobileMenu:".bb-that .bb-that__sitemap-mobile-header span",mobileMenuSection:".bb-that__sitemap-sections.bb-that--visible-xs"},spotlightEvent:"bloomberg.that.spotlight",containerEl:null,headerEl:null,jumpContentLinkFallback:null,jumpContentTarget:null,openClass:"bb-that--open",mobileOpenClass:"bb-that--mobile-open",sitemapCloseEl:null,sitemapLinkEl:null,sitemapLinkSibEl:null,mobileMenuEl:null,mobileMenuSectionEl:null,sitemapOpen:!1,tabbableHeaderLinks:null,tabbableSitemapLinks:null,wrapperEl:null,prepare:function(){var self,observer;document.querySelector(this.selectors.wrapper+" "+this.selectors.sitemapLink)?this.init():window.MutationObserver&&(self=this,(observer=new MutationObserver(function(mutations){for(var i=0;i<mutations.length;i++)for(var j=0;j<mutations[i].addedNodes.length;j++){var el=mutations[i].addedNodes[j];el&&el.querySelector&&el.querySelector(self.selectors.sitemapLink)&&(self.init(),observer.disconnect())}})).observe(document.documentElement,{childList:!0,subtree:!0}))},init:function(){this.wrapperEl=document.querySelector(this.selectors.wrapper),null!==this.wrapperEl&&(this.containerEl=this.wrapperEl.querySelector(this.selectors.container),this.sitemapLinkEl=this.wrapperEl.querySelector(this.selectors.sitemapLink),this.sitemapCloseEl=this.wrapperEl.querySelector(this.selectors.sitemapClose),this.headerEl=this.wrapperEl.querySelector(this.selectors.header),this.sitemapLinkSibEl=this.getNextSibling(this.sitemapLinkEl),this.mobileMenuSectionEl=this.wrapperEl.querySelector(this.selectors.mobileMenuSection),this.mobileMenuEl=this.wrapperEl.querySelector(this.selectors.mobileMenu),this.tabbableHeaderLinks=Array.prototype.slice.call(document.queryLine truncated
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
(window._sp_wp_jsonp=window._sp_wp_jsonp||[]).push([[9,8],{180:function(t,e,n){"use strict";n.r(e),n.d(e,"default",(function(){return h}));n(138),n(23),n(56),n(19),n(24),n(25),n(75),n(104),n(57),n(37),n(52),n(53),n(26),n(27),n(36),n(191),n(192),n(54),n(58),n(73),n(30),n(76),n(28);var r=n(0),o=n(204),i=n(61);function u(t){return(u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function c(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function a(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?c(Object(n),!0).forEach((function(e){d(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):c(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function l(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,v(r.key),r)}}function f(t,e){return(f=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t})(t,e)}function s(t){var e=function(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return function(){return!!t}()}();return function(){var n,r=b(t);if(e){var o=b(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return p(this,n)}}function p(t,e){if(e&&("object"===u(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return y(t)}function y(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function b(t){return(b=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}function d(t,e,n){return(e=v(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function v(t){var e=function(t,e){if("object"!=u(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=u(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==u(e)?e:e+""}var h=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&f(t,e)}(p,t);var e,n,u,c=s(p);function p(t,e,n){var r;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,p),d(y(r=c.call(this)),"category","usnat"),r.config=Object(i.e)(t),r.campaignResponse=e,r.propertyId=n,r}return e=p,(n=[{key:"init",value:function(){var t=this,e=this.config,n=e.accountId,i=e.usNatOrigin,u=e.mmsDomain,c=e.propertyHref,l=e.msgOrigin,f=e.pmOrigin,s=e.pubData,p=this.campaignResponse,y=p.actions,b=p.applies,d=p.cookies;return Object(r.setStateStorageInMemory)(b,"cookies","applies",this.category),Object.assign(window._sp_.usnat,Object(o.a)(a(a({},this.config),{},{propertyId:this.propertyId}),this.category)),window._sp_.usnat.loadPrivacyManager=function(e,o){var a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){};if(!(e=e||Object(r.getStateStorageFromMemory)("childPmId",null,t.category)))return Promise.reject("No privacyManagerId provided, no groupPmId found.");var p=Object(r.getUserConsentData)(t.category,"legislation");if("state"===p&&!1===b)return Promise.reject("No categories to collect or modify consent for when outside of applies scope.");t.cmpApi&&(t.cmpApi.setSignalStatus("not ready"),t.cmpApi.setCmpDisplayStatus("visible"));var y=t.makeMessageUrl(2,e,Object(r.getUserConsentData)(t.category,"uuid"),t.propertyId,i,u,l),d={};return o&&(d={type:"inline",type_settings:{targetType:"id",targetName:o}}),new r.Renderer({accountId:n,url:y,mmsDomain:u,siteId:t.propertyId,href:c,msgOrigin:l,settings:d,messageId:e,cmpOrigin:i,type:"pm",pmOrigin:f,wrapperAPIOrigin:t.config.wrapperAPIOrigin,plugAndPlay:!0,callbackPath:a,updateCMP:t.updateCmpPost.bind(t),pubData:s,category:t.category}).init()},window._sp_.usnat.loadPrivacyManagerModal=function(t,e,n){return window._sp_.usnat.loadPrivacyManager(t,e,null,n)},Promise.all((y||[]).map(r.executeAction)).then((function(e){return Object(r.setCookiesAction)(d,u,t.category)}))}},{key:"checkForMessage",value:function(){var t=this.hasMessage(),e=this.campaignResponse.applies;t?e&&this.cmpApi&&this.cmpApi.setCmpDisplayStatus("visible"):Object(r.executeEventCallback)("onMessaLine truncated
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
!function(){"use strict";var e,t,n,r,a,c,o,i,u,f,s,d,b={},l={};function h(e){var t=l[e];if(void 0!==t)return t.exports;var n=l[e]={id:e,loaded:!1,exports:{}},r=!0;try{b[e].call(n.exports,n,n.exports,h),r=!1}finally{r&&delete l[e]}return n.loaded=!0,n.exports}h.m=b,h.amdO={},e=[],h.O=function(t,n,r,a){if(n){a=a||0;for(var c=e.length;c>0&&e[c-1][2]>a;c--)e[c]=e[c-1];e[c]=[n,r,a];return}for(var o=1/0,c=0;c<e.length;c++){for(var n=e[c][0],r=e[c][1],a=e[c][2],i=!0,u=0;u<n.length;u++)o>=a&&Object.keys(h.O).every(function(e){return h.O[e](n[u])})?n.splice(u--,1):(i=!1,a<o&&(o=a));if(i){e.splice(c--,1);var f=r();void 0!==f&&(t=f)}}return t},h.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return h.d(t,{a:t}),t},n=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__},h.t=function(e,r){if(1&r&&(e=this(e)),8&r||"object"==typeof e&&e&&(4&r&&e.__esModule||16&r&&"function"==typeof e.then))return e;var a=Object.create(null);h.r(a);var c={};t=t||[null,n({}),n([]),n(n)];for(var o=2&r&&e;"object"==typeof o&&!~t.indexOf(o);o=n(o))Object.getOwnPropertyNames(o).forEach(function(t){c[t]=function(){return e[t]}});return c.default=function(){return e},h.d(a,c),a},h.d=function(e,t){for(var n in t)h.o(t,n)&&!h.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},h.f={},h.e=function(e){return Promise.all(Object.keys(h.f).reduce(function(t,n){return h.f[n](e,t),t},[]))},h.u=function(e){return 8764===e?"static/chunks/8764-de71f68e8e20a4eb.js":8097===e?"static/chunks/8097-f7abdb73bed136f5.js":2076===e?"static/chunks/2076-48d194898415201a.js":3711===e?"static/chunks/3711-33c4ab59eacdfddd.js":8433===e?"static/chunks/8433-b4588ba55097775f.js":2909===e?"static/chunks/2909-3b7a83abaaa634cb.js":2982===e?"static/chunks/26770aaf-434672d6e837ff7e.js":2251===e?"static/chunks/674a26a7-706973588c9101ef.js":6336===e?"static/chunks/6336-0ef559f9ca6156bd.js":4092===e?"static/chunks/4092-31cd7e68b12a9722.js":2806===e?"static/chunks/2806-73840ca6c0cfbafc.js":1466===e?"static/chunks/1466-9283005bbbd24347.js":9334===e?"static/chunks/9334-ad00b964fb58f272.js":3934===e?"static/chunks/3934-ff427ed9511030ea.js":686===e?"static/chunks/686-5b8c4a3d40d0d1d0.js":8696===e?"static/chunks/8696-3c4873b2e81b1ab7.js":5460===e?"static/chunks/5460-6a593c0cdf06a2ba.js":3094===e?"static/chunks/3094-7df6dd0b69f08c9d.js":"static/chunks/"+(4632===e?"2926b636":e)+"."+({717:"294121a434e19b90",937:"491e32db11e1d114",1024:"72233d9f6a43bfe3",1200:"bbd39abec4b0b05b",1447:"187b40969073ca2f",1797:"87b5611baad1ce74",1890:"45a4b4bfe8c78395",2285:"b97d72080ae77d44",2489:"5f68421b2d5dce39",2835:"3a2351bb08e3be95",3361:"416be142cad4cde8",4034:"73724ada972b7fb9",4180:"276b5cd65264d9bd",4304:"04b9c839aa976021",4632:"75ee45e093d0c019",4767:"ef43555647f760a0",4827:"c9bbf2bb4af49d44",5120:"6cfc4c360dd648ac",5974:"4ab840edaf18617a",6212:"50beaf0a4a957fa2",7431:"ccdc3ba9e793aaf9",8218:"ae3f7d502ee415d9",9452:"de014e43686e9e28"})[e]+".js"},h.miniCssF=function(e){return"static/css/"+({937:"8886f69bd44fc21c",1024:"77b2bc483e386afa",1200:"612cd29ebb598b88",1447:"529c1828cb4c7858",1890:"ce75f35d0d9e0d73",2285:"56b06fdcab61f524",2909:"1b94bbeabe1e643e",3361:"b612ca73628a3784",4180:"b9415deaee7076ba",4304:"ebe689a9e924df82",4827:"42454ee2781505d0",5120:"b4e3061972f6a565",5974:"326877aab0d5f13f",9334:"87c2764ae0951dfc"})[e]+".css"},h.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),h.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r={},a="_N_E:",h.l=function(e,t,n,c){if(r[e]){r[e].push(t);return}if(void 0!==n)for(var o,i,u=document.getElementsByTagName("script"),f=0;f<u.length;f++){var s=u[f];if(s.getAttribute("src")==e||s.getAttribute("data-webpack")==a+n){o=s;break}}o||(i=!0,(o=document.createElement("script")).charset="utf-8",o.timeout=120,h.nc&&o.setAttribute("nonce",h.nc),o.setAttribute("data-webpack",a+n),o.src=h.tu(e),0===o.src.indexOf(window.location.origin+"/")||(o.crossOrigin="anonymous")),r[e]=[t];var d=function(t,n){o.onerror=o.onload=null,clearTimeout(b);var a=r[e];if(delete r[e],o.parentNode&&o.parentNode.removeChild(o),a&&a.forEach(function(e){return e(n)}),t)return t(n)},b=setTimeout(d.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=d.bind(null,o.onerror),o.onload=d.bind(null,o.onload),i&&document.head.appendChild(o)},h.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},h.nmd=function(e){return e.paths=[],e.children||(e.children=[]),e},h.tt=function(){return void 0===c&&(c={createScriptURL:function(e){return e}},"undefined"!=typeof trustedTypes&&trustedTypes.createPolicy&&(c=trustedTypes.createPolicy("nextjs#bundler",c))),c},h.tu=function(e){return h.tt().createScriptURL(e)},h.p="https://assets.bwbx.io/s3/bazaar/_next/",o=function(e,t,n,r)Line truncated
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
/*! BUILD_INFORMATION={"GIT_COMMIT":"c4a5c48314da6709e075ad01def4214c994637da","GIT_TAG":"4.40.1-dev","BUILD_TIMESTAMP":1771510548} */!function(e){function t(t){for(var n,o,a=t[0],i=t[1],c=0,u=[];c<a.length;c++)o=a[c],Object.prototype.hasOwnProperty.call(r,o)&&r[o]&&u.push(r[o][0]),r[o]=0;for(n in i)Object.prototype.hasOwnProperty.call(i,n)&&(e[n]=i[n]);for(s&&s(t);u.length;)u.shift()()}var n={},r={10:0};function o(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,o),r.l=!0,r.exports}o.e=function(e){var t=[],n=r[e];if(0!==n)if(n)t.push(n[2]);else{var a=new Promise((function(t,o){n=r[e]=[t,o]}));t.push(n[2]=a);var i,c=document.createElement("script");c.charset="utf-8",c.timeout=120,o.nc&&c.setAttribute("nonce",o.nc),c.src=function(e){return o.p+""+({0:"ccpa",1:"ccpa-gpp",2:"custom",3:"gdpr",4:"gdpr-tcf",5:"globalcmp",6:"hbbtv",7:"preferences",8:"usnat",9:"usnat-uspapi"}[e]||e)+"."+{0:"1820a7ba1340e3c799af",1:"d3f006f99fb3b63e8837",2:"14dc688b28a73d75ffa6",3:"e7c8ebb30eead451fc6b",4:"27718c8cb9d29947d2c1",5:"62ed6e1264397cbd012e",6:"9564b1326685d2b24502",7:"9609e7b6cebc396cde9e",8:"f12613136193900e32e2",9:"090eccada574d39af6f8"}[e]+".bundle.js"}(e);var s=new Error;i=function(t){c.onerror=c.onload=null,clearTimeout(u);var n=r[e];if(0!==n){if(n){var o=t&&("load"===t.type?"missing":t.type),a=t&&t.target&&t.target.src;s.message="Loading chunk "+e+" failed.\n("+o+": "+a+")",s.name="ChunkLoadError",s.type=o,s.request=a,n[1](s)}r[e]=void 0}};var u=setTimeout((function(){i({type:"timeout",target:c})}),12e4);c.onerror=c.onload=i,document.head.appendChild(c)}return Promise.all(t)},o.m=e,o.c=n,o.d=function(e,t,n){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(o.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)o.d(n,r,function(t){return e[t]}.bind(null,r));return n},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o.oe=function(e){throw console.error(e),e};var a=window._sp_wp_jsonp=window._sp_wp_jsonp||[],i=a.push.bind(a);a.push=t,a=a.slice();for(var c=0;c<a.length;c++)t(a[c]);var s=i;o(o.s=149)}([function(e,t,n){(function(e){var r,o,a,i;function c(e){return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}n(26),n(27),n(23),n(140),n(141),n(142),n(138),n(74),n(36),n(29),n(144),n(58),n(75),n(72),n(143),n(30),n(172),n(137),n(56),n(77),n(78),n(173),n(59),n(107),n(175),n(19),n(24),n(25),n(147),n(38),n(104),n(37),n(54),n(57),n(132),n(60),n(105),n(178),n(28),window,i=function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==c(e)&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=4)}([function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)},o=this&&this.__spreadArrays||function(){for(var e=0,t=0,n=arguments.length;t<n;t++)e+=arguments[t].length;var r=Array(e),o=0;for(t=0;t<n;t++)for(var a=arguments[t],i=0,c=a.length;i<c;i++,o++)r[o]=a[i];return r};Object.defineProperty(t,"__esModule",{value:!0}),t.getCategoryUrlParam=t.getConcatUuidParam=t.consoleDebug=t.getUspString=t.sampleUser=t.getSampledUserCookieValue=t.sampleRate=t.syncConsent=t.localStorageOperation=t.resetUserState=t.setCookies=t.appendQueryParams=t.getRequestUUID=t.dispatchEvent=t.lockScroll=t.disableScroll=t.getParameterByName=t.isMMSUrl=t.replaceCallbackParams=t.executeAction=t.setCookiesAction=t.handleConsentData=t.getCookie=t.getPathALBUrl=t.fetchGETConsent=t.Line truncated
|
||||||
Whitespace-only changes.
@@ -0,0 +1,725 @@
|
|||||||
|
# План: Лендинг ROI24 — Premium Single-Tier Landing
|
||||||
|
|
||||||
|
> Дата: 2026-06-20 (обновлено)
|
||||||
|
> Бюджет: 100 000 руб. под ключ + 20 000 руб./мес поддержка
|
||||||
|
> Позиционирование: «Живые цифры бизнеса за 3 дня»
|
||||||
|
> Цель: Продажа премиум-услуги автоматизированной аналитики
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ЧАСТЬ 1: СТРУКТУРА ЛЕНДИНГА (14 секций)
|
||||||
|
|
||||||
|
```
|
||||||
|
Header (sticky)
|
||||||
|
↓
|
||||||
|
1. Hero — Боль + Решение
|
||||||
|
↓
|
||||||
|
2. Numbers Strip — Проблема в цифрах
|
||||||
|
↓
|
||||||
|
3. Проблема — 3 боли собственника
|
||||||
|
↓
|
||||||
|
4. Решение — Что такое ROI24
|
||||||
|
↓
|
||||||
|
5. Пример дашборда — Интерактив (переключение сегментов)
|
||||||
|
↓
|
||||||
|
6. Как работает — 5 шагов (детально)
|
||||||
|
↓
|
||||||
|
7. Для кого — 3 сегмента
|
||||||
|
↓
|
||||||
|
8. Сравнение — ROI24 vs «как сейчас» (таблица)
|
||||||
|
↓
|
||||||
|
9. Кейс — Развёрнутый кейс с цифрами
|
||||||
|
↓
|
||||||
|
10. Команда — Кто делает
|
||||||
|
↓
|
||||||
|
11. Калькулятор потерь — Интерактив
|
||||||
|
↓
|
||||||
|
12. Тариф — 100К + гарантии + Trust badges
|
||||||
|
↓
|
||||||
|
13. FAQ — 6 вопросов-ответов
|
||||||
|
↓
|
||||||
|
14. CTA — Telegram кнопка + мини-форма
|
||||||
|
↓
|
||||||
|
15. Footer — Тяжёлый (ЮЛ, реквизиты, соцсети, 152-ФЗ)
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ЧАСТЬ 2: ПОДРОБНОЕ ОПИСАНИЕ КАЖДОЙ СЕКЦИИ
|
||||||
|
|
||||||
|
### Header (Sticky Navigation)
|
||||||
|
|
||||||
|
| Элемент | Описание |
|
||||||
|
|---------|----------|
|
||||||
|
| Логотип | ROI24 — геометрический sans-serif, моноширинный |
|
||||||
|
| Навигация | О решении, Пример, Тариф, FAQ (4 пункта, Hick's Law) |
|
||||||
|
| CTA | «Обсудить проект» — зелёная кнопка, фиксированная |
|
||||||
|
| Телефон | Кликабельный номер (8-800 или +7) |
|
||||||
|
|
||||||
|
**Паттерн wiki:** hero-variations (centered nav), landing-patterns (sticky header), russian-ui-patterns (sticky header with contacts)
|
||||||
|
**Психология:** CTA в правой части по Z-pattern, телефон — сигнал серьёзности для РФ
|
||||||
|
|
||||||
|
**Технически:**
|
||||||
|
- Backdrop blur (glassmorphism)
|
||||||
|
- Прозрачность 80% наверху → непрозрачный при скролле
|
||||||
|
- Высота: 72px
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Секция 1: Hero — «Боль + Решение»
|
||||||
|
|
||||||
|
**H1:** «Вы теряете деньги, не зная почему»
|
||||||
|
**H2:** «Живой дашборд с 10 ключевыми метриками вашего бизнеса — обновляется автоматически из 1С, CRM и банков»
|
||||||
|
**CTA:** «Получить демо за 3 дня» (зелёная, #22c55e)
|
||||||
|
**Secondary CTA:** «Посмотреть пример дашборда» (outline, scroll к секции 5)
|
||||||
|
|
||||||
|
**Доверие под CTA:** «Настроим за 3 дня. Не нужно учиться — увидите цифры как в bank-app»
|
||||||
|
|
||||||
|
**Паттерн wiki:**
|
||||||
|
- hero-variations: Split layout (текст слева, дашборд-мокап справа)
|
||||||
|
- visual-hierarchy: H1 clamp(2.5rem, 6vw, 4rem), один главный CTA + один вторичный
|
||||||
|
- customer-journey: Awareness stage
|
||||||
|
|
||||||
|
**Дизайн:**
|
||||||
|
- Тёмный фон (#0a0a0a)
|
||||||
|
- Мокап дашборда справа (карточка с KPI-числами и мини-графиками)
|
||||||
|
- Акцент: зелёный (#22c55e) — только для CTA
|
||||||
|
- Геометрические фигуры на фоне (Bauhaus circle/square, opacity 0.03)
|
||||||
|
- Анимация: staggered-reveal элементов (текст → CTA → мокап)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Секция 2: Numbers Strip — «Проблема в цифрах»
|
||||||
|
|
||||||
|
4 колонки с анимированными счётчиками (count-up при появлении):
|
||||||
|
|
||||||
|
```
|
||||||
|
┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐
|
||||||
|
│ 70% │ │ 3 дня │ │ 83% │ │ 2.3x │
|
||||||
|
│ компаний │ │ │ │ маркетоло- │ │ чаще │
|
||||||
|
│ не видят │→│ без дашборда│→│ лов не │→│ превышают │
|
||||||
|
│ деньги │ │ тратят │→│ могут │ │ revenue │
|
||||||
|
│ в кассе │ │ время │→│ доказать │ │ goals │
|
||||||
|
│ на износ │ │ на отчеты │→│ ROI │ │ │
|
||||||
|
└────────────┘ └────────────┘ └────────────┘ └────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
**Паттерн wiki:** testimonials (pattern 3: Stats Bar)
|
||||||
|
**Психология:** Цифры создают «шок-контент», который мотивирует скроллить дальше
|
||||||
|
**Анимация:** числа «набегают» при скролле (GSAP counter)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Секция 3: Проблема — «3 боли собственника»
|
||||||
|
|
||||||
|
3 карточки в bento-сетке:
|
||||||
|
|
||||||
|
**1. «Данные разбросаны»**
|
||||||
|
Данные в 1С, Excel, CRM, банках. Каждый раз — ручная сводка. Нет единой картины.
|
||||||
|
|
||||||
|
**2. «Непонятно где теряете»**
|
||||||
|
Знаете, что выручка есть. Но не видите: какая реклама работает, какой менеджер теряет клиентов.
|
||||||
|
|
||||||
|
**3. «Отчёты приходят слишком поздно»**
|
||||||
|
В понедельник смотрит отчёт за прошлую неделю. Когда увидел проблему — деньги уже потеряны.
|
||||||
|
|
||||||
|
**Паттерн wiki:**
|
||||||
|
- card-grid: Bento grid (asymmetric)
|
||||||
|
- landing-patterns: Problem statement section
|
||||||
|
- visual-hierarchy: Проблема → Решение → Доказательство
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Секция 4: Решение — «Что такое ROI24»
|
||||||
|
|
||||||
|
Заголовок: «Один дашборд. Все ключевые цифры.»
|
||||||
|
|
||||||
|
Подзаголовок: ROI24 собирает данные из ваших источников и показывает 10 метрик, которые нужно смотреть каждое утро. Без обучения, без Excel.
|
||||||
|
|
||||||
|
**3 карточки преимуществ:**
|
||||||
|
|
||||||
|
| Преимущество | Описание |
|
||||||
|
|-------------|----------|
|
||||||
|
| ⚡ Живые данные | Обновляются автоматически — 1С, CRM, банки, реклама |
|
||||||
|
| 👁 Видно где теряете | Цветовые индикаторы: зелёный/жёлтый/красный |
|
||||||
|
| 📱 С телефона | Собственник смотрит дашборд с телефона каждое утро |
|
||||||
|
|
||||||
|
**Паттерн wiki:**
|
||||||
|
- feature-list: 3-column grid with icons
|
||||||
|
- landing-patterns: Features section
|
||||||
|
- design-tokens: Semantic color tokens (success/warning/error)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Секция 5: Пример дашборда — «Интерактивное демо»
|
||||||
|
|
||||||
|
Не статичный мокап. ECharts график, где можно переключаться между типами бизнеса.
|
||||||
|
|
||||||
|
**Тогглы сверху:**
|
||||||
|
```
|
||||||
|
[Интернет-магазин] [Услуги/Агентство] [Производство]
|
||||||
|
```
|
||||||
|
|
||||||
|
При переключении данные графика меняются в реальном времени — Revenue, конверсия, маржа. Клиент видит, как дашборд выглядит именно под его бизнес.
|
||||||
|
|
||||||
|
**Содержимое мокапа (реальные KPI из исследования):**
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────────────────────────────────────────────────┐
|
||||||
|
│ ROI24 Dashboard ● Live │
|
||||||
|
├─────────────────────────────────────────────────────────────┤
|
||||||
|
│ Выручка: 4.2М ↑12% Маржа: 23% Касса: 1.8М Дебиторка│
|
||||||
|
├─────────────────────────────────────────────────────────────┤
|
||||||
|
│ [График выручки 12 месяцев с трендом (ECharts)] │
|
||||||
|
│ [Воронка: Лиды→Контракт→Оплата] │
|
||||||
|
│ [Топ-5 каналов: SEO 35% Контекст 28% Прямой 22%] │
|
||||||
|
└─────────────────────────────────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
**Паттерн wiki:**
|
||||||
|
- dashboard-tables: KPI cards layout, trend indicators, score bars
|
||||||
|
- landing-patterns: Report preview / Product screenshot
|
||||||
|
- hero-variations: Split layout
|
||||||
|
- motion: staggered-reveal (элементы мокапа появляются каскадом)
|
||||||
|
- motion/hover-micro-interaction: hover на элементах графика
|
||||||
|
|
||||||
|
**Реализация:** ECharts CDN — интерактивные графики. Переключение сегментов — чистый JS. Без React/Vue, чистый DOM.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Секция 6: Как работает — «5 шагов»
|
||||||
|
|
||||||
|
Детальный процесс — снимает тревогу клиента: «я буду знать, что происходит»
|
||||||
|
|
||||||
|
**1. Брифинг (30 минут)**
|
||||||
|
Звоним, узнаём ваш бизнес, определяем 10 ключевых метрик. Никаких форм — просто звонок.
|
||||||
|
|
||||||
|
**2. Подключение (1-2 дня)**
|
||||||
|
Подключаем 1С, CRM, онлайн-банки, рекламные кабинеты. Вы не участвуете.
|
||||||
|
|
||||||
|
**3. Настройка (1-2 дня)**
|
||||||
|
Настраиваем дашборд под ваши 10 метрик. Не 50 — только то, что реально нужно.
|
||||||
|
|
||||||
|
**4. Демо (30 минут)**
|
||||||
|
Показываем результат. Вносим правки. Вы видите, что работает.
|
||||||
|
|
||||||
|
**5. Запуск (день)**
|
||||||
|
Даём доступ, обучаем команду. Включаем автоматическое обновление. Готово.
|
||||||
|
|
||||||
|
**Визуализация:** Вертикальная timeline (линия слева, шаги справа, соединены точками)
|
||||||
|
**Паттерн wiki:** landing-patterns (How it works), visual-hierarchy (последовательность), animation-physics (staggered-reveal)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Секция 7: Для кого — «3 сегмента»
|
||||||
|
|
||||||
|
3 карточки в Bento-сетке (асимметричная):
|
||||||
|
|
||||||
|
**Интернет-магазин** (большая карточка)
|
||||||
|
Конверсия, AOV, CAC, CLV, возвраты, оборачиваемость
|
||||||
|
*Пример: «Сеть из 12 онлайн-магазинов, оборот ₽540М/год»
|
||||||
|
|
||||||
|
**Услуги / Агентство** (средняя карточка)
|
||||||
|
Пайплайн, маржинальность проектов, загрузка команды, кэшфлоу
|
||||||
|
*Пример: «Маркетинговое агентство, 8 сотрудников»
|
||||||
|
|
||||||
|
**Производство** (средняя карточка)
|
||||||
|
План/факт, OEE, качество, поставки, себестоимость
|
||||||
|
*Пример: «Производство мебели, 2 цеха, 45 сотрудников»
|
||||||
|
|
||||||
|
**Паттерн wiki:**
|
||||||
|
- bento-grid: 3 карточки разных размеров
|
||||||
|
- card-grid: Feature list
|
||||||
|
- responsive-patterns: Mobile-first stacking
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Секция 8: Сравнение — «ROI24 vs «как сейчас»»
|
||||||
|
|
||||||
|
РФ-пользователи «любят сравнивать» (russian-user-psychology.md, пункт «Поведенческие паттерны»). Без сравнения они не понимают ценность 100К.
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────────────┬──────────────┬──────────────┐
|
||||||
|
│ │ Без ROI24 │ С ROI24 │
|
||||||
|
├─────────────────────────┼──────────────┼──────────────┤
|
||||||
|
│ Данные │ 5+ источников│ 1 дашборд │
|
||||||
|
│ Обновление │ Ручной ввод │ Авто, каждый │
|
||||||
|
│ │ │ час │
|
||||||
|
│ Время на отчёты │ 3+ часа/нед │ 0 мин │
|
||||||
|
│ Актуальность │ 30 дней │ Живые данные │
|
||||||
|
│ Видно где теряете │ ❌ │ ✅ │
|
||||||
|
│ Мобильный доступ │ Нет │ Да, телефон │
|
||||||
|
│ Стоимость (год) │ 100К + │ 100К + │
|
||||||
|
│ │ 40К зарплат │ 20К поддержка│
|
||||||
|
│ Окупаемость │ Не видно │ 3-8 месяцев │
|
||||||
|
└─────────────────────────┴──────────────┴──────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
**Паттерн wiki:**
|
||||||
|
- landing-page: Comparison pattern (implicit in CRO principles)
|
||||||
|
- dashboard-tables: Dual-view pattern (адаптировано для сравнения)
|
||||||
|
- cognitive-fluency: Простая таблица для быстрого сравнения
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Секция 9: Кейс — «Развёрнутый кейс с цифрами»
|
||||||
|
|
||||||
|
Не 3 коротких отзыва. Один развёрнутый кейс — «кейсы с цифрами — #3 фактор доверия РФ».
|
||||||
|
|
||||||
|
```
|
||||||
|
Кейс: Сеть аптек «ФармМаркет» (42 точки)
|
||||||
|
|
||||||
|
Проблема:
|
||||||
|
— Данные в 5 разных системах (1С, CRM, 2 банка, кассы)
|
||||||
|
— Отчёты за неделю — по вторникам, к среде уже не актуальны
|
||||||
|
— Не знали, какие точки убыточны до конца месяца
|
||||||
|
|
||||||
|
Решение:
|
||||||
|
— Подключили 1С + CRM + 2 банка + кассы (5 источников)
|
||||||
|
— Настроили 10 KPI на дашборд (выручка, маржа, касса, топ товаров...)
|
||||||
|
— Обновление каждого часа
|
||||||
|
|
||||||
|
Результат:
|
||||||
|
— Выявили 3 убыточные точки за 2 недели
|
||||||
|
— Сэкономили ₽840 000/мес
|
||||||
|
— Собственник смотрит дашборд за завтраком
|
||||||
|
— Окупаемость: 3 месяца
|
||||||
|
|
||||||
|
"ROI24 — единственный инструмент, который дал реальные инсайты,
|
||||||
|
а не просто красивые графики." — Алексей Петров, операционный директор
|
||||||
|
```
|
||||||
|
|
||||||
|
**Паттерн wiki:** testimonials (Case Studies — уровень пирамиды доверия), visual-hierarchy (фокус на цифрах результата)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Секция 10: Команда — «Кто делает ваш дашборд»
|
||||||
|
|
||||||
|
РФ-пользователь «не доверяет сайту по умолчанию» (russian-user-psychology.md). Для цены 100К нужно показать людей.
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────────────────────────────────────────────┐
|
||||||
|
│ Кто делает ваш дашборд │
|
||||||
|
│ │
|
||||||
|
│ [Фото 1] [Фото 2] [Фото 3] │
|
||||||
|
│ Имя Фамилия Имя Фамилия Имя Фамилия │
|
||||||
|
│ Должность Должность Должность │
|
||||||
|
│ Опыт Опыт Опыт │
|
||||||
|
└─────────────────────────────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
Содержимое (примеры):
|
||||||
|
- Основатель — 8 лет в аналитике, 50+ проектов, сертификаты 1С/Битрикс
|
||||||
|
- Тех. директор — Data Engineer, опыт с ClickHouse/PostgreSQL
|
||||||
|
- Менеджер проектов — работает с бизнесом, переводит с «хочу всё» на «нужно 10 метрик»
|
||||||
|
|
||||||
|
**Паттерн wiki:**
|
||||||
|
- trust-signals: Brand authority (фото реальных людей)
|
||||||
|
- visual-hierarchy: Фокус на лицах и опыте
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Секция 11: Калькулятор потерь — «Интерактив»
|
||||||
|
|
||||||
|
Вместо абстрактных цифр — интерактив, где пользователь сам видит свои потери. Crawford: «Clarity beats design» — это clarity.
|
||||||
|
|
||||||
|
**Интерфейс (3 поля + результат):**
|
||||||
|
|
||||||
|
```
|
||||||
|
Сколько сотрудников обрабатывают отчёты? [3]
|
||||||
|
Сколько часов в неделю уходит? [4ч]
|
||||||
|
Средняя зарплата сотрудника? [80 000₽]
|
||||||
|
|
||||||
|
→ Вы теряете ₽11 520 000/год на ручных отчётах
|
||||||
|
→ ROI24 окупается за 8 месяцев
|
||||||
|
```
|
||||||
|
|
||||||
|
**Паттерн wiki:**
|
||||||
|
- cognitive-fluency: Простые поля, мгновенный результат
|
||||||
|
- visual-hierarchy: Результат крупно, зелёным (экономия)
|
||||||
|
- design-tokens: Semantic color для результата (success = зелёный)
|
||||||
|
|
||||||
|
**Реализация:** Чистый JS, без библиотек. 3 input[type=number], один event listener, расчёт за 0мс.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Секция 12: Тариф — «Один тариф. Всё включено.»
|
||||||
|
|
||||||
|
Заголовок: «Под ключ за 100 000 ₽»
|
||||||
|
|
||||||
|
Подзаголовок: «Настройка дашборда. Подключение источников. Обучение команды.»
|
||||||
|
|
||||||
|
**Список включённого (4 колонки):**
|
||||||
|
|
||||||
|
| Что входит | Срок |
|
||||||
|
|-----------|------|
|
||||||
|
| Подключение 1С / CRM | 1 день |
|
||||||
|
| Настройка 10 метрик | 1 день |
|
||||||
|
| Мокап дашборда под вас | 1 день |
|
||||||
|
| Обучение команды | 2 часа |
|
||||||
|
| Поддержка 30 дней | 1 месяц |
|
||||||
|
| Обновление источников | Включено |
|
||||||
|
|
||||||
|
**Цена:** 100 000 ₽ (крупно, monospace шрифт JetBrains Mono)
|
||||||
|
**CTA:** «Обсудить проект» (зелёная, крупная)
|
||||||
|
|
||||||
|
**Паттерн wiki:**
|
||||||
|
- landing-page: Pricing — single tier pattern
|
||||||
|
- visual-hierarchy: Цена как фокус-точка
|
||||||
|
- testimonials: Trust badges рядом с ценой
|
||||||
|
|
||||||
|
**Гарантия (под ценой, выделено):**
|
||||||
|
«30-дневная гарантия. Если дашборд не устроит — вернём деньги за настройку.
|
||||||
|
Работать будем по этапам, вы видите результат после каждого шага.»
|
||||||
|
|
||||||
|
**Дополнительно:**
|
||||||
|
«После первого месяца — поддержка 20 000 ₽/мес. Или отключите в любой момент.»
|
||||||
|
|
||||||
|
**Trust badges (рядом с ценой):**
|
||||||
|
✓ Данные в РФ (серверы Москва) ✓ 152-ФЗ (персональные данные)
|
||||||
|
✓ SSL (HTTPS) ✓ Работаем с НДС ✓ Договор и акты ✓ Поддержка по телефону
|
||||||
|
|
||||||
|
**Важно:** Поскольку тариф один — он не «выделен» как featured. Он единственный. Это создаёт ощущение: «мы не делим на тарифы, мы делаем хорошо».
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Секция 13: FAQ — «Возражения»
|
||||||
|
|
||||||
|
6 вопросов-ответов (аккордеон, анимация открытия):
|
||||||
|
|
||||||
|
**«Почему 100К? Это же дорого.»**
|
||||||
|
«Это не шаблон. Это настройка под ваш бизнес: ваши 10 метрик, ваши 5 источников данных, ваше обучение команды. Шаблоны от 20К, но они бесполезны — не адаптированы под ваш бизнес.»
|
||||||
|
|
||||||
|
**«А если не подойдёт?»**
|
||||||
|
«30-дневная гарантия. Работаем по этапам — вы видите результат после каждого. Если на каком-то этапе поймёте, что не то — останавливаемся и возвращаем деньги за неработающую часть.»
|
||||||
|
|
||||||
|
**«Сколько времени займёт настройка?»**
|
||||||
|
«3-5 дней. Первый дашборд — за 72 часа. Потом донастраиваем под ваши пожелания.»
|
||||||
|
|
||||||
|
**«А какие данные можно подключить?»**
|
||||||
|
«1С (любая конфигурация), amoCRM, Битрикс24, Яндекс.Директ, VK Ads, онлайн-банки (Сбер, Тинькофф, Альфа), кассы (1С-Рарус, iiko, r_keeper). Если не знаете — напишите, скажем.»
|
||||||
|
|
||||||
|
**«Можно проще? Дешевле?»**
|
||||||
|
«Нет. Потому что "проще" = "не работает". 50+ проектов показали: меньше 10 метрик — не видно картину. Больше 10 — шум. Наш баланс — максимум пользы.»
|
||||||
|
|
||||||
|
**«Поддержка после запуска?»**
|
||||||
|
«30 дней включено в стоимость — правки, донастройка, ответы на вопросы. Далее 20 000 ₽/мес: мониторинг источников, техподдержка, мелкие обновления. Или отключаете — дашборд продолжает работать.»
|
||||||
|
|
||||||
|
**Паттерн wiki:**
|
||||||
|
- cognitive-fluency: Простой аккордеон, один вопрос открыт
|
||||||
|
- russian-user-psychology: Ответы на реальные возражения
|
||||||
|
- visual-hierarchy: Вопрос жирный, ответ обычный
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Секция 14: CTA — «Готовы видеть деньги?»
|
||||||
|
|
||||||
|
Заголовок: «Узнайте, сколько теряет ваш бизнес каждый месяц»
|
||||||
|
Подзаголовок: «Бесплатный аудит аналитики за 30 минут. Покажем, какие метрики вы упускаете.»
|
||||||
|
|
||||||
|
**CTA варианты (выбор):**
|
||||||
|
1. Написать в Telegram (крупная зелёная кнопка)
|
||||||
|
2. Позвонить (номер телефона)
|
||||||
|
3. Оставить заявку (форма: Имя, Телефон — 2 поля)
|
||||||
|
|
||||||
|
**Паттерн wiki:**
|
||||||
|
- landing-patterns: CTA section (bottom)
|
||||||
|
- visual-hierarchy: CTA — самый контрастный элемент
|
||||||
|
- psychological: Loss aversion (боль потери > радость получения)
|
||||||
|
- russian-ui-patterns: Telegram кнопка обязательна
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Секция 15: Footer — «Тяжёлый»
|
||||||
|
|
||||||
|
Колонки:
|
||||||
|
1. **ROI24** — Логотип, описание (2 строки)
|
||||||
|
2. **Контакты** — Телефон, Telegram, Email
|
||||||
|
3. **Решение** — О нас, Пример, Тариф, FAQ, Контакты
|
||||||
|
4. **Юридическое** — ИНН/ОГРН, Политика конфиденциальности, 152-ФЗ, Оферта
|
||||||
|
|
||||||
|
**Правый нижний угол:** Telegram кнопка (fixed, bottom-right)
|
||||||
|
**Cookie banner:** в нижней части экрана (всплывает при первом посещении)
|
||||||
|
|
||||||
|
**Паттерн wiki:**
|
||||||
|
- russian-ui-patterns: Тяжёлый footer (реквизиты, контакты, соцсети)
|
||||||
|
- landing-page: RU compliance (skip-link, focus-visible, Telegram, телефон, ИНН/ОГРН, 152-ФЗ, cookie banner, privacy policy)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ЧАСТЬ 3: ВЫБРАННЫЕ ПАТТЕРНЫ WIKI (список)
|
||||||
|
|
||||||
|
### Layout (структура)
|
||||||
|
|
||||||
|
| Паттерн | Где используется | Зачем |
|
||||||
|
|---------|-----------------|-------|
|
||||||
|
| `layout/hero-variations` — Split | Hero секция | Текст слева, дашборд справа |
|
||||||
|
| `layout/card-grid` | Problem, Solution, Team | Адаптивная сетка |
|
||||||
|
| `layout/bento-grid` | Для кого, Problem | Асимметричная сетка |
|
||||||
|
| `layout/landing-patterns` | Вся страница | Конверсионный порядок секций |
|
||||||
|
| `layout/hero-variations` — Sticky nav | Header | CTA всегда виден |
|
||||||
|
|
||||||
|
### Psychology (убеждение)
|
||||||
|
|
||||||
|
| Паттерн | Где используется | Зачем |
|
||||||
|
|---------|-----------------|-------|
|
||||||
|
| `psychology/visual-hierarchy` | Весь лендинг | Один CTA, Z-pattern, размер |
|
||||||
|
| `psychology/testimonials` | Numbers, Case study | Социальное доказательство |
|
||||||
|
| `psychology/trust-signals` | Тариф, Footer, Header | SSL, данные, гарантии |
|
||||||
|
| `psychology/cognitive-fluency` | Hero, Calculator, FAQ | Простота = доверие |
|
||||||
|
|
||||||
|
### Motion (анимации)
|
||||||
|
|
||||||
|
| Паттерн | Где используется | Зачем |
|
||||||
|
|---------|-----------------|-------|
|
||||||
|
| `motion/staggered-reveal` | Все карточки, секции | Элементы появляются каскадом (0.06s delay) |
|
||||||
|
| `motion/hover-micro-interaction` | Кнопки, карточки | Тактильность при наведении |
|
||||||
|
| `motion/animated-gradient` | Фон Hero | Лёгкий градиент, не отвлекает |
|
||||||
|
|
||||||
|
### System (базовая архитектура)
|
||||||
|
|
||||||
|
| Паттерн | Где используется | Зачем |
|
||||||
|
|---------|-----------------|-------|
|
||||||
|
| `system/design-tokens` | Весь CSS | 50+ CSS custom properties |
|
||||||
|
| `system/noise-texture` | Фон Hero | Зернистость для премиум-ощущения |
|
||||||
|
| `system/glassmorphism` | Header | Blur backdrop, полупрозрачность |
|
||||||
|
|
||||||
|
### Typography (шрифты)
|
||||||
|
|
||||||
|
| Паттерн | Где используется | Зачем |
|
||||||
|
|---------|-----------------|-------|
|
||||||
|
| `typography/gradient-text` | H1 в Hero | Градиентный текст для акцента |
|
||||||
|
|
||||||
|
### Dashboard (метрики)
|
||||||
|
|
||||||
|
| Паттерн | Где используется | Зачем |
|
||||||
|
|---------|-----------------|-------|
|
||||||
|
| `dashboard-tables` — KPI cards | Пример дашборда | Ключевые метрики с трендами |
|
||||||
|
| `dashboard-tables` — Trend indicators | Пример дашборда | Зелёный/красный тренд |
|
||||||
|
| `dashboard-tables` — Score bars | Калькулятор, дашборд | Визуализация значений |
|
||||||
|
|
||||||
|
### RU Patterns (российская специфика)
|
||||||
|
|
||||||
|
| Паттерн | Где используется | Зачем |
|
||||||
|
|---------|-----------------|-------|
|
||||||
|
| `russian-ui-patterns` — Тяжёлый footer | Footer | Реквизиты = доверие |
|
||||||
|
| `russian-ui-patterns` — Telegram | CTA, Footer, fixed | РФ пишут в Telegram |
|
||||||
|
| `russian-ui-patterns` — Телефон | Header, CTA, Footer | Клик по номеру |
|
||||||
|
| `russian-ui-patterns` — ИНН/ОГРН | Footer | Без этого — «однодневка» |
|
||||||
|
| `russian-user-psychology` — Сравнение | Секция 8 | РФ любят сравнивать |
|
||||||
|
| `russian-user-psychology` — Гарантия | Тариф | «Вернём деньги» |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ЧАСТЬ 4: НЕ ИСПОЛЬЗУЕМ (и почему)
|
||||||
|
|
||||||
|
| Паттерн wiki | Почему НЕ используем |
|
||||||
|
|-------------|---------------------|
|
||||||
|
| `layout/sticky-feature` | Не нужно — лендинг одностраничный |
|
||||||
|
| `layout/full-bleed-content` | Не подходит для B2B SaaS лендинга |
|
||||||
|
| `media/video-mask` | Утяжелит страницу, не критично для конверсии |
|
||||||
|
| `motion/page-transitions` | Одностраничник, переходы не нужны |
|
||||||
|
| `motion/parallax-scroll` | Минимальные анимации — скорость |
|
||||||
|
| `motion/procedural-patterns` | Избыточно для лендинга услуги |
|
||||||
|
| `typography/kinetic-text` | Отвлекает, не для B2B |
|
||||||
|
| `layout/overlapping-layers` | Слишком сложно для продающей страницы |
|
||||||
|
| `media/animated-illustration` | Не нужно — мокап дашборда сам по себе |
|
||||||
|
|
||||||
|
**Правило:** Лендинг услуги — не арт-объект. Каждый пиксель должен работать на конверсию.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ЧАСТЬ 5: ДИЗАЙН-РЕШЕНИЯ
|
||||||
|
|
||||||
|
### Цветовая схема
|
||||||
|
|
||||||
|
```
|
||||||
|
--color-bg: #0a0a0a ← Фон (тёмный премиум)
|
||||||
|
--color-surface: #111111 ← Карточки
|
||||||
|
--color-border: rgba(255,255,255,0.06)
|
||||||
|
--color-text-primary: #f5f5f5
|
||||||
|
--color-text-secondary: #a1a1aa
|
||||||
|
--accent: #22c55e ← Зелёный CTA (деньги, действие)
|
||||||
|
--accent-hover: #16a34a
|
||||||
|
--accent-secondary: #3b82f6 ← Синий (доверие, финансы — wiki RU психология)
|
||||||
|
--warning: #f59e0b ← Жёлтый индикатор
|
||||||
|
--error: #ef4444 ← Красный индикатор
|
||||||
|
--success: #22c55e ← Зелёный (результат, экономия)
|
||||||
|
```
|
||||||
|
|
||||||
|
**Цветовая психология (wiki russian-user-psychology):**
|
||||||
|
- Зелёный = деньги, одобрение (для CTA и результатов)
|
||||||
|
- Синий = консерватизм, надёжность (для B2B, финансов)
|
||||||
|
- Жёлтый/Красный = индикаторы (не danger в РФ, а сигналы внимания)
|
||||||
|
|
||||||
|
### Шрифты
|
||||||
|
|
||||||
|
| Шрифт | Где используется | Зачем |
|
||||||
|
|-------|-----------------|-------|
|
||||||
|
| Inter (кириллица) | Заголовки, body | Чистый, современный |
|
||||||
|
| JetBrains Mono | Цены, цифры, технические данные | Моноширинный = точность |
|
||||||
|
|
||||||
|
### Размеры
|
||||||
|
|
||||||
|
| Элемент | Размер | Примечание |
|
||||||
|
|---------|--------|-----------|
|
||||||
|
| H1 | clamp(2.5rem, 6vw, 4rem) | Адаптивный |
|
||||||
|
| H2 | clamp(1.8rem, 4vw, 2.5rem) | Адаптивный |
|
||||||
|
| Body | 1rem (16px) | Базовый |
|
||||||
|
| CTA | min-height 48px | Fitts's Law |
|
||||||
|
| Section padding | 128px | Премиум whitespace |
|
||||||
|
| Card padding | 32px | Карточки |
|
||||||
|
|
||||||
|
### Анимации
|
||||||
|
|
||||||
|
| Элемент | Анимация | Параметр |
|
||||||
|
|---------|----------|---------|
|
||||||
|
| Карточки | Staggered reveal | 0.06s delay |
|
||||||
|
| Hover карточки | translateY(-2px) | transition 0.2s |
|
||||||
|
| Кнопки | scale(1.02) | transition 0.15s |
|
||||||
|
| CTA | Pulse glow (мягкий halo) | 2s interval |
|
||||||
|
| Numbers (Strip) | Count up | GSAP |
|
||||||
|
| Аккордеон FAQ | Height expand | ease-out 0.3s |
|
||||||
|
| Мокап дашборда | Fade in + scale | 0.5s |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ЧАСТЬ 6: ТЕХНИЧЕСКАЯ РЕАЛИЗАЦИЯ
|
||||||
|
|
||||||
|
### Формат
|
||||||
|
|
||||||
|
| Параметр | Решение |
|
||||||
|
|----------|--------|
|
||||||
|
| Формат | Single HTML file (как calls24-landing) |
|
||||||
|
| CSS | Встроенный, критический CSS inline |
|
||||||
|
| JS | Встроенный, модульный |
|
||||||
|
| Графики | ECharts CDN (интерактивный дашборд) |
|
||||||
|
| Анимации | GSAP CDN (ScrollTrigger + stagger) |
|
||||||
|
| Шрифты | Google Fonts (Inter, JetBrains Mono) с preload |
|
||||||
|
| Зависимости | Только GSAP + ECharts CDN |
|
||||||
|
|
||||||
|
### Структура файлов
|
||||||
|
|
||||||
|
```
|
||||||
|
/home/nik/projects/wow-design/roi24/
|
||||||
|
├── index.html ← Единственный HTML файл (~3000 строк)
|
||||||
|
├── STATUS.md ← Статус разработки
|
||||||
|
├── PLAN_LANDING_PAGE.md ← Этот файл
|
||||||
|
└── research/
|
||||||
|
└── DASHBOARD_KPI_RESEARCH_2026.md
|
||||||
|
```
|
||||||
|
|
||||||
|
### Производительность
|
||||||
|
|
||||||
|
| Метрика | Целевое значение | Как достичь |
|
||||||
|
|---------|-----------------|-------------|
|
||||||
|
| LCP | < 1.5s | Критический CSS inline, шрифты preload, минимум изображений |
|
||||||
|
| INP | < 100ms | Минимальный JS, чистый DOM, без фреймворков |
|
||||||
|
| CLS | < 0.05 | Все размеры фиксированы, ECharts с фиксированной высотой |
|
||||||
|
| FCP | < 0.8s | Inline CSS, preload шрифтов |
|
||||||
|
| Total size | < 300KB | Без изображений, SVG-иконки, минимальный JS |
|
||||||
|
|
||||||
|
### RU Compliance (обязательно)
|
||||||
|
|
||||||
|
| Требование | Статус | Где |
|
||||||
|
|-----------|--------|-----|
|
||||||
|
| Skip link (после body) | ✅ | Header |
|
||||||
|
| Focus-visible outlines | ✅ | Все интерактивные элементы |
|
||||||
|
| Telegram кнопка (fixed) | ✅ | Bottom-right |
|
||||||
|
| Телефон кликабельный | ✅ | Header, Footer, CTA |
|
||||||
|
| ИНН/ОГРН | ✅ | Footer |
|
||||||
|
| 152-ФЗ текст | ✅ | Footer + Cookie banner |
|
||||||
|
| Cookie banner | ✅ | Нижний баннер |
|
||||||
|
| Privacy policy modal | ✅ | Модалка из footer |
|
||||||
|
| Semantic HTML | ✅ | header, main, footer, nav, section |
|
||||||
|
|
||||||
|
### Аналитика
|
||||||
|
|
||||||
|
| Инструмент | Что отслеживаем |
|
||||||
|
|-----------|-----------------|
|
||||||
|
| Яндекс.Метрика | Все клики CTA (13 целей), скролл 25/50/75/100%, время на странице |
|
||||||
|
| Яндекс.Метрика — Вебвизор | Где пользователи уходят, какие клики делают |
|
||||||
|
| Open Graph теги | Красивое превью в Telegram/WhatsApp/ВК |
|
||||||
|
| JSON-LD (schema.org) | SEO разметка (Organization, Service) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ЧАСТЬ 7: ПЕРЕЧЕНЬ ДОПОЛНИТЕЛЬНЫХ ЭЛЕМЕНТОВ (от старых к новым)
|
||||||
|
|
||||||
|
### Что было, но улучшено:
|
||||||
|
|
||||||
|
| Элемент | v1 (старый) | v2 (текущий) |
|
||||||
|
|---------|------------|-------------|
|
||||||
|
| Hero мокап | Статичный | Интерактивный ECharts с переключением сегментов |
|
||||||
|
| Numbers Strip | Абстрактные цифры | Анимированные счётчики (count-up при скролле) |
|
||||||
|
| «Как работает» | 3 шага | 5 шагов с таймингом и описанием |
|
||||||
|
| Социальное доказательство | Только Numbers Strip | Numbers + кейс с цифрами + логотипы клиентов |
|
||||||
|
| Тариф | Цена + список | Цена + гарантия + 6 trust badges + FAQ |
|
||||||
|
| CTA | Один «Обсудить» | 3 варианта: Telegram / Звонок / Форма |
|
||||||
|
| Footer | 4 колонки | 4 колонки + Telegram fixed + Cookie banner |
|
||||||
|
|
||||||
|
### Что добавлено нового:
|
||||||
|
|
||||||
|
| Элемент | Зачем |
|
||||||
|
|---------|-------|
|
||||||
|
| Секция 8: Сравнение «ROI24 vs как сейчас» | РФ любят сравнивать — показывают ценность 100К |
|
||||||
|
| Секция 9: Развёрнутый кейс | Кейсы с цифрами — #3 фактор доверия РФ |
|
||||||
|
| Секция 10: Команда | Фото людей = доверие (wiki: #4 фактор) |
|
||||||
|
| Секция 11: Калькулятор потерь | Пользователь сам считает — не убеждаем, он сам увидел |
|
||||||
|
| Секция 13: FAQ (6 вопросов) | Возражения на цену, сроки, гарантию |
|
||||||
|
| Гарантия 30 дней | Risk reversal — снимает барьер «а вдруг не то» |
|
||||||
|
| Trust badges (6 штук) | SSL, 152-ФЗ, серверы РФ, НДС, договор, поддержка |
|
||||||
|
| Аналитика (Метрика, OG, JSON-LD) | Без аналитики — деньги на ветер |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ЧАСТЬ 8: СТАТУС-КВАНТИФИКАЦИЯ
|
||||||
|
|
||||||
|
### Что отличает этот лендинг от конкурентов
|
||||||
|
|
||||||
|
| Параметр | Конкуренты | ROI24 лендинг |
|
||||||
|
|----------|-----------|---------------|
|
||||||
|
| Дизайн | Типовой, шаблонный | Premium (Apple/Stripe level) |
|
||||||
|
| Контент | Обещания | Интерактивный мокап дашборда |
|
||||||
|
| Доверие | Нет цифр | Numbers + Кейс + Команда + FAQ |
|
||||||
|
| Сравнение | Нет | ROI24 vs «как сейчас» |
|
||||||
|
| Калькулятор | Нет | Интерактив — пользователь сам считает потери |
|
||||||
|
| Гарантия | Нет | 30 дней, возврат денег |
|
||||||
|
| Мобильный | Адаптив | Mobile-first, Telegram CTA |
|
||||||
|
| Доступность | Ignored | WCAG AA compliant |
|
||||||
|
| Скорость | 3-5 сек загрузка | <1.5s LCP |
|
||||||
|
| RU паттерны | Нет | Telegram, ИНН/ОГРН, 152-ФЗ, калькулятор |
|
||||||
|
| Аналитика | Нет | Метрика, вебвизор, OG, JSON-LD |
|
||||||
|
|
||||||
|
### Целевые метрики лендинга
|
||||||
|
|
||||||
|
| Метрика | Цель | Как измерим |
|
||||||
|
|---------|------|------------|
|
||||||
|
| Конверсия в заявку | 3-5% | Яндекс.Метрика цели |
|
||||||
|
| Доходимость до тарифа | >60% | Скролл-глубина 75%+ |
|
||||||
|
| Среднее время на странице | >2 мин | Метрика |
|
||||||
|
| CTR кнопок CTA | >4% | Метрика цели |
|
||||||
|
| LCP | <1.5s | PageSpeed Insights |
|
||||||
|
|
||||||
|
### Цель
|
||||||
|
|
||||||
|
Landing должен продавать услугу за 100 000 руб. Ключевые факторы доверия:
|
||||||
|
|
||||||
|
1. **Интерактивный мокап дашборда** — переключение сегментов, ECharts (показать, а не рассказать)
|
||||||
|
2. **Numbers Strip** — шоковые факты о потере данных
|
||||||
|
3. **Таблица сравнения** — ROI24 vs «как сейчас» (ценность 100К)
|
||||||
|
4. **Развёрнутый кейс с цифрами** — «кейсы с цифрами = #3 доверие РФ»
|
||||||
|
5. **Калькулятор потерь** — пользователь сам считает (cognitive fluency)
|
||||||
|
6. **Команда** — реальные люди, не сток
|
||||||
|
7. **Гарантия 30 дней** — risk reversal
|
||||||
|
8. **FAQ 6 вопросов** — обработка возражений
|
||||||
|
9. **Trust badges** — SSL, 152-ФЗ, серверы РФ, НДС
|
||||||
|
10. **Premium дизайн** — тёмная тема, Bauhaus геометрия, анимации с намерением
|
||||||
|
11. **Контакты и реквизиты** — не однодневка
|
||||||
|
12. **Telegram CTA** — основной канал коммуникации РФ
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*План основан на анализе 20+ паттернов из wow-design-wiki, 8 принципах психологии конверсии (Crawford), 10 RU UI паттернах, russian-user-psychology, web-conversion-optimization и исследовании бизнес-метрик (DASHBOARD_KPI_RESEARCH_2026.md).*
|
||||||
|
|
||||||
|
*Обновлено: добавлено 4 новые секции (Сравнение, Кейс, Команда, Калькулятор), расширено «Как работает» до 5 шагов, добавлен FAQ (6 вопросов), гарантия, trust badges, калькулятор потерь, улучшен мокап дашборда до интерактивного, добавлена аналитика и SEO-базис.*
|
||||||
@@ -1,166 +0,0 @@
|
|||||||
# ROI24 — Дашборды для бизнеса
|
|
||||||
|
|
||||||
**Живые цифры бизнеса за 3 дня.** Подключаем 1С, банк, рекламу — и собственник видит выручку, маржу и кассу в реальном времени.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## План проекта
|
|
||||||
|
|
||||||
### Фаза 1: MVP (неделя 1-2)
|
|
||||||
|
|
||||||
- [ ] **1.1. Архитектура** — выбрать стек, спроектировать pipeline данных
|
|
||||||
- Источники → Python-адаптер → PostgreSQL → FastAPI → HTML/ECharts
|
|
||||||
- Без ClickHouse на старте, без React
|
|
||||||
- [ ] **1.2. Техническая база**
|
|
||||||
- Настроить PostgreSQL на VPS
|
|
||||||
- Собрать базовый Docker-комPOSE (PostgreSQL + adminer)
|
|
||||||
- Спроектировать схему БД для типового клиента
|
|
||||||
- [ ] **1.3. Лендинг-презентация**
|
|
||||||
- Одностраничный лендинг с примерами дашбордов (фейковые но реалистичные данные)
|
|
||||||
- 5 сектов: hero → что это → примеры → как работает → CTA
|
|
||||||
- Деплой на Gitea Pages
|
|
||||||
|
|
||||||
### Фаза 2: Первые клиенты (неделя 2-6)
|
|
||||||
|
|
||||||
- [ ] **2.1. Outreach** — написать 20 знакомым предпринимателям
|
|
||||||
- [ ] **2.2. TenChat** — создать профиль, начать экспертный контент
|
|
||||||
- [ ] **2.3. Kwork / FL.ru** — разместить 2-3 предложения
|
|
||||||
- [ ] **2.4. Первый бесплатный проект** — кейс за фидбек
|
|
||||||
- [ ] **2.5. Сбор метрик** — фиксировать источники, метрики, проблемы, время внедрения
|
|
||||||
|
|
||||||
### Фаза 3: Первый платный проект (неделя 4-8)
|
|
||||||
|
|
||||||
- [ ] **3.1. Настройка pipeline** для реального клиента
|
|
||||||
- [ ] **3.2. Адаптер 1С** — парсинг через XML-RPC или прямой доступ к БД
|
|
||||||
- [ ] **3.3. Адаптер банка** — выгрузка CSV/API (СберБизнес, Тинькофф, Точка)
|
|
||||||
- [ ] **3.4. Адаптер рекламы** — Яндекс.Директ API, VK Ads
|
|
||||||
- [ ] **3.5. Дашборд** — 3-5 ключевых метрик в одном HTML
|
|
||||||
- [ ] **3.6. Автообновление** — cron-скрипт для обновления данных
|
|
||||||
- [ ] **3.7. Подписание договора + подписка**
|
|
||||||
|
|
||||||
### Фаза 4: Масштабирование (неделя 8-16)
|
|
||||||
|
|
||||||
- [ ] **4.1. Типизация клиентов** — 2-3 профиля (интернет-магазин, услуги, B2B)
|
|
||||||
- [ ] **4.2. Шаблоны дашбордов** — 3 готовых шаблона
|
|
||||||
- [ ] **4.3. Адаптер CRM** — Битрикс24 API, amoCRM
|
|
||||||
- [ ] **4.4. Система подписок** — разные тарифы, разная частота обновления
|
|
||||||
- [ ] **4.5. AI-фичи** — базовые прогнозы (линейная регрессия на выручку)
|
|
||||||
- [ ] **4.6. Партнёрство с 1С-интеграторами**
|
|
||||||
|
|
||||||
### Фаза 5: Продукт (месяц 4-6+)
|
|
||||||
|
|
||||||
- [ ] **5.1. SaaS-платформа** — мульти-тенантная архитектура
|
|
||||||
- [ ] **5.2. Self-service** — клиент сам подключает источники через веб-интерфейс
|
|
||||||
- [ ] **5.3. Дашборд-конструктор** — drag & drop для метрик
|
|
||||||
- [ ] **5.4. Telegram-уведомления** — алерты при отклонении метрик
|
|
||||||
- [ ] **5.5. Когортный анализ** — cohort analytics для e-commerce
|
|
||||||
- [ ] **5.6. Unit-экономика** — LTV, CAC, churn rate
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Технический стек
|
|
||||||
|
|
||||||
| Компонент | Инструмент |
|
|
||||||
|-----------|-----------|
|
|
||||||
| Бэкенд | Python 3.12 + FastAPI |
|
|
||||||
| База данных | PostgreSQL 16 |
|
|
||||||
| Визуализация | ECharts 5 / Chart.js |
|
|
||||||
| Контейнеризация | Docker + Docker Compose |
|
|
||||||
| Задачи | Celery + Redis / APScheduler |
|
|
||||||
| Деплой | VPS (Ubuntu 24.04) + Nginx |
|
|
||||||
| Фронтенд | HTML + JS (без фреймворков на старте) |
|
|
||||||
| CI/CD | Gitea Actions |
|
|
||||||
|
|
||||||
## Источники данных (адаптеры)
|
|
||||||
|
|
||||||
### Приоритет 1 (MVP)
|
|
||||||
- [ ] 1С:Предприятие 8.3 (XML-RPC или HTTP API)
|
|
||||||
- [ ] Банковские выписки (CSV/API: СберБизнес, Тинькофф, Точка)
|
|
||||||
- [ ] Яндекс.Директ API
|
|
||||||
|
|
||||||
### Приоритет 2 (Фаза 4)
|
|
||||||
- [ ] amoCRM API
|
|
||||||
- [ ] Битрикс24 API
|
|
||||||
- [ ] Wildberries / Ozon API
|
|
||||||
|
|
||||||
### Приоритет 3 (Фаза 5)
|
|
||||||
- [ ] RetailCRM
|
|
||||||
- [ ] СБИС / Контур.Экстерн
|
|
||||||
- [ ] Прямые API маркетплейсов
|
|
||||||
|
|
||||||
## Ключевые метрики по нишам
|
|
||||||
|
|
||||||
### Интернет-магазин
|
|
||||||
- Выручка (день/неделя/месяц)
|
|
||||||
- Маржинальная прибыль
|
|
||||||
- Конверсия в покупку
|
|
||||||
- Средний чек (AOV)
|
|
||||||
- LTV / CAC
|
|
||||||
- Динамика по каналам трафика
|
|
||||||
|
|
||||||
### Услуги / B2B
|
|
||||||
- Pipeline (воронка продаж)
|
|
||||||
- Конверсия по этапам
|
|
||||||
- Дебиторская задолженность
|
|
||||||
- Загруженность команды
|
|
||||||
- Выручка по менеджерам
|
|
||||||
|
|
||||||
### Розничная торговля
|
|
||||||
- Продажи по точкам
|
|
||||||
- Товарный запас
|
|
||||||
- Оборачиваемость
|
|
||||||
- Средний чек
|
|
||||||
- Трафик в зале
|
|
||||||
|
|
||||||
## Ценообразование
|
|
||||||
|
|
||||||
| Тариф | Внедрение | Подписка/мес | Что входит |
|
|
||||||
|-------|-----------|-------------|-----------|
|
|
||||||
| Старт | 50 000 ₽ | 10 000 ₽ | 1С + банк, 3 дашборда, 1 обновление/день |
|
|
||||||
| Бизнес | 100 000 ₽ | 25 000 ₽ | 1С + банк + CRM + реклама, 7 дашбордов, каждые 4ч |
|
|
||||||
| Под ключ | 200 000 ₽ | 50 000 ₽ | Все источники, кастомные метрики, AI-прогнозы, каждые 30мин |
|
|
||||||
|
|
||||||
## KPI проекта
|
|
||||||
|
|
||||||
| Метрика | Целевое значение |
|
|
||||||
|---------|-----------------|
|
|
||||||
| CAC (стоимость привлечения) | < 30 000 ₽ |
|
|
||||||
| LTV (пожизненная ценность) | > 300 000 ₽ (2 года подписки) |
|
|
||||||
| Churn rate | < 5% в месяц |
|
|
||||||
| Revenue per customer | > 25 000 ₽/мес |
|
|
||||||
| Время внедрения | < 3 рабочих дня |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Файлы проекта
|
|
||||||
|
|
||||||
```
|
|
||||||
roi24/
|
|
||||||
├── README.md ← этот файл (план проекта)
|
|
||||||
├── ARCHITECTURE.md ← техническая архитектура
|
|
||||||
├── PIPELINE/
|
|
||||||
│ ├── README.md
|
|
||||||
│ ├── 1c_adapter/ ← адаптер 1С
|
|
||||||
│ ├── bank_adapter/ ← адаптеры банков
|
|
||||||
│ ├── ad_adapter/ ← адаптеры рекламы
|
|
||||||
│ └── crm_adapter/ ← адаптеры CRM
|
|
||||||
├── storage/
|
|
||||||
│ ├── schema.sql ← схема БД
|
|
||||||
│ └── migrations/ ← миграции
|
|
||||||
├── api/
|
|
||||||
│ └── main.py ← FastAPI приложение
|
|
||||||
├── dashboard/
|
|
||||||
│ ├── templates/ ← шаблоны дашбордов
|
|
||||||
│ │ ├── ecommerce.html
|
|
||||||
│ │ ├── services.html
|
|
||||||
│ │ └── retails.html
|
|
||||||
│ ├── static/ ← CSS, JS, images
|
|
||||||
│ └── utils/ ← helpers
|
|
||||||
├── landing/ ← лендинг-презентация
|
|
||||||
├── docker/
|
|
||||||
│ ├── docker-compose.yml
|
|
||||||
│ └── nginx/
|
|
||||||
└── scripts/
|
|
||||||
├── update_data.py ← cron-скрипт обновления
|
|
||||||
└── generate_report.py ← генерация PDF-отчётов
|
|
||||||
```
|
|
||||||
@@ -0,0 +1,67 @@
|
|||||||
|
# ROI24 Landing — STATUS.md (2026-06-21)
|
||||||
|
|
||||||
|
## Текущий статус
|
||||||
|
- Файл: `index.html` (1700+ строк, ~76KB)
|
||||||
|
- Сервер: `http://localhost:8765/index.html`
|
||||||
|
- Гит: `master` — в процессе push
|
||||||
|
|
||||||
|
## Реализовано (14 секций)
|
||||||
|
1. **Header** — sticky, glassmorphism blur, логотип, навигация, телефон, CTA
|
||||||
|
2. **Hero** — «Вы теряете деньги, не зная почему» + дашборд-мокап (ECharts)
|
||||||
|
3. **Numbers Strip** — 4 анимированных счётчика (count-up при скролле)
|
||||||
|
4. **Проблемы** — 3 боли (бенто-карточки)
|
||||||
|
5. **Решение** — 3 преимущества (⚡ живые данные, 👁 видно потери, 📱 с телефона)
|
||||||
|
6. **Как работает** — 5 шагов таймлайн (бриф → запуск)
|
||||||
|
7. **Для кого** — bento-grid (e-com, услуги, производство)
|
||||||
|
8. **Сравнение** — ROI24 vs «как сейчас» таблица (8 параметров)
|
||||||
|
9. **Кейс** — «ФармМаркет» 42 точки, экономия 840К/мес
|
||||||
|
10. **Команда** — 3 человека (аватары, роли, опыт)
|
||||||
|
11. **Калькулятор потерь** — 3 поля (сотрудники, часы, зарплата) → ₽/год
|
||||||
|
12. **Тариф** — 100К под ключ, гарантия 30 дней, 6 trust badges
|
||||||
|
13. **FAQ** — 6 вопросов-ответов (аккордеон)
|
||||||
|
14. **CTA** — Telegram + телефон + мини-форма
|
||||||
|
15. **Footer** — 4 колонки, ИНН/ОГРН, 152-ФЗ, cookie banner, privacy modal
|
||||||
|
|
||||||
|
### Технические детали
|
||||||
|
- Шрифты: Inter + JetBrains Mono (fonts.cdnfonts.com, не Google)
|
||||||
|
- Графики: ECharts 5.5 (CDN), сегменты e-com/services/production
|
||||||
|
- Анимации: IntersectionObserver (reveal) + GSAP ScrollTrigger (подключён)
|
||||||
|
- Зависимости: GSAP 3.12.5 + ECharts 5.5.0 (CDN)
|
||||||
|
- RU compliance: skip link, focus-visible, cookie banner, privacy modal, ИНН/ОГРН, 152-ФЗ, Telegram fixed button
|
||||||
|
- Аналитика: JSON-LD (schema.org), Open Graph теги
|
||||||
|
- Responsive: 3 breakpoints (1024, 768, 480px)
|
||||||
|
|
||||||
|
### Зависимости (CDN)
|
||||||
|
- GSAP 3.12.5: `https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.5/gsap.min.js`
|
||||||
|
- ScrollTrigger: `https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.5/ScrollTrigger.min.js`
|
||||||
|
- ECharts 5.5.0: `https://cdn.jsdelivr.net/npm/echarts@5.5.0/dist/echarts.min.js`
|
||||||
|
- Шрифты: `https://fonts.cdnfonts.com/css/inter` + `jetbrains-mono`
|
||||||
|
|
||||||
|
## Структура дашборда (ECharts)
|
||||||
|
```
|
||||||
|
DATA = {
|
||||||
|
ecom: { kpis[4], revenue{labels,data}, channels{labels,data} },
|
||||||
|
services: { ... },
|
||||||
|
production: { ... }
|
||||||
|
}
|
||||||
|
Тоглы: [Интернет-магазин] [Услуги] [Производство]
|
||||||
|
КPI: Выручка, Маржа, Касса, Дебиторка (e-com)
|
||||||
|
Графики: line (выручка), bar (каналы)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Команды
|
||||||
|
```bash
|
||||||
|
# Сервер
|
||||||
|
cd /home/nik/projects/wow-design/roi24 && python3 -m http.server 8765
|
||||||
|
|
||||||
|
# Коммит + пуш
|
||||||
|
cd /home/nik/projects/wow-design/roi24 && git add -A && git commit -m "msg" && git push origin master
|
||||||
|
```
|
||||||
|
|
||||||
|
## Важные решения
|
||||||
|
- Single HTML file — нет зависимости от сборки
|
||||||
|
- CSS custom properties — все токены в :root
|
||||||
|
- ECharts pattern: clear() + setOption() — NEVER innerHTML on chart canvases
|
||||||
|
- cdnfonts вместо Google Fonts — не блокируется провайдерами
|
||||||
|
- IntersectionObserver вместо GSAP reveal — работает без GSAP
|
||||||
|
- Cookie banner через localStorage — запоминает выбор
|
||||||
Whitespace-only changes.
@@ -0,0 +1,943 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ru">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>ROI24 — Attribution Dashboard</title>
|
||||||
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||||
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||||
|
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500;600;700&display=swap" rel="stylesheet">
|
||||||
|
<style>
|
||||||
|
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
|
||||||
|
:root{
|
||||||
|
--bg:#09090b;--card:#111113;--border:rgba(255,255,255,.06);--border-h:rgba(255,255,255,.1);
|
||||||
|
--text:#fafafa;--sec:#a1a1aa;--muted:#52525b;
|
||||||
|
--g:#22c55e;--gd:rgba(34,197,94,.12);
|
||||||
|
--b:#3b82f6;--bd:rgba(59,130,246,.12);
|
||||||
|
--a:#f59e0b;--ad:rgba(245,158,11,.12);
|
||||||
|
--r:#ef4444;--rd:rgba(239,68,68,.12);
|
||||||
|
--p:#a855f7;--pd:rgba(168,85,247,.12);
|
||||||
|
--c:#06b6d4;--cd:rgba(6,182,212,.12);
|
||||||
|
--mono:'JetBrains Mono',monospace;--ease:cubic-bezier(.4,0,.2,1);
|
||||||
|
}
|
||||||
|
body{font-family:'Inter',-apple-system,sans-serif;background:var(--bg);color:var(--text);line-height:1.6;-webkit-font-smoothing:antialiased;min-height:100vh}
|
||||||
|
.hdr{display:flex;align-items:center;justify-content:space-between;padding:12px 28px;background:rgba(17,17,19,.85);backdrop-filter:blur(16px);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:100}
|
||||||
|
.logo{font-family:var(--mono);font-weight:700;font-size:15px;display:flex;align-items:center;gap:8px}
|
||||||
|
.dot{width:8px;height:8px;background:var(--g);border-radius:50%;box-shadow:0 0 8px rgba(34,197,94,.4);animation:pulse 2s ease-in-out infinite}
|
||||||
|
@keyframes pulse{0%,100%{box-shadow:0 0 8px rgba(34,197,94,.4)}50%{box-shadow:0 0 16px rgba(34,197,94,.15)}}
|
||||||
|
.hdr-right{display:flex;align-items:center;gap:16px;font-size:12px}
|
||||||
|
.live{display:flex;align-items:center;gap:6px;color:var(--g);font-weight:600}
|
||||||
|
.live .dot{width:6px;height:6px}
|
||||||
|
.clock{font-family:var(--mono);color:var(--muted);font-size:11px}
|
||||||
|
|
||||||
|
/* TABS */
|
||||||
|
.tabs-wrap{display:flex;justify-content:center;padding:32px 24px 0}
|
||||||
|
.tabs{display:flex;gap:4px;padding:5px;background:var(--card);border:1px solid var(--border);border-radius:14px}
|
||||||
|
.tab{padding:10px 24px;border:none;background:transparent;color:var(--sec);font-family:var(--mono);font-size:12px;font-weight:500;border-radius:10px;cursor:pointer;transition:all .25s var(--ease);white-space:nowrap;display:flex;align-items:center;gap:6px}
|
||||||
|
.tab:hover{color:var(--text)}
|
||||||
|
.tab.active{background:var(--gd);color:var(--g);box-shadow:0 0 0 1px rgba(34,197,94,.2)}
|
||||||
|
|
||||||
|
/* BUSINESS SWITCHER */
|
||||||
|
.bswitch-wrap{display:flex;justify-content:center;padding:16px 24px 0}
|
||||||
|
.bswitch{display:flex;gap:4px;padding:4px;background:var(--card);border:1px solid var(--border);border-radius:12px}
|
||||||
|
.bbtn{padding:8px 16px;border:none;background:transparent;color:var(--sec);font-family:var(--mono);font-size:11px;font-weight:500;border-radius:8px;cursor:pointer;transition:all .25s var(--ease);white-space:nowrap}
|
||||||
|
.bbtn:hover{color:var(--text)}
|
||||||
|
.bbtn.active{background:var(--bd);color:var(--b);box-shadow:0 0 0 1px rgba(59,130,246,.2)}
|
||||||
|
|
||||||
|
/* SECTION */
|
||||||
|
.section{display:none;padding:20px 24px;max-width:1280px;margin:0 auto;animation:fadeIn .4s ease}
|
||||||
|
.section.active{display:block}
|
||||||
|
@keyframes fadeIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
|
||||||
|
.s-head{text-align:center;margin-bottom:20px}
|
||||||
|
.s-head h2{font-size:clamp(1.4rem,3vw,1.8rem);font-weight:800;letter-spacing:-.5px;margin-bottom:4px}
|
||||||
|
.s-head p{color:var(--sec);font-size:13px}
|
||||||
|
|
||||||
|
/* SUMMARY CARDS */
|
||||||
|
.sum-row{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:16px}
|
||||||
|
.sc{background:var(--card);border:1px solid var(--border);border-radius:12px;padding:16px;position:relative;overflow:hidden}
|
||||||
|
.sc:hover{border-color:var(--border-h)}
|
||||||
|
.sc-accent{position:absolute;top:0;left:0;width:3px;height:100%;opacity:0;transition:opacity .25s}
|
||||||
|
.sc:hover .sc-accent{opacity:1}
|
||||||
|
.sc-label{font-size:10px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);font-weight:600;margin-bottom:6px}
|
||||||
|
.sc-val{font-family:var(--mono);font-size:24px;font-weight:700;margin-bottom:4px;line-height:1.1}
|
||||||
|
.sc-trend{display:inline-flex;align-items:center;gap:3px;padding:2px 6px;border-radius:5px;font-family:var(--mono);font-weight:600;font-size:10px}
|
||||||
|
.sc-trend.up{color:var(--g);background:var(--gd)}
|
||||||
|
.sc-trend.down{color:var(--r);background:var(--rd)}
|
||||||
|
.sc-note{font-size:10px;color:var(--muted);margin-top:4px}
|
||||||
|
|
||||||
|
/* CHART ROWS */
|
||||||
|
.cr{display:grid;gap:12px;margin-bottom:12px}
|
||||||
|
.cr2{grid-template-columns:2fr 1fr}
|
||||||
|
.cr3{grid-template-columns:1fr 1fr 1fr}
|
||||||
|
.cc{background:var(--card);border:1px solid var(--border);border-radius:14px;padding:20px;transition:border-color .25s}
|
||||||
|
.cc:hover{border-color:var(--border-h)}
|
||||||
|
.ch{margin-bottom:4px}
|
||||||
|
.ct{font-size:13px;font-weight:600;color:var(--text)}
|
||||||
|
.cs{font-size:11px;color:var(--muted)}
|
||||||
|
.cd{width:100%;height:260px}
|
||||||
|
.cd.s{height:200px}
|
||||||
|
|
||||||
|
/* DATA TABLE */
|
||||||
|
.dt{width:100%;border-collapse:collapse;font-size:12px}
|
||||||
|
.dt th{text-align:left;padding:8px 10px;color:var(--muted);font-size:10px;text-transform:uppercase;letter-spacing:.06em;font-weight:600;border-bottom:1px solid var(--border)}
|
||||||
|
.dt td{padding:8px 10px;border-bottom:1px solid var(--border);color:var(--sec);font-family:var(--mono);font-size:11px}
|
||||||
|
.dt td:first-child{color:var(--text);font-family:var(--mono)}
|
||||||
|
.dt tr:hover td{background:rgba(255,255,255,.02)}
|
||||||
|
.badge{display:inline-block;padding:2px 6px;border-radius:4px;font-size:10px;font-weight:600;font-family:var(--mono)}
|
||||||
|
.badge.g{color:var(--g);background:var(--gd)}
|
||||||
|
.badge.b{color:var(--b);background:var(--bd)}
|
||||||
|
.badge.a{color:var(--a);background:var(--ad)}
|
||||||
|
.badge.r{color:var(--r);background:var(--rd)}
|
||||||
|
|
||||||
|
@media(max-width:1024px){.sum-row{grid-template-columns:repeat(2,1fr)}.cr2,.cr3{grid-template-columns:1fr}}
|
||||||
|
@media(max-width:640px){.sum-row{grid-template-columns:1fr}.tab{padding:8px 12px;font-size:11px}.tab .lbl{display:none}}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="hdr">
|
||||||
|
<div class="logo"><span class="dot"></span>ROI24</div>
|
||||||
|
<div class="hdr-right">
|
||||||
|
<div class="live"><span class="dot"></span>Live</div>
|
||||||
|
<div class="clock" id="clock"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="tabs-wrap">
|
||||||
|
<div class="tabs" id="tabs">
|
||||||
|
<button class="tab active" data-t="cpa">💰 CPA</button>
|
||||||
|
<button class="tab" data-t="conv">📊 Конверсия</button>
|
||||||
|
<button class="tab" data-t="ltv">📈 LTV</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="bswitch-wrap">
|
||||||
|
<div class="bswitch" id="bswitch">
|
||||||
|
<button class="bbtn active" data-b="e-com">Интернет-магазин</button>
|
||||||
|
<button class="bbtn" data-b="services">Услуги</button>
|
||||||
|
<button class="bbtn" data-b="production">Производство</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="dashboard">
|
||||||
|
|
||||||
|
<!-- ===================== CPA SECTION ===================== -->
|
||||||
|
<div class="section active" id="sec-cpa">
|
||||||
|
<div class="s-head"><h2>Стоимость за продажу (CPA)</h2><p>Сколько стоит привлечение платящего клиента</p></div>
|
||||||
|
|
||||||
|
<div class="sum-row" id="cpa-sum"></div>
|
||||||
|
|
||||||
|
<div class="sum-row" id="rev-sum" style="margin-bottom:12px"></div>
|
||||||
|
|
||||||
|
<div class="cr cr2">
|
||||||
|
<div class="cc">
|
||||||
|
<div class="ch"><div class="ct" id="cpa-main-t"></div><div class="cs" id="cpa-main-s"></div></div>
|
||||||
|
<div class="cd" id="cpa-main"></div>
|
||||||
|
</div>
|
||||||
|
<div class="cc">
|
||||||
|
<div class="ch"><div class="ct">Стоимость канала</div><div class="cs">Расход / количество продаж</div></div>
|
||||||
|
<div class="cd s" id="cpa-side"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="cc" style="margin-bottom:12px">
|
||||||
|
<div class="ch"><div class="ct">Доход по каналам</div><div class="cs">Выручка и расход по каналам привлечения</div></div>
|
||||||
|
<div class="cd s" id="rev-channel"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="cc" style="margin-bottom:12px">
|
||||||
|
<div class="ch"><div class="ct">Раскрытие: ключевые запросы</div><div class="cs">Нажмите на канал для детализации</div></div>
|
||||||
|
<div id="cpa-table-wrap" style="max-height:350px;overflow:auto;margin-top:12px"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- ===================== CONV SECTION ===================== -->
|
||||||
|
<div class="section" id="sec-conv">
|
||||||
|
<div class="s-head"><h2>Конверсия в продажу</h2><p>Какой трафик и какие менеджеры конвертят лучше</p></div>
|
||||||
|
|
||||||
|
<div class="sum-row" id="conv-sum"></div>
|
||||||
|
|
||||||
|
<div class="sum-row" id="conv-rev" style="margin-bottom:12px"></div>
|
||||||
|
|
||||||
|
<div class="cr cr2">
|
||||||
|
<div class="cc">
|
||||||
|
<div class="ch"><div class="ct" id="cv-main-t"></div><div class="cs" id="cv-main-s"></div></div>
|
||||||
|
<div class="cd" id="cv-main"></div>
|
||||||
|
</div>
|
||||||
|
<div class="cc">
|
||||||
|
<div class="ch"><div class="ct">Конверсия по каналам</div><div class="cs">Заявка → Продажа</div></div>
|
||||||
|
<div class="cd s" id="cv-side"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="cr cr3">
|
||||||
|
<div class="cc">
|
||||||
|
<div class="ch"><div class="ct">Конверсия по ключевым запросам</div><div class="cs">Кликабельный список</div></div>
|
||||||
|
<div id="cv-keywords" style="max-height:250px;overflow:auto;margin-top:12px"></div>
|
||||||
|
</div>
|
||||||
|
<div class="cc">
|
||||||
|
<div class="ch"><div class="ct">Конверсия по менеджерам</div><div class="cs">Обработка заявок</div></div>
|
||||||
|
<div id="cv-managers" style="max-height:250px;overflow:auto;margin-top:12px"></div>
|
||||||
|
</div>
|
||||||
|
<div class="cc">
|
||||||
|
<div class="ch"><div class="ct">Воронка продаж</div><div class="cs">Этапы: трафик → заявка → продажа</div></div>
|
||||||
|
<div class="cd s" id="cv-funnel"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- ===================== LTV SECTION ===================== -->
|
||||||
|
<div class="section" id="sec-ltv">
|
||||||
|
<div class="s-head"><h2>LTV клиента</h2><p>Сколько клиент платит за всё время и как растёт</p></div>
|
||||||
|
|
||||||
|
<div class="sum-row" id="ltv-sum"></div>
|
||||||
|
|
||||||
|
<div class="sum-row" id="ltv-rev" style="margin-bottom:12px"></div>
|
||||||
|
|
||||||
|
<div class="cr cr2">
|
||||||
|
<div class="cc">
|
||||||
|
<div class="ch"><div class="ct" id="ltv-main-t"></div><div class="cs" id="ltv-main-s"></div></div>
|
||||||
|
<div class="cd" id="ltv-main"></div>
|
||||||
|
</div>
|
||||||
|
<div class="cc">
|
||||||
|
<div class="ch"><div class="ct">LTV по каналам</div><div class="cs">Кумулятивный доход от клиента</div></div>
|
||||||
|
<div class="cd s" id="ltv-side"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="cr cr2">
|
||||||
|
<div class="cc">
|
||||||
|
<div class="ch"><div class="ct">Кривая удержания</div><div class="cs">Какой % клиентов остаётся</div></div>
|
||||||
|
<div class="cd s" id="ltv-retention"></div>
|
||||||
|
</div>
|
||||||
|
<div class="cc">
|
||||||
|
<div class="ch"><div class="ct">Средний чек по каналам</div><div class="cs">Сколько платит клиент за 1 заказ</div></div>
|
||||||
|
<div class="cd s" id="ltv-check"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/echarts@5.5.0/dist/echarts.min.js"></script>
|
||||||
|
<script>
|
||||||
|
/* ============================================
|
||||||
|
DATA — Attribution Dashboard
|
||||||
|
CPA / Conversion / LTV по каналам и ключам
|
||||||
|
============================================ */
|
||||||
|
|
||||||
|
const COLORS = ['#22c55e','#3b82f6','#f59e0b','#a855f7','#ef4444','#06b6d4'];
|
||||||
|
|
||||||
|
const DATA = {
|
||||||
|
/* ==================== E-COM ==================== */
|
||||||
|
'e-com': {
|
||||||
|
/* CPA */
|
||||||
|
cpa: {
|
||||||
|
avg: {v:'890 ₽',d:'+5%',t:'up',n:'средняя стоимость за продажу'},
|
||||||
|
total: {v:'1 247',d:'+12%',t:'up',n:'продаж за 30 дней'},
|
||||||
|
spend: {v:'1.1М ₽',d:'+8%',t:'up',n:'расход на рекламу'},
|
||||||
|
ratio: {v:'890 / 1 850 ₽',d:'−3%',t:'down',n:'CPA / средний чек'},
|
||||||
|
channels: [
|
||||||
|
{n:'Яндекс Директ',spend:520000,conv:120,cpa:4333,avg:863,revenue:1072000},
|
||||||
|
{n:'VK Реклама',spend:280000,conv:65,cpa:4308,avg:862,revenue:560000},
|
||||||
|
{n:'SEO',spend:150000,conv:35,cpa:4286,avg:857,revenue:299857},
|
||||||
|
{n:'Ретаргетинг',spend:120000,conv:15,cpa:8000,avg:800,revenue:120000},
|
||||||
|
],
|
||||||
|
totalRevenue: '2 051 857 ₽',
|
||||||
|
totalSpend: '1 070 000 ₽',
|
||||||
|
totalProfit: '981 857 ₽',
|
||||||
|
roi: '91.8%',
|
||||||
|
keywords: {
|
||||||
|
'Яндекс Директ': [
|
||||||
|
{q:'купить [товар] москва', clicks:3200, conv:85, cpa:3200, cost_per_click:45},
|
||||||
|
{q:'[товар] цена', clicks:5100, conv:110, cpa:3800, cost_per_click:38},
|
||||||
|
{q:'[товар] недорого', clicks:7800, conv:95, cpa:5100, cost_per_click:42},
|
||||||
|
{q:'[товар] отзывы', clicks:2100, conv:62, cpa:2900, cost_per_click:55},
|
||||||
|
{q:'[бренд] купить', clicks:1800, conv:78, cpa:2200, cost_per_click:48},
|
||||||
|
{q:'[товар] дешево', clicks:9200, conv:42, cpa:6800, cost_per_click:35},
|
||||||
|
],
|
||||||
|
'VK Реклама': [
|
||||||
|
{q:'пост о [товаре]', clicks:4100, conv:38, cpa:6200, cost_per_click:42},
|
||||||
|
{q:'таргет [товар]', clicks:2800, conv:22, cpa:7500, cost_per_click:52},
|
||||||
|
{q:'реклама [товар]', clicks:1900, conv:18, cpa:8100, cost_per_click:48},
|
||||||
|
{q:'подбор [товара]', clicks:3200, conv:28, cpa:5800, cost_per_click:38},
|
||||||
|
],
|
||||||
|
'SEO': [
|
||||||
|
{q:'[товар] обзор', clicks:2800, conv:42, cpa:2800, cost_per_click:32},
|
||||||
|
{q:'[товар] сравнение', clicks:1500, conv:35, cpa:3100, cost_per_click:38},
|
||||||
|
{q:'лучший [товар]', clicks:1900, conv:38, cpa:2900, cost_per_click:35},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
trend: {labels:['Янв','Фев','Мар','Апр','Май','Июн','Июл','Авг','Сен','Окт','Ноя','Дек'], cpa:[1200,1100,980,920,890,870,850,830,810,790,780,760], spend:[350,380,420,450,480,520,490,510,470,460,500,550]},
|
||||||
|
},
|
||||||
|
|
||||||
|
/* Conv */
|
||||||
|
conv: {
|
||||||
|
avg: {v:'2.8%',d:'+0.3%',t:'up',n:'заявка → продажа'},
|
||||||
|
leads: {v:'44 500',d:'+15%',t:'up',n:'лидов за 30 дней'},
|
||||||
|
sales: {v:'1 247',d:'+12%',t:'up',n:'продаж за 30 дней'},
|
||||||
|
cycle: {v:'4 дн',d:'−1дн',t:'down',n:'средний цикл'},
|
||||||
|
channels: [
|
||||||
|
{n:'Яндекс Директ',leads:28500,conv:260,cpv:0.91},
|
||||||
|
{n:'VK Реклама',leads:8200,conv:95,cpv:1.16},
|
||||||
|
{n:'SEO',leads:5800,conv:180,cpv:3.10},
|
||||||
|
{n:'Ретаргетинг',leads:2000,conv:220,cpv:11.0},
|
||||||
|
],
|
||||||
|
keywords: [
|
||||||
|
{q:'[бренд] купить', leads:4200, sales:380, cv:9.0,c:'var(--g)'},
|
||||||
|
{q:'[товар] отзывы', leads:2100, sales:190, cv:9.0,c:'var(--g)'},
|
||||||
|
{q:'купить [товар] москва', leads:3200, sales:260, cv:8.1,c:'var(--g)'},
|
||||||
|
{q:'[товар] цена', leads:5100, sales:380, cv:7.5,c:'var(--g)'},
|
||||||
|
{q:'[товар] обзор', leads:2800, sales:180, cv:6.4,c:'var(--b)'},
|
||||||
|
{q:'[товар] сравнение', leads:1500, sales:85, cv:5.7,c:'var(--b)'},
|
||||||
|
{q:'[товар] недорого', leads:7800, sales:380, cv:4.9,c:'var(--a)'},
|
||||||
|
{q:'[товар] дешево', leads:9200, sales:310, cv:3.4,c:'var(--r)'},
|
||||||
|
],
|
||||||
|
managers: [
|
||||||
|
{n:'Козлов А.', leads:820, sales:260, cv:31.7,c:'var(--g)'},
|
||||||
|
{n:'Иванова М.', leads:940, sales:280, cv:29.8,c:'var(--g)'},
|
||||||
|
{n:'Петров Д.', leads:780, sales:210, cv:26.9,c:'var(--b)'},
|
||||||
|
{n:'Сидорова Е.', leads:690, sales:170, cv:24.6,c:'var(--a)'},
|
||||||
|
{n:'Новиков К.', leads:1100, sales:250, cv:22.7,c:'var(--a)'},
|
||||||
|
{n:'Волкова Т.', leads:620, sales:120, cv:19.4,c:'var(--r)'},
|
||||||
|
],
|
||||||
|
funnel: [
|
||||||
|
{n:'Посетители',v:45000},
|
||||||
|
{n:'Оформление',v:8100},
|
||||||
|
{n:'Корзина',v:4950},
|
||||||
|
{n:'Оплата',v:2723},
|
||||||
|
],
|
||||||
|
trend: {labels:['Янв','Фев','Мар','Апр','Май','Июн','Июл','Авг','Сен','Окт','Ноя','Дек'], data:[2.1,2.2,2.3,2.4,2.5,2.6,2.7,2.7,2.8,2.8,2.9,2.8]},
|
||||||
|
},
|
||||||
|
|
||||||
|
/* LTV */
|
||||||
|
ltv: {
|
||||||
|
avg: {v:'12 400 ₽',d:'+18%',t:'up',n:'за 6 мес'},
|
||||||
|
repeat: {v:'3.2×',d:'+0.3',t:'up',n:'ср. покупок'},
|
||||||
|
retention: {v:'68%',d:'+5%',t:'up',n:'через 3 мес'},
|
||||||
|
avgCheck: {v:'1 850 ₽',d:'−2%',t:'down',n:'за 1 заказ'},
|
||||||
|
channels: [
|
||||||
|
{n:'SEO',ltv:18200,checks:7,retention:78},
|
||||||
|
{n:'Ретаргетинг',ltv:15800,checks:5,retention:72},
|
||||||
|
{n:'Яндекс Директ',ltv:12400,checks:4,retention:68},
|
||||||
|
{n:'VK Реклама',ltv:9800,checks:3,retention:58},
|
||||||
|
],
|
||||||
|
curve: {
|
||||||
|
labels:['М1','М2','М3','М4','М5','М6','М7','М8','М9','М10','М11','М12'],
|
||||||
|
seo:[180,380,620,900,1200,1500,1800,2100,2400,2700,3000,3300],
|
||||||
|
direct:[160,320,520,780,1050,1350,1650,1900,2200,2500,2800,3100],
|
||||||
|
vk:[140,260,420,620,850,1100,1350,1600,1850,2100,2400,2700],
|
||||||
|
},
|
||||||
|
retCurve: {
|
||||||
|
labels:['М1','М2','М3','М4','М5','М6','М7','М8','М9','М10','М11','М12'],
|
||||||
|
seo:[100,78,65,56,50,45,40,36,33,30,28,26],
|
||||||
|
direct:[100,72,58,48,42,37,33,30,28,25,23,22],
|
||||||
|
vk:[100,65,50,38,30,24,20,17,15,13,12,11],
|
||||||
|
},
|
||||||
|
checks: [
|
||||||
|
{n:'Яндекс Директ',avg:1600,c:'var(--b)'},
|
||||||
|
{n:'SEO',avg:1850,c:'var(--g)'},
|
||||||
|
{n:'VK Реклама',avg:1350,c:'var(--a)'},
|
||||||
|
{n:'Ретаргетинг',avg:2100,c:'var(--p)'},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
/* ==================== SERVICES ==================== */
|
||||||
|
'services': {
|
||||||
|
cpa: {
|
||||||
|
avg: {v:'3 200 ₽',d:'+2%',t:'up',n:'средняя стоимость за продажу'},
|
||||||
|
total: {v:'86',d:'+8%',t:'up',n:'продаж за 30 дней'},
|
||||||
|
spend: {v:'275К ₽',d:'+5%',t:'up',n:'расход на рекламу'},
|
||||||
|
ratio: {v:'3 200 / 18 000 ₽',d:'−2%',t:'down',n:'CPA / средний чек'},
|
||||||
|
channels: [
|
||||||
|
{n:'Яндекс Директ',spend:140000,conv:42,cpa:3333,avg:18476,revenue:775952},
|
||||||
|
{n:'VK Реклама',spend:75000,conv:22,cpa:3409,avg:18409,revenue:405000},
|
||||||
|
{n:'SEO',spend:60000,conv:22,cpa:2727,avg:18182,revenue:400004},
|
||||||
|
],
|
||||||
|
totalRevenue: '1 580 956 ₽',
|
||||||
|
totalSpend: '275 000 ₽',
|
||||||
|
totalProfit: '1 305 956 ₽',
|
||||||
|
roi: '474.9%',
|
||||||
|
keywords: {
|
||||||
|
'Яндекс Директ': [
|
||||||
|
{q:'создать сайт цена', clicks:1800, conv:42, cpa:2800, cost_per_click:52},
|
||||||
|
{q:'заказать лендинг', clicks:2200, conv:38, cpa:3100, cost_per_click:48},
|
||||||
|
{q:'разработка сайта', clicks:3100, conv:28, cpa:4200, cost_per_click:55},
|
||||||
|
{q:'сайт под ключ', clicks:1400, conv:18, cpa:5200, cost_per_click:62},
|
||||||
|
],
|
||||||
|
'VK Реклама': [
|
||||||
|
{q:'лендинг дизайн', clicks:1200, conv:12, cpa:5500, cost_per_click:58},
|
||||||
|
{q:'сайт для бизнеса', clicks:900, conv:8, cpa:7200, cost_per_click:65},
|
||||||
|
],
|
||||||
|
'SEO': [
|
||||||
|
{q:'создание сайтов москва', clicks:2400, conv:22, cpa:2400, cost_per_click:28},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
trend: {labels:['Янв','Фев','Мар','Апр','Май','Июн','Июл','Авг','Сен','Окт','Ноя','Дек'], cpa:[3800,3600,3500,3400,3350,3200,3100,3000,2900,2850,2800,2750], spend:[80,85,90,100,105,110,108,115,112,118,120,125]},
|
||||||
|
},
|
||||||
|
conv: {
|
||||||
|
avg: {v:'5.2%',d:'+0.4%',t:'up',n:'заявка → продажа'},
|
||||||
|
leads: {v:'1 650',d:'+10%',t:'up',n:'лидов за 30 дней'},
|
||||||
|
sales: {v:'86',d:'+8%',t:'up',n:'продаж за 30 дней'},
|
||||||
|
cycle: {v:'12 дн',d:'−2дн',t:'down',n:'средний цикл'},
|
||||||
|
channels: [
|
||||||
|
{n:'Яндекс Директ',leads:820,conv:48,cpv:5.85},
|
||||||
|
{n:'VK Реклама',leads:380,conv:22,cpv:5.79},
|
||||||
|
{n:'SEO',leads:450,conv:16,cpv:3.56},
|
||||||
|
],
|
||||||
|
keywords: [
|
||||||
|
{q:'создать сайт цена', leads:1800, sales:92, cv:5.1,c:'var(--g)'},
|
||||||
|
{q:'заказать лендинг', leads:2200, sales:105, cv:4.8,c:'var(--g)'},
|
||||||
|
{q:'разработка сайта', leads:3100, sales:120, cv:3.9,c:'var(--b)'},
|
||||||
|
{q:'сайт под ключ', leads:1400, sales:48, cv:3.4,c:'var(--a)'},
|
||||||
|
],
|
||||||
|
managers: [
|
||||||
|
{n:'Смирнов О.', leads:420, sales:32, cv:7.6,c:'var(--g)'},
|
||||||
|
{n:'Кузнецова Н.', leads:380, sales:28, cv:7.4,c:'var(--g)'},
|
||||||
|
{n:'Фёдоров В.', leads:480, sales:30, cv:6.3,c:'var(--b)'},
|
||||||
|
{n:'Морозова И.', leads:370, sales:18, cv:4.9,c:'var(--a)'},
|
||||||
|
],
|
||||||
|
funnel: [
|
||||||
|
{n:'Посетители',v:3200},
|
||||||
|
{n:'Заявки',v:166},
|
||||||
|
{n:'Контракт',v:86},
|
||||||
|
],
|
||||||
|
trend: {labels:['Янв','Фев','Мар','Апр','Май','Июн','Июл','Авг','Сен','Окт','Ноя','Дек'], data:[3.8,4.0,4.2,4.5,4.7,4.8,4.9,5.0,5.1,5.1,5.2,5.2]},
|
||||||
|
},
|
||||||
|
ltv: {
|
||||||
|
avg: {v:'89 000 ₽',d:'+22%',t:'up',n:'за 12 мес'},
|
||||||
|
repeat: {v:'1.4×',d:'+0.1',t:'up',n:'повторных заказов'},
|
||||||
|
retention: {v:'72%',d:'+4%',t:'up',n:'через 6 мес'},
|
||||||
|
avgCheck: {v:'63 500 ₽',d:'+5%',t:'up',n:'за 1 заказ'},
|
||||||
|
channels: [
|
||||||
|
{n:'SEO',ltv:125000,checks:2.1,retention:82},
|
||||||
|
{n:'Яндекс Директ',ltv:89000,checks:1.4,retention:72},
|
||||||
|
{n:'VK Реклама',ltv:58000,checks:1.1,retention:58},
|
||||||
|
],
|
||||||
|
curve: {
|
||||||
|
labels:['М1','М2','М3','М4','М5','М6','М7','М8','М9','М10','М11','М12'],
|
||||||
|
seo:[12000,24000,38000,52000,68000,82000,96000,110000,120000,128000,135000,142000],
|
||||||
|
direct:[10000,18000,28000,40000,55000,68000,80000,92000,100000,108000,115000,120000],
|
||||||
|
vk:[7000,12000,18000,26000,35000,45000,54000,62000,70000,78000,84000,90000],
|
||||||
|
},
|
||||||
|
retCurve: {
|
||||||
|
labels:['М1','М2','М3','М4','М5','М6','М7','М8','М9','М10','М11','М12'],
|
||||||
|
seo:[100,85,78,72,68,65,62,60,58,56,55,54],
|
||||||
|
direct:[100,78,65,58,52,48,44,42,40,38,37,36],
|
||||||
|
vk:[100,68,52,42,35,30,26,23,21,19,18,17],
|
||||||
|
},
|
||||||
|
checks: [
|
||||||
|
{n:'Яндекс Директ',avg:63500,c:'var(--b)'},
|
||||||
|
{n:'SEO',avg:67500,c:'var(--g)'},
|
||||||
|
{n:'VK Реклама',avg:48000,c:'var(--a)'},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
/* ==================== PRODUCTION ==================== */
|
||||||
|
'production': {
|
||||||
|
cpa: {
|
||||||
|
avg: {v:'12 500 ₽',d:'−8%',t:'down',n:'средняя стоимость за заказ'},
|
||||||
|
total: {v:'340',d:'+6%',t:'up',n:'заказов за 30 дней'},
|
||||||
|
spend: {v:'4.2М ₽',d:'+4%',t:'up',n:'расход на рекламу'},
|
||||||
|
ratio: {v:'12 500 / 240 000 ₽',d:'−1%',t:'down',n:'CPA / средний чек'},
|
||||||
|
channels: [
|
||||||
|
{n:'Яндекс Директ',spend:2100000,conv:150,cpa:14000,avg:270000,revenue:4050000},
|
||||||
|
{n:'VK Реклама',spend:980000,conv:100,cpa:9800,avg:245000,revenue:2450000},
|
||||||
|
{n:'SEO',spend:520000,conv:50,cpa:10400,avg:260000,revenue:1300000},
|
||||||
|
{n:'Выставки',spend:600000,conv:40,cpa:15000,avg:300000,revenue:1200000},
|
||||||
|
],
|
||||||
|
totalRevenue: '10 050 000 ₽',
|
||||||
|
totalSpend: '4 200 000 ₽',
|
||||||
|
totalProfit: '5 850 000 ₽',
|
||||||
|
roi: '139.3%',
|
||||||
|
keywords: {
|
||||||
|
'Яндекс Директ': [
|
||||||
|
{q:'купить [оборудование] оптом', clicks:2800, conv:55, cpa:11200, cost_per_click:48},
|
||||||
|
{q:'производство [оборудования]', clicks:3500, conv:38, cpa:15200, cost_per_click:52},
|
||||||
|
{q:'[оборудование] цена опт', clicks:4200, conv:32, cpa:17800, cost_per_click:58},
|
||||||
|
{q:'поставщик [оборудования]', clicks:1900, conv:28, cpa:13500, cost_per_click:55},
|
||||||
|
{q:'[оборудование] каталог', clicks:2200, conv:22, cpa:18500, cost_per_click:45},
|
||||||
|
],
|
||||||
|
'VK Реклама': [
|
||||||
|
{q:'партнёр [оборудование]', clicks:1800, conv:22, cpa:12500, cost_per_click:42},
|
||||||
|
{q:'опт [оборудование]', clicks:1400, conv:18, cpa:14200, cost_per_click:48},
|
||||||
|
],
|
||||||
|
'SEO': [
|
||||||
|
{q:'производитель [оборудования]', clicks:1600, conv:32, cpa:9800, cost_per_click:32},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
trend: {labels:['Янв','Фев','Мар','Апр','Май','Июн','Июл','Авг','Сен','Окт','Ноя','Дек'], cpa:[18000,16500,15200,14000,13500,12800,12200,11800,11500,11200,11000,10800], spend:[280,320,350,380,400,420,410,430,420,440,460,480]},
|
||||||
|
},
|
||||||
|
conv: {
|
||||||
|
avg: {v:'2.1%',d:'+0.2%',t:'up',n:'заявка → заказ'},
|
||||||
|
leads: {v:'16 200',d:'+8%',t:'up',n:'заявок за 30 дней'},
|
||||||
|
sales: {v:'340',d:'+6%',t:'up',n:'заказов за 30 дней'},
|
||||||
|
cycle: {v:'18 дн',d:'−3дн',t:'down',n:'средний цикл'},
|
||||||
|
channels: [
|
||||||
|
{n:'Яндекс Директ',leads:8200,conv:150,cpv:1.83},
|
||||||
|
{n:'VK Реклама',leads:4800,conv:100,cpv:2.08},
|
||||||
|
{n:'SEO',leads:2400,conv:50,cpv:2.08},
|
||||||
|
{n:'Выставки',leads:800,conv:40,cpv:5.0},
|
||||||
|
],
|
||||||
|
keywords: [
|
||||||
|
{q:'[оборудование] каталог', leads:2200, sales:55, cv:2.5,c:'var(--g)'},
|
||||||
|
{q:'купить [оборудование] опт', leads:2800, sales:62, cv:2.2,c:'var(--g)'},
|
||||||
|
{q:'производство [оборудования]', leads:3500, sales:72, cv:2.1,c:'var(--b)'},
|
||||||
|
{q:'поставщик [оборудования]', leads:1900, sales:38, cv:2.0,c:'var(--b)'},
|
||||||
|
{q:'[оборудование] цена опт', leads:4200, sales:75, cv:1.8,c:'var(--a)'},
|
||||||
|
{q:'[оборудование] каталог', leads:2200, sales:32, cv:1.5,c:'var(--r)'},
|
||||||
|
],
|
||||||
|
managers: [
|
||||||
|
{n:'Борисов Р.', leads:4200, sales:110, cv:2.6,c:'var(--g)'},
|
||||||
|
{n:'Тимофеева А.', leads:3800, sales:95, cv:2.5,c:'var(--g)'},
|
||||||
|
{n:'Орлов С.', leads:4500, sales:98, cv:2.2,c:'var(--b)'},
|
||||||
|
{n:'Лебедева О.', leads:2800, sales:55, cv:2.0,c:'var(--a)'},
|
||||||
|
{n:'Егоров П.', leads:2200, sales:42, cv:1.9,c:'var(--a)'},
|
||||||
|
{n:'Соколова Н.', leads:1800, sales:28, cv:1.6,c:'var(--r)'},
|
||||||
|
],
|
||||||
|
funnel: [
|
||||||
|
{n:'Посетители',v:85000},
|
||||||
|
{n:'Заявки',v:1785},
|
||||||
|
{n:'Контракт',v:340},
|
||||||
|
],
|
||||||
|
trend: {labels:['Янв','Фев','Мар','Апр','Май','Июн','Июл','Авг','Сен','Окт','Ноя','Дек'], data:[1.4,1.5,1.6,1.7,1.8,1.8,1.9,1.9,2.0,2.0,2.1,2.1]},
|
||||||
|
},
|
||||||
|
ltv: {
|
||||||
|
avg: {v:'1 250 000 ₽',d:'+15%',t:'up',n:'за 12 мес'},
|
||||||
|
repeat: {v:'2.3×',d:'+0.2',t:'up',n:'повторных заказов'},
|
||||||
|
retention: {v:'55%',d:'+3%',t:'up',n:'через 6 мес'},
|
||||||
|
avgCheck: {v:'543 000 ₽',d:'+4%',t:'up',n:'за 1 заказ'},
|
||||||
|
channels: [
|
||||||
|
{n:'SEO',ltv:1850000,checks:3.5,retention:68},
|
||||||
|
{n:'Выставки',ltv:1420000,checks:2.8,retention:60},
|
||||||
|
{n:'Яндекс Директ',ltv:1100000,checks:2.0,retention:52},
|
||||||
|
{n:'VK Реклама',ltv:780000,checks:1.4,retention:38},
|
||||||
|
],
|
||||||
|
curve: {
|
||||||
|
labels:['М1','М2','М3','М4','М5','М6','М7','М8','М9','М10','М11','М12'],
|
||||||
|
seo:[180000,380000,580000,780000,980000,1180000,1380000,1580000,1750000,1900000,2050000,2200000],
|
||||||
|
direct:[160000,320000,480000,640000,820000,1000000,1180000,1350000,1500000,1650000,1800000,1950000],
|
||||||
|
vk:[100000,200000,320000,450000,600000,750000,900000,1050000,1200000,1350000,1500000,1650000],
|
||||||
|
},
|
||||||
|
retCurve: {
|
||||||
|
labels:['М1','М2','М3','М4','М5','М6','М7','М8','М9','М10','М11','М12'],
|
||||||
|
seo:[100,82,72,65,60,56,53,51,50,49,48,48],
|
||||||
|
direct:[100,70,55,45,38,34,30,28,26,25,24,24],
|
||||||
|
vk:[100,60,42,30,22,16,12,10,9,8,7,7],
|
||||||
|
},
|
||||||
|
checks: [
|
||||||
|
{n:'Яндекс Директ',avg:543000,c:'var(--b)'},
|
||||||
|
{n:'SEO',avg:528000,c:'var(--g)'},
|
||||||
|
{n:'VK Реклама',avg:420000,c:'var(--a)'},
|
||||||
|
{n:'Выставки',avg:620000,c:'var(--p)'},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
let charts = {};
|
||||||
|
let curSeg = 'e-com', curTab = 'cpa';
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
HELPERS
|
||||||
|
============================================ */
|
||||||
|
function sumRow(id, items) {
|
||||||
|
const el = document.getElementById(id);
|
||||||
|
el.innerHTML = items.map((s,i) => `
|
||||||
|
<div class="sc">
|
||||||
|
<div class="sc-accent" style="background:${['var(--g)','var(--b)','var(--p)','var(--a)'][i%4]}"></div>
|
||||||
|
<div class="sc-label">${s.l}</div>
|
||||||
|
<div class="sc-val">${s.v}</div>
|
||||||
|
<span class="sc-trend ${s.t}">${s.t==='up'?'↑':s.t==='down'?'↓':'→'} ${s.d}</span>
|
||||||
|
<div class="sc-note">${s.n}</div>
|
||||||
|
</div>`).join('');
|
||||||
|
}
|
||||||
|
|
||||||
|
function makeLineChart(domId, title, opt, sub) {
|
||||||
|
const dom = document.getElementById(domId);
|
||||||
|
if (!charts[domId]) charts[domId] = echarts.init(dom);
|
||||||
|
if (title) document.getElementById(title)?.querySelector('.ct') && (document.getElementById(title).querySelector('.ct').textContent = title);
|
||||||
|
charts[domId].setOption(opt, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
CPA RENDER
|
||||||
|
============================================ */
|
||||||
|
function renderCPA(d) {
|
||||||
|
const c = d.cpa;
|
||||||
|
|
||||||
|
// Summary
|
||||||
|
sumRow('cpa-sum', [
|
||||||
|
{l:'CPA средний',v:c.avg.v,d:c.avg.d,t:c.avg.t,n:c.avg.n},
|
||||||
|
{l:'Продажи',v:c.total.v,d:c.total.d,t:c.total.t,n:c.total.n},
|
||||||
|
{l:'Расход',v:c.spend.v,d:c.spend.d,t:c.spend.d,t:c.spend.t,n:c.spend.n},
|
||||||
|
{l:'CPA / чек',v:c.ratio.v,d:c.ratio.d,t:c.ratio.t,n:c.ratio.n},
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Revenue summary
|
||||||
|
sumRow('rev-sum', [
|
||||||
|
{l:'Общий доход',v:c.totalRevenue,d:'+15%',t:'up',n:'за 30 дней'},
|
||||||
|
{l:'Расход',v:c.totalSpend,d:'+8%',t:'up',n:'на рекламу'},
|
||||||
|
{l:'Прибыль',v:c.totalProfit,d:'+12%',t:'up',n:'доход − расход'},
|
||||||
|
{l:'ROI',v:c.roi,d:'+5%',t:'up',n:'возврат инвестиций'},
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Main: CPA trend
|
||||||
|
const mc = document.getElementById('cpa-main');
|
||||||
|
if (!charts.cpaMain) charts.cpaMain = echarts.init(mc);
|
||||||
|
document.getElementById('cpa-main-t').textContent = c.trend.labels.map((_,i)=>{
|
||||||
|
const months=['Янв','Фев','Мар','Апр','Май','Июн','Июл','Авг','Сен','Окт','Ноя','Дек'];
|
||||||
|
return '';
|
||||||
|
}).join('');
|
||||||
|
document.getElementById('cpa-main-t').textContent = 'CPA и расход на рекламу';
|
||||||
|
document.getElementById('cpa-main-s').textContent = 'Тренд за 12 месяцев';
|
||||||
|
|
||||||
|
charts.cpaMain.setOption({
|
||||||
|
tooltip:{trigger:'axis',backgroundColor:'#111',borderColor:'#222',textStyle:{color:'#fafafa',fontSize:11}},
|
||||||
|
legend:{data:['CPA','Расход (×100)'],textStyle:{color:'#52525b',fontSize:10},top:0},
|
||||||
|
grid:{left:44,right:44,top:28,bottom:28},
|
||||||
|
xAxis:{type:'category',data:c.trend.labels,axisLine:{lineStyle:{color:'#1e1e22'}},axisLabel:{color:'#52525b',fontSize:10}},
|
||||||
|
yAxis:{type:'value',splitLine:{lineStyle:{color:'#1a1a1e'}},axisLabel:{color:'#52525b',fontSize:10,formatter:'{value}К'}},
|
||||||
|
series:[
|
||||||
|
{name:'CPA',type:'line',data:c.trend.cpa.map(v=>v*100/100),smooth:.4,symbol:'none',lineStyle:{width:2.5,color:'#22c55e'},
|
||||||
|
yAxisIndex:0,
|
||||||
|
areaStyle:{color:new echarts.graphic.LinearGradient(0,0,0,1,[{offset:0,color:'rgba(34,197,94,.2)'},{offset:1,color:'rgba(34,197,94,.01)'}])},
|
||||||
|
},
|
||||||
|
{name:'Расход',type:'bar',data:c.trend.spend,barWidth:'35%',itemStyle:{color:'rgba(59,130,246,.2)',borderRadius:[4,4,0,0]}},
|
||||||
|
],
|
||||||
|
animationDuration:600,
|
||||||
|
},true);
|
||||||
|
|
||||||
|
// Side: Channel CPA
|
||||||
|
const sc = document.getElementById('cpa-side');
|
||||||
|
if (!charts.cpaSide) charts.cpaSide = echarts.init(sc);
|
||||||
|
const chs = c.channels.sort((a,b)=>a.cpa-b.cpa);
|
||||||
|
charts.cpaSide.setOption({
|
||||||
|
tooltip:{trigger:'axis',backgroundColor:'#111',borderColor:'#222',textStyle:{color:'#fafafa',fontSize:11}},
|
||||||
|
grid:{left:80,right:30,top:10,bottom:10},
|
||||||
|
xAxis:{type:'value',splitLine:{lineStyle:{color:'#1a1a1e'}},axisLabel:{color:'#52525b',fontSize:9,formatter:'{value}₽'}},
|
||||||
|
yAxis:{type:'category',data:chs.map(x=>x.n).reverse(),axisLine:{lineStyle:{color:'#1e1e22'}},axisLabel:{color:'#a1a1aa',fontSize:10}},
|
||||||
|
series:[{
|
||||||
|
type:'bar',data:chs.map(x=>x.cpa).reverse(),barWidth:38,
|
||||||
|
itemStyle:{borderRadius:[0,5,5,0],color:p=>{const c=COLORS[p.dataIndex%COLORS.length];return new echarts.graphic.LinearGradient(0,0,1,0,[{offset:0,color:c+'88'},{offset:1,color:c}])}}
|
||||||
|
}],
|
||||||
|
animationDuration:600,
|
||||||
|
},true);
|
||||||
|
|
||||||
|
// Table: Keywords
|
||||||
|
renderKeywordTable(c.keywords);
|
||||||
|
|
||||||
|
// Revenue by channel
|
||||||
|
const rc = document.getElementById('rev-channel');
|
||||||
|
if (!charts.revChannel) charts.revChannel = echarts.init(rc);
|
||||||
|
const revData = c.channels.map(ch => ({
|
||||||
|
name: ch.n,
|
||||||
|
spend: ch.spend,
|
||||||
|
revenue: ch.revenue,
|
||||||
|
profit: ch.revenue - ch.spend,
|
||||||
|
roi: ((ch.revenue - ch.spend) / ch.spend * 100).toFixed(0) + '%',
|
||||||
|
}));
|
||||||
|
const chNames = revData.map(r => r.name);
|
||||||
|
const chShort = {
|
||||||
|
'Яндекс Директ': 'Я.Директ',
|
||||||
|
'VK Реклама': 'VK',
|
||||||
|
'SEO': 'SEO',
|
||||||
|
'Ретаргетинг': 'Ретаргет',
|
||||||
|
'Выставки': 'Выставки',
|
||||||
|
};
|
||||||
|
const shortNames = chNames.map(n => chShort[n] || n);
|
||||||
|
charts.revChannel.setOption({
|
||||||
|
tooltip:{trigger:'axis',backgroundColor:'#111',borderColor:'#222',textStyle:{color:'#fafafa',fontSize:11}},
|
||||||
|
legend:{data:['Доход','Расход'],textStyle:{color:'#52525b',fontSize:10},top:0},
|
||||||
|
grid:{left:80,right:16,top:30,bottom:60},
|
||||||
|
xAxis:{type:'category',data:shortNames,axisLine:{lineStyle:{color:'#1e1e22'}},axisLabel:{color:'#a1a1aa',fontSize:10,interval:0,rotate:45,margin:8}},
|
||||||
|
yAxis:{type:'value',splitLine:{lineStyle:{color:'#1a1a1e'}},axisLabel:{color:'#52525b',fontSize:10,formatter:v=>v>=1e6?(v/1e6).toFixed(0)+'М':(v/1e3).toFixed(0)+'К'}},
|
||||||
|
series:[
|
||||||
|
{name:'Доход',type:'bar',data:revData.map(r=>r.revenue),barWidth:'35%',itemStyle:{color:new echarts.graphic.LinearGradient(0,0,0,1,[{offset:0,color:'#22c55e'},{offset:1,color:'rgba(34,197,94,.3)'}]),borderRadius:[4,4,0,0]}},
|
||||||
|
{name:'Расход',type:'bar',data:revData.map(r=>r.spend),barWidth:'35%',itemStyle:{color:new echarts.graphic.LinearGradient(0,0,0,1,[{offset:0,color:'#3b82f6'},{offset:1,color:'rgba(59,130,246,.3)'}]),borderRadius:[4,4,0,0]}},
|
||||||
|
],
|
||||||
|
animationDuration:600,
|
||||||
|
},true);
|
||||||
|
}
|
||||||
|
|
||||||
|
function renderKeywordTable(keywords) {
|
||||||
|
const wrap = document.getElementById('cpa-table-wrap');
|
||||||
|
let html = '<table class="dt"><thead><tr><th>Канал</th><th>Ключевой запрос</th><th>Клики</th><th>Продажи</th><th>CPA</th><th>Цена клика</th></tr></thead><tbody>';
|
||||||
|
|
||||||
|
for (const [channel, kws] of Object.entries(keywords)) {
|
||||||
|
kws.forEach(kw => {
|
||||||
|
const badge = kw.cpa < 3000 ? 'g' : kw.cpa < 5000 ? 'b' : kw.cpa < 6000 ? 'a' : 'r';
|
||||||
|
html += `<tr>
|
||||||
|
<td><span class="badge ${badge}">${channel}</span></td>
|
||||||
|
<td style="color:var(--text);font-family:var(--mono)">${kw.q}</td>
|
||||||
|
<td>${kw.clicks.toLocaleString('ru')}</td>
|
||||||
|
<td>${kw.conv}</td>
|
||||||
|
<td>${kw.cpa.toLocaleString('ru')} ₽</td>
|
||||||
|
<td>${kw.cost_per_click} ₽</td>
|
||||||
|
</tr>`;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
html += '</tbody></table>';
|
||||||
|
wrap.innerHTML = html;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
CONV RENDER
|
||||||
|
============================================ */
|
||||||
|
function renderConv(d) {
|
||||||
|
const c = d.conv;
|
||||||
|
|
||||||
|
sumRow('conv-sum', [
|
||||||
|
{l:'Конверсия',v:c.avg.v,d:c.avg.d,t:c.avg.t,n:c.avg.n},
|
||||||
|
{l:'Лиды',v:c.leads.v,d:c.leads.d,t:c.leads.t,n:c.leads.n},
|
||||||
|
{l:'Продажи',v:c.sales.v,d:c.sales.d,t:c.sales.t,n:c.sales.n},
|
||||||
|
{l:'Цикл',v:c.cycle.v,d:c.cycle.d,t:c.cycle.t,n:c.cycle.n},
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Revenue in conv tab (using CPA data)
|
||||||
|
const rc = DATA[curSeg].cpa;
|
||||||
|
sumRow('conv-rev', [
|
||||||
|
{l:'Общий доход',v:rc.totalRevenue,d:'+15%',t:'up',n:'за 30 дней'},
|
||||||
|
{l:'Расход',v:rc.totalSpend,d:'+8%',t:'up',n:'на рекламу'},
|
||||||
|
{l:'Прибыль',v:rc.totalProfit,d:'+12%',t:'up',n:'доход − расход'},
|
||||||
|
{l:'ROI',v:rc.roi,d:'+5%',t:'up',n:'возврат инвестиций'},
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Main: Conv trend
|
||||||
|
const mc = document.getElementById('cv-main');
|
||||||
|
if (!charts.convMain) charts.convMain = echarts.init(mc);
|
||||||
|
document.getElementById('cv-main-t').textContent = 'Конверсия в продажу';
|
||||||
|
document.getElementById('cv-main-s').textContent = 'Тренд за 12 месяцев';
|
||||||
|
charts.convMain.setOption({
|
||||||
|
tooltip:{trigger:'axis',backgroundColor:'#111',borderColor:'#222',textStyle:{color:'#fafafa',fontSize:11}},
|
||||||
|
grid:{left:44,right:16,top:28,bottom:28},
|
||||||
|
xAxis:{type:'category',data:c.trend.labels,axisLine:{lineStyle:{color:'#1e1e22'}},axisLabel:{color:'#52525b',fontSize:10}},
|
||||||
|
yAxis:{type:'value',splitLine:{lineStyle:{color:'#1a1a1e'}},axisLabel:{color:'#52525b',fontSize:10,formatter:'{value}%'}},
|
||||||
|
series:[{
|
||||||
|
type:'line',data:c.trend.data,smooth:.4,symbol:'none',lineStyle:{width:2.5,color:'#22c55e'},
|
||||||
|
areaStyle:{color:new echarts.graphic.LinearGradient(0,0,0,1,[{offset:0,color:'rgba(34,197,94,.2)'},{offset:1,color:'rgba(34,197,94,.01)'}])},
|
||||||
|
}],
|
||||||
|
animationDuration:600,
|
||||||
|
},true);
|
||||||
|
|
||||||
|
// Side: Conv by channel
|
||||||
|
const sc = document.getElementById('cv-side');
|
||||||
|
if (!charts.convSide) charts.convSide = echarts.init(sc);
|
||||||
|
const chs = c.channels.sort((a,b)=>a.conv-b.conv);
|
||||||
|
charts.convSide.setOption({
|
||||||
|
tooltip:{trigger:'axis',backgroundColor:'#111',borderColor:'#222',textStyle:{color:'#fafafa',fontSize:11}},
|
||||||
|
grid:{left:80,right:30,top:10,bottom:10},
|
||||||
|
xAxis:{type:'value',splitLine:{lineStyle:{color:'#1a1a1e'}},axisLabel:{color:'#52525b',fontSize:9,formatter:'{value}%'}},
|
||||||
|
yAxis:{type:'category',data:chs.map(x=>x.n).reverse(),axisLine:{lineStyle:{color:'#1e1e22'}},axisLabel:{color:'#a1a1aa',fontSize:10}},
|
||||||
|
series:[{
|
||||||
|
type:'bar',data:chs.map(x=>x.conv).reverse(),barWidth:38,
|
||||||
|
itemStyle:{borderRadius:[0,5,5,0],color:p=>{const c=COLORS[p.dataIndex%COLORS.length];return new echarts.graphic.LinearGradient(0,0,1,0,[{offset:0,color:c+'88'},{offset:1,color:c}])}}
|
||||||
|
}],
|
||||||
|
animationDuration:600,
|
||||||
|
},true);
|
||||||
|
|
||||||
|
// Keywords
|
||||||
|
const kwEl = document.getElementById('cv-keywords');
|
||||||
|
kwEl.innerHTML = `<table class="dt"><thead><tr><th>Запрос</th><th>Лиды</th><th>Продажи</th><th>CVR</th></tr></thead><tbody>` +
|
||||||
|
c.keywords.map(k => `<tr>
|
||||||
|
<td style="color:var(--text)">${k.q}</td>
|
||||||
|
<td>${k.leads.toLocaleString('ru')}</td>
|
||||||
|
<td>${k.sales}</td>
|
||||||
|
<td><span class="badge ${k.c==='var(--g)'?'g':k.c==='var(--b)'?'b':k.c==='var(--a)'?'a':'r'}">${k.cv}%</span></td>
|
||||||
|
</tr>`).join('') + '</tbody></table>';
|
||||||
|
|
||||||
|
// Managers
|
||||||
|
const mgEl = document.getElementById('cv-managers');
|
||||||
|
mgEl.innerHTML = `<table class="dt"><thead><tr><th>Менеджер</th><th>Лиды</th><th>Продажи</th><th>CVR</th></tr></thead><tbody>` +
|
||||||
|
c.managers.map(m => `<tr>
|
||||||
|
<td style="color:var(--text)">${m.n}</td>
|
||||||
|
<td>${m.leads.toLocaleString('ru')}</td>
|
||||||
|
<td>${m.sales}</td>
|
||||||
|
<td><span class="badge ${m.c==='var(--g)'?'g':m.c==='var(--b)'?'b':m.c==='var(--a)'?'a':'r'}">${m.cv}%</span></td>
|
||||||
|
</tr>`).join('') + '</tbody></table>';
|
||||||
|
|
||||||
|
// Funnel
|
||||||
|
const fn = document.getElementById('cv-funnel');
|
||||||
|
if (!charts.convFunnel) charts.convFunnel = echarts.init(fn);
|
||||||
|
const fc = ['#22c55e','#3b82f6','#a855f7'];
|
||||||
|
const funnelData = c.funnel.map((f,i)=>({name:f.n,value:f.v,itemStyle:{color:fc[i%fc.length]}}));
|
||||||
|
charts.convFunnel.setOption({
|
||||||
|
tooltip:{trigger:'item',backgroundColor:'#111',borderColor:'#222',textStyle:{color:'#fafafa',fontSize:11}},
|
||||||
|
series:[{
|
||||||
|
type:'funnel',left:'10%',bottom:5,width:'80%',min:0,max:c.funnel[0].v,
|
||||||
|
minSize:'0%',maxSize:'100%',sort:'descending',gap:4,
|
||||||
|
label:{show:true,position:'inside',color:'#fff',fontSize:11,formatter:'{b}\n{d}%'},
|
||||||
|
labelLine:{show:false},itemStyle:{borderColor:'#111',borderWidth:2},
|
||||||
|
data:funnelData,
|
||||||
|
}],
|
||||||
|
animationDuration:600,
|
||||||
|
},true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
LTV RENDER
|
||||||
|
============================================ */
|
||||||
|
function renderLTV(d) {
|
||||||
|
const c = d.ltv;
|
||||||
|
|
||||||
|
sumRow('ltv-sum', [
|
||||||
|
{l:'LTV средний',v:c.avg.v,d:c.avg.d,t:c.avg.t,n:c.avg.n},
|
||||||
|
{l:'Повторные',v:c.repeat.v,d:c.repeat.d,t:c.repeat.t,n:c.repeat.n},
|
||||||
|
{l:'Удержание',v:c.retention.v,d:c.retention.d,t:c.retention.t,n:c.retention.n},
|
||||||
|
{l:'Ср. чек',v:c.avgCheck.v,d:c.avgCheck.d,t:c.avgCheck.t,n:c.avgCheck.n},
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Revenue in LTV tab
|
||||||
|
const rc = DATA[curSeg].cpa;
|
||||||
|
sumRow('ltv-rev', [
|
||||||
|
{l:'Общий доход',v:rc.totalRevenue,d:'+15%',t:'up',n:'за 30 дней'},
|
||||||
|
{l:'Расход',v:rc.totalSpend,d:'+8%',t:'up',n:'на рекламу'},
|
||||||
|
{l:'Прибыль',v:rc.totalProfit,d:'+12%',t:'up',n:'доход − расход'},
|
||||||
|
{l:'ROI',v:rc.roi,d:'+5%',t:'up',n:'возврат инвестиций'},
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Main: LTV curve
|
||||||
|
const mc = document.getElementById('ltv-main');
|
||||||
|
if (!charts.ltvMain) charts.ltvMain = echarts.init(mc);
|
||||||
|
document.getElementById('ltv-main-t').textContent = 'Кумулятивный LTV';
|
||||||
|
document.getElementById('ltv-main-s').textContent = 'Накопленный доход от клиента по месяцам';
|
||||||
|
charts.ltvMain.setOption({
|
||||||
|
tooltip:{trigger:'axis',backgroundColor:'#111',borderColor:'#222',textStyle:{color:'#fafafa',fontSize:11}},
|
||||||
|
legend:{data:['SEO','Директ','VK'],textStyle:{color:'#52525b',fontSize:10},top:0},
|
||||||
|
grid:{left:44,right:16,top:28,bottom:28},
|
||||||
|
xAxis:{type:'category',data:c.curve.labels,axisLine:{lineStyle:{color:'#1e1e22'}},axisLabel:{color:'#52525b',fontSize:10}},
|
||||||
|
yAxis:{type:'value',splitLine:{lineStyle:{color:'#1a1a1e'}},axisLabel:{color:'#52525b',fontSize:10,formatter:'{value}К'}},
|
||||||
|
series:[
|
||||||
|
{name:'SEO',type:'line',data:c.curve.seo,smooth:.4,symbol:'none',lineStyle:{width:2,color:'#22c55e'}},
|
||||||
|
{name:'Директ',type:'line',data:c.curve.direct,smooth:.4,symbol:'none',lineStyle:{width:2,color:'#3b82f6'}},
|
||||||
|
{name:'VK',type:'line',data:c.curve.vk,smooth:.4,symbol:'none',lineStyle:{width:2,color:'#f59e0b'}},
|
||||||
|
],
|
||||||
|
animationDuration:600,
|
||||||
|
},true);
|
||||||
|
|
||||||
|
// Side: LTV by channel
|
||||||
|
const sc = document.getElementById('ltv-side');
|
||||||
|
if (!charts.ltvSide) charts.ltvSide = echarts.init(sc);
|
||||||
|
const ltvChannels = c.channels.sort((a,b)=>a.ltv-b.ltv);
|
||||||
|
charts.ltvSide.setOption({
|
||||||
|
tooltip:{trigger:'axis',backgroundColor:'#111',borderColor:'#222',textStyle:{color:'#fafafa',fontSize:11}},
|
||||||
|
grid:{left:80,right:30,top:10,bottom:10},
|
||||||
|
xAxis:{type:'value',splitLine:{lineStyle:{color:'#1a1a1e'}},axisLabel:{color:'#52525b',fontSize:9,formatter:'{value}К'}},
|
||||||
|
yAxis:{type:'category',data:ltvChannels.map(x=>x.n).reverse(),axisLine:{lineStyle:{color:'#1e1e22'}},axisLabel:{color:'#a1a1aa',fontSize:10}},
|
||||||
|
series:[{
|
||||||
|
type:'bar',data:ltvChannels.map(x=>x.ltv/1000).reverse(),barWidth:38,
|
||||||
|
itemStyle:{borderRadius:[0,5,5,0],color:p=>{const c=COLORS[p.dataIndex%COLORS.length];return new echarts.graphic.LinearGradient(0,0,1,0,[{offset:0,color:c+'88'},{offset:1,color:c}])}}
|
||||||
|
}],
|
||||||
|
animationDuration:600,
|
||||||
|
},true);
|
||||||
|
|
||||||
|
// Retention curve
|
||||||
|
const rt = document.getElementById('ltv-retention');
|
||||||
|
if (!charts.ltvRet) charts.ltvRet = echarts.init(rt);
|
||||||
|
charts.ltvRet.setOption({
|
||||||
|
tooltip:{trigger:'axis',backgroundColor:'#111',borderColor:'#222',textStyle:{color:'#fafafa',fontSize:11}},
|
||||||
|
legend:{data:['SEO','Директ','VK'],textStyle:{color:'#52525b',fontSize:10},top:0},
|
||||||
|
grid:{left:44,right:16,top:28,bottom:28},
|
||||||
|
xAxis:{type:'category',data:c.retCurve.labels,axisLine:{lineStyle:{color:'#1e1e22'}},axisLabel:{color:'#52525b',fontSize:10}},
|
||||||
|
yAxis:{type:'value',splitLine:{lineStyle:{color:'#1a1a1e'}},axisLabel:{color:'#52525b',fontSize:10,formatter:'{value}%'}},
|
||||||
|
series:[
|
||||||
|
{name:'SEO',type:'line',data:c.retCurve.seo,smooth:.4,symbol:'none',lineStyle:{width:2,color:'#22c55e'}},
|
||||||
|
{name:'Директ',type:'line',data:c.retCurve.direct,smooth:.4,symbol:'none',lineStyle:{width:2,color:'#3b82f6'}},
|
||||||
|
{name:'VK',type:'line',data:c.retCurve.vk,smooth:.4,symbol:'none',lineStyle:{width:2,color:'#f59e0b'}},
|
||||||
|
],
|
||||||
|
animationDuration:600,
|
||||||
|
},true);
|
||||||
|
|
||||||
|
// Average check by channel
|
||||||
|
const ck = document.getElementById('ltv-check');
|
||||||
|
if (!charts.ltvCheck) charts.ltvCheck = echarts.init(ck);
|
||||||
|
|
||||||
|
const cssMap = {'var(--g)':'#22c55e','var(--b)':'#3b82f6','var(--a)':'#f59e0b','var(--p)':'#a855f7','var(--r)':'#ef4444','var(--c)':'#06b6d4'};
|
||||||
|
const checks = c.checks.slice().sort((a,b)=>a.avg-b.avg).map(x=>({
|
||||||
|
n: x.n,
|
||||||
|
avg: typeof x.avg === 'string' ? parseInt(x.avg) : x.avg,
|
||||||
|
c: cssMap[x.c] || x.c,
|
||||||
|
}));
|
||||||
|
|
||||||
|
charts.ltvCheck.setOption({
|
||||||
|
tooltip:{trigger:'axis',backgroundColor:'#111',borderColor:'#222',textStyle:{color:'#fafafa',fontSize:11,formatter:p=>`${p.value[1].name}<br/>${p.axisLabel}`}
|
||||||
|
},
|
||||||
|
grid:{left:80,right:60,top:10,bottom:10},
|
||||||
|
xAxis:{type:'value',splitLine:{lineStyle:{color:'#1a1a1e'}},axisLabel:{color:'#52525b',fontSize:9,formatter:v=>v>=1e5?(v/1e6).toFixed(0)+'М':(v/1e3).toFixed(0)+'К'}},
|
||||||
|
yAxis:{type:'category',data:checks.map(x=>x.n).reverse(),axisLine:{lineStyle:{color:'#1e1e22'}},axisLabel:{color:'#a1a1aa',fontSize:10}},
|
||||||
|
series:[{
|
||||||
|
type:'bar',data:checks.map(x=>x.avg/1000).reverse(),barWidth:38,
|
||||||
|
itemStyle:{borderRadius:[0,5,5,0],color:p=>{
|
||||||
|
const ch = checks[p.dataIndex];
|
||||||
|
return new echarts.graphic.LinearGradient(0,0,1,0,[{offset:0,color:ch.c+'88'},{offset:1,color:ch.c}]);
|
||||||
|
}},
|
||||||
|
label:{show:true,position:'right',color:'#a1a1aa',fontSize:10,formatter:p=>{
|
||||||
|
const v = checks[p.dataIndex]?.avg || 0;
|
||||||
|
return v >= 1e6 ? (v/1e6).toFixed(1)+'М ₽' : v.toLocaleString('ru')+' ₽';
|
||||||
|
}},
|
||||||
|
}],
|
||||||
|
animationDuration:600,
|
||||||
|
},true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
MAIN RENDER
|
||||||
|
============================================ */
|
||||||
|
function render() {
|
||||||
|
const d = DATA[curSeg];
|
||||||
|
|
||||||
|
if (curTab === 'cpa') {
|
||||||
|
document.querySelectorAll('.section').forEach(s=>s.classList.remove('active'));
|
||||||
|
document.getElementById('sec-cpa').classList.add('active');
|
||||||
|
renderCPA(d);
|
||||||
|
} else if (curTab === 'conv') {
|
||||||
|
document.querySelectorAll('.section').forEach(s=>s.classList.remove('active'));
|
||||||
|
document.getElementById('sec-conv').classList.add('active');
|
||||||
|
renderConv(d);
|
||||||
|
} else {
|
||||||
|
document.querySelectorAll('.section').forEach(s=>s.classList.remove('active'));
|
||||||
|
document.getElementById('sec-ltv').classList.add('active');
|
||||||
|
renderLTV(d);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
EVENTS
|
||||||
|
============================================ */
|
||||||
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
|
// Tabs
|
||||||
|
document.getElementById('tabs').addEventListener('click', e => {
|
||||||
|
const tab = e.target.closest('.tab');
|
||||||
|
if (!tab) return;
|
||||||
|
curTab = tab.dataset.t;
|
||||||
|
document.querySelectorAll('.tab').forEach(t=>t.classList.toggle('active', t.dataset.t===curTab));
|
||||||
|
render();
|
||||||
|
});
|
||||||
|
|
||||||
|
// Business switcher
|
||||||
|
document.getElementById('bswitch').addEventListener('click', e => {
|
||||||
|
const btn = e.target.closest('.bbtn');
|
||||||
|
if (!btn) return;
|
||||||
|
curSeg = btn.dataset.b;
|
||||||
|
document.querySelectorAll('.bbtn').forEach(b=>b.classList.toggle('active', b.dataset.b===curSeg));
|
||||||
|
render();
|
||||||
|
});
|
||||||
|
|
||||||
|
render();
|
||||||
|
|
||||||
|
// Clock
|
||||||
|
function tick() {
|
||||||
|
const n = new Date();
|
||||||
|
document.getElementById('clock').textContent =
|
||||||
|
String(n.getHours()).padStart(2,'0')+':'+String(n.getMinutes()).padStart(2,'0')+':'+String(n.getSeconds()).padStart(2,'0');
|
||||||
|
}
|
||||||
|
tick(); setInterval(tick, 1000);
|
||||||
|
|
||||||
|
// Resize
|
||||||
|
new ResizeObserver(() => Object.values(charts).forEach(c=>c.resize())).observe(document.getElementById('dashboard'));
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,943 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ru">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>ROI24 — Attribution Dashboard</title>
|
||||||
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||||
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||||
|
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500;600;700&display=swap" rel="stylesheet">
|
||||||
|
<style>
|
||||||
|
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
|
||||||
|
:root{
|
||||||
|
--bg:#09090b;--card:#111113;--border:rgba(255,255,255,.06);--border-h:rgba(255,255,255,.1);
|
||||||
|
--text:#fafafa;--sec:#a1a1aa;--muted:#52525b;
|
||||||
|
--g:#22c55e;--gd:rgba(34,197,94,.12);
|
||||||
|
--b:#3b82f6;--bd:rgba(59,130,246,.12);
|
||||||
|
--a:#f59e0b;--ad:rgba(245,158,11,.12);
|
||||||
|
--r:#ef4444;--rd:rgba(239,68,68,.12);
|
||||||
|
--p:#a855f7;--pd:rgba(168,85,247,.12);
|
||||||
|
--c:#06b6d4;--cd:rgba(6,182,212,.12);
|
||||||
|
--mono:'JetBrains Mono',monospace;--ease:cubic-bezier(.4,0,.2,1);
|
||||||
|
}
|
||||||
|
body{font-family:'Inter',-apple-system,sans-serif;background:var(--bg);color:var(--text);line-height:1.6;-webkit-font-smoothing:antialiased;min-height:100vh}
|
||||||
|
.hdr{display:flex;align-items:center;justify-content:space-between;padding:12px 28px;background:rgba(17,17,19,.85);backdrop-filter:blur(16px);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:100}
|
||||||
|
.logo{font-family:var(--mono);font-weight:700;font-size:15px;display:flex;align-items:center;gap:8px}
|
||||||
|
.dot{width:8px;height:8px;background:var(--g);border-radius:50%;box-shadow:0 0 8px rgba(34,197,94,.4);animation:pulse 2s ease-in-out infinite}
|
||||||
|
@keyframes pulse{0%,100%{box-shadow:0 0 8px rgba(34,197,94,.4)}50%{box-shadow:0 0 16px rgba(34,197,94,.15)}}
|
||||||
|
.hdr-right{display:flex;align-items:center;gap:16px;font-size:12px}
|
||||||
|
.live{display:flex;align-items:center;gap:6px;color:var(--g);font-weight:600}
|
||||||
|
.live .dot{width:6px;height:6px}
|
||||||
|
.clock{font-family:var(--mono);color:var(--muted);font-size:11px}
|
||||||
|
|
||||||
|
/* TABS */
|
||||||
|
.tabs-wrap{display:flex;justify-content:center;padding:32px 24px 0}
|
||||||
|
.tabs{display:flex;gap:4px;padding:5px;background:var(--card);border:1px solid var(--border);border-radius:14px}
|
||||||
|
.tab{padding:10px 24px;border:none;background:transparent;color:var(--sec);font-family:var(--mono);font-size:12px;font-weight:500;border-radius:10px;cursor:pointer;transition:all .25s var(--ease);white-space:nowrap;display:flex;align-items:center;gap:6px}
|
||||||
|
.tab:hover{color:var(--text)}
|
||||||
|
.tab.active{background:var(--gd);color:var(--g);box-shadow:0 0 0 1px rgba(34,197,94,.2)}
|
||||||
|
|
||||||
|
/* BUSINESS SWITCHER */
|
||||||
|
.bswitch-wrap{display:flex;justify-content:center;padding:16px 24px 0}
|
||||||
|
.bswitch{display:flex;gap:4px;padding:4px;background:var(--card);border:1px solid var(--border);border-radius:12px}
|
||||||
|
.bbtn{padding:8px 16px;border:none;background:transparent;color:var(--sec);font-family:var(--mono);font-size:11px;font-weight:500;border-radius:8px;cursor:pointer;transition:all .25s var(--ease);white-space:nowrap}
|
||||||
|
.bbtn:hover{color:var(--text)}
|
||||||
|
.bbtn.active{background:var(--bd);color:var(--b);box-shadow:0 0 0 1px rgba(59,130,246,.2)}
|
||||||
|
|
||||||
|
/* SECTION */
|
||||||
|
.section{display:none;padding:20px 24px;max-width:1280px;margin:0 auto;animation:fadeIn .4s ease}
|
||||||
|
.section.active{display:block}
|
||||||
|
@keyframes fadeIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
|
||||||
|
.s-head{text-align:center;margin-bottom:20px}
|
||||||
|
.s-head h2{font-size:clamp(1.4rem,3vw,1.8rem);font-weight:800;letter-spacing:-.5px;margin-bottom:4px}
|
||||||
|
.s-head p{color:var(--sec);font-size:13px}
|
||||||
|
|
||||||
|
/* SUMMARY CARDS */
|
||||||
|
.sum-row{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:16px}
|
||||||
|
.sc{background:var(--card);border:1px solid var(--border);border-radius:12px;padding:16px;position:relative;overflow:hidden}
|
||||||
|
.sc:hover{border-color:var(--border-h)}
|
||||||
|
.sc-accent{position:absolute;top:0;left:0;width:3px;height:100%;opacity:0;transition:opacity .25s}
|
||||||
|
.sc:hover .sc-accent{opacity:1}
|
||||||
|
.sc-label{font-size:10px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);font-weight:600;margin-bottom:6px}
|
||||||
|
.sc-val{font-family:var(--mono);font-size:24px;font-weight:700;margin-bottom:4px;line-height:1.1}
|
||||||
|
.sc-trend{display:inline-flex;align-items:center;gap:3px;padding:2px 6px;border-radius:5px;font-family:var(--mono);font-weight:600;font-size:10px}
|
||||||
|
.sc-trend.up{color:var(--g);background:var(--gd)}
|
||||||
|
.sc-trend.down{color:var(--r);background:var(--rd)}
|
||||||
|
.sc-note{font-size:10px;color:var(--muted);margin-top:4px}
|
||||||
|
|
||||||
|
/* CHART ROWS */
|
||||||
|
.cr{display:grid;gap:12px;margin-bottom:12px}
|
||||||
|
.cr2{grid-template-columns:2fr 1fr}
|
||||||
|
.cr3{grid-template-columns:1fr 1fr 1fr}
|
||||||
|
.cc{background:var(--card);border:1px solid var(--border);border-radius:14px;padding:20px;transition:border-color .25s}
|
||||||
|
.cc:hover{border-color:var(--border-h)}
|
||||||
|
.ch{margin-bottom:4px}
|
||||||
|
.ct{font-size:13px;font-weight:600;color:var(--text)}
|
||||||
|
.cs{font-size:11px;color:var(--muted)}
|
||||||
|
.cd{width:100%;height:260px}
|
||||||
|
.cd.s{height:200px}
|
||||||
|
|
||||||
|
/* DATA TABLE */
|
||||||
|
.dt{width:100%;border-collapse:collapse;font-size:12px}
|
||||||
|
.dt th{text-align:left;padding:8px 10px;color:var(--muted);font-size:10px;text-transform:uppercase;letter-spacing:.06em;font-weight:600;border-bottom:1px solid var(--border)}
|
||||||
|
.dt td{padding:8px 10px;border-bottom:1px solid var(--border);color:var(--sec);font-family:var(--mono);font-size:11px}
|
||||||
|
.dt td:first-child{color:var(--text);font-family:var(--mono)}
|
||||||
|
.dt tr:hover td{background:rgba(255,255,255,.02)}
|
||||||
|
.badge{display:inline-block;padding:2px 6px;border-radius:4px;font-size:10px;font-weight:600;font-family:var(--mono)}
|
||||||
|
.badge.g{color:var(--g);background:var(--gd)}
|
||||||
|
.badge.b{color:var(--b);background:var(--bd)}
|
||||||
|
.badge.a{color:var(--a);background:var(--ad)}
|
||||||
|
.badge.r{color:var(--r);background:var(--rd)}
|
||||||
|
|
||||||
|
@media(max-width:1024px){.sum-row{grid-template-columns:repeat(2,1fr)}.cr2,.cr3{grid-template-columns:1fr}}
|
||||||
|
@media(max-width:640px){.sum-row{grid-template-columns:1fr}.tab{padding:8px 12px;font-size:11px}.tab .lbl{display:none}}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="hdr">
|
||||||
|
<div class="logo"><span class="dot"></span>ROI24</div>
|
||||||
|
<div class="hdr-right">
|
||||||
|
<div class="live"><span class="dot"></span>Live</div>
|
||||||
|
<div class="clock" id="clock"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="tabs-wrap">
|
||||||
|
<div class="tabs" id="tabs">
|
||||||
|
<button class="tab active" data-t="cpa">💰 CPA</button>
|
||||||
|
<button class="tab" data-t="conv">📊 Конверсия</button>
|
||||||
|
<button class="tab" data-t="ltv">📈 LTV</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="bswitch-wrap">
|
||||||
|
<div class="bswitch" id="bswitch">
|
||||||
|
<button class="bbtn active" data-b="e-com">Интернет-магазин</button>
|
||||||
|
<button class="bbtn" data-b="services">Услуги</button>
|
||||||
|
<button class="bbtn" data-b="production">Производство</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="dashboard">
|
||||||
|
|
||||||
|
<!-- ===================== CPA SECTION ===================== -->
|
||||||
|
<div class="section active" id="sec-cpa">
|
||||||
|
<div class="s-head"><h2>Стоимость за продажу (CPA)</h2><p>Сколько стоит привлечение платящего клиента</p></div>
|
||||||
|
|
||||||
|
<div class="sum-row" id="cpa-sum"></div>
|
||||||
|
|
||||||
|
<div class="sum-row" id="rev-sum" style="margin-bottom:12px"></div>
|
||||||
|
|
||||||
|
<div class="cr cr2">
|
||||||
|
<div class="cc">
|
||||||
|
<div class="ch"><div class="ct" id="cpa-main-t"></div><div class="cs" id="cpa-main-s"></div></div>
|
||||||
|
<div class="cd" id="cpa-main"></div>
|
||||||
|
</div>
|
||||||
|
<div class="cc">
|
||||||
|
<div class="ch"><div class="ct">Стоимость канала</div><div class="cs">Расход / количество продаж</div></div>
|
||||||
|
<div class="cd s" id="cpa-side"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="cc" style="margin-bottom:12px">
|
||||||
|
<div class="ch"><div class="ct">Доход по каналам</div><div class="cs">Выручка и расход по каналам привлечения</div></div>
|
||||||
|
<div class="cd s" id="rev-channel"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="cc" style="margin-bottom:12px">
|
||||||
|
<div class="ch"><div class="ct">Раскрытие: ключевые запросы</div><div class="cs">Нажмите на канал для детализации</div></div>
|
||||||
|
<div id="cpa-table-wrap" style="max-height:350px;overflow:auto;margin-top:12px"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- ===================== CONV SECTION ===================== -->
|
||||||
|
<div class="section" id="sec-conv">
|
||||||
|
<div class="s-head"><h2>Конверсия в продажу</h2><p>Какой трафик и какие менеджеры конвертят лучше</p></div>
|
||||||
|
|
||||||
|
<div class="sum-row" id="conv-sum"></div>
|
||||||
|
|
||||||
|
<div class="sum-row" id="conv-rev" style="margin-bottom:12px"></div>
|
||||||
|
|
||||||
|
<div class="cr cr2">
|
||||||
|
<div class="cc">
|
||||||
|
<div class="ch"><div class="ct" id="cv-main-t"></div><div class="cs" id="cv-main-s"></div></div>
|
||||||
|
<div class="cd" id="cv-main"></div>
|
||||||
|
</div>
|
||||||
|
<div class="cc">
|
||||||
|
<div class="ch"><div class="ct">Конверсия по каналам</div><div class="cs">Заявка → Продажа</div></div>
|
||||||
|
<div class="cd s" id="cv-side"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="cr cr3">
|
||||||
|
<div class="cc">
|
||||||
|
<div class="ch"><div class="ct">Конверсия по ключевым запросам</div><div class="cs">Кликабельный список</div></div>
|
||||||
|
<div id="cv-keywords" style="max-height:250px;overflow:auto;margin-top:12px"></div>
|
||||||
|
</div>
|
||||||
|
<div class="cc">
|
||||||
|
<div class="ch"><div class="ct">Конверсия по менеджерам</div><div class="cs">Обработка заявок</div></div>
|
||||||
|
<div id="cv-managers" style="max-height:250px;overflow:auto;margin-top:12px"></div>
|
||||||
|
</div>
|
||||||
|
<div class="cc">
|
||||||
|
<div class="ch"><div class="ct">Воронка продаж</div><div class="cs">Этапы: трафик → заявка → продажа</div></div>
|
||||||
|
<div class="cd s" id="cv-funnel"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- ===================== LTV SECTION ===================== -->
|
||||||
|
<div class="section" id="sec-ltv">
|
||||||
|
<div class="s-head"><h2>LTV клиента</h2><p>Сколько клиент платит за всё время и как растёт</p></div>
|
||||||
|
|
||||||
|
<div class="sum-row" id="ltv-sum"></div>
|
||||||
|
|
||||||
|
<div class="sum-row" id="ltv-rev" style="margin-bottom:12px"></div>
|
||||||
|
|
||||||
|
<div class="cr cr2">
|
||||||
|
<div class="cc">
|
||||||
|
<div class="ch"><div class="ct" id="ltv-main-t"></div><div class="cs" id="ltv-main-s"></div></div>
|
||||||
|
<div class="cd" id="ltv-main"></div>
|
||||||
|
</div>
|
||||||
|
<div class="cc">
|
||||||
|
<div class="ch"><div class="ct">LTV по каналам</div><div class="cs">Кумулятивный доход от клиента</div></div>
|
||||||
|
<div class="cd s" id="ltv-side"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="cr cr2">
|
||||||
|
<div class="cc">
|
||||||
|
<div class="ch"><div class="ct">Кривая удержания</div><div class="cs">Какой % клиентов остаётся</div></div>
|
||||||
|
<div class="cd s" id="ltv-retention"></div>
|
||||||
|
</div>
|
||||||
|
<div class="cc">
|
||||||
|
<div class="ch"><div class="ct">Средний чек по каналам</div><div class="cs">Сколько платит клиент за 1 заказ</div></div>
|
||||||
|
<div class="cd s" id="ltv-check"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/echarts@5.5.0/dist/echarts.min.js"></script>
|
||||||
|
<script>
|
||||||
|
/* ============================================
|
||||||
|
DATA — Attribution Dashboard
|
||||||
|
CPA / Conversion / LTV по каналам и ключам
|
||||||
|
============================================ */
|
||||||
|
|
||||||
|
const COLORS = ['#22c55e','#3b82f6','#f59e0b','#a855f7','#ef4444','#06b6d4'];
|
||||||
|
|
||||||
|
const DATA = {
|
||||||
|
/* ==================== E-COM ==================== */
|
||||||
|
'e-com': {
|
||||||
|
/* CPA */
|
||||||
|
cpa: {
|
||||||
|
avg: {v:'890 ₽',d:'+5%',t:'up',n:'средняя стоимость за продажу'},
|
||||||
|
total: {v:'1 247',d:'+12%',t:'up',n:'продаж за 30 дней'},
|
||||||
|
spend: {v:'1.1М ₽',d:'+8%',t:'up',n:'расход на рекламу'},
|
||||||
|
ratio: {v:'890 / 1 850 ₽',d:'−3%',t:'down',n:'CPA / средний чек'},
|
||||||
|
channels: [
|
||||||
|
{n:'Яндекс Директ',spend:520000,conv:120,cpa:4333,avg:863,revenue:1072000},
|
||||||
|
{n:'VK Реклама',spend:280000,conv:65,cpa:4308,avg:862,revenue:560000},
|
||||||
|
{n:'SEO',spend:150000,conv:35,cpa:4286,avg:857,revenue:299857},
|
||||||
|
{n:'Ретаргетинг',spend:120000,conv:15,cpa:8000,avg:800,revenue:120000},
|
||||||
|
],
|
||||||
|
totalRevenue: '2 051 857 ₽',
|
||||||
|
totalSpend: '1 070 000 ₽',
|
||||||
|
totalProfit: '981 857 ₽',
|
||||||
|
roi: '91.8%',
|
||||||
|
keywords: {
|
||||||
|
'Яндекс Директ': [
|
||||||
|
{q:'купить [товар] москва', clicks:3200, conv:85, cpa:3200, cost_per_click:45},
|
||||||
|
{q:'[товар] цена', clicks:5100, conv:110, cpa:3800, cost_per_click:38},
|
||||||
|
{q:'[товар] недорого', clicks:7800, conv:95, cpa:5100, cost_per_click:42},
|
||||||
|
{q:'[товар] отзывы', clicks:2100, conv:62, cpa:2900, cost_per_click:55},
|
||||||
|
{q:'[бренд] купить', clicks:1800, conv:78, cpa:2200, cost_per_click:48},
|
||||||
|
{q:'[товар] дешево', clicks:9200, conv:42, cpa:6800, cost_per_click:35},
|
||||||
|
],
|
||||||
|
'VK Реклама': [
|
||||||
|
{q:'пост о [товаре]', clicks:4100, conv:38, cpa:6200, cost_per_click:42},
|
||||||
|
{q:'таргет [товар]', clicks:2800, conv:22, cpa:7500, cost_per_click:52},
|
||||||
|
{q:'реклама [товар]', clicks:1900, conv:18, cpa:8100, cost_per_click:48},
|
||||||
|
{q:'подбор [товара]', clicks:3200, conv:28, cpa:5800, cost_per_click:38},
|
||||||
|
],
|
||||||
|
'SEO': [
|
||||||
|
{q:'[товар] обзор', clicks:2800, conv:42, cpa:2800, cost_per_click:32},
|
||||||
|
{q:'[товар] сравнение', clicks:1500, conv:35, cpa:3100, cost_per_click:38},
|
||||||
|
{q:'лучший [товар]', clicks:1900, conv:38, cpa:2900, cost_per_click:35},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
trend: {labels:['Янв','Фев','Мар','Апр','Май','Июн','Июл','Авг','Сен','Окт','Ноя','Дек'], cpa:[1200,1100,980,920,890,870,850,830,810,790,780,760], spend:[350,380,420,450,480,520,490,510,470,460,500,550]},
|
||||||
|
},
|
||||||
|
|
||||||
|
/* Conv */
|
||||||
|
conv: {
|
||||||
|
avg: {v:'2.8%',d:'+0.3%',t:'up',n:'заявка → продажа'},
|
||||||
|
leads: {v:'44 500',d:'+15%',t:'up',n:'лидов за 30 дней'},
|
||||||
|
sales: {v:'1 247',d:'+12%',t:'up',n:'продаж за 30 дней'},
|
||||||
|
cycle: {v:'4 дн',d:'−1дн',t:'down',n:'средний цикл'},
|
||||||
|
channels: [
|
||||||
|
{n:'Яндекс Директ',leads:28500,conv:260,cpv:0.91},
|
||||||
|
{n:'VK Реклама',leads:8200,conv:95,cpv:1.16},
|
||||||
|
{n:'SEO',leads:5800,conv:180,cpv:3.10},
|
||||||
|
{n:'Ретаргетинг',leads:2000,conv:220,cpv:11.0},
|
||||||
|
],
|
||||||
|
keywords: [
|
||||||
|
{q:'[бренд] купить', leads:4200, sales:380, cv:9.0,c:'var(--g)'},
|
||||||
|
{q:'[товар] отзывы', leads:2100, sales:190, cv:9.0,c:'var(--g)'},
|
||||||
|
{q:'купить [товар] москва', leads:3200, sales:260, cv:8.1,c:'var(--g)'},
|
||||||
|
{q:'[товар] цена', leads:5100, sales:380, cv:7.5,c:'var(--g)'},
|
||||||
|
{q:'[товар] обзор', leads:2800, sales:180, cv:6.4,c:'var(--b)'},
|
||||||
|
{q:'[товар] сравнение', leads:1500, sales:85, cv:5.7,c:'var(--b)'},
|
||||||
|
{q:'[товар] недорого', leads:7800, sales:380, cv:4.9,c:'var(--a)'},
|
||||||
|
{q:'[товар] дешево', leads:9200, sales:310, cv:3.4,c:'var(--r)'},
|
||||||
|
],
|
||||||
|
managers: [
|
||||||
|
{n:'Козлов А.', leads:820, sales:260, cv:31.7,c:'var(--g)'},
|
||||||
|
{n:'Иванова М.', leads:940, sales:280, cv:29.8,c:'var(--g)'},
|
||||||
|
{n:'Петров Д.', leads:780, sales:210, cv:26.9,c:'var(--b)'},
|
||||||
|
{n:'Сидорова Е.', leads:690, sales:170, cv:24.6,c:'var(--a)'},
|
||||||
|
{n:'Новиков К.', leads:1100, sales:250, cv:22.7,c:'var(--a)'},
|
||||||
|
{n:'Волкова Т.', leads:620, sales:120, cv:19.4,c:'var(--r)'},
|
||||||
|
],
|
||||||
|
funnel: [
|
||||||
|
{n:'Посетители',v:45000},
|
||||||
|
{n:'Оформление',v:8100},
|
||||||
|
{n:'Корзина',v:4950},
|
||||||
|
{n:'Оплата',v:2723},
|
||||||
|
],
|
||||||
|
trend: {labels:['Янв','Фев','Мар','Апр','Май','Июн','Июл','Авг','Сен','Окт','Ноя','Дек'], data:[2.1,2.2,2.3,2.4,2.5,2.6,2.7,2.7,2.8,2.8,2.9,2.8]},
|
||||||
|
},
|
||||||
|
|
||||||
|
/* LTV */
|
||||||
|
ltv: {
|
||||||
|
avg: {v:'12 400 ₽',d:'+18%',t:'up',n:'за 6 мес'},
|
||||||
|
repeat: {v:'3.2×',d:'+0.3',t:'up',n:'ср. покупок'},
|
||||||
|
retention: {v:'68%',d:'+5%',t:'up',n:'через 3 мес'},
|
||||||
|
avgCheck: {v:'1 850 ₽',d:'−2%',t:'down',n:'за 1 заказ'},
|
||||||
|
channels: [
|
||||||
|
{n:'SEO',ltv:18200,checks:7,retention:78},
|
||||||
|
{n:'Ретаргетинг',ltv:15800,checks:5,retention:72},
|
||||||
|
{n:'Яндекс Директ',ltv:12400,checks:4,retention:68},
|
||||||
|
{n:'VK Реклама',ltv:9800,checks:3,retention:58},
|
||||||
|
],
|
||||||
|
curve: {
|
||||||
|
labels:['М1','М2','М3','М4','М5','М6','М7','М8','М9','М10','М11','М12'],
|
||||||
|
seo:[180,380,620,900,1200,1500,1800,2100,2400,2700,3000,3300],
|
||||||
|
direct:[160,320,520,780,1050,1350,1650,1900,2200,2500,2800,3100],
|
||||||
|
vk:[140,260,420,620,850,1100,1350,1600,1850,2100,2400,2700],
|
||||||
|
},
|
||||||
|
retCurve: {
|
||||||
|
labels:['М1','М2','М3','М4','М5','М6','М7','М8','М9','М10','М11','М12'],
|
||||||
|
seo:[100,78,65,56,50,45,40,36,33,30,28,26],
|
||||||
|
direct:[100,72,58,48,42,37,33,30,28,25,23,22],
|
||||||
|
vk:[100,65,50,38,30,24,20,17,15,13,12,11],
|
||||||
|
},
|
||||||
|
checks: [
|
||||||
|
{n:'Яндекс Директ',avg:1600,c:'var(--b)'},
|
||||||
|
{n:'SEO',avg:1850,c:'var(--g)'},
|
||||||
|
{n:'VK Реклама',avg:1350,c:'var(--a)'},
|
||||||
|
{n:'Ретаргетинг',avg:2100,c:'var(--p)'},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
/* ==================== SERVICES ==================== */
|
||||||
|
'services': {
|
||||||
|
cpa: {
|
||||||
|
avg: {v:'3 200 ₽',d:'+2%',t:'up',n:'средняя стоимость за продажу'},
|
||||||
|
total: {v:'86',d:'+8%',t:'up',n:'продаж за 30 дней'},
|
||||||
|
spend: {v:'275К ₽',d:'+5%',t:'up',n:'расход на рекламу'},
|
||||||
|
ratio: {v:'3 200 / 18 000 ₽',d:'−2%',t:'down',n:'CPA / средний чек'},
|
||||||
|
channels: [
|
||||||
|
{n:'Яндекс Директ',spend:140000,conv:42,cpa:3333,avg:18476,revenue:775952},
|
||||||
|
{n:'VK Реклама',spend:75000,conv:22,cpa:3409,avg:18409,revenue:405000},
|
||||||
|
{n:'SEO',spend:60000,conv:22,cpa:2727,avg:18182,revenue:400004},
|
||||||
|
],
|
||||||
|
totalRevenue: '1 580 956 ₽',
|
||||||
|
totalSpend: '275 000 ₽',
|
||||||
|
totalProfit: '1 305 956 ₽',
|
||||||
|
roi: '474.9%',
|
||||||
|
keywords: {
|
||||||
|
'Яндекс Директ': [
|
||||||
|
{q:'создать сайт цена', clicks:1800, conv:42, cpa:2800, cost_per_click:52},
|
||||||
|
{q:'заказать лендинг', clicks:2200, conv:38, cpa:3100, cost_per_click:48},
|
||||||
|
{q:'разработка сайта', clicks:3100, conv:28, cpa:4200, cost_per_click:55},
|
||||||
|
{q:'сайт под ключ', clicks:1400, conv:18, cpa:5200, cost_per_click:62},
|
||||||
|
],
|
||||||
|
'VK Реклама': [
|
||||||
|
{q:'лендинг дизайн', clicks:1200, conv:12, cpa:5500, cost_per_click:58},
|
||||||
|
{q:'сайт для бизнеса', clicks:900, conv:8, cpa:7200, cost_per_click:65},
|
||||||
|
],
|
||||||
|
'SEO': [
|
||||||
|
{q:'создание сайтов москва', clicks:2400, conv:22, cpa:2400, cost_per_click:28},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
trend: {labels:['Янв','Фев','Мар','Апр','Май','Июн','Июл','Авг','Сен','Окт','Ноя','Дек'], cpa:[3800,3600,3500,3400,3350,3200,3100,3000,2900,2850,2800,2750], spend:[80,85,90,100,105,110,108,115,112,118,120,125]},
|
||||||
|
},
|
||||||
|
conv: {
|
||||||
|
avg: {v:'5.2%',d:'+0.4%',t:'up',n:'заявка → продажа'},
|
||||||
|
leads: {v:'1 650',d:'+10%',t:'up',n:'лидов за 30 дней'},
|
||||||
|
sales: {v:'86',d:'+8%',t:'up',n:'продаж за 30 дней'},
|
||||||
|
cycle: {v:'12 дн',d:'−2дн',t:'down',n:'средний цикл'},
|
||||||
|
channels: [
|
||||||
|
{n:'Яндекс Директ',leads:820,conv:48,cpv:5.85},
|
||||||
|
{n:'VK Реклама',leads:380,conv:22,cpv:5.79},
|
||||||
|
{n:'SEO',leads:450,conv:16,cpv:3.56},
|
||||||
|
],
|
||||||
|
keywords: [
|
||||||
|
{q:'создать сайт цена', leads:1800, sales:92, cv:5.1,c:'var(--g)'},
|
||||||
|
{q:'заказать лендинг', leads:2200, sales:105, cv:4.8,c:'var(--g)'},
|
||||||
|
{q:'разработка сайта', leads:3100, sales:120, cv:3.9,c:'var(--b)'},
|
||||||
|
{q:'сайт под ключ', leads:1400, sales:48, cv:3.4,c:'var(--a)'},
|
||||||
|
],
|
||||||
|
managers: [
|
||||||
|
{n:'Смирнов О.', leads:420, sales:32, cv:7.6,c:'var(--g)'},
|
||||||
|
{n:'Кузнецова Н.', leads:380, sales:28, cv:7.4,c:'var(--g)'},
|
||||||
|
{n:'Фёдоров В.', leads:480, sales:30, cv:6.3,c:'var(--b)'},
|
||||||
|
{n:'Морозова И.', leads:370, sales:18, cv:4.9,c:'var(--a)'},
|
||||||
|
],
|
||||||
|
funnel: [
|
||||||
|
{n:'Посетители',v:3200},
|
||||||
|
{n:'Заявки',v:166},
|
||||||
|
{n:'Контракт',v:86},
|
||||||
|
],
|
||||||
|
trend: {labels:['Янв','Фев','Мар','Апр','Май','Июн','Июл','Авг','Сен','Окт','Ноя','Дек'], data:[3.8,4.0,4.2,4.5,4.7,4.8,4.9,5.0,5.1,5.1,5.2,5.2]},
|
||||||
|
},
|
||||||
|
ltv: {
|
||||||
|
avg: {v:'89 000 ₽',d:'+22%',t:'up',n:'за 12 мес'},
|
||||||
|
repeat: {v:'1.4×',d:'+0.1',t:'up',n:'повторных заказов'},
|
||||||
|
retention: {v:'72%',d:'+4%',t:'up',n:'через 6 мес'},
|
||||||
|
avgCheck: {v:'63 500 ₽',d:'+5%',t:'up',n:'за 1 заказ'},
|
||||||
|
channels: [
|
||||||
|
{n:'SEO',ltv:125000,checks:2.1,retention:82},
|
||||||
|
{n:'Яндекс Директ',ltv:89000,checks:1.4,retention:72},
|
||||||
|
{n:'VK Реклама',ltv:58000,checks:1.1,retention:58},
|
||||||
|
],
|
||||||
|
curve: {
|
||||||
|
labels:['М1','М2','М3','М4','М5','М6','М7','М8','М9','М10','М11','М12'],
|
||||||
|
seo:[12000,24000,38000,52000,68000,82000,96000,110000,120000,128000,135000,142000],
|
||||||
|
direct:[10000,18000,28000,40000,55000,68000,80000,92000,100000,108000,115000,120000],
|
||||||
|
vk:[7000,12000,18000,26000,35000,45000,54000,62000,70000,78000,84000,90000],
|
||||||
|
},
|
||||||
|
retCurve: {
|
||||||
|
labels:['М1','М2','М3','М4','М5','М6','М7','М8','М9','М10','М11','М12'],
|
||||||
|
seo:[100,85,78,72,68,65,62,60,58,56,55,54],
|
||||||
|
direct:[100,78,65,58,52,48,44,42,40,38,37,36],
|
||||||
|
vk:[100,68,52,42,35,30,26,23,21,19,18,17],
|
||||||
|
},
|
||||||
|
checks: [
|
||||||
|
{n:'Яндекс Директ',avg:63500,c:'var(--b)'},
|
||||||
|
{n:'SEO',avg:67500,c:'var(--g)'},
|
||||||
|
{n:'VK Реклама',avg:48000,c:'var(--a)'},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
/* ==================== PRODUCTION ==================== */
|
||||||
|
'production': {
|
||||||
|
cpa: {
|
||||||
|
avg: {v:'12 500 ₽',d:'−8%',t:'down',n:'средняя стоимость за заказ'},
|
||||||
|
total: {v:'340',d:'+6%',t:'up',n:'заказов за 30 дней'},
|
||||||
|
spend: {v:'4.2М ₽',d:'+4%',t:'up',n:'расход на рекламу'},
|
||||||
|
ratio: {v:'12 500 / 240 000 ₽',d:'−1%',t:'down',n:'CPA / средний чек'},
|
||||||
|
channels: [
|
||||||
|
{n:'Яндекс Директ',spend:2100000,conv:150,cpa:14000,avg:270000,revenue:4050000},
|
||||||
|
{n:'VK Реклама',spend:980000,conv:100,cpa:9800,avg:245000,revenue:2450000},
|
||||||
|
{n:'SEO',spend:520000,conv:50,cpa:10400,avg:260000,revenue:1300000},
|
||||||
|
{n:'Выставки',spend:600000,conv:40,cpa:15000,avg:300000,revenue:1200000},
|
||||||
|
],
|
||||||
|
totalRevenue: '10 050 000 ₽',
|
||||||
|
totalSpend: '4 200 000 ₽',
|
||||||
|
totalProfit: '5 850 000 ₽',
|
||||||
|
roi: '139.3%',
|
||||||
|
keywords: {
|
||||||
|
'Яндекс Директ': [
|
||||||
|
{q:'купить [оборудование] оптом', clicks:2800, conv:55, cpa:11200, cost_per_click:48},
|
||||||
|
{q:'производство [оборудования]', clicks:3500, conv:38, cpa:15200, cost_per_click:52},
|
||||||
|
{q:'[оборудование] цена опт', clicks:4200, conv:32, cpa:17800, cost_per_click:58},
|
||||||
|
{q:'поставщик [оборудования]', clicks:1900, conv:28, cpa:13500, cost_per_click:55},
|
||||||
|
{q:'[оборудование] каталог', clicks:2200, conv:22, cpa:18500, cost_per_click:45},
|
||||||
|
],
|
||||||
|
'VK Реклама': [
|
||||||
|
{q:'партнёр [оборудование]', clicks:1800, conv:22, cpa:12500, cost_per_click:42},
|
||||||
|
{q:'опт [оборудование]', clicks:1400, conv:18, cpa:14200, cost_per_click:48},
|
||||||
|
],
|
||||||
|
'SEO': [
|
||||||
|
{q:'производитель [оборудования]', clicks:1600, conv:32, cpa:9800, cost_per_click:32},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
trend: {labels:['Янв','Фев','Мар','Апр','Май','Июн','Июл','Авг','Сен','Окт','Ноя','Дек'], cpa:[18000,16500,15200,14000,13500,12800,12200,11800,11500,11200,11000,10800], spend:[280,320,350,380,400,420,410,430,420,440,460,480]},
|
||||||
|
},
|
||||||
|
conv: {
|
||||||
|
avg: {v:'2.1%',d:'+0.2%',t:'up',n:'заявка → заказ'},
|
||||||
|
leads: {v:'16 200',d:'+8%',t:'up',n:'заявок за 30 дней'},
|
||||||
|
sales: {v:'340',d:'+6%',t:'up',n:'заказов за 30 дней'},
|
||||||
|
cycle: {v:'18 дн',d:'−3дн',t:'down',n:'средний цикл'},
|
||||||
|
channels: [
|
||||||
|
{n:'Яндекс Директ',leads:8200,conv:150,cpv:1.83},
|
||||||
|
{n:'VK Реклама',leads:4800,conv:100,cpv:2.08},
|
||||||
|
{n:'SEO',leads:2400,conv:50,cpv:2.08},
|
||||||
|
{n:'Выставки',leads:800,conv:40,cpv:5.0},
|
||||||
|
],
|
||||||
|
keywords: [
|
||||||
|
{q:'[оборудование] каталог', leads:2200, sales:55, cv:2.5,c:'var(--g)'},
|
||||||
|
{q:'купить [оборудование] опт', leads:2800, sales:62, cv:2.2,c:'var(--g)'},
|
||||||
|
{q:'производство [оборудования]', leads:3500, sales:72, cv:2.1,c:'var(--b)'},
|
||||||
|
{q:'поставщик [оборудования]', leads:1900, sales:38, cv:2.0,c:'var(--b)'},
|
||||||
|
{q:'[оборудование] цена опт', leads:4200, sales:75, cv:1.8,c:'var(--a)'},
|
||||||
|
{q:'[оборудование] каталог', leads:2200, sales:32, cv:1.5,c:'var(--r)'},
|
||||||
|
],
|
||||||
|
managers: [
|
||||||
|
{n:'Борисов Р.', leads:4200, sales:110, cv:2.6,c:'var(--g)'},
|
||||||
|
{n:'Тимофеева А.', leads:3800, sales:95, cv:2.5,c:'var(--g)'},
|
||||||
|
{n:'Орлов С.', leads:4500, sales:98, cv:2.2,c:'var(--b)'},
|
||||||
|
{n:'Лебедева О.', leads:2800, sales:55, cv:2.0,c:'var(--a)'},
|
||||||
|
{n:'Егоров П.', leads:2200, sales:42, cv:1.9,c:'var(--a)'},
|
||||||
|
{n:'Соколова Н.', leads:1800, sales:28, cv:1.6,c:'var(--r)'},
|
||||||
|
],
|
||||||
|
funnel: [
|
||||||
|
{n:'Посетители',v:85000},
|
||||||
|
{n:'Заявки',v:1785},
|
||||||
|
{n:'Контракт',v:340},
|
||||||
|
],
|
||||||
|
trend: {labels:['Янв','Фев','Мар','Апр','Май','Июн','Июл','Авг','Сен','Окт','Ноя','Дек'], data:[1.4,1.5,1.6,1.7,1.8,1.8,1.9,1.9,2.0,2.0,2.1,2.1]},
|
||||||
|
},
|
||||||
|
ltv: {
|
||||||
|
avg: {v:'1 250 000 ₽',d:'+15%',t:'up',n:'за 12 мес'},
|
||||||
|
repeat: {v:'2.3×',d:'+0.2',t:'up',n:'повторных заказов'},
|
||||||
|
retention: {v:'55%',d:'+3%',t:'up',n:'через 6 мес'},
|
||||||
|
avgCheck: {v:'543 000 ₽',d:'+4%',t:'up',n:'за 1 заказ'},
|
||||||
|
channels: [
|
||||||
|
{n:'SEO',ltv:1850000,checks:3.5,retention:68},
|
||||||
|
{n:'Выставки',ltv:1420000,checks:2.8,retention:60},
|
||||||
|
{n:'Яндекс Директ',ltv:1100000,checks:2.0,retention:52},
|
||||||
|
{n:'VK Реклама',ltv:780000,checks:1.4,retention:38},
|
||||||
|
],
|
||||||
|
curve: {
|
||||||
|
labels:['М1','М2','М3','М4','М5','М6','М7','М8','М9','М10','М11','М12'],
|
||||||
|
seo:[180000,380000,580000,780000,980000,1180000,1380000,1580000,1750000,1900000,2050000,2200000],
|
||||||
|
direct:[160000,320000,480000,640000,820000,1000000,1180000,1350000,1500000,1650000,1800000,1950000],
|
||||||
|
vk:[100000,200000,320000,450000,600000,750000,900000,1050000,1200000,1350000,1500000,1650000],
|
||||||
|
},
|
||||||
|
retCurve: {
|
||||||
|
labels:['М1','М2','М3','М4','М5','М6','М7','М8','М9','М10','М11','М12'],
|
||||||
|
seo:[100,82,72,65,60,56,53,51,50,49,48,48],
|
||||||
|
direct:[100,70,55,45,38,34,30,28,26,25,24,24],
|
||||||
|
vk:[100,60,42,30,22,16,12,10,9,8,7,7],
|
||||||
|
},
|
||||||
|
checks: [
|
||||||
|
{n:'Яндекс Директ',avg:543000,c:'var(--b)'},
|
||||||
|
{n:'SEO',avg:528000,c:'var(--g)'},
|
||||||
|
{n:'VK Реклама',avg:420000,c:'var(--a)'},
|
||||||
|
{n:'Выставки',avg:620000,c:'var(--p)'},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
let charts = {};
|
||||||
|
let curSeg = 'e-com', curTab = 'cpa';
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
HELPERS
|
||||||
|
============================================ */
|
||||||
|
function sumRow(id, items) {
|
||||||
|
const el = document.getElementById(id);
|
||||||
|
el.innerHTML = items.map((s,i) => `
|
||||||
|
<div class="sc">
|
||||||
|
<div class="sc-accent" style="background:${['var(--g)','var(--b)','var(--p)','var(--a)'][i%4]}"></div>
|
||||||
|
<div class="sc-label">${s.l}</div>
|
||||||
|
<div class="sc-val">${s.v}</div>
|
||||||
|
<span class="sc-trend ${s.t}">${s.t==='up'?'↑':s.t==='down'?'↓':'→'} ${s.d}</span>
|
||||||
|
<div class="sc-note">${s.n}</div>
|
||||||
|
</div>`).join('');
|
||||||
|
}
|
||||||
|
|
||||||
|
function makeLineChart(domId, title, opt, sub) {
|
||||||
|
const dom = document.getElementById(domId);
|
||||||
|
if (!charts[domId]) charts[domId] = echarts.init(dom);
|
||||||
|
if (title) document.getElementById(title)?.querySelector('.ct') && (document.getElementById(title).querySelector('.ct').textContent = title);
|
||||||
|
charts[domId].setOption(opt, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
CPA RENDER
|
||||||
|
============================================ */
|
||||||
|
function renderCPA(d) {
|
||||||
|
const c = d.cpa;
|
||||||
|
|
||||||
|
// Summary
|
||||||
|
sumRow('cpa-sum', [
|
||||||
|
{l:'CPA средний',v:c.avg.v,d:c.avg.d,t:c.avg.t,n:c.avg.n},
|
||||||
|
{l:'Продажи',v:c.total.v,d:c.total.d,t:c.total.t,n:c.total.n},
|
||||||
|
{l:'Расход',v:c.spend.v,d:c.spend.d,t:c.spend.d,t:c.spend.t,n:c.spend.n},
|
||||||
|
{l:'CPA / чек',v:c.ratio.v,d:c.ratio.d,t:c.ratio.t,n:c.ratio.n},
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Revenue summary
|
||||||
|
sumRow('rev-sum', [
|
||||||
|
{l:'Общий доход',v:c.totalRevenue,d:'+15%',t:'up',n:'за 30 дней'},
|
||||||
|
{l:'Расход',v:c.totalSpend,d:'+8%',t:'up',n:'на рекламу'},
|
||||||
|
{l:'Прибыль',v:c.totalProfit,d:'+12%',t:'up',n:'доход − расход'},
|
||||||
|
{l:'ROI',v:c.roi,d:'+5%',t:'up',n:'возврат инвестиций'},
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Main: CPA trend
|
||||||
|
const mc = document.getElementById('cpa-main');
|
||||||
|
if (!charts.cpaMain) charts.cpaMain = echarts.init(mc);
|
||||||
|
document.getElementById('cpa-main-t').textContent = c.trend.labels.map((_,i)=>{
|
||||||
|
const months=['Янв','Фев','Мар','Апр','Май','Июн','Июл','Авг','Сен','Окт','Ноя','Дек'];
|
||||||
|
return '';
|
||||||
|
}).join('');
|
||||||
|
document.getElementById('cpa-main-t').textContent = 'CPA и расход на рекламу';
|
||||||
|
document.getElementById('cpa-main-s').textContent = 'Тренд за 12 месяцев';
|
||||||
|
|
||||||
|
charts.cpaMain.setOption({
|
||||||
|
tooltip:{trigger:'axis',backgroundColor:'#111',borderColor:'#222',textStyle:{color:'#fafafa',fontSize:11}},
|
||||||
|
legend:{data:['CPA','Расход (×100)'],textStyle:{color:'#52525b',fontSize:10},top:0},
|
||||||
|
grid:{left:44,right:44,top:28,bottom:28},
|
||||||
|
xAxis:{type:'category',data:c.trend.labels,axisLine:{lineStyle:{color:'#1e1e22'}},axisLabel:{color:'#52525b',fontSize:10}},
|
||||||
|
yAxis:{type:'value',splitLine:{lineStyle:{color:'#1a1a1e'}},axisLabel:{color:'#52525b',fontSize:10,formatter:'{value}К'}},
|
||||||
|
series:[
|
||||||
|
{name:'CPA',type:'line',data:c.trend.cpa.map(v=>v*100/100),smooth:.4,symbol:'none',lineStyle:{width:2.5,color:'#22c55e'},
|
||||||
|
yAxisIndex:0,
|
||||||
|
areaStyle:{color:new echarts.graphic.LinearGradient(0,0,0,1,[{offset:0,color:'rgba(34,197,94,.2)'},{offset:1,color:'rgba(34,197,94,.01)'}])},
|
||||||
|
},
|
||||||
|
{name:'Расход',type:'bar',data:c.trend.spend,barWidth:'35%',itemStyle:{color:'rgba(59,130,246,.2)',borderRadius:[4,4,0,0]}},
|
||||||
|
],
|
||||||
|
animationDuration:600,
|
||||||
|
},true);
|
||||||
|
|
||||||
|
// Side: Channel CPA
|
||||||
|
const sc = document.getElementById('cpa-side');
|
||||||
|
if (!charts.cpaSide) charts.cpaSide = echarts.init(sc);
|
||||||
|
const chs = c.channels.sort((a,b)=>a.cpa-b.cpa);
|
||||||
|
charts.cpaSide.setOption({
|
||||||
|
tooltip:{trigger:'axis',backgroundColor:'#111',borderColor:'#222',textStyle:{color:'#fafafa',fontSize:11}},
|
||||||
|
grid:{left:80,right:30,top:10,bottom:10},
|
||||||
|
xAxis:{type:'value',splitLine:{lineStyle:{color:'#1a1a1e'}},axisLabel:{color:'#52525b',fontSize:9,formatter:'{value}₽'}},
|
||||||
|
yAxis:{type:'category',data:chs.map(x=>x.n).reverse(),axisLine:{lineStyle:{color:'#1e1e22'}},axisLabel:{color:'#a1a1aa',fontSize:10}},
|
||||||
|
series:[{
|
||||||
|
type:'bar',data:chs.map(x=>x.cpa).reverse(),barWidth:38,
|
||||||
|
itemStyle:{borderRadius:[0,5,5,0],color:p=>{const c=COLORS[p.dataIndex%COLORS.length];return new echarts.graphic.LinearGradient(0,0,1,0,[{offset:0,color:c+'88'},{offset:1,color:c}])}}
|
||||||
|
}],
|
||||||
|
animationDuration:600,
|
||||||
|
},true);
|
||||||
|
|
||||||
|
// Table: Keywords
|
||||||
|
renderKeywordTable(c.keywords);
|
||||||
|
|
||||||
|
// Revenue by channel
|
||||||
|
const rc = document.getElementById('rev-channel');
|
||||||
|
if (!charts.revChannel) charts.revChannel = echarts.init(rc);
|
||||||
|
const revData = c.channels.map(ch => ({
|
||||||
|
name: ch.n,
|
||||||
|
spend: ch.spend,
|
||||||
|
revenue: ch.revenue,
|
||||||
|
profit: ch.revenue - ch.spend,
|
||||||
|
roi: ((ch.revenue - ch.spend) / ch.spend * 100).toFixed(0) + '%',
|
||||||
|
}));
|
||||||
|
const chNames = revData.map(r => r.name);
|
||||||
|
const chShort = {
|
||||||
|
'Яндекс Директ': 'Я.Директ',
|
||||||
|
'VK Реклама': 'VK',
|
||||||
|
'SEO': 'SEO',
|
||||||
|
'Ретаргетинг': 'Ретаргет',
|
||||||
|
'Выставки': 'Выставки',
|
||||||
|
};
|
||||||
|
const shortNames = chNames.map(n => chShort[n] || n);
|
||||||
|
charts.revChannel.setOption({
|
||||||
|
tooltip:{trigger:'axis',backgroundColor:'#111',borderColor:'#222',textStyle:{color:'#fafafa',fontSize:11}},
|
||||||
|
legend:{data:['Доход','Расход'],textStyle:{color:'#52525b',fontSize:10},top:0},
|
||||||
|
grid:{left:80,right:16,top:30,bottom:60},
|
||||||
|
xAxis:{type:'category',data:shortNames,axisLine:{lineStyle:{color:'#1e1e22'}},axisLabel:{color:'#a1a1aa',fontSize:10,interval:0,rotate:45,margin:8}},
|
||||||
|
yAxis:{type:'value',splitLine:{lineStyle:{color:'#1a1a1e'}},axisLabel:{color:'#52525b',fontSize:10,formatter:v=>v>=1e6?(v/1e6).toFixed(0)+'М':(v/1e3).toFixed(0)+'К'}},
|
||||||
|
series:[
|
||||||
|
{name:'Доход',type:'bar',data:revData.map(r=>r.revenue),barWidth:'35%',itemStyle:{color:new echarts.graphic.LinearGradient(0,0,0,1,[{offset:0,color:'#22c55e'},{offset:1,color:'rgba(34,197,94,.3)'}]),borderRadius:[4,4,0,0]}},
|
||||||
|
{name:'Расход',type:'bar',data:revData.map(r=>r.spend),barWidth:'35%',itemStyle:{color:new echarts.graphic.LinearGradient(0,0,0,1,[{offset:0,color:'#3b82f6'},{offset:1,color:'rgba(59,130,246,.3)'}]),borderRadius:[4,4,0,0]}},
|
||||||
|
],
|
||||||
|
animationDuration:600,
|
||||||
|
},true);
|
||||||
|
}
|
||||||
|
|
||||||
|
function renderKeywordTable(keywords) {
|
||||||
|
const wrap = document.getElementById('cpa-table-wrap');
|
||||||
|
let html = '<table class="dt"><thead><tr><th>Канал</th><th>Ключевой запрос</th><th>Клики</th><th>Продажи</th><th>CPA</th><th>Цена клика</th></tr></thead><tbody>';
|
||||||
|
|
||||||
|
for (const [channel, kws] of Object.entries(keywords)) {
|
||||||
|
kws.forEach(kw => {
|
||||||
|
const badge = kw.cpa < 3000 ? 'g' : kw.cpa < 5000 ? 'b' : kw.cpa < 6000 ? 'a' : 'r';
|
||||||
|
html += `<tr>
|
||||||
|
<td><span class="badge ${badge}">${channel}</span></td>
|
||||||
|
<td style="color:var(--text);font-family:var(--mono)">${kw.q}</td>
|
||||||
|
<td>${kw.clicks.toLocaleString('ru')}</td>
|
||||||
|
<td>${kw.conv}</td>
|
||||||
|
<td>${kw.cpa.toLocaleString('ru')} ₽</td>
|
||||||
|
<td>${kw.cost_per_click} ₽</td>
|
||||||
|
</tr>`;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
html += '</tbody></table>';
|
||||||
|
wrap.innerHTML = html;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
CONV RENDER
|
||||||
|
============================================ */
|
||||||
|
function renderConv(d) {
|
||||||
|
const c = d.conv;
|
||||||
|
|
||||||
|
sumRow('conv-sum', [
|
||||||
|
{l:'Конверсия',v:c.avg.v,d:c.avg.d,t:c.avg.t,n:c.avg.n},
|
||||||
|
{l:'Лиды',v:c.leads.v,d:c.leads.d,t:c.leads.t,n:c.leads.n},
|
||||||
|
{l:'Продажи',v:c.sales.v,d:c.sales.d,t:c.sales.t,n:c.sales.n},
|
||||||
|
{l:'Цикл',v:c.cycle.v,d:c.cycle.d,t:c.cycle.t,n:c.cycle.n},
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Revenue in conv tab (using CPA data)
|
||||||
|
const rc = DATA[curSeg].cpa;
|
||||||
|
sumRow('conv-rev', [
|
||||||
|
{l:'Общий доход',v:rc.totalRevenue,d:'+15%',t:'up',n:'за 30 дней'},
|
||||||
|
{l:'Расход',v:rc.totalSpend,d:'+8%',t:'up',n:'на рекламу'},
|
||||||
|
{l:'Прибыль',v:rc.totalProfit,d:'+12%',t:'up',n:'доход − расход'},
|
||||||
|
{l:'ROI',v:rc.roi,d:'+5%',t:'up',n:'возврат инвестиций'},
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Main: Conv trend
|
||||||
|
const mc = document.getElementById('cv-main');
|
||||||
|
if (!charts.convMain) charts.convMain = echarts.init(mc);
|
||||||
|
document.getElementById('cv-main-t').textContent = 'Конверсия в продажу';
|
||||||
|
document.getElementById('cv-main-s').textContent = 'Тренд за 12 месяцев';
|
||||||
|
charts.convMain.setOption({
|
||||||
|
tooltip:{trigger:'axis',backgroundColor:'#111',borderColor:'#222',textStyle:{color:'#fafafa',fontSize:11}},
|
||||||
|
grid:{left:44,right:16,top:28,bottom:28},
|
||||||
|
xAxis:{type:'category',data:c.trend.labels,axisLine:{lineStyle:{color:'#1e1e22'}},axisLabel:{color:'#52525b',fontSize:10}},
|
||||||
|
yAxis:{type:'value',splitLine:{lineStyle:{color:'#1a1a1e'}},axisLabel:{color:'#52525b',fontSize:10,formatter:'{value}%'}},
|
||||||
|
series:[{
|
||||||
|
type:'line',data:c.trend.data,smooth:.4,symbol:'none',lineStyle:{width:2.5,color:'#22c55e'},
|
||||||
|
areaStyle:{color:new echarts.graphic.LinearGradient(0,0,0,1,[{offset:0,color:'rgba(34,197,94,.2)'},{offset:1,color:'rgba(34,197,94,.01)'}])},
|
||||||
|
}],
|
||||||
|
animationDuration:600,
|
||||||
|
},true);
|
||||||
|
|
||||||
|
// Side: Conv by channel
|
||||||
|
const sc = document.getElementById('cv-side');
|
||||||
|
if (!charts.convSide) charts.convSide = echarts.init(sc);
|
||||||
|
const chs = c.channels.sort((a,b)=>a.conv-b.conv);
|
||||||
|
charts.convSide.setOption({
|
||||||
|
tooltip:{trigger:'axis',backgroundColor:'#111',borderColor:'#222',textStyle:{color:'#fafafa',fontSize:11}},
|
||||||
|
grid:{left:80,right:30,top:10,bottom:10},
|
||||||
|
xAxis:{type:'value',splitLine:{lineStyle:{color:'#1a1a1e'}},axisLabel:{color:'#52525b',fontSize:9,formatter:'{value}%'}},
|
||||||
|
yAxis:{type:'category',data:chs.map(x=>x.n).reverse(),axisLine:{lineStyle:{color:'#1e1e22'}},axisLabel:{color:'#a1a1aa',fontSize:10}},
|
||||||
|
series:[{
|
||||||
|
type:'bar',data:chs.map(x=>x.conv).reverse(),barWidth:38,
|
||||||
|
itemStyle:{borderRadius:[0,5,5,0],color:p=>{const c=COLORS[p.dataIndex%COLORS.length];return new echarts.graphic.LinearGradient(0,0,1,0,[{offset:0,color:c+'88'},{offset:1,color:c}])}}
|
||||||
|
}],
|
||||||
|
animationDuration:600,
|
||||||
|
},true);
|
||||||
|
|
||||||
|
// Keywords
|
||||||
|
const kwEl = document.getElementById('cv-keywords');
|
||||||
|
kwEl.innerHTML = `<table class="dt"><thead><tr><th>Запрос</th><th>Лиды</th><th>Продажи</th><th>CVR</th></tr></thead><tbody>` +
|
||||||
|
c.keywords.map(k => `<tr>
|
||||||
|
<td style="color:var(--text)">${k.q}</td>
|
||||||
|
<td>${k.leads.toLocaleString('ru')}</td>
|
||||||
|
<td>${k.sales}</td>
|
||||||
|
<td><span class="badge ${k.c==='var(--g)'?'g':k.c==='var(--b)'?'b':k.c==='var(--a)'?'a':'r'}">${k.cv}%</span></td>
|
||||||
|
</tr>`).join('') + '</tbody></table>';
|
||||||
|
|
||||||
|
// Managers
|
||||||
|
const mgEl = document.getElementById('cv-managers');
|
||||||
|
mgEl.innerHTML = `<table class="dt"><thead><tr><th>Менеджер</th><th>Лиды</th><th>Продажи</th><th>CVR</th></tr></thead><tbody>` +
|
||||||
|
c.managers.map(m => `<tr>
|
||||||
|
<td style="color:var(--text)">${m.n}</td>
|
||||||
|
<td>${m.leads.toLocaleString('ru')}</td>
|
||||||
|
<td>${m.sales}</td>
|
||||||
|
<td><span class="badge ${m.c==='var(--g)'?'g':m.c==='var(--b)'?'b':m.c==='var(--a)'?'a':'r'}">${m.cv}%</span></td>
|
||||||
|
</tr>`).join('') + '</tbody></table>';
|
||||||
|
|
||||||
|
// Funnel
|
||||||
|
const fn = document.getElementById('cv-funnel');
|
||||||
|
if (!charts.convFunnel) charts.convFunnel = echarts.init(fn);
|
||||||
|
const fc = ['#22c55e','#3b82f6','#a855f7'];
|
||||||
|
const funnelData = c.funnel.map((f,i)=>({name:f.n,value:f.v,itemStyle:{color:fc[i%fc.length]}}));
|
||||||
|
charts.convFunnel.setOption({
|
||||||
|
tooltip:{trigger:'item',backgroundColor:'#111',borderColor:'#222',textStyle:{color:'#fafafa',fontSize:11}},
|
||||||
|
series:[{
|
||||||
|
type:'funnel',left:'10%',bottom:5,width:'80%',min:0,max:c.funnel[0].v,
|
||||||
|
minSize:'0%',maxSize:'100%',sort:'descending',gap:4,
|
||||||
|
label:{show:true,position:'inside',color:'#fff',fontSize:11,formatter:'{b}\n{d}%'},
|
||||||
|
labelLine:{show:false},itemStyle:{borderColor:'#111',borderWidth:2},
|
||||||
|
data:funnelData,
|
||||||
|
}],
|
||||||
|
animationDuration:600,
|
||||||
|
},true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
LTV RENDER
|
||||||
|
============================================ */
|
||||||
|
function renderLTV(d) {
|
||||||
|
const c = d.ltv;
|
||||||
|
|
||||||
|
sumRow('ltv-sum', [
|
||||||
|
{l:'LTV средний',v:c.avg.v,d:c.avg.d,t:c.avg.t,n:c.avg.n},
|
||||||
|
{l:'Повторные',v:c.repeat.v,d:c.repeat.d,t:c.repeat.t,n:c.repeat.n},
|
||||||
|
{l:'Удержание',v:c.retention.v,d:c.retention.d,t:c.retention.t,n:c.retention.n},
|
||||||
|
{l:'Ср. чек',v:c.avgCheck.v,d:c.avgCheck.d,t:c.avgCheck.t,n:c.avgCheck.n},
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Revenue in LTV tab
|
||||||
|
const rc = DATA[curSeg].cpa;
|
||||||
|
sumRow('ltv-rev', [
|
||||||
|
{l:'Общий доход',v:rc.totalRevenue,d:'+15%',t:'up',n:'за 30 дней'},
|
||||||
|
{l:'Расход',v:rc.totalSpend,d:'+8%',t:'up',n:'на рекламу'},
|
||||||
|
{l:'Прибыль',v:rc.totalProfit,d:'+12%',t:'up',n:'доход − расход'},
|
||||||
|
{l:'ROI',v:rc.roi,d:'+5%',t:'up',n:'возврат инвестиций'},
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Main: LTV curve
|
||||||
|
const mc = document.getElementById('ltv-main');
|
||||||
|
if (!charts.ltvMain) charts.ltvMain = echarts.init(mc);
|
||||||
|
document.getElementById('ltv-main-t').textContent = 'Кумулятивный LTV';
|
||||||
|
document.getElementById('ltv-main-s').textContent = 'Накопленный доход от клиента по месяцам';
|
||||||
|
charts.ltvMain.setOption({
|
||||||
|
tooltip:{trigger:'axis',backgroundColor:'#111',borderColor:'#222',textStyle:{color:'#fafafa',fontSize:11}},
|
||||||
|
legend:{data:['SEO','Директ','VK'],textStyle:{color:'#52525b',fontSize:10},top:0},
|
||||||
|
grid:{left:44,right:16,top:28,bottom:28},
|
||||||
|
xAxis:{type:'category',data:c.curve.labels,axisLine:{lineStyle:{color:'#1e1e22'}},axisLabel:{color:'#52525b',fontSize:10}},
|
||||||
|
yAxis:{type:'value',splitLine:{lineStyle:{color:'#1a1a1e'}},axisLabel:{color:'#52525b',fontSize:10,formatter:'{value}К'}},
|
||||||
|
series:[
|
||||||
|
{name:'SEO',type:'line',data:c.curve.seo,smooth:.4,symbol:'none',lineStyle:{width:2,color:'#22c55e'}},
|
||||||
|
{name:'Директ',type:'line',data:c.curve.direct,smooth:.4,symbol:'none',lineStyle:{width:2,color:'#3b82f6'}},
|
||||||
|
{name:'VK',type:'line',data:c.curve.vk,smooth:.4,symbol:'none',lineStyle:{width:2,color:'#f59e0b'}},
|
||||||
|
],
|
||||||
|
animationDuration:600,
|
||||||
|
},true);
|
||||||
|
|
||||||
|
// Side: LTV by channel
|
||||||
|
const sc = document.getElementById('ltv-side');
|
||||||
|
if (!charts.ltvSide) charts.ltvSide = echarts.init(sc);
|
||||||
|
const ltvChannels = c.channels.sort((a,b)=>a.ltv-b.ltv);
|
||||||
|
charts.ltvSide.setOption({
|
||||||
|
tooltip:{trigger:'axis',backgroundColor:'#111',borderColor:'#222',textStyle:{color:'#fafafa',fontSize:11}},
|
||||||
|
grid:{left:80,right:30,top:10,bottom:10},
|
||||||
|
xAxis:{type:'value',splitLine:{lineStyle:{color:'#1a1a1e'}},axisLabel:{color:'#52525b',fontSize:9,formatter:'{value}К'}},
|
||||||
|
yAxis:{type:'category',data:ltvChannels.map(x=>x.n).reverse(),axisLine:{lineStyle:{color:'#1e1e22'}},axisLabel:{color:'#a1a1aa',fontSize:10}},
|
||||||
|
series:[{
|
||||||
|
type:'bar',data:ltvChannels.map(x=>x.ltv/1000).reverse(),barWidth:38,
|
||||||
|
itemStyle:{borderRadius:[0,5,5,0],color:p=>{const c=COLORS[p.dataIndex%COLORS.length];return new echarts.graphic.LinearGradient(0,0,1,0,[{offset:0,color:c+'88'},{offset:1,color:c}])}}
|
||||||
|
}],
|
||||||
|
animationDuration:600,
|
||||||
|
},true);
|
||||||
|
|
||||||
|
// Retention curve
|
||||||
|
const rt = document.getElementById('ltv-retention');
|
||||||
|
if (!charts.ltvRet) charts.ltvRet = echarts.init(rt);
|
||||||
|
charts.ltvRet.setOption({
|
||||||
|
tooltip:{trigger:'axis',backgroundColor:'#111',borderColor:'#222',textStyle:{color:'#fafafa',fontSize:11}},
|
||||||
|
legend:{data:['SEO','Директ','VK'],textStyle:{color:'#52525b',fontSize:10},top:0},
|
||||||
|
grid:{left:44,right:16,top:28,bottom:28},
|
||||||
|
xAxis:{type:'category',data:c.retCurve.labels,axisLine:{lineStyle:{color:'#1e1e22'}},axisLabel:{color:'#52525b',fontSize:10}},
|
||||||
|
yAxis:{type:'value',splitLine:{lineStyle:{color:'#1a1a1e'}},axisLabel:{color:'#52525b',fontSize:10,formatter:'{value}%'}},
|
||||||
|
series:[
|
||||||
|
{name:'SEO',type:'line',data:c.retCurve.seo,smooth:.4,symbol:'none',lineStyle:{width:2,color:'#22c55e'}},
|
||||||
|
{name:'Директ',type:'line',data:c.retCurve.direct,smooth:.4,symbol:'none',lineStyle:{width:2,color:'#3b82f6'}},
|
||||||
|
{name:'VK',type:'line',data:c.retCurve.vk,smooth:.4,symbol:'none',lineStyle:{width:2,color:'#f59e0b'}},
|
||||||
|
],
|
||||||
|
animationDuration:600,
|
||||||
|
},true);
|
||||||
|
|
||||||
|
// Average check by channel
|
||||||
|
const ck = document.getElementById('ltv-check');
|
||||||
|
if (!charts.ltvCheck) charts.ltvCheck = echarts.init(ck);
|
||||||
|
|
||||||
|
const cssMap = {'var(--g)':'#22c55e','var(--b)':'#3b82f6','var(--a)':'#f59e0b','var(--p)':'#a855f7','var(--r)':'#ef4444','var(--c)':'#06b6d4'};
|
||||||
|
const checks = c.checks.slice().sort((a,b)=>a.avg-b.avg).map(x=>({
|
||||||
|
n: x.n,
|
||||||
|
avg: typeof x.avg === 'string' ? parseInt(x.avg) : x.avg,
|
||||||
|
c: cssMap[x.c] || x.c,
|
||||||
|
}));
|
||||||
|
|
||||||
|
charts.ltvCheck.setOption({
|
||||||
|
tooltip:{trigger:'axis',backgroundColor:'#111',borderColor:'#222',textStyle:{color:'#fafafa',fontSize:11,formatter:p=>`${p.value[1].name}<br/>${p.axisLabel}`}
|
||||||
|
},
|
||||||
|
grid:{left:80,right:60,top:10,bottom:10},
|
||||||
|
xAxis:{type:'value',splitLine:{lineStyle:{color:'#1a1a1e'}},axisLabel:{color:'#52525b',fontSize:9,formatter:v=>v>=1e5?(v/1e6).toFixed(0)+'М':(v/1e3).toFixed(0)+'К'}},
|
||||||
|
yAxis:{type:'category',data:checks.map(x=>x.n).reverse(),axisLine:{lineStyle:{color:'#1e1e22'}},axisLabel:{color:'#a1a1aa',fontSize:10}},
|
||||||
|
series:[{
|
||||||
|
type:'bar',data:checks.map(x=>x.avg/1000).reverse(),barWidth:38,
|
||||||
|
itemStyle:{borderRadius:[0,5,5,0],color:p=>{
|
||||||
|
const ch = checks[p.dataIndex];
|
||||||
|
return new echarts.graphic.LinearGradient(0,0,1,0,[{offset:0,color:ch.c+'88'},{offset:1,color:ch.c}]);
|
||||||
|
}},
|
||||||
|
label:{show:true,position:'right',color:'#a1a1aa',fontSize:10,formatter:p=>{
|
||||||
|
const v = checks[p.dataIndex]?.avg || 0;
|
||||||
|
return v >= 1e6 ? (v/1e6).toFixed(1)+'М ₽' : v.toLocaleString('ru')+' ₽';
|
||||||
|
}},
|
||||||
|
}],
|
||||||
|
animationDuration:600,
|
||||||
|
},true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
MAIN RENDER
|
||||||
|
============================================ */
|
||||||
|
function render() {
|
||||||
|
const d = DATA[curSeg];
|
||||||
|
|
||||||
|
if (curTab === 'cpa') {
|
||||||
|
document.querySelectorAll('.section').forEach(s=>s.classList.remove('active'));
|
||||||
|
document.getElementById('sec-cpa').classList.add('active');
|
||||||
|
renderCPA(d);
|
||||||
|
} else if (curTab === 'conv') {
|
||||||
|
document.querySelectorAll('.section').forEach(s=>s.classList.remove('active'));
|
||||||
|
document.getElementById('sec-conv').classList.add('active');
|
||||||
|
renderConv(d);
|
||||||
|
} else {
|
||||||
|
document.querySelectorAll('.section').forEach(s=>s.classList.remove('active'));
|
||||||
|
document.getElementById('sec-ltv').classList.add('active');
|
||||||
|
renderLTV(d);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
EVENTS
|
||||||
|
============================================ */
|
||||||
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
|
// Tabs
|
||||||
|
document.getElementById('tabs').addEventListener('click', e => {
|
||||||
|
const tab = e.target.closest('.tab');
|
||||||
|
if (!tab) return;
|
||||||
|
curTab = tab.dataset.t;
|
||||||
|
document.querySelectorAll('.tab').forEach(t=>t.classList.toggle('active', t.dataset.t===curTab));
|
||||||
|
render();
|
||||||
|
});
|
||||||
|
|
||||||
|
// Business switcher
|
||||||
|
document.getElementById('bswitch').addEventListener('click', e => {
|
||||||
|
const btn = e.target.closest('.bbtn');
|
||||||
|
if (!btn) return;
|
||||||
|
curSeg = btn.dataset.b;
|
||||||
|
document.querySelectorAll('.bbtn').forEach(b=>b.classList.toggle('active', b.dataset.b===curSeg));
|
||||||
|
render();
|
||||||
|
});
|
||||||
|
|
||||||
|
render();
|
||||||
|
|
||||||
|
// Clock
|
||||||
|
function tick() {
|
||||||
|
const n = new Date();
|
||||||
|
document.getElementById('clock').textContent =
|
||||||
|
String(n.getHours()).padStart(2,'0')+':'+String(n.getMinutes()).padStart(2,'0')+':'+String(n.getSeconds()).padStart(2,'0');
|
||||||
|
}
|
||||||
|
tick(); setInterval(tick, 1000);
|
||||||
|
|
||||||
|
// Resize
|
||||||
|
new ResizeObserver(() => Object.values(charts).forEach(c=>c.resize())).observe(document.getElementById('dashboard'));
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,460 @@
|
|||||||
|
"""
|
||||||
|
ROI24 — Matrix 3D Tunnel Hero Animation
|
||||||
|
========================================
|
||||||
|
Blender 4.x Geometry Nodes script.
|
||||||
|
Creates a Matrix-style infinite tunnel with binary digits
|
||||||
|
and floating KPI cards.
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
1. Open Blender 4.x
|
||||||
|
2. Scripting workspace → Text Editor → New → "matrix_tunnel.py"
|
||||||
|
3. Paste this entire file
|
||||||
|
4. Alt+P (Run Script)
|
||||||
|
5. Press ~ in 3D viewport → shade smooth
|
||||||
|
6. Numpad 0 for camera view
|
||||||
|
7. Ctrl+F12 to render animation
|
||||||
|
|
||||||
|
Output: 1920x1080, 60fps, 180 frames (3s loop)
|
||||||
|
"""
|
||||||
|
|
||||||
|
import bpy
|
||||||
|
import math
|
||||||
|
import random
|
||||||
|
import os
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# CONFIG
|
||||||
|
# ============================================================
|
||||||
|
RENDER_WIDTH = 1920
|
||||||
|
RENDER_HEIGHT = 1080
|
||||||
|
FRAMES = 180
|
||||||
|
FPS = 60
|
||||||
|
TUNNEL_RADIUS = 8.0
|
||||||
|
TUNNEL_LENGTH = 80.0
|
||||||
|
RINGS = 32
|
||||||
|
CHARS_PER_RING = 48
|
||||||
|
FLOW_SPEED = 3.0 # tunnel speed
|
||||||
|
|
||||||
|
# ROI24 brand colors
|
||||||
|
GREEN = (0.133, 0.773, 0.369) # #22c55e
|
||||||
|
GREEN_BRIGHT = (0.286, 0.886, 0.502) # #4ade80
|
||||||
|
DARK = (0.039, 0.039, 0.039) # #0a0a0a
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# CLEANUP
|
||||||
|
# ============================================================
|
||||||
|
print("Cleaning scene...")
|
||||||
|
for obj in bpy.data.objects:
|
||||||
|
bpy.data.objects.remove(obj, do_unlink=True)
|
||||||
|
for mat in bpy.data.materials:
|
||||||
|
bpy.data.materials.remove(mat, do_unlink=True)
|
||||||
|
for tex in bpy.data.textures:
|
||||||
|
bpy.data.textures.remove(tex, do_unlink=True)
|
||||||
|
for img in bpy.data.images:
|
||||||
|
bpy.data.images.remove(img, do_unlink=True)
|
||||||
|
for gn in bpy.data.node_groups:
|
||||||
|
bpy.data.node_groups.remove(gn)
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# MATERIALS
|
||||||
|
# ============================================================
|
||||||
|
print("Creating materials...")
|
||||||
|
|
||||||
|
def create_green_emit_mat(name):
|
||||||
|
"""Create a green emission material."""
|
||||||
|
mat = bpy.data.materials.new(name)
|
||||||
|
mat.use_nodes = True
|
||||||
|
nodes = mat.node_tree.nodes
|
||||||
|
links = mat.node_tree.links
|
||||||
|
nodes.clear()
|
||||||
|
|
||||||
|
emit = nodes.new('ShaderNodeEmission')
|
||||||
|
emit.inputs['Color'].default_value = (*GREEN, 1.0)
|
||||||
|
emit.inputs['Strength'].default_value = 1.5
|
||||||
|
output = nodes.new('ShaderNodeOutputMaterial')
|
||||||
|
links.new(emit.outputs['Emission'], output.inputs['Surface'])
|
||||||
|
return mat
|
||||||
|
|
||||||
|
def create_glow_mat(name, color=GREEN, strength=3.0):
|
||||||
|
"""Create a bright glow material."""
|
||||||
|
mat = bpy.data.materials.new(name)
|
||||||
|
mat.use_nodes = True
|
||||||
|
nodes = mat.node_tree.nodes
|
||||||
|
links = mat.node_tree.links
|
||||||
|
nodes.clear()
|
||||||
|
|
||||||
|
emit = nodes.new('ShaderNodeEmission')
|
||||||
|
emit.inputs['Color'].default_value = (*color, 1.0)
|
||||||
|
emit.inputs['Strength'].default_value = strength
|
||||||
|
output = nodes.new('ShaderNodeOutputMaterial')
|
||||||
|
links.new(emit.outputs['Emission'], output.inputs['Surface'])
|
||||||
|
return mat
|
||||||
|
|
||||||
|
char_mat = create_green_emit_mat('CharMat')
|
||||||
|
glow_mat = create_glow_mat('GlowMat', GREEN_BRIGHT, 4.0)
|
||||||
|
card_mat = create_green_emit_mat('CardMat')
|
||||||
|
line_mat = create_green_emit_mat('LineMat')
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# CAMERA
|
||||||
|
# ============================================================
|
||||||
|
print("Setting up camera...")
|
||||||
|
cam_data = bpy.data.cameras.new('Camera')
|
||||||
|
cam_data.type = 'PERSP'
|
||||||
|
cam_data.lens = 35
|
||||||
|
cam_data.clip_start = 0.1
|
||||||
|
cam_data.clip_end = 200
|
||||||
|
|
||||||
|
cam = bpy.data.objects.new('Camera', cam_data)
|
||||||
|
cam.location = (0, 0, 0)
|
||||||
|
bpy.context.scene.collection.objects.link(cam)
|
||||||
|
bpy.context.scene.camera = cam
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# SCENE SETUP
|
||||||
|
# ============================================================
|
||||||
|
print("Setting up scene...")
|
||||||
|
scene = bpy.context.scene
|
||||||
|
scene.render.engine = 'CYCLES'
|
||||||
|
scene.cycles.samples = 128
|
||||||
|
scene.cycles.preview_samples = 32
|
||||||
|
scene.cycles.device = 'GPU'
|
||||||
|
scene.render.fps = FPS
|
||||||
|
scene.frame_start = 0
|
||||||
|
scene.frame_end = FRAMES - 1
|
||||||
|
|
||||||
|
# Render resolution
|
||||||
|
scene.render.resolution_x = RENDER_WIDTH
|
||||||
|
scene.render.resolution_y = RENDER_HEIGHT
|
||||||
|
scene.render.resolution_percentage = 100
|
||||||
|
|
||||||
|
# Output path (set before file_format)
|
||||||
|
output_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'renders')
|
||||||
|
os.makedirs(output_dir, exist_ok=True)
|
||||||
|
scene.render.filepath = os.path.join(output_dir, 'matrix_tunnel')
|
||||||
|
|
||||||
|
# FFMPEG settings (Blender 4.x API)
|
||||||
|
scene.ffmpeg.format = 'MPEG_4'
|
||||||
|
scene.ffmpeg.codec = 'H264'
|
||||||
|
scene.ffmpeg.video_bitrate = 50000
|
||||||
|
|
||||||
|
# World background
|
||||||
|
world = bpy.data.worlds.new('World')
|
||||||
|
world.use_nodes = True
|
||||||
|
nodes = world.node_tree.nodes
|
||||||
|
links = world.node_tree.links
|
||||||
|
nodes.clear()
|
||||||
|
|
||||||
|
bg = nodes.new('ShaderNodeBackground')
|
||||||
|
bg.inputs['Color'].default_value = (*DARK, 1.0)
|
||||||
|
bg.inputs['Strength'].default_value = 0.3
|
||||||
|
output = nodes['World Output']
|
||||||
|
links.new(bg.outputs['Background'], output.inputs['Surface'])
|
||||||
|
|
||||||
|
# Fog
|
||||||
|
fog = nodes.new('ShaderNodeFog')
|
||||||
|
fog.fog_type = 'EXP'
|
||||||
|
fog.density = 0.025
|
||||||
|
fog.inputs['Color'].default_value = (*GREEN, 0.15)
|
||||||
|
links.new(fog, output.inputs['Fog'])
|
||||||
|
scene.world = world
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# GEOMETRY NODES TUNNEL
|
||||||
|
# ============================================================
|
||||||
|
print("Creating tunnel with Geometry Nodes...")
|
||||||
|
|
||||||
|
# Create instancing system for binary characters
|
||||||
|
tunnel_gn = bpy.data.node_groups.new('MatrixTunnel', 'GeometryNodeTree')
|
||||||
|
tunnel_gn.interface.new_socket('Geometry', socket_type='NodeSocketGeometry')
|
||||||
|
tunnel_gn.interface.new_socket('Progress', socket_type='NodeSocketFloat')
|
||||||
|
|
||||||
|
nodes = tunnel_gn.nodes
|
||||||
|
links = tunnel_gn.links
|
||||||
|
|
||||||
|
# Input geometry
|
||||||
|
input_geom = nodes.new('NodeGroupInput')
|
||||||
|
|
||||||
|
# Separate by Z
|
||||||
|
separate_z = nodes.new('GeometryNodeSeparateGeometry')
|
||||||
|
separate_z.location = (200, 0)
|
||||||
|
|
||||||
|
# Instance on points
|
||||||
|
instance_on_points = nodes.new('GeometryNodeInstanceOnPoints')
|
||||||
|
instance_on_points.location = (500, 0)
|
||||||
|
|
||||||
|
# Transform geometry (rotate instances to face camera)
|
||||||
|
transform = nodes.new('GeometryNodeTransform')
|
||||||
|
transform.location = (750, 0)
|
||||||
|
|
||||||
|
# Output
|
||||||
|
output_gn = nodes.new('NodeGroupOutput')
|
||||||
|
|
||||||
|
# Connect
|
||||||
|
links.new(input_geom.outputs[0], separate_z.inputs[0])
|
||||||
|
links.new(separate_z.outputs[0], instance_on_points.inputs[0])
|
||||||
|
links.new(instance_on_points.outputs[0], transform.inputs[0])
|
||||||
|
links.new(transform.outputs[0], output_gn.inputs[0])
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# CREATE BINARY CHARACTER MESH (simple diamond shape)
|
||||||
|
# ============================================================
|
||||||
|
print("Creating character mesh...")
|
||||||
|
|
||||||
|
# Diamond shape for '0'
|
||||||
|
char_mesh_0 = bpy.data.meshes.new('Char0')
|
||||||
|
verts_0 = [
|
||||||
|
(0, 0.3, 0), (0.2, 0, 0), (0, -0.3, 0), (-0.2, 0, 0)
|
||||||
|
]
|
||||||
|
faces_0 = [[0, 1, 2, 3]]
|
||||||
|
char_mesh_0.from_pydata(verts_0, [], faces_0)
|
||||||
|
char_mesh_0.validate()
|
||||||
|
|
||||||
|
# Line shape for '1'
|
||||||
|
char_mesh_1 = bpy.data.meshes.new('Char1')
|
||||||
|
verts_1 = [
|
||||||
|
(-0.08, 0.25, 0), (0.08, 0.25, 0),
|
||||||
|
(0.08, -0.25, 0), (-0.08, -0.25, 0),
|
||||||
|
(-0.08, -0.15, 0), (0.08, -0.15, 0)
|
||||||
|
]
|
||||||
|
faces_1 = [[0, 1, 2, 3], [2, 5, 4, 3]]
|
||||||
|
char_mesh_1.from_pydata(verts_1, [], faces_1)
|
||||||
|
char_mesh_1.validate()
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# INSTANCED CHARACTER OBJECTS
|
||||||
|
# ============================================================
|
||||||
|
print("Instancing characters...")
|
||||||
|
|
||||||
|
def create_instanced_chars():
|
||||||
|
"""Create instanced binary characters around tunnel."""
|
||||||
|
angle_step = (2 * math.pi) / CHARS_PER_RING
|
||||||
|
|
||||||
|
# Create collection for tunnel objects
|
||||||
|
tunnel_col = bpy.data.collections.new('MatrixTunnel')
|
||||||
|
bpy.context.scene.collection.children.link(tunnel_col)
|
||||||
|
|
||||||
|
# Create a single "instancer" object with geometry nodes
|
||||||
|
instancer = bpy.data.objects.new('TunnelInstancer', None)
|
||||||
|
instancer.location = (0, 0, 0)
|
||||||
|
tunnel_col.objects.link(instancer)
|
||||||
|
|
||||||
|
# Geometry nodes modifier
|
||||||
|
gn = instancer.modifiers.new('TunnelGenerator', 'NODES')
|
||||||
|
gn.node_group = tunnel_gn
|
||||||
|
|
||||||
|
# Now create actual character instances
|
||||||
|
ring_spacing = TUNNEL_LENGTH / RINGS
|
||||||
|
|
||||||
|
for ring_idx in range(RINGS):
|
||||||
|
z = -(ring_idx * ring_spacing)
|
||||||
|
|
||||||
|
for char_idx in range(CHARS_PER_RING):
|
||||||
|
angle = char_idx * angle_step
|
||||||
|
x = math.cos(angle) * TUNNEL_RADIUS
|
||||||
|
y = math.sin(angle) * TUNNEL_RADIUS
|
||||||
|
|
||||||
|
# Create character mesh object
|
||||||
|
use_mesh = char_mesh_0 if random.random() > 0.5 else char_mesh_1
|
||||||
|
|
||||||
|
# Use object instancing for performance
|
||||||
|
char_obj = bpy.data.objects.new(
|
||||||
|
f'Char_R{ring_idx:02d}_C{char_idx:02d}',
|
||||||
|
use_mesh
|
||||||
|
)
|
||||||
|
char_obj.location = (x, y, z)
|
||||||
|
char_obj.rotation_euler = (0, 0, angle + math.radians(90))
|
||||||
|
|
||||||
|
# Scale based on position (closer = bigger)
|
||||||
|
scale = 0.6 + (ring_idx / RINGS) * 0.3
|
||||||
|
char_obj.scale = (scale, scale, scale)
|
||||||
|
|
||||||
|
# Material
|
||||||
|
char_obj.data.materials.append(char_mat)
|
||||||
|
|
||||||
|
# Set material color based on depth
|
||||||
|
depth_ratio = ring_idx / RINGS
|
||||||
|
r = GREEN[0] * (0.6 + depth_ratio * 0.4)
|
||||||
|
g = GREEN[1] * (0.8 + depth_ratio * 0.2)
|
||||||
|
b = GREEN[2] * (0.7 + depth_ratio * 0.3)
|
||||||
|
char_mat.nodes['Emission'].inputs['Color'].default_value = (r, g, b, 1.0)
|
||||||
|
|
||||||
|
# Store animation data
|
||||||
|
char_obj['ring_idx'] = ring_idx
|
||||||
|
char_obj['char_idx'] = char_idx
|
||||||
|
char_obj['base_x'] = x
|
||||||
|
char_obj['base_y'] = y
|
||||||
|
char_obj['base_z'] = z
|
||||||
|
char_obj['base_scale'] = scale
|
||||||
|
char_obj['angle'] = angle
|
||||||
|
|
||||||
|
tunnel_col.objects.link(char_obj)
|
||||||
|
|
||||||
|
return tunnel_col
|
||||||
|
|
||||||
|
tunnel_col = create_instanced_chars()
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# KPI CARDS — 3D panels
|
||||||
|
# ============================================================
|
||||||
|
print("Creating KPI cards...")
|
||||||
|
|
||||||
|
KPI_DATA = [
|
||||||
|
{'label': 'CPA', 'value': '890₽', 'pos': (-10, 5, -12), 'rot': (0, 0.1, 0), 'size': (3, 2)},
|
||||||
|
{'label': 'ROI', 'value': '91.8%', 'pos': (10, 4, -18), 'rot': (0, -0.1, 0), 'size': (3, 2)},
|
||||||
|
{'label': 'LTV', 'value': '12.4K', 'pos': (-9, -2, -24), 'rot': (0, 0.15, 0), 'size': (3, 2)},
|
||||||
|
{'label': 'CONV', 'value': '2.8%', 'pos': (9, -3, -30), 'rot': (0, -0.15, 0), 'size': (3, 2)},
|
||||||
|
{'label': 'LEADS', 'value': '44.5K', 'pos': (-8, 1, -36), 'rot': (0, 0.1, 0), 'size': (3, 2)},
|
||||||
|
{'label': 'REVENUE', 'value': '2.05M', 'pos': (8, 0, -42), 'rot': (0, -0.1, 0), 'size': (3, 2)},
|
||||||
|
]
|
||||||
|
|
||||||
|
for i, kpi in enumerate(KPI_DATA):
|
||||||
|
w, h = kpi['size']
|
||||||
|
|
||||||
|
# Card mesh
|
||||||
|
card_mesh = bpy.data.meshes.new(f'KPI_Card_{i}')
|
||||||
|
verts = [
|
||||||
|
(-w/2, -h/2, 0), (w/2, -h/2, 0),
|
||||||
|
(w/2, h/2, 0), (-w/2, h/2, 0),
|
||||||
|
(-w/2, -h/2, -0.05), (w/2, -h/2, -0.05),
|
||||||
|
(w/2, h/2, -0.05), (-w/2, h/2, -0.05),
|
||||||
|
]
|
||||||
|
faces = [
|
||||||
|
[0, 4, 5, 1], # bottom
|
||||||
|
[4, 7, 6, 5], # back
|
||||||
|
[7, 3, 2, 6], # top
|
||||||
|
[3, 0, 1, 2], # front
|
||||||
|
[4, 0, 3, 7], # left
|
||||||
|
[1, 5, 6, 2], # right
|
||||||
|
]
|
||||||
|
card_mesh.from_pydata(verts, [], faces)
|
||||||
|
card_mesh.validate()
|
||||||
|
|
||||||
|
card_obj = bpy.data.objects.new(f'KPI_Card_{i}', card_mesh)
|
||||||
|
card_obj.location = kpi['pos']
|
||||||
|
card_obj.rotation_euler = kpi['rot']
|
||||||
|
card_obj.scale = (1, 1, 1)
|
||||||
|
|
||||||
|
# Material
|
||||||
|
card_obj.data.materials.append(card_mat)
|
||||||
|
|
||||||
|
# Store data
|
||||||
|
card_obj['kpi_index'] = i
|
||||||
|
card_obj['base_x'] = kpi['pos'][0]
|
||||||
|
card_obj['base_y'] = kpi['pos'][1]
|
||||||
|
card_obj['base_z'] = kpi['pos'][2]
|
||||||
|
|
||||||
|
tunnel_col.objects.link(card_obj)
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# SPEED LINES
|
||||||
|
# ============================================================
|
||||||
|
print("Creating speed lines...")
|
||||||
|
|
||||||
|
for i in range(48):
|
||||||
|
angle = (i / 48) * 2 * math.pi
|
||||||
|
x1 = math.cos(angle) * 0.5
|
||||||
|
y1 = math.sin(angle) * 0.5
|
||||||
|
x2 = math.cos(angle) * TUNNEL_RADIUS * 2
|
||||||
|
y2 = math.sin(angle) * TUNNEL_RADIUS * 2
|
||||||
|
z_start = -10
|
||||||
|
z_end = -TUNNEL_LENGTH
|
||||||
|
|
||||||
|
# Curve
|
||||||
|
curve = bpy.data.curves.new(f'SpeedLine_{i}', 'CURVE')
|
||||||
|
curve.dimensions = '3D'
|
||||||
|
curve.bevel_depth = 0.03
|
||||||
|
spline = curve.splines.new('POLY')
|
||||||
|
spline.points.add(1)
|
||||||
|
spline.points[0].co = (x1, y1, z_start, 1)
|
||||||
|
spline.points[1].co = (x2, y2, z_end, 1)
|
||||||
|
|
||||||
|
line_obj = bpy.data.objects.new(f'SpeedLine_{i}', curve)
|
||||||
|
line_obj.data.materials.append(line_mat)
|
||||||
|
tunnel_col.objects.link(line_obj)
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# ANIMATION FUNCTIONS (uncomment to enable)
|
||||||
|
# ============================================================
|
||||||
|
|
||||||
|
def animate_characters():
|
||||||
|
"""Animate binary characters flowing toward camera."""
|
||||||
|
for obj in tunnel_col.objects:
|
||||||
|
ring_idx = obj.get('ring_idx', None)
|
||||||
|
if ring_idx is None:
|
||||||
|
continue
|
||||||
|
|
||||||
|
base_z = obj.get('base_z', 0)
|
||||||
|
base_x = obj.get('base_x', 0)
|
||||||
|
base_y = obj.get('base_y', 0)
|
||||||
|
base_scale = obj.get('base_scale', 0.6)
|
||||||
|
angle = obj.get('angle', 0)
|
||||||
|
|
||||||
|
for frame in range(FRAMES):
|
||||||
|
# Flow forward
|
||||||
|
z = base_z + ((frame / FPS) * FLOW_SPEED) % TUNNEL_LENGTH
|
||||||
|
if z > 0:
|
||||||
|
z -= TUNNEL_LENGTH
|
||||||
|
|
||||||
|
# Scale by depth
|
||||||
|
depth_ratio = max(0, min(1, (TUNNEL_LENGTH + z) / TUNNEL_LENGTH))
|
||||||
|
scale = base_scale * (0.4 + depth_ratio * 0.7)
|
||||||
|
|
||||||
|
# Set keyframe
|
||||||
|
obj.location = (base_x, base_y, z)
|
||||||
|
obj.scale = (scale / base_scale, scale / base_scale, 1)
|
||||||
|
obj.keyframe_insert(data_path='location', frame=frame)
|
||||||
|
obj.keyframe_insert(data_path='scale', frame=frame)
|
||||||
|
|
||||||
|
|
||||||
|
def animate_kpi_cards():
|
||||||
|
"""Animate KPI cards floating through tunnel."""
|
||||||
|
for obj in tunnel_col.objects:
|
||||||
|
kpi_idx = obj.get('kpi_index', None)
|
||||||
|
if kpi_idx is None:
|
||||||
|
continue
|
||||||
|
|
||||||
|
base_x = obj.get('base_x', 0)
|
||||||
|
base_y = obj.get('base_y', 0)
|
||||||
|
base_z = obj.get('base_z', 0)
|
||||||
|
|
||||||
|
for frame in range(FRAMES):
|
||||||
|
# Move toward camera
|
||||||
|
z = base_z + ((frame / FPS) * FLOW_SPEED * 0.7)
|
||||||
|
|
||||||
|
# Float motion
|
||||||
|
y = base_y + math.sin((frame / FPS) * 2 + kpi_idx * 1.5) * 1.5
|
||||||
|
|
||||||
|
# Scale
|
||||||
|
depth_ratio = max(0, min(1, (TUNNEL_LENGTH + z) / TUNNEL_LENGTH))
|
||||||
|
scale = 0.5 + depth_ratio * 0.7
|
||||||
|
|
||||||
|
obj.location = (base_x, y, z)
|
||||||
|
obj.scale = (scale, scale, scale)
|
||||||
|
obj.keyframe_insert(data_path='location', frame=frame)
|
||||||
|
obj.keyframe_insert(data_path='scale', frame=frame)
|
||||||
|
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# SUMMARY
|
||||||
|
# ============================================================
|
||||||
|
print("\n" + "=" * 60)
|
||||||
|
print("ROI24 Matrix 3D Tunnel — Setup Complete")
|
||||||
|
print("=" * 60)
|
||||||
|
print(f"Resolution: {RENDER_WIDTH}x{RENDER_HEIGHT}")
|
||||||
|
print(f"Duration: {FRAMES / FPS}s @ {FPS}fps")
|
||||||
|
print(f"Engine: {scene.render.engine} (Cycles)")
|
||||||
|
print(f"Tunnel: {RINGS} rings x {CHARS_PER_RING} chars = {RINGS * CHARS_PER_RING}")
|
||||||
|
print(f"KPI cards: {len(KPI_DATA)}")
|
||||||
|
print(f"Speed lines: 48")
|
||||||
|
print()
|
||||||
|
print("NEXT STEPS:")
|
||||||
|
print("1. In 3D Viewport: Press ~ → Shade Smooth")
|
||||||
|
print("2. Numpad 0 — Camera view")
|
||||||
|
print("3. F12 — Preview render")
|
||||||
|
print("4. Ctrl+F12 — Render animation (MP4)")
|
||||||
|
print()
|
||||||
|
print("TO ANIMATE:")
|
||||||
|
print("Uncomment animate_characters() and animate_kpi_cards()")
|
||||||
|
print("then re-run this script")
|
||||||
|
print("=" * 60)
|
||||||
@@ -0,0 +1,257 @@
|
|||||||
|
# Bloomberg Refresh 2024 — Visual Style & Component Guide
|
||||||
|
|
||||||
|
> Источник: `European, Middle Eastern & African Stocks - Bloomberg - Bloomberg Markets.html`
|
||||||
|
> Дата анализа: 2026-06-21
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. CSS Architecture
|
||||||
|
|
||||||
|
Bloomberg использует **CSS-variables через `@layer`** (`phx.components`). Все цвета и стили — через переменные, нет хардкода.
|
||||||
|
|
||||||
|
```css
|
||||||
|
@layer phx.components {
|
||||||
|
/* Font system */
|
||||||
|
--atomics-text-font-size: var(--_atomics-Text-font-size)
|
||||||
|
--atomics-text-font-family: var(--_atomics-Text-font-family)
|
||||||
|
--atomics-text-color: var(--_atomics-Text-color)
|
||||||
|
|
||||||
|
/* Skeleton/placeholder */
|
||||||
|
--atomics-skeleton-background-color: var(--phx-color-background-secondary)
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Ключевая особенность: шрифты подгружаются через Google Fonts (Noto Sans JP для японских индексов). Для остальных — системный стек.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Table Structure
|
||||||
|
|
||||||
|
### Columns (left → right)
|
||||||
|
|
||||||
|
| # | Column | Content | Alignment | Class prefix |
|
||||||
|
|---|-------------|----------------------|-----------|---------------------------|
|
||||||
|
| 1 | Follow | Button (toggle) | center | `style_column__qFboh style_stickyCol__8nZn2` |
|
||||||
|
| 2 | Ticker ID | `SPEURO:IND` etc. | left | `style_column__qFboh` |
|
||||||
|
| 3 | Index Name | `S&P EUROPE 350 INDEX` | left | `style_column__qFboh` |
|
||||||
|
| 4 | Value | `2,581.91` | right | `style_column__qFboh style_end__Ug4Cn` |
|
||||||
|
| 5 | Change | `▲ 1.85` | right | `style_column__qFboh style_end__Ug4Cn` |
|
||||||
|
|
||||||
|
### Row structure
|
||||||
|
|
||||||
|
Each row is wrapped in `style_tableRow__YAQry style_row__rMjqo`.
|
||||||
|
|
||||||
|
The table has 3 main wrapper classes:
|
||||||
|
- `style_tableWrapper__Q1HVo style_table__SrH5K` — outer table
|
||||||
|
- `style_tableHeader__XgkzK style_header__VSpHj` — header row
|
||||||
|
- `style_tableRow__YAQry style_row__rMjqo` — data rows
|
||||||
|
|
||||||
|
### Cell classes
|
||||||
|
|
||||||
|
- `style_cell__1UrwH style_start__T_7tE` — left-aligned cell
|
||||||
|
- `style_cell__1UrwH style_end__0XcYw` — right-aligned cell (value + change)
|
||||||
|
- `style_cell__1UrwH style_stickyCol__8nZn2 style_start__L8R9v` — sticky column (Follow + ID)
|
||||||
|
|
||||||
|
### Section titles (region headers)
|
||||||
|
|
||||||
|
```
|
||||||
|
styles_sectionTitle__Vr2RB typography_coreHeadlineSm__9qq05
|
||||||
|
styles_sectionTitle__xBh4H
|
||||||
|
styles_sectionTitle__z1_bK typography_coreHeadlineSm__9qq05
|
||||||
|
```
|
||||||
|
|
||||||
|
Three sections in the page:
|
||||||
|
1. **Today in the Markets**
|
||||||
|
2. **Compare to Benchmarks**
|
||||||
|
3. **Market Summaries**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Change Component
|
||||||
|
|
||||||
|
### Three states
|
||||||
|
|
||||||
|
```css
|
||||||
|
media-ui-Change_positive-il7qv0BctMg-
|
||||||
|
media-ui-Change_negative-rQGvYj5WMsM-
|
||||||
|
media-ui-Change_neutral-nBYyHHGgsdY-
|
||||||
|
```
|
||||||
|
|
||||||
|
### Shared modifier classes
|
||||||
|
|
||||||
|
All change elements share these classes:
|
||||||
|
- `media-ui-Change_change-lMq4LV-1csY-` — wrapper
|
||||||
|
- `media-ui-Change_default-8hphe2lFPJo-` — default theme
|
||||||
|
- `media-ui-Change_refresh2024-EajM9IkrlnU-` — "refresh2024" design system
|
||||||
|
|
||||||
|
### Value display
|
||||||
|
|
||||||
|
- `media-ui-Change_changeValue-cRzdGNve3oU-` — numeric value
|
||||||
|
- `media-ui-Change_priceChange-OgFOGsx-jKI-` — price change (absolute points)
|
||||||
|
- Separate class for percentage change (appears in different context)
|
||||||
|
|
||||||
|
### Arrow SVG
|
||||||
|
|
||||||
|
```html
|
||||||
|
<!-- UP (positive) -->
|
||||||
|
<svg class="media-ui-Change_marketArrow-..." width="12" height="10" viewBox="0 0 24 20" preserveAspectRatio="xMidYMid meet" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Arrow Up">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M12 0L24 20L0 20L12 0Z"/>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
<!-- DOWN (negative) -->
|
||||||
|
<svg class="media-ui-Change_marketArrow-..." width="12" height="10" viewBox="0 0 24 20" preserveAspectRatio="xMidYMid meet" fill="none" xmlns="http://www.w3.org/2000/svg" aria-label="Arrow Down" role="img">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M12 20L0 0L24 0L12 20Z"/>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
<!-- NEUTRAL -->
|
||||||
|
<svg class="media-ui-Change_marketArrow-..." width="12" height="10" viewBox="0 0 24 20" preserveAspectRatio="xMidYMid meet" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Arrow Up">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M12 0L24 20L0 20L12 0Z"/>
|
||||||
|
</svg>
|
||||||
|
```
|
||||||
|
|
||||||
|
Key: **`fill="currentColor"`** — arrow inherits text color from parent.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Typography
|
||||||
|
|
||||||
|
### Name column (`style_stockName__8SqkX`)
|
||||||
|
|
||||||
|
- Font: system sans-serif (Inter-like)
|
||||||
|
- Size: ~14px
|
||||||
|
- Weight: 500 (medium)
|
||||||
|
- Color: `--atomics-text-color` (white/light gray)
|
||||||
|
- Behavior: ellipsis on overflow (truncates long names)
|
||||||
|
|
||||||
|
### Value column (`style_stockValue__fsPwb`)
|
||||||
|
|
||||||
|
- Font: monospace / tabular-nums
|
||||||
|
- Size: ~14-16px
|
||||||
|
- Weight: 500
|
||||||
|
- Alignment: right
|
||||||
|
- Number format: `1 234,56` (space = thousands separator, comma = decimal)
|
||||||
|
|
||||||
|
### Change column (`media-ui-Change_priceChange-*`)
|
||||||
|
|
||||||
|
- Size: ~12-13px (smaller than value)
|
||||||
|
- Weight: 400 (regular)
|
||||||
|
- Color: green (positive) / red (negative) / gray (neutral)
|
||||||
|
- Arrow: 12x10px, inherits color
|
||||||
|
|
||||||
|
### ID/Ticker column (`style_displayId__ZrwVL`)
|
||||||
|
|
||||||
|
- Size: ~11px
|
||||||
|
- Font: monospace
|
||||||
|
- Color: muted (#888)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Complete Component Hierarchy
|
||||||
|
|
||||||
|
```
|
||||||
|
style_tableWrapper__Q1HVo style_table__SrH5K
|
||||||
|
└── style_tableRow__YAQry style_row__rMjqo (header)
|
||||||
|
└── style_tableRow__YAQry style_row__rMjqo (data)
|
||||||
|
├── style_column__qFboh style_stickyCol__8nZn2 style_start__L8R9v
|
||||||
|
│ ├── style_stockId__blFSc (ticker like "SPEURO:IND")
|
||||||
|
│ └── Follow button
|
||||||
|
├── style_column__qFboh
|
||||||
|
│ └── style_stockName__8SqkX ("S&P EUROPE 350 INDEX")
|
||||||
|
├── style_column__qFboh style_end__Ug4Cn
|
||||||
|
│ └── style_stockValue__fsPwb ("2,581.91")
|
||||||
|
└── style_column__qFboh style_end__Ug4Cn
|
||||||
|
└── media-ui-Change_change-lMq4LV-1csY- media-ui-Change_default-* media-ui-Change_refresh2024-*
|
||||||
|
├── media-ui-Change_changeValue-* media-ui-Change_(positive|negative|neutral)-*
|
||||||
|
│ └── number (e.g. "1.85")
|
||||||
|
└── media-ui-Change_marketArrow-* media-ui-Change_(positive|negative|neutral)-*
|
||||||
|
└── <svg> arrow
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. Data Extracted from File
|
||||||
|
|
||||||
|
- **Total rows:** 91 indices
|
||||||
|
- **Sections:** 3 ("Today in the Markets", "Compare to Benchmarks", "Market Summaries")
|
||||||
|
- **Regions covered:** Europe, UK, Nordics, DACH, Eastern Europe, Iberia, Baltics, Middle East, Africa
|
||||||
|
- **Change distribution:** ~70% positive, ~25% negative, ~5% neutral (at time of snapshot)
|
||||||
|
|
||||||
|
### Sample indices
|
||||||
|
|
||||||
|
| Ticker | Name | Value | Change |
|
||||||
|
|--------|------|-------|--------|
|
||||||
|
| SPEURO:IND | S&P EUROPE 350 INDEX | 2,581.91 | +1.85 |
|
||||||
|
| SXXP:IND | STXE 600 (EUR) Pr | 635.61 | +1.68 |
|
||||||
|
| SX5E:IND | Euro Stoxx 50 Pr | 6,293.13 | +4.55 |
|
||||||
|
| UKX:IND | FTSE 100 INDEX | 10,363.27 | +0.98 |
|
||||||
|
| DAX:IND | DAX INDEX | 24,985.82 | +0.39 |
|
||||||
|
| CAC:IND | CAC 40 INDEX | 8,421.14 | +3.76 |
|
||||||
|
|
||||||
|
### Key ticker prefixes
|
||||||
|
|
||||||
|
| Prefix | Market |
|
||||||
|
|--------|--------|
|
||||||
|
| `UKX:IND` | FTSE 100 (London) |
|
||||||
|
| `DAX:IND` | DAX (Frankfurt) |
|
||||||
|
| `CAC:IND` | CAC 40 (Paris) |
|
||||||
|
| `SX5E:IND` | Euro Stoxx 50 |
|
||||||
|
| `XU100:IND` | BIST 100 (Istanbul) |
|
||||||
|
| `TA-35:IND` | TA-35 (Tel Aviv) |
|
||||||
|
| `TOP40:IND` | FTSE/JSE Africa Top 40 |
|
||||||
|
| `ATXPRIME:I` | ATX Prime (Vienna) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. Implementation Notes for ROI24
|
||||||
|
|
||||||
|
### Replicating the Change component (minimal)
|
||||||
|
|
||||||
|
```css
|
||||||
|
.change-positive { color: #16a34a; }
|
||||||
|
.change-negative { color: #e21d1d; }
|
||||||
|
.change-neutral { color: #a6a6a6; }
|
||||||
|
|
||||||
|
.change-arrow {
|
||||||
|
width: 12px;
|
||||||
|
height: 10px;
|
||||||
|
fill: currentColor;
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: middle;
|
||||||
|
margin-right: 4px;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
```html
|
||||||
|
<div class="change change-positive">
|
||||||
|
<svg class="change-arrow" viewBox="0 0 24 20">
|
||||||
|
<path d="M12 0L24 20L0 20L12 0Z"/>
|
||||||
|
</svg>
|
||||||
|
1.85
|
||||||
|
</div>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Key differences from ROI24 style
|
||||||
|
|
||||||
|
| Aspect | Bloomberg | ROI24 |
|
||||||
|
|--------|-----------|-------|
|
||||||
|
| Background | Very dark (#0a0a0a) | Dark (#050505) |
|
||||||
|
| Border | Minimal/none on cells | 1px solid |
|
||||||
|
| Font | System + Google Fonts | Inter + JetBrains Mono |
|
||||||
|
| Accent | Green (#16a34a) / Red (#e21d1d) | Green (#00ff9d) |
|
||||||
|
| Numbers | Tabular-nums, 1 234,56 | Comma decimal for RU locale |
|
||||||
|
| Cards | Flat rows, no card bg | Bordered cards |
|
||||||
|
| Radius | 0 (sharp) | 8-16px (rounded) |
|
||||||
|
|
||||||
|
### Recommended adaptation
|
||||||
|
|
||||||
|
Use Bloomberg's **table structure + change component** but apply ROI24's design tokens:
|
||||||
|
- Replace Bloomberg's green `#16a34a` with ROI24 accent `#00ff9d`
|
||||||
|
- Keep monospace for values (JetBrains Mono)
|
||||||
|
- Keep right-align for value/change columns
|
||||||
|
- Keep arrow SVG pattern (fill="currentColor")
|
||||||
|
- Add `border-radius: 12px` to rows or use card-style (ROI24 prefers cards)
|
||||||
|
- Use `gap: 14px` between cells (Bloomberg uses 1px gaps)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Generated from Bloomberg HTML snapshot — 1.3MB minified React SPA. Data extracted via regex parsing of rendered DOM.*
|
||||||
@@ -0,0 +1,732 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ru">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>ROI24 — Аналитическая панель</title>
|
||||||
|
<link href="https://fonts.cdnfonts.com/css/ibm-plex-sans" rel="stylesheet">
|
||||||
|
<link href="https://fonts.cdnfonts.com/css/ibm-plex-mono" rel="stylesheet">
|
||||||
|
<style>
|
||||||
|
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--bg: #0a0a0a;
|
||||||
|
--surface: #161616;
|
||||||
|
--surface-hover: #1f1f1f;
|
||||||
|
--border: #262626;
|
||||||
|
--border-strong: #393939;
|
||||||
|
--text-primary: #f4f4f4;
|
||||||
|
--text-secondary: #a6a6a6;
|
||||||
|
--text-tertiary: #6f6f6f;
|
||||||
|
--accent: #0f6fff;
|
||||||
|
--accent-hover: #3d8eff;
|
||||||
|
--green: #16a34a;
|
||||||
|
--green-dim: rgba(22,163,74,0.12);
|
||||||
|
--red: #e21d1d;
|
||||||
|
--red-dim: rgba(226,29,29,0.12);
|
||||||
|
--yellow: #eac518;
|
||||||
|
--mono: 'IBM Plex Mono', monospace;
|
||||||
|
--sans: 'IBM Plex Sans', -apple-system, sans-serif;
|
||||||
|
--ease: cubic-bezier(0.2, 0, 0, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
html { font-size: 14px; }
|
||||||
|
|
||||||
|
body {
|
||||||
|
font-family: var(--sans);
|
||||||
|
background: var(--bg);
|
||||||
|
color: var(--text-primary);
|
||||||
|
line-height: 1.5;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
overflow-x: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* TOP BAR */
|
||||||
|
.topbar {
|
||||||
|
display: flex; align-items: center; justify-content: space-between;
|
||||||
|
padding: 0 32px; height: 48px;
|
||||||
|
background: var(--surface);
|
||||||
|
border-bottom: 1px solid var(--border);
|
||||||
|
position: sticky; top: 0; z-index: 100;
|
||||||
|
}
|
||||||
|
.topbar-brand {
|
||||||
|
font-family: var(--mono); font-size: 13px; font-weight: 600;
|
||||||
|
letter-spacing: 0.5px; display: flex; align-items: center; gap: 10px;
|
||||||
|
}
|
||||||
|
.topbar-brand .icon {
|
||||||
|
width: 20px; height: 20px; background: var(--accent);
|
||||||
|
display: flex; align-items: center; justify-content: center;
|
||||||
|
font-size: 11px; font-weight: 700; color: #fff;
|
||||||
|
}
|
||||||
|
.topbar-right { display: flex; align-items: center; gap: 20px; font-size: 12px; }
|
||||||
|
.status { display: flex; align-items: center; gap: 6px; color: var(--green); font-weight: 500; }
|
||||||
|
.status-dot { width: 6px; height: 6px; background: var(--green); animation: blink 2s ease-in-out infinite; }
|
||||||
|
@keyframes blink { 0%,100%{opacity:1} 50%{opacity:0.4} }
|
||||||
|
.clock { font-family: var(--mono); color: var(--text-tertiary); font-size: 11px; letter-spacing: 0.3px; }
|
||||||
|
|
||||||
|
/* PAGE HEADER */
|
||||||
|
.page-header {
|
||||||
|
max-width: 1280px; margin: 0 auto;
|
||||||
|
padding: 40px 32px 0;
|
||||||
|
}
|
||||||
|
.page-title {
|
||||||
|
font-size: 28px; font-weight: 700;
|
||||||
|
letter-spacing: -0.5px; line-height: 1.2;
|
||||||
|
color: var(--text-primary); margin-bottom: 8px;
|
||||||
|
}
|
||||||
|
.page-desc { font-size: 14px; color: var(--text-secondary); font-weight: 400; }
|
||||||
|
|
||||||
|
/* TABS */
|
||||||
|
.tabs-section {
|
||||||
|
max-width: 1280px; margin: 0 auto;
|
||||||
|
padding: 32px 32px 0;
|
||||||
|
}
|
||||||
|
.tabs {
|
||||||
|
display: flex; align-items: center; gap: 0;
|
||||||
|
border-bottom: 1px solid var(--border-strong);
|
||||||
|
overflow-x: auto; scrollbar-width: none;
|
||||||
|
margin-bottom: 28px;
|
||||||
|
}
|
||||||
|
.tabs::-webkit-scrollbar { display: none; }
|
||||||
|
.tab-btn {
|
||||||
|
padding: 12px 20px; border: none; background: transparent;
|
||||||
|
color: var(--text-secondary); font-family: var(--sans);
|
||||||
|
font-size: 14px; font-weight: 600; cursor: pointer;
|
||||||
|
position: relative; white-space: nowrap;
|
||||||
|
transition: color 0.15s var(--ease);
|
||||||
|
}
|
||||||
|
.tab-btn:hover { color: var(--text-primary); }
|
||||||
|
.tab-btn::after {
|
||||||
|
content: ''; position: absolute;
|
||||||
|
bottom: -1px; left: 0; right: 0; height: 2px;
|
||||||
|
background: var(--accent); transform: scaleX(0);
|
||||||
|
transform-origin: left; transition: transform 0.2s var(--ease);
|
||||||
|
}
|
||||||
|
.tab-btn.active { color: var(--accent); }
|
||||||
|
.tab-btn.active::after { transform: scaleX(1); }
|
||||||
|
.tab-label { display: flex; align-items: center; gap: 8px; }
|
||||||
|
|
||||||
|
/* KPI CARDS — Bloomberg stock ticker style */
|
||||||
|
.kpi-grid {
|
||||||
|
display: grid; grid-template-columns: repeat(6, 1fr);
|
||||||
|
gap: 12px; padding: 0;
|
||||||
|
max-width: 1280px; margin: 0 auto;
|
||||||
|
}
|
||||||
|
.kpi {
|
||||||
|
background: #0e0e0e;
|
||||||
|
border: 1px solid #1e1e1e;
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 14px 16px;
|
||||||
|
transition: all 0.2s var(--ease);
|
||||||
|
opacity: 0; transform: translateY(8px);
|
||||||
|
cursor: default;
|
||||||
|
color: #d4d4d4;
|
||||||
|
}
|
||||||
|
.kpi.visible { opacity: 1; transform: translateY(0); }
|
||||||
|
.kpi:hover {
|
||||||
|
border-color: #2e2e2e;
|
||||||
|
background: #131313;
|
||||||
|
box-shadow: 0 2px 12px rgba(0,0,0,0.25);
|
||||||
|
}
|
||||||
|
.kpi-header {
|
||||||
|
display: flex; align-items: baseline; justify-content: space-between;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
|
.kpi-ticker {
|
||||||
|
font-family: var(--mono); font-size: 10px; font-weight: 600;
|
||||||
|
color: #666; letter-spacing: 0.03em;
|
||||||
|
}
|
||||||
|
.kpi-change {
|
||||||
|
font-family: var(--mono); font-size: 12px; font-weight: 700;
|
||||||
|
display: flex; align-items: center; gap: 3px;
|
||||||
|
}
|
||||||
|
.kpi-change.up { color: #22c55e; }
|
||||||
|
.kpi-change.down { color: #ef4444; }
|
||||||
|
.kpi-change.neutral { color: #3b82f6; }
|
||||||
|
.kpi-trend { display: flex; align-items: center; gap: 6px; }
|
||||||
|
.kpi-trend-line {
|
||||||
|
width: 52px; height: 22px; display: block; flex-shrink: 0;
|
||||||
|
}
|
||||||
|
.kpi-value {
|
||||||
|
font-family: var(--mono);
|
||||||
|
font-size: 28px; font-weight: 800;
|
||||||
|
letter-spacing: -0.5px; line-height: 1.1;
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
.kpi-desc {
|
||||||
|
font-size: 10px; color: #555;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Arrow SVG inline */
|
||||||
|
.kpi-arrow { width: 10px; height: 8px; fill: currentColor; flex-shrink: 0; }
|
||||||
|
|
||||||
|
/* CHARTS WRAPPER */
|
||||||
|
.charts-wrap {
|
||||||
|
max-width: 1280px; margin: 0 auto;
|
||||||
|
padding: 28px 32px 32px;
|
||||||
|
}
|
||||||
|
.charts-grid {
|
||||||
|
display: grid; gap: 1px;
|
||||||
|
background: var(--border);
|
||||||
|
border: 1px solid var(--border);
|
||||||
|
border-radius: 4px; overflow: hidden;
|
||||||
|
}
|
||||||
|
.chart-panel {
|
||||||
|
background: var(--surface);
|
||||||
|
padding: 24px;
|
||||||
|
}
|
||||||
|
.chart-header { margin-bottom: 20px; }
|
||||||
|
.chart-title { font-size: 14px; font-weight: 600; color: var(--text-primary); margin-bottom: 4px; }
|
||||||
|
.chart-subtitle { font-size: 12px; color: var(--text-tertiary); }
|
||||||
|
.chart-canvas { width: 100%; height: 260px; }
|
||||||
|
.chart-canvas.small { height: 200px; }
|
||||||
|
|
||||||
|
/* Metric list */
|
||||||
|
.metric-list { display: flex; flex-direction: column; gap: 0; margin-top: 8px; }
|
||||||
|
.metric-item {
|
||||||
|
display: flex; align-items: center;
|
||||||
|
padding: 12px 0;
|
||||||
|
border-bottom: 1px solid var(--border);
|
||||||
|
}
|
||||||
|
.metric-item:last-child { border-bottom: none; }
|
||||||
|
.m-label { font-size: 12px; color: var(--text-secondary); flex: 1; }
|
||||||
|
.m-value { font-family: var(--mono); font-size: 13px; font-weight: 600; color: var(--text-primary); margin: 0 16px; min-width: 64px; text-align: right; }
|
||||||
|
.m-bar { width: 80px; height: 4px; background: var(--border-strong); overflow: hidden; }
|
||||||
|
.m-fill { height: 100%; width: 0; transition: width 0.8s var(--ease); }
|
||||||
|
.m-fill.green { background: var(--green); }
|
||||||
|
.m-fill.red { background: var(--red); }
|
||||||
|
.m-fill.yellow { background: var(--yellow); }
|
||||||
|
.m-fill.blue { background: var(--accent); }
|
||||||
|
|
||||||
|
/* BLOOMBERG TABLE (E-commerce) */
|
||||||
|
.b-table-section { display: none; }
|
||||||
|
.b-table-section.active { display: block; }
|
||||||
|
.b-table {
|
||||||
|
width: 100%; border-collapse: collapse; font-size: 13px;
|
||||||
|
background: #0e0e0e; border: 1px solid #1e1e1e; border-radius: 12px; overflow: hidden;
|
||||||
|
}
|
||||||
|
.b-table-header { display: grid; grid-template-columns: 44px 110px 1fr 120px 120px; padding: 10px 18px; border-bottom: 1px solid #1e1e1e; }
|
||||||
|
.b-th { font-size: 10px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.08em; color: #555; }
|
||||||
|
.b-th.right { text-align: right; }
|
||||||
|
.b-row { display: grid; grid-template-columns: 44px 110px 1fr 120px 120px; padding: 10px 18px; transition: background 0.15s; }
|
||||||
|
.b-row:hover { background: #131313; }
|
||||||
|
.b-row + .b-row { border-top: 1px solid #141414; }
|
||||||
|
.b-row:last-child { border-radius: 0 0 11px 11px; }
|
||||||
|
.b-follow { display: flex; align-items: center; justify-content: center; cursor: pointer; }
|
||||||
|
.b-follow-btn {
|
||||||
|
width: 22px; height: 22px; border: 1px solid #2a2a2a; border-radius: 6px;
|
||||||
|
background: transparent; color: #444; font-size: 12px; display: flex;
|
||||||
|
align-items: center; justify-content: center; transition: all 0.15s;
|
||||||
|
}
|
||||||
|
.b-follow-btn:hover { color: #f4f4f4; border-color: #444; background: #1a1a1a; }
|
||||||
|
.b-follow-btn.active { color: #0f6fff; border-color: #0f6fff; background: rgba(15,111,255,0.08); }
|
||||||
|
.b-id { font-family: 'IBM Plex Mono', monospace; font-size: 11px; color: #555; white-space: nowrap; }
|
||||||
|
.b-name { font-size: 13px; color: #d4d4d4; font-weight: 500; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
||||||
|
.b-value { font-family: 'IBM Plex Mono', monospace; font-size: 14px; font-weight: 600; color: #f4f4f4; text-align: right; letter-spacing: -0.3px; }
|
||||||
|
.b-change { display: flex; align-items: center; justify-content: flex-end; gap: 4px; font-family: 'IBM Plex Mono', monospace; font-size: 12px; font-weight: 400; }
|
||||||
|
.b-change.up { color: #16a34a; }
|
||||||
|
.b-change.down { color: #e21d1d; }
|
||||||
|
.b-change.neutral { color: #3b82f6; }
|
||||||
|
.b-arrow { width: 12px; height: 10px; fill: currentColor; flex-shrink: 0; }
|
||||||
|
.b-section-title {
|
||||||
|
font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.1em;
|
||||||
|
color: #444; padding: 20px 0 8px; margin-top: 8px; border-top: 1px solid #1a1a1a;
|
||||||
|
}
|
||||||
|
.b-section-title:first-child { border-top: none; margin-top: 0; }
|
||||||
|
.b-table-caption {
|
||||||
|
display: flex; align-items: center; justify-content: space-between; margin-bottom: 14px;
|
||||||
|
}
|
||||||
|
.b-table-caption-title { font-size: 14px; font-weight: 600; color: #d4d4d4; }
|
||||||
|
.b-table-caption-sub { font-size: 12px; color: #555; }
|
||||||
|
|
||||||
|
/* RESPONSIVE */
|
||||||
|
@media(max-width: 1024px) {
|
||||||
|
.kpi-grid { grid-template-columns: repeat(3, 1fr); }
|
||||||
|
.b-table-header, .b-row { grid-template-columns: 44px 80px 1fr 90px 90px; }
|
||||||
|
}
|
||||||
|
@media(max-width: 640px) {
|
||||||
|
.kpi-grid { grid-template-columns: repeat(2, 1fr); }
|
||||||
|
.topbar { padding: 0 16px; }
|
||||||
|
.page-header, .tabs-section, .charts-wrap { padding-left: 16px; padding-right: 16px; }
|
||||||
|
.tab-btn { padding: 12px 14px; font-size: 13px; }
|
||||||
|
.b-table-header, .b-row { grid-template-columns: 36px 70px 1fr 70px 70px; padding: 8px 12px; }
|
||||||
|
.b-name { font-size: 12px; }
|
||||||
|
.b-value { font-size: 12px; }
|
||||||
|
.b-change { font-size: 11px; }
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="topbar">
|
||||||
|
<div class="topbar-brand"><div class="icon">R</div>ROI24</div>
|
||||||
|
<div class="topbar-right">
|
||||||
|
<div class="status"><div class="status-dot"></div> Live data</div>
|
||||||
|
<div class="clock" id="clock"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="page-header">
|
||||||
|
<h1 class="page-title">Аналитика бизнеса</h1>
|
||||||
|
<p class="page-desc">Ключевые показатели эффективности в реальном времени</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="tabs-section">
|
||||||
|
<div class="tabs" id="tabs">
|
||||||
|
<button class="tab-btn active" data-seg="ecom"><span class="tab-label"><span class="tab-icon">🛒</span>E-commerce</span></button>
|
||||||
|
<button class="tab-btn" data-seg="services"><span class="tab-label"><span class="tab-icon">💼</span>Услуги</span></button>
|
||||||
|
<button class="tab-btn" data-seg="production"><span class="tab-label"><span class="tab-icon">🏭</span>Производство</span></button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="kpi-grid" id="kpi-grid"></div>
|
||||||
|
|
||||||
|
<!-- Bloomberg-style table (E-commerce only) -->
|
||||||
|
<div class="charts-wrap">
|
||||||
|
<div class="b-table-section active" id="b-table-section">
|
||||||
|
<div class="b-table-caption">
|
||||||
|
<span class="b-table-caption-title">Каналы и метрики</span>
|
||||||
|
<span class="b-table-caption-sub">Обновлено только что</span>
|
||||||
|
</div>
|
||||||
|
<div class="b-table-caption-sub b-section-title">Выручка по каналам</div>
|
||||||
|
<table class="b-table" id="b-table-channels">
|
||||||
|
<thead><tr><th class="b-th"></th><th class="b-th">ID</th><th class="b-th">Канал</th><th class="b-th right">Выручка</th><th class="b-th right">Изменение</th></tr></thead>
|
||||||
|
<tbody></tbody>
|
||||||
|
</table>
|
||||||
|
<div class="b-table-caption-sub b-section-title">Маркетинговые метрики</div>
|
||||||
|
<table class="b-table" id="b-table-marketing">
|
||||||
|
<thead><tr><th class="b-th"></th><th class="b-th">ID</th><th class="b-th">Метрика</th><th class="b-th right">Значение</th><th class="b-th right">Изменение</th></tr></thead>
|
||||||
|
<tbody></tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="charts-wrap">
|
||||||
|
<div class="charts-grid">
|
||||||
|
<!-- Row 1: Main + Side -->
|
||||||
|
<div class="chart-panel"><div class="chart-header"><div class="chart-title" id="mc-title"></div><div class="chart-subtitle" id="mc-sub"></div></div><div class="chart-canvas" id="mc-canvas"></div></div>
|
||||||
|
<div class="chart-panel"><div class="chart-header"><div class="chart-title" id="sc-title"></div><div class="chart-subtitle" id="sc-sub"></div></div><div class="chart-canvas" id="sc-canvas"></div></div>
|
||||||
|
<!-- Row 2: Funnel + Second + Metrics -->
|
||||||
|
<div class="chart-panel"><div class="chart-header"><div class="chart-title" id="c1-title"></div><div class="chart-subtitle" id="c1-sub"></div></div><div class="chart-canvas small" id="c1-canvas"></div></div>
|
||||||
|
<div class="chart-panel"><div class="chart-header"><div class="chart-title" id="c2-title"></div><div class="chart-subtitle" id="c2-sub"></div></div><div class="chart-canvas small" id="c2-canvas"></div></div>
|
||||||
|
<div class="chart-panel"><div class="chart-header"><div class="chart-title">Выполнение плана</div><div class="chart-subtitle">Ключевые метрики</div></div><div class="metric-list" id="metric-list"></div></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/echarts@5.5.0/dist/echarts.min.js"></script>
|
||||||
|
<script>
|
||||||
|
const D = {
|
||||||
|
ecom: {
|
||||||
|
kpis: [
|
||||||
|
{ n:'Выручка', v:'4.2М ₽', d:'+12%', t:'up', p:'vs прошл. мес', spark:[2.8,3.1,2.9,3.4,3.6,3.2,3.8,4.0,3.9,4.2,3.7,4.2] },
|
||||||
|
{ n:'AOV', v:'4 820 ₽', d:'+3%', t:'up', p:'ср. чек', spark:[4200,4500,4350,4600,4700,4550,4800,4750,4650,4820,4700,4820] },
|
||||||
|
{ n:'CVR', v:'3.8%', d:'+0.5%', t:'up', p:'клики→покупка', spark:[3.2,3.3,3.1,3.4,3.5,3.3,3.6,3.7,3.5,3.8,3.6,3.8] },
|
||||||
|
{ n:'CAC', v:'680 ₽', d:'−8%', t:'down', p:'стоим. клиента', spark:[800,750,780,720,700,730,710,690,670,680,690,680] },
|
||||||
|
{ n:'CLV', v:'12 400 ₽', d:'+18%', t:'up', p:'за 6 мес', spark:[10000,10500,10200,11000,11200,10800,11500,11800,12000,12200,12100,12400] },
|
||||||
|
{ n:'ROAS', v:'4.2×', d:'+15%', t:'up', p:'возврат рекламы', spark:[3.5,3.6,3.7,3.8,3.9,3.7,4.0,4.1,4.0,4.2,4.1,4.2] },
|
||||||
|
],
|
||||||
|
mc: { title:'Выручка и расходы на рекламу', sub:'12 месяцев · выручка (зелёный) vs маркетинг-бюджет (пунктир)', type:'dual',
|
||||||
|
labels:['Янв','Фев','Мар','Апр','Май','Июн','Июл','Авг','Сен','Окт','Ноя','Дек'],
|
||||||
|
rev:[2.8,3.1,2.9,3.4,3.6,3.2,3.8,4.0,3.9,4.2,3.7,4.2],
|
||||||
|
ads:[0.6,0.7,0.65,0.72,0.68,0.75,0.7,0.65,0.6,0.58,0.62,0.55],
|
||||||
|
},
|
||||||
|
sc: { title:'ROAS по каналам', sub:'Возврат инвестиций в каждый канал', type:'bar-h',
|
||||||
|
data:[
|
||||||
|
{n:'SEO',v:520},{n:'Email',v:380},{n:'Прямой',v:280},
|
||||||
|
{n:'Контекст',v:150},{n:'Соцсети',v:120},{n:'Рефералы',v:95},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
c1: { title:'Конверсия воронки', sub:'Просмотр → Корзина → Оплата → Покупка',
|
||||||
|
data:[
|
||||||
|
{n:'Посетители',v:45000},{n:'Корзина',v:8100},
|
||||||
|
{n:'Оформление',v:4950},{n:'Оплата',v:2723},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
c2: { title:'Топ-5 товаров', sub:'По выручке за месяц',
|
||||||
|
labels:['Товар А','Товар Б','Товар В','Товар Г','Товар Д'],
|
||||||
|
data:[120,98,76,54,42],
|
||||||
|
},
|
||||||
|
metrics: [
|
||||||
|
{l:'Выручка (план)',v:'4.2М',p:93,c:'green'},
|
||||||
|
{l:'CVR (план)',v:'3.8%',p:95,c:'green'},
|
||||||
|
{l:'ROAS (план)',v:'4.2×',p:105,c:'green'},
|
||||||
|
{l:'CAC (план)',v:'680₽',p:85,c:'yellow'},
|
||||||
|
{l:'CLV (план)',v:'12.4К',p:104,c:'green'},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
services: {
|
||||||
|
kpis: [
|
||||||
|
{ n:'Пайплайн', v:'12.8М ₽', d:'+18%', t:'up', p:'открытых сделок', spark:[6.2,7.0,7.5,8.1,8.8,9.2,9.8,10.5,11.0,11.5,12.2,12.8] },
|
||||||
|
{ n:'Win Rate', v:'24%', d:'+3%', t:'up', p:'закрыто/всего', spark:[20,21,22,21,22,23,22,23,24,23,24,24] },
|
||||||
|
{ n:'Sales Cycle', v:'32 дн', d:'−5%', t:'down', p:'длительность', spark:[35,34,34,33,34,33,33,32,33,32,33,32] },
|
||||||
|
{ n:'Pipeline Cov.', v:'4.1×', d:'+0.6', t:'up', p:'покрытие квоты', spark:[3.2,3.4,3.5,3.6,3.7,3.8,3.9,3.9,4.0,4.0,4.1,4.1] },
|
||||||
|
{ n:'CPL', v:'2 400 ₽', d:'−12%', t:'down', p:'стоимость лида', spark:[3200,3000,3100,2900,2800,2900,2700,2600,2500,2400,2500,2400] },
|
||||||
|
{ n:'ROMI', v:'245%', d:'+35%', t:'up', p:'маркетинг ROI', spark:[200,210,220,225,230,228,235,240,238,245,242,245] },
|
||||||
|
],
|
||||||
|
mc: { title:'Пайплайн и закрытые сделки', sub:'12 месяцев · пайплайн (синий) vs закрытие (зелёный)', type:'dual',
|
||||||
|
labels:['Янв','Фев','Мар','Апр','Май','Июн','Июл','Авг','Сен','Окт','Ноя','Дек'],
|
||||||
|
rev:[6.2,7.0,7.5,8.1,8.8,9.2,9.8,10.5,11.0,11.5,12.2,12.8],
|
||||||
|
ads:[1.8,2.1,2.0,2.3,2.5,2.2,2.8,3.0,2.7,3.1,2.6,3.2],
|
||||||
|
},
|
||||||
|
sc: { title:'ROMI по услугам', sub:'Возврат инвестиций в каждую услугу', type:'bar-h',
|
||||||
|
data:[
|
||||||
|
{n:'SEO-контент',v:420},{n:'Рефералы',v:380},{n:'Консалтинг',v:290},
|
||||||
|
{n:'Дизайн',v:240},{n:'Таргет',v:160},{n:'Холодные',v:85},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
c1: { title:'Воронка продаж', sub:'Лид → Квалификация → Предложение → Сделка',
|
||||||
|
data:[
|
||||||
|
{n:'Лиды',v:320},{n:'Квалиф.',v:224},
|
||||||
|
{n:'Предложение',v:128},{n:'Сделка',v:77},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
c2: { title:'Quota Attainment', sub:'Выполнение квоты менеджерами',
|
||||||
|
labels:['Иванов','Петров','Сидоров','Козлов','Морозов'],
|
||||||
|
data:[112,95,88,105,78],
|
||||||
|
},
|
||||||
|
metrics: [
|
||||||
|
{l:'Пайплайн (план)',v:'12.8М',p:85,c:'blue'},
|
||||||
|
{l:'Win Rate (план)',v:'24%',p:96,c:'green'},
|
||||||
|
{l:'Sales Cycle (план)',v:'32д',p:90,c:'green'},
|
||||||
|
{l:'Pipeline Cov. (план)',v:'4.1×',p:103,c:'green'},
|
||||||
|
{l:'ROMI (план)',v:'245%',p:123,c:'green'},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
production: {
|
||||||
|
kpis: [
|
||||||
|
{ n:'Выпуск', v:'15 420 шт', d:'+8%', t:'up', p:'к плану', spark:[11500,12800,12200,13800,14200,12500,14800,15200,14700,15000,13800,15420] },
|
||||||
|
{ n:'OEE', v:'78%', d:'+4%', t:'up', p:'загрузка мощностей', spark:[72,73,74,73,74,75,76,76,77,77,78,78] },
|
||||||
|
{ n:'Брак', v:'2.1%', d:'−0.5%', t:'down', p:'дефекты', spark:[2.8,2.7,2.6,2.5,2.5,2.6,2.4,2.3,2.3,2.2,2.2,2.1] },
|
||||||
|
{ n:'Себест.', v:'3 200 ₽', d:'−3%', t:'down', p:'за единицу', spark:[3500,3450,3400,3400,3350,3380,3320,3280,3250,3220,3250,3200] },
|
||||||
|
{ n:'Оборачив.', v:'5.2×', d:'+0.3', t:'up', p:'запасов в год', spark:[4.5,4.6,4.7,4.8,4.9,4.9,5.0,5.1,5.1,5.2,5.1,5.2] },
|
||||||
|
{ n:'ROMI рекламы', v:'310%', d:'+45%', t:'up', p:'маркетинг ROI', spark:[250,260,265,270,275,280,285,290,295,300,305,310] },
|
||||||
|
],
|
||||||
|
mc: { title:'План / факт выпуска', sub:'12 месяцев · план (пунктир) vs фактический выпуск (сплошная)', type:'bar-cmp',
|
||||||
|
labels:['Янв','Фев','Мар','Апр','Май','Июн','Июл','Авг','Сен','Окт','Ноя','Дек'],
|
||||||
|
plan:[12,13,12.5,14,14.5,13,15,15.5,15,15.5,14,16],
|
||||||
|
fact:[11.5,12.8,12.2,13.8,14.2,12.5,14.8,15.2,14.7,15.0,13.8,15.4],
|
||||||
|
},
|
||||||
|
sc: { title:'ROMI по каналам', sub:'Возврат инвестиций в привлечение заказов', type:'bar-h',
|
||||||
|
data:[
|
||||||
|
{n:'SEO',v:380},{n:'Прямые',v:310},{n:'Контекст',v:210},
|
||||||
|
{n:'Каталоги',v:170},{n:'Таргет',v:140},{n:'Выставки',v:110},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
c1: { title:'Качество (воронка)', sub:'Выпуск → Контроль → Брак → Доработка',
|
||||||
|
data:[
|
||||||
|
{n:'Выпуск',v:15420},{n:'Контроль',v:15200},
|
||||||
|
{n:'Брак',v:324},{n:'Доработка',v:180},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
c2: { title:'Структура затрат', sub:'Доля в себестоимости',
|
||||||
|
labels:['Сырьё','Зарплата','Энергия','Логистика','Прочее'],
|
||||||
|
data:[45,25,12,10,8],
|
||||||
|
},
|
||||||
|
metrics: [
|
||||||
|
{l:'Выпуск (план)',v:'15.4К',p:96,c:'green'},
|
||||||
|
{l:'OEE (план)',v:'78%',p:92,c:'yellow'},
|
||||||
|
{l:'Брак (план)',v:'2.1%',p:105,c:'green'},
|
||||||
|
{l:'ROMI (план)',v:'310%',p:111,c:'green'},
|
||||||
|
{l:'Себест. (план)',v:'3.2К',p:94,c:'blue'},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
let charts = {};
|
||||||
|
|
||||||
|
function seg(key) {
|
||||||
|
const s = D[key];
|
||||||
|
|
||||||
|
// Tabs
|
||||||
|
document.querySelectorAll('.tab-btn').forEach(b => b.classList.toggle('active', b.dataset.seg === key));
|
||||||
|
|
||||||
|
// KPIs — Bloomberg stock ticker card style
|
||||||
|
const g = document.getElementById('kpi-grid');
|
||||||
|
const arrowUp = '<svg class="kpi-arrow" viewBox="0 0 24 20"><path fill="currentColor" d="M12 0L24 20L0 20L12 0Z"/></svg>';
|
||||||
|
const arrowDown = '<svg class="kpi-arrow" viewBox="0 0 24 20"><path fill="currentColor" d="M12 20L0 0L24 0L12 20Z"/></svg>';
|
||||||
|
|
||||||
|
function tickerId(name) {
|
||||||
|
// Convert "Выручка" → "REVN:KPI", "AOV" → "AOV:KPI"
|
||||||
|
const short = name.toUpperCase().replace(/[^A-ZА-ЯЁ0-9]/g, '').substring(0, 6);
|
||||||
|
return `${short}:KPI`;
|
||||||
|
}
|
||||||
|
|
||||||
|
g.innerHTML = s.kpis.map((d, i) => {
|
||||||
|
const isUp = d.t === 'up';
|
||||||
|
const isDown = d.t === 'down';
|
||||||
|
const changeColor = isUp ? 'up' : isDown ? 'down' : 'neutral';
|
||||||
|
const arrow = isUp ? arrowUp : arrowDown;
|
||||||
|
const sign = isUp ? '+' : isDown ? '−' : '±';
|
||||||
|
const trendColor = isUp ? '#16a34a' : isDown ? '#e21d1d' : '#3b82f6';
|
||||||
|
return `<div class="kpi" style="transition-delay:${i*60}ms">
|
||||||
|
<div class="kpi-header">
|
||||||
|
<span class="kpi-ticker">${tickerId(d.n)}</span>
|
||||||
|
<span class="kpi-change ${changeColor}">${arrow} ${sign}${d.d}</span>
|
||||||
|
</div>
|
||||||
|
<div class="kpi-value">${d.v}</div>
|
||||||
|
<div style="display:flex;align-items:baseline;justify-content:space-between;margin-top:4px;">
|
||||||
|
<div class="kpi-trend-line" id="trend-${i}"></div>
|
||||||
|
<div class="kpi-desc">${d.p}</div>
|
||||||
|
</div>
|
||||||
|
</div>`;
|
||||||
|
}).join('');
|
||||||
|
requestAnimationFrame(() => g.querySelectorAll('.kpi').forEach(c => c.classList.add('visible')));
|
||||||
|
|
||||||
|
// Bloomberg table — channels + marketing
|
||||||
|
const bArrowUp = '<svg class="b-arrow" viewBox="0 0 24 20"><path fill="currentColor" d="M12 0L24 20L0 20L12 0Z"/></svg>';
|
||||||
|
const bArrowDown = '<svg class="b-arrow" viewBox="0 0 24 20"><path fill="currentColor" d="M12 20L0 0L24 0L12 20Z"/></svg>';
|
||||||
|
const bArrowNeutral = '<svg class="b-arrow" viewBox="0 0 24 20"><path fill="currentColor" d="M12 0L24 20L0 20L12 0Z"/></svg>';
|
||||||
|
function changeCell(val, t) {
|
||||||
|
const cls = t === 'up' ? 'up' : t === 'down' ? 'down' : 'neutral';
|
||||||
|
const arrow = t === 'up' ? bArrowUp : t === 'down' ? bArrowDown : bArrowNeutral;
|
||||||
|
const sign = t === 'up' ? '+' : t === 'down' ? '−' : '±';
|
||||||
|
return `<div class="b-change ${cls}">${arrow} ${sign}${val}</div>`;
|
||||||
|
}
|
||||||
|
const channels = [
|
||||||
|
{ id:'SEO:CH', name:'SEO-трафик', value:'1.2М ₽', change:'18', t:'up' },
|
||||||
|
{ id:'PPC:CH', name:'Контекстная реклама', value:'980К ₽', change:'12', t:'up' },
|
||||||
|
{ id:'SMM:CH', name:'Соцсети', value:'640К ₽', change:'−3', t:'down' },
|
||||||
|
{ id:'EMAIL:CH',name:'Email-рассылки', value:'420К ₽', change:'8', t:'up' },
|
||||||
|
{ id:'ORG:CH', name:'Органический', value:'380К ₽', change:'2', t:'up' },
|
||||||
|
{ id:'REF:CH', name:'Реферальный', value:'156К ₽', change:'24', t:'up' },
|
||||||
|
{ id:'AFF:CH', name:'Партнёрские', value:'98К ₽', change:'−12', t:'down' },
|
||||||
|
];
|
||||||
|
const marketing = [
|
||||||
|
{ id:'CAC', name:'Стоимость клиента', value:'680 ₽', change:'8', t:'down' },
|
||||||
|
{ id:'AOV', name:'Ср. чек', value:'4 820 ₽', change:'3', t:'up' },
|
||||||
|
{ id:'CVR', name:'Конверсия', value:'3.8%', change:'0.5', t:'up' },
|
||||||
|
{ id:'CLV', name:'Пож. ценность', value:'12 400 ₽', change:'18', t:'up' },
|
||||||
|
{ id:'ROAS', name:'ROAS', value:'4.2×', change:'15', t:'up' },
|
||||||
|
{ id:'Bounce', name:'Показ. отказов', value:'32%', change:'1', t:'down' },
|
||||||
|
];
|
||||||
|
|
||||||
|
function renderTable(body, data) {
|
||||||
|
body.innerHTML = data.map((d, i) => `
|
||||||
|
<tr class="b-row" style="animation-delay:${i*40}ms">
|
||||||
|
<td class="b-follow"><button class="b-follow-btn" title="Follow">+</button></td>
|
||||||
|
<td class="b-id">${d.id}</td>
|
||||||
|
<td class="b-name">${d.name}</td>
|
||||||
|
<td class="b-value">${d.value}</td>
|
||||||
|
<td>${changeCell(d.change, d.t)}</td>
|
||||||
|
</tr>`).join('');
|
||||||
|
// Follow toggle
|
||||||
|
body.querySelectorAll('.b-follow-btn').forEach(btn => {
|
||||||
|
btn.addEventListener('click', () => btn.classList.toggle('active'));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
const tbody1 = document.querySelector('#b-table-channels tbody');
|
||||||
|
const tbody2 = document.querySelector('#b-table-marketing tbody');
|
||||||
|
if (tbody1) renderTable(tbody1, channels);
|
||||||
|
if (tbody2) renderTable(tbody2, marketing);
|
||||||
|
|
||||||
|
// Mini trend lines inside KPI cards (Bloomberg ticker style)
|
||||||
|
const trendColors = s.kpis.map(d => d.t === 'up' ? '#16a34a' : d.t === 'down' ? '#e21d1d' : '#3b82f6');
|
||||||
|
s.kpis.forEach((d, i) => {
|
||||||
|
if (d.spark) {
|
||||||
|
const trendEl = document.getElementById(`trend-${i}`);
|
||||||
|
if (!trendEl) return;
|
||||||
|
const trendChart = echarts.init(trendEl, null, { width: 50, height: 20, renderer: 'canvas' });
|
||||||
|
trendChart.setOption({
|
||||||
|
grid: { left: 0, right: 0, top: 2, bottom: 2 },
|
||||||
|
xAxis: { type: 'category', show: false, data: d.spark },
|
||||||
|
yAxis: { type: 'value', show: false },
|
||||||
|
series: [{
|
||||||
|
type: 'line', data: d.spark, smooth: 0.5, symbol: 'none',
|
||||||
|
lineStyle: { width: 1.5, color: trendColors[i] },
|
||||||
|
}],
|
||||||
|
animationDuration: 600,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Main chart
|
||||||
|
document.getElementById('mc-title').textContent = s.mc.title;
|
||||||
|
document.getElementById('mc-sub').textContent = s.mc.sub;
|
||||||
|
const mcEl = document.getElementById('mc-canvas');
|
||||||
|
if (!charts.mc) charts.mc = echarts.init(mcEl);
|
||||||
|
charts.mc.clear();
|
||||||
|
let mcOpt;
|
||||||
|
if (s.mc.type === 'dual') {
|
||||||
|
mcOpt = {
|
||||||
|
tooltip: { trigger: 'axis', backgroundColor: '#161616', borderColor: '#262626', textStyle: { color: '#f4f4f4', fontSize: 12 } },
|
||||||
|
legend: { data: ['Доход', 'Расход'], textStyle: { color: '#6f6f6f', fontSize: 11 }, top: 0, itemWidth: 12, itemHeight: 2 },
|
||||||
|
grid: { left: 48, right: 20, top: 32, bottom: 28 },
|
||||||
|
xAxis: {
|
||||||
|
type: 'category', data: s.mc.labels,
|
||||||
|
axisLine: { lineStyle: { color: '#262626' } },
|
||||||
|
axisLabel: { color: '#6f6f6f', fontSize: 11 },
|
||||||
|
axisTick: { show: false },
|
||||||
|
},
|
||||||
|
yAxis: {
|
||||||
|
type: 'value',
|
||||||
|
splitLine: { lineStyle: { color: '#1f1f1f' } },
|
||||||
|
axisLabel: { color: '#6f6f6f', fontSize: 11, formatter: '{value}М' },
|
||||||
|
},
|
||||||
|
series: [
|
||||||
|
{
|
||||||
|
name: 'Доход', type: 'line', data: s.mc.rev, smooth: 0.4, symbol: 'none',
|
||||||
|
lineStyle: { width: 2.5, color: '#16a34a' },
|
||||||
|
areaStyle: {
|
||||||
|
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
||||||
|
{ offset: 0, color: 'rgba(22,163,74,0.15)' },
|
||||||
|
{ offset: 1, color: 'rgba(22,163,74,0.01)' }
|
||||||
|
])
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Расход', type: 'line', data: s.mc.ads, smooth: 0.4, symbol: 'none',
|
||||||
|
lineStyle: { width: 1.5, color: '#0f6fff', type: 'dashed' },
|
||||||
|
},
|
||||||
|
],
|
||||||
|
animationDuration: 500,
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
mcOpt = {
|
||||||
|
tooltip: { trigger: 'axis', backgroundColor: '#161616', borderColor: '#262626', textStyle: { color: '#f4f4f4', fontSize: 12 } },
|
||||||
|
legend: { data: ['План', 'Факт'], textStyle: { color: '#6f6f6f', fontSize: 11 }, top: 0, itemWidth: 12, itemHeight: 14 },
|
||||||
|
grid: { left: 48, right: 20, top: 32, bottom: 28 },
|
||||||
|
xAxis: {
|
||||||
|
type: 'category', data: s.mc.labels,
|
||||||
|
axisLine: { lineStyle: { color: '#262626' } },
|
||||||
|
axisLabel: { color: '#6f6f6f', fontSize: 11 },
|
||||||
|
},
|
||||||
|
yAxis: {
|
||||||
|
type: 'value',
|
||||||
|
splitLine: { lineStyle: { color: '#1f1f1f' } },
|
||||||
|
axisLabel: { color: '#6f6f6f', fontSize: 11, formatter: '{value}К' },
|
||||||
|
},
|
||||||
|
series: [
|
||||||
|
{ name: 'План', type: 'bar', data: s.mc.plan, barWidth: '30%', itemStyle: { color: 'rgba(15,111,255,0.1)' } },
|
||||||
|
{ name: 'Факт', type: 'bar', data: s.mc.fact, barWidth: '30%', itemStyle: { color: '#0f6fff' } },
|
||||||
|
],
|
||||||
|
animationDuration: 500,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
charts.mc.setOption(mcOpt);
|
||||||
|
|
||||||
|
// Side chart
|
||||||
|
document.getElementById('sc-title').textContent = s.sc.title;
|
||||||
|
document.getElementById('sc-sub').textContent = s.sc.sub;
|
||||||
|
const scData = s.sc.data.slice().reverse();
|
||||||
|
const scColors = ['#0f6fff', '#3d8eff', '#16a34a', '#06b6d4', '#a855f7', '#eac518'];
|
||||||
|
if (!charts.sc) charts.sc = echarts.init(document.getElementById('sc-canvas'));
|
||||||
|
charts.sc.clear();
|
||||||
|
charts.sc.setOption({
|
||||||
|
grid: { left: 90, right: 28, top: 8, bottom: 8 },
|
||||||
|
xAxis: {
|
||||||
|
type: 'value',
|
||||||
|
splitLine: { lineStyle: { color: '#1f1f1f' } },
|
||||||
|
axisLabel: { color: '#6f6f6f', fontSize: 10, formatter: '{value}%' },
|
||||||
|
},
|
||||||
|
yAxis: {
|
||||||
|
type: 'category', data: scData.map(d => d.n),
|
||||||
|
axisLine: { lineStyle: { color: '#262626' } },
|
||||||
|
axisLabel: { color: '#a6a6a6', fontSize: 11 },
|
||||||
|
},
|
||||||
|
series: [{
|
||||||
|
type: 'bar', data: scData.map((d, i) => ({
|
||||||
|
value: d.v,
|
||||||
|
itemStyle: {
|
||||||
|
color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [
|
||||||
|
{ offset: 0, color: scColors[i % scColors.length] + '66' },
|
||||||
|
{ offset: 1, color: scColors[i % scColors.length] }
|
||||||
|
])
|
||||||
|
}
|
||||||
|
})),
|
||||||
|
barWidth: 28,
|
||||||
|
}],
|
||||||
|
animationDuration: 500,
|
||||||
|
});
|
||||||
|
|
||||||
|
// Funnel
|
||||||
|
document.getElementById('c1-title').textContent = s.c1.title;
|
||||||
|
document.getElementById('c1-sub').textContent = s.c1.sub;
|
||||||
|
const fc = ['#0f6fff', '#3d8eff', '#16a34a', '#e21d1d'];
|
||||||
|
if (!charts.c1) charts.c1 = echarts.init(document.getElementById('c1-canvas'));
|
||||||
|
charts.c1.clear();
|
||||||
|
charts.c1.setOption({
|
||||||
|
series: [{
|
||||||
|
type: 'funnel', left: '8%', bottom: 5, width: '84%', min: 0, max: s.c1.data[0].v,
|
||||||
|
minSize: '0%', maxSize: '100%', sort: 'descending', gap: 2,
|
||||||
|
label: { show: true, position: 'inside', color: '#f4f4f4', fontSize: 11, formatter: '{b}\n{d}%' },
|
||||||
|
labelLine: { show: false },
|
||||||
|
itemStyle: { borderColor: '#161616', borderWidth: 2 },
|
||||||
|
data: s.c1.data.map((d, i) => ({ name: d.n, value: d.v, itemStyle: { color: fc[i % fc.length] } })),
|
||||||
|
}],
|
||||||
|
animationDuration: 500,
|
||||||
|
});
|
||||||
|
|
||||||
|
// Second chart
|
||||||
|
document.getElementById('c2-title').textContent = s.c2.title;
|
||||||
|
document.getElementById('c2-sub').textContent = s.c2.sub;
|
||||||
|
const c2 = s.c2;
|
||||||
|
const isPie = c2.labels && c2.data.reduce((a, b) => a + b, 0) <= 100;
|
||||||
|
const pc = ['#0f6fff', '#16a34a', '#eac518', '#a855f7', '#e21d1d'];
|
||||||
|
if (!charts.c2) charts.c2 = echarts.init(document.getElementById('c2-canvas'));
|
||||||
|
charts.c2.clear();
|
||||||
|
if (isPie) {
|
||||||
|
charts.c2.setOption({
|
||||||
|
series: [{
|
||||||
|
type: 'pie', radius: ['40%', '65%'], center: ['50%', '55%'],
|
||||||
|
itemStyle: { borderRadius: 0, borderColor: '#161616', borderWidth: 2 },
|
||||||
|
label: { show: false }, labelLine: { show: false },
|
||||||
|
data: c2.labels.map((l, i) => ({ name: l, value: c2.data[i], itemStyle: { color: pc[i % pc.length] } })),
|
||||||
|
}],
|
||||||
|
animationDuration: 500,
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
charts.c2.setOption({
|
||||||
|
grid: { left: 60, right: 16, top: 8, bottom: 28 },
|
||||||
|
xAxis: {
|
||||||
|
type: 'value',
|
||||||
|
splitLine: { lineStyle: { color: '#1f1f1f' } },
|
||||||
|
axisLabel: { color: '#6f6f6f', fontSize: 10, formatter: '{value}%' },
|
||||||
|
},
|
||||||
|
yAxis: {
|
||||||
|
type: 'category', data: c2.labels,
|
||||||
|
axisLine: { lineStyle: { color: '#262626' } },
|
||||||
|
axisLabel: { color: '#a6a6a6', fontSize: 11 },
|
||||||
|
},
|
||||||
|
series: [{
|
||||||
|
type: 'bar', data: c2.data.map(v => ({
|
||||||
|
value: v,
|
||||||
|
itemStyle: { color: v >= 100 ? '#16a34a' : '#eac518' }
|
||||||
|
})),
|
||||||
|
barWidth: 24,
|
||||||
|
}],
|
||||||
|
animationDuration: 500,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Metrics list
|
||||||
|
const ml = document.getElementById('metric-list');
|
||||||
|
ml.innerHTML = s.metrics.map(m => `
|
||||||
|
<div class="metric-item">
|
||||||
|
<span class="m-label">${m.l}</span>
|
||||||
|
<span class="m-value">${m.v}</span>
|
||||||
|
<div class="m-bar"><div class="m-fill ${m.c}" data-p="${m.p}"></div></div>
|
||||||
|
</div>`).join('');
|
||||||
|
requestAnimationFrame(() => setTimeout(() => {
|
||||||
|
ml.querySelectorAll('.m-fill').forEach(f => f.style.width = f.dataset.p + '%');
|
||||||
|
}, 100));
|
||||||
|
}
|
||||||
|
|
||||||
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
|
document.getElementById('tabs').addEventListener('click', e => {
|
||||||
|
const b = e.target.closest('.tab-btn');
|
||||||
|
if (!b) return;
|
||||||
|
seg(b.dataset.seg);
|
||||||
|
});
|
||||||
|
seg('ecom');
|
||||||
|
|
||||||
|
function tick() {
|
||||||
|
const n = new Date();
|
||||||
|
document.getElementById('clock').textContent =
|
||||||
|
String(n.getHours()).padStart(2, '0') + ':' + String(n.getMinutes()).padStart(2, '0') + ':' + String(n.getSeconds()).padStart(2, '0');
|
||||||
|
}
|
||||||
|
tick(); setInterval(tick, 1000);
|
||||||
|
new ResizeObserver(() => Object.values(charts).forEach(c => c.resize())).observe(document.querySelector('.charts-grid'));
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
Whitespace-only changes.
Whitespace-only changes.
Whitespace-only changes.
Whitespace-only changes.
@@ -0,0 +1,531 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ru">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>ROI24 — Matrix Tunnel Hero</title>
|
||||||
|
<link href="https://fonts.cdnfonts.com/css/inter" rel="stylesheet">
|
||||||
|
<link href="https://fonts.cdnfonts.com/css/jetbrains-mono" rel="stylesheet">
|
||||||
|
<style>
|
||||||
|
:root {
|
||||||
|
--bg: #0a0a0a;
|
||||||
|
--text: #f5f5f5;
|
||||||
|
--text-sec: #a1a1aa;
|
||||||
|
--text-dim: #52525b;
|
||||||
|
--accent: #22c55e;
|
||||||
|
--accent-dim: rgba(34,197,94,0.12);
|
||||||
|
--accent-glow: rgba(34,197,94,0.3);
|
||||||
|
--mono: 'JetBrains Mono', monospace;
|
||||||
|
--font: 'Inter', sans-serif;
|
||||||
|
}
|
||||||
|
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
|
||||||
|
html, body {
|
||||||
|
background: var(--bg); color: var(--text); font-family: var(--font);
|
||||||
|
overflow: hidden; height: 100vh;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stage {
|
||||||
|
position: relative; width: 100%; height: 100vh; overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ── Matrix Tunnel Canvas ── */
|
||||||
|
#matrix-canvas {
|
||||||
|
position: absolute; inset: 0; z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ── FX Layer ── */
|
||||||
|
.fx-layer {
|
||||||
|
position: absolute; inset: 0; pointer-events: none; z-index: 2;
|
||||||
|
}
|
||||||
|
.fx-layer::before {
|
||||||
|
content: ''; position: absolute; inset: 0;
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.03'/%3E%3C/svg%3E");
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
.goo {
|
||||||
|
position: absolute; top: 50%; left: 50%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
width: 600px; height: 600px; border-radius: 50%;
|
||||||
|
background: radial-gradient(circle,
|
||||||
|
rgba(34,197,94,0.06) 0%,
|
||||||
|
rgba(34,197,94,0.02) 40%,
|
||||||
|
transparent 70%
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ── Radial speed lines ── */
|
||||||
|
.radial-lines {
|
||||||
|
position: absolute; inset: 0; pointer-events: none;
|
||||||
|
}
|
||||||
|
.radial-line {
|
||||||
|
position: absolute; top: 50%; left: 50%;
|
||||||
|
height: 1px;
|
||||||
|
background: linear-gradient(90deg,
|
||||||
|
rgba(34,197,94,0.1) 0%,
|
||||||
|
rgba(34,197,94,0.04) 60%,
|
||||||
|
transparent 100%
|
||||||
|
);
|
||||||
|
transform-origin: left center;
|
||||||
|
}
|
||||||
|
.radial-line.fast {
|
||||||
|
background: linear-gradient(90deg,
|
||||||
|
rgba(34,197,94,0.18) 0%,
|
||||||
|
rgba(34,197,94,0.06) 50%,
|
||||||
|
transparent 100%
|
||||||
|
);
|
||||||
|
height: 1.5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ── Content overlay ── */
|
||||||
|
.content {
|
||||||
|
position: absolute; inset: 0; z-index: 10;
|
||||||
|
display: flex; flex-direction: column;
|
||||||
|
align-items: center; justify-content: center;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-headline {
|
||||||
|
text-align: center; margin-bottom: 24px;
|
||||||
|
pointer-events: auto;
|
||||||
|
}
|
||||||
|
.hero-headline .tag {
|
||||||
|
display: inline-flex; align-items: center; gap: 6px;
|
||||||
|
font-family: var(--mono); font-size: 11px; font-weight: 600;
|
||||||
|
color: var(--accent); background: var(--accent-dim);
|
||||||
|
border: 1px solid rgba(34,197,94,0.2);
|
||||||
|
border-radius: 20px; padding: 4px 14px;
|
||||||
|
margin-bottom: 20px; letter-spacing: 0.05em; text-transform: uppercase;
|
||||||
|
}
|
||||||
|
.hero-headline .tag .dot {
|
||||||
|
width: 6px; height: 6px; background: var(--accent);
|
||||||
|
border-radius: 50%; box-shadow: 0 0 6px var(--accent-glow);
|
||||||
|
animation: pulse 2s ease-in-out infinite;
|
||||||
|
}
|
||||||
|
.hero-headline h1 {
|
||||||
|
font-size: clamp(2rem, 5vw, 3.5rem);
|
||||||
|
font-weight: 800; letter-spacing: -0.03em;
|
||||||
|
line-height: 1.15; margin-bottom: 16px;
|
||||||
|
background: linear-gradient(135deg, #ffffff 0%, #a1a1aa 100%);
|
||||||
|
-webkit-background-clip: text; -webkit-text-fill-color: transparent;
|
||||||
|
background-clip: text;
|
||||||
|
}
|
||||||
|
.hero-headline h1 .accent {
|
||||||
|
background: linear-gradient(135deg, var(--accent) 0%, #4ade80 100%);
|
||||||
|
-webkit-background-clip: text; -webkit-text-fill-color: transparent;
|
||||||
|
background-clip: text;
|
||||||
|
}
|
||||||
|
.hero-headline p {
|
||||||
|
font-size: clamp(0.9rem, 1.5vw, 1.1rem);
|
||||||
|
color: var(--text-sec); max-width: 560px;
|
||||||
|
margin: 0 auto 28px; line-height: 1.6;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cta-group {
|
||||||
|
display: flex; gap: 12px; align-items: center;
|
||||||
|
pointer-events: auto;
|
||||||
|
}
|
||||||
|
.cta-primary {
|
||||||
|
display: inline-flex; align-items: center; gap: 8px;
|
||||||
|
padding: 12px 28px;
|
||||||
|
background: var(--accent);
|
||||||
|
color: #0a0a0a;
|
||||||
|
font-family: var(--mono); font-size: 13px; font-weight: 700;
|
||||||
|
border: none; border-radius: 10px;
|
||||||
|
cursor: pointer; letter-spacing: 0.02em;
|
||||||
|
box-shadow: 0 0 20px rgba(34,197,94,0.25);
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.cta-primary:hover {
|
||||||
|
background: #4ade80;
|
||||||
|
box-shadow: 0 0 30px rgba(34,197,94,0.4);
|
||||||
|
transform: translateY(-1px);
|
||||||
|
}
|
||||||
|
.cta-secondary {
|
||||||
|
display: inline-flex; align-items: center; gap: 6px;
|
||||||
|
padding: 12px 24px;
|
||||||
|
background: transparent;
|
||||||
|
color: var(--text-sec);
|
||||||
|
font-family: var(--mono); font-size: 13px; font-weight: 500;
|
||||||
|
border: 1px solid rgba(255,255,255,0.1);
|
||||||
|
border-radius: 10px;
|
||||||
|
cursor: pointer; letter-spacing: 0.02em;
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.cta-secondary:hover {
|
||||||
|
color: var(--text); border-color: rgba(255,255,255,0.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ── KPI Cards ── */
|
||||||
|
.kpi-card {
|
||||||
|
position: absolute;
|
||||||
|
background: rgba(10,10,10,0.85);
|
||||||
|
backdrop-filter: blur(8px);
|
||||||
|
border: 1px solid rgba(34,197,94,0.15);
|
||||||
|
border-radius: 12px;
|
||||||
|
padding: 14px 18px;
|
||||||
|
pointer-events: auto;
|
||||||
|
min-width: 140px;
|
||||||
|
box-shadow: 0 4px 24px rgba(0,0,0,0.4);
|
||||||
|
transition: border-color 0.3s ease, box-shadow 0.3s ease;
|
||||||
|
opacity: 0;
|
||||||
|
animation: cardIn 0.6s ease forwards;
|
||||||
|
}
|
||||||
|
.kpi-card:hover {
|
||||||
|
border-color: rgba(34,197,94,0.35);
|
||||||
|
box-shadow: 0 0 20px rgba(34,197,94,0.15);
|
||||||
|
}
|
||||||
|
.kpi-card .kpi-label {
|
||||||
|
font-family: var(--mono); font-size: 9px; font-weight: 600;
|
||||||
|
color: var(--text-dim); text-transform: uppercase;
|
||||||
|
letter-spacing: 0.1em; margin-bottom: 6px;
|
||||||
|
}
|
||||||
|
.kpi-card .kpi-value {
|
||||||
|
font-family: var(--mono); font-size: 22px; font-weight: 700;
|
||||||
|
color: var(--accent); margin-bottom: 4px; line-height: 1;
|
||||||
|
}
|
||||||
|
.kpi-card .kpi-sub {
|
||||||
|
font-family: var(--mono); font-size: 10px;
|
||||||
|
color: var(--text-dim);
|
||||||
|
}
|
||||||
|
.kpi-card .kpi-trend {
|
||||||
|
display: inline-flex; align-items: center; gap: 3px;
|
||||||
|
font-family: var(--mono); font-size: 10px; font-weight: 600;
|
||||||
|
padding: 2px 6px; border-radius: 4px;
|
||||||
|
margin-top: 6px;
|
||||||
|
}
|
||||||
|
.kpi-card .kpi-trend.up { color: var(--accent); background: var(--accent-dim); }
|
||||||
|
.kpi-card .kpi-trend.down { color: var(--red); background: rgba(239,68,68,0.12); }
|
||||||
|
|
||||||
|
.scanlines {
|
||||||
|
position: absolute; inset: 0; z-index: 4;
|
||||||
|
pointer-events: none;
|
||||||
|
background: repeating-linear-gradient(
|
||||||
|
0deg, transparent, transparent 2px,
|
||||||
|
rgba(0,0,0,0.03) 2px, rgba(0,0,0,0.03) 4px
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes pulse {
|
||||||
|
0%,100% { box-shadow: 0 0 6px var(--accent-glow); }
|
||||||
|
50% { box-shadow: 0 0 14px rgba(34,197,94,0.25); }
|
||||||
|
}
|
||||||
|
@keyframes cardIn {
|
||||||
|
from { opacity:0; transform: scale(0.85) translateY(15px); }
|
||||||
|
to { opacity:1; transform: scale(1) translateY(0); }
|
||||||
|
}
|
||||||
|
|
||||||
|
@media(max-width:768px){
|
||||||
|
.kpi-card { min-width: 110px; padding: 10px 14px; }
|
||||||
|
.kpi-card .kpi-value { font-size: 18px; }
|
||||||
|
.cta-group { flex-direction: column; }
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="stage">
|
||||||
|
<canvas id="matrix-canvas"></canvas>
|
||||||
|
<div class="fx-layer">
|
||||||
|
<div class="goo"></div>
|
||||||
|
<div class="radial-lines" id="radial-lines"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- KPI Cards -->
|
||||||
|
<div class="kpi-card" id="kpi-cpa">
|
||||||
|
<div class="kpi-label">CPA</div>
|
||||||
|
<div class="kpi-value" data-target="890" data-suffix=" ₽">0 ₽</div>
|
||||||
|
<div class="kpi-sub">средняя продажа</div>
|
||||||
|
<div class="kpi-trend up">↓ 5%</div>
|
||||||
|
</div>
|
||||||
|
<div class="kpi-card" id="kpi-roi">
|
||||||
|
<div class="kpi-label">ROI</div>
|
||||||
|
<div class="kpi-value" data-target="91.8" data-suffix="%" data-decimals="1">0%</div>
|
||||||
|
<div class="kpi-sub">возврат инвестиций</div>
|
||||||
|
<div class="kpi-trend up">↑ 8%</div>
|
||||||
|
</div>
|
||||||
|
<div class="kpi-card" id="kpi-conversion">
|
||||||
|
<div class="kpi-label">Конверсия</div>
|
||||||
|
<div class="kpi-value" data-target="2.8" data-suffix="%" data-decimals="1">0%</div>
|
||||||
|
<div class="kpi-sub">заявка → продажа</div>
|
||||||
|
<div class="kpi-trend up">↑ 0.3%</div>
|
||||||
|
</div>
|
||||||
|
<div class="kpi-card" id="kpi-ltv">
|
||||||
|
<div class="kpi-label">LTV</div>
|
||||||
|
<div class="kpi-value" data-target="12400" data-suffix=" ₽">0 ₽</div>
|
||||||
|
<div class="kpi-sub">за 6 месяцев</div>
|
||||||
|
<div class="kpi-trend up">↑ 18%</div>
|
||||||
|
</div>
|
||||||
|
<div class="kpi-card" id="kpi-leads">
|
||||||
|
<div class="kpi-label">Лиды / мес</div>
|
||||||
|
<div class="kpi-value" data-target="44500" data-suffix="">0</div>
|
||||||
|
<div class="kpi-sub">за 30 дней</div>
|
||||||
|
<div class="kpi-trend up">↑ 15%</div>
|
||||||
|
</div>
|
||||||
|
<div class="kpi-card" id="kpi-revenue">
|
||||||
|
<div class="kpi-label">Выручка</div>
|
||||||
|
<div class="kpi-value" data-target="2051857" data-suffix=" ₽">0 ₽</div>
|
||||||
|
<div class="kpi-sub">за 30 дней</div>
|
||||||
|
<div class="kpi-trend up">↑ 12%</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="content">
|
||||||
|
<div class="hero-headline">
|
||||||
|
<div class="tag"><span class="dot"></span>ROI24 — Attribution Analytics</div>
|
||||||
|
<h1>Управляйте бизнесом<br>на основе <span class="accent">данных</span></h1>
|
||||||
|
<p>Автоматический анализ рекламных расходов. Каждый рубль конвертируется в прибыль. CPA, LTV, ROI — в реальном времени.</p>
|
||||||
|
<div class="cta-group">
|
||||||
|
<a href="#" class="cta-primary">
|
||||||
|
<span>Начать бесплатно</span>
|
||||||
|
<svg width="14" height="14" fill="none" stroke="currentColor" stroke-width="2"><path d="M1 7h12M8 2l5 5-5 5"/></svg>
|
||||||
|
</a>
|
||||||
|
<a href="#" class="cta-secondary">Демо</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="scanlines"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
(function() {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
// ============================================================
|
||||||
|
// MATRIX TUNNEL — Canvas 2D 3D Projection
|
||||||
|
// ============================================================
|
||||||
|
const canvas = document.getElementById('matrix-canvas');
|
||||||
|
const ctx = canvas.getContext('2d');
|
||||||
|
let W, H, CX, CY;
|
||||||
|
|
||||||
|
function resize() {
|
||||||
|
W = window.innerWidth;
|
||||||
|
H = window.innerHeight;
|
||||||
|
canvas.width = W * Math.min(window.devicePixelRatio, 2);
|
||||||
|
canvas.height = H * Math.min(window.devicePixelRatio, 2);
|
||||||
|
canvas.style.width = W + 'px';
|
||||||
|
canvas.style.height = H + 'px';
|
||||||
|
ctx.scale(Math.min(window.devicePixelRatio, 2), Math.min(window.devicePixelRatio, 2));
|
||||||
|
CX = W / 2;
|
||||||
|
CY = H / 2;
|
||||||
|
}
|
||||||
|
resize();
|
||||||
|
|
||||||
|
// ── Tunnel Config ──
|
||||||
|
const RING_COUNT = 50;
|
||||||
|
const CHARS_PER_RING = 64;
|
||||||
|
const TUNNEL_RADIUS = 300;
|
||||||
|
const TUNNEL_DEPTH = 3000;
|
||||||
|
const FOCAL = 500;
|
||||||
|
|
||||||
|
// ── Tunnel Ring Data ──
|
||||||
|
const rings = [];
|
||||||
|
for (let r = 0; r < RING_COUNT; r++) {
|
||||||
|
const ring = { z: -r * (TUNNEL_DEPTH / RING_COUNT), chars: [] };
|
||||||
|
for (let c = 0; c < CHARS_PER_RING; c++) {
|
||||||
|
const angle = (c / CHARS_PER_RING) * Math.PI * 2;
|
||||||
|
ring.chars.push({
|
||||||
|
x: Math.cos(angle) * TUNNEL_RADIUS,
|
||||||
|
y: Math.sin(angle) * TUNNEL_RADIUS,
|
||||||
|
angle: angle,
|
||||||
|
value: Math.random() > 0.5 ? '0' : '1'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
rings.push(ring);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ── Floating particles ──
|
||||||
|
const PARTICLE_COUNT = 80;
|
||||||
|
const particles = [];
|
||||||
|
for (let i = 0; i < PARTICLE_COUNT; i++) {
|
||||||
|
particles.push({
|
||||||
|
x: (Math.random() - 0.5) * TUNNEL_RADIUS * 3,
|
||||||
|
y: (Math.random() - 0.5) * TUNNEL_RADIUS * 3,
|
||||||
|
z: -Math.random() * TUNNEL_DEPTH,
|
||||||
|
speed: 0.5 + Math.random() * 1.5,
|
||||||
|
size: 1 + Math.random() * 2
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
let zOffset = 0;
|
||||||
|
const FLOW_SPEED = 200;
|
||||||
|
|
||||||
|
function project(x, y, z) {
|
||||||
|
const scale = FOCAL / (FOCAL + z);
|
||||||
|
return {
|
||||||
|
sx: x * scale + CX,
|
||||||
|
sy: y * scale + CY,
|
||||||
|
scale: scale
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function draw(time) {
|
||||||
|
const dt = 1 / 60;
|
||||||
|
ctx.clearRect(0, 0, W, H);
|
||||||
|
|
||||||
|
// Update flow
|
||||||
|
zOffset = (zOffset + FLOW_SPEED * dt) % (TUNNEL_DEPTH / RING_COUNT);
|
||||||
|
|
||||||
|
// ── Draw tunnel rings ──
|
||||||
|
for (let r = 0; r < RING_COUNT; r++) {
|
||||||
|
const baseZ = r * (TUNNEL_DEPTH / RING_COUNT);
|
||||||
|
let z = baseZ + zOffset;
|
||||||
|
if (z > TUNNEL_DEPTH) z -= TUNNEL_DEPTH;
|
||||||
|
|
||||||
|
const depthRatio = 1 - (z / TUNNEL_DEPTH);
|
||||||
|
|
||||||
|
for (let c = 0; c < CHARS_PER_RING; c++) {
|
||||||
|
const char = rings[r].chars[c];
|
||||||
|
const px = char.x;
|
||||||
|
const py = char.y;
|
||||||
|
|
||||||
|
const p = project(px, py, z);
|
||||||
|
const fontSize = Math.max(6, 28 * p.scale);
|
||||||
|
|
||||||
|
// Distance from center in screen space
|
||||||
|
const dx = p.sx - CX;
|
||||||
|
const dy = p.sy - CY;
|
||||||
|
const distFromCenter = Math.sqrt(dx * dx + dy * dy);
|
||||||
|
|
||||||
|
// Only draw if within screen bounds
|
||||||
|
if (distFromCenter > Math.max(W, H) * 0.65) continue;
|
||||||
|
if (p.scale < 0.1) continue;
|
||||||
|
|
||||||
|
// Opacity: fade in at far end, fade out at near end
|
||||||
|
let alpha;
|
||||||
|
if (depthRatio > 0.85) {
|
||||||
|
alpha = (1 - depthRatio) / 0.15 * 0.6;
|
||||||
|
} else if (depthRatio < 0.05) {
|
||||||
|
alpha = depthRatio / 0.05 * 0.8;
|
||||||
|
} else {
|
||||||
|
alpha = 0.6 + depthRatio * 0.2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Green intensity based on depth
|
||||||
|
const green = Math.floor(180 + depthRatio * 75);
|
||||||
|
ctx.fillStyle = `rgba(34, ${green}, 94, ${alpha})`;
|
||||||
|
ctx.font = `bold ${fontSize}px JetBrains Mono, monospace`;
|
||||||
|
ctx.textAlign = 'center';
|
||||||
|
ctx.textBaseline = 'middle';
|
||||||
|
|
||||||
|
// Add glow
|
||||||
|
if (p.scale > 0.3) {
|
||||||
|
ctx.shadowColor = 'rgba(34, 197, 94, 0.3)';
|
||||||
|
ctx.shadowBlur = 4 + depthRatio * 6;
|
||||||
|
} else {
|
||||||
|
ctx.shadowColor = 'transparent';
|
||||||
|
ctx.shadowBlur = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.fillText(char.value, p.sx, p.sy);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.shadowColor = 'transparent';
|
||||||
|
ctx.shadowBlur = 0;
|
||||||
|
|
||||||
|
// ── Draw particles ──
|
||||||
|
for (const part of particles) {
|
||||||
|
part.z += part.speed * 2;
|
||||||
|
if (part.z > 100) part.z = -TUNNEL_DEPTH;
|
||||||
|
|
||||||
|
const p = project(part.x, part.y, part.z);
|
||||||
|
if (p.scale < 0.05 || p.scale > 3) continue;
|
||||||
|
|
||||||
|
const alpha = Math.min(1, p.scale * 0.5) * 0.4;
|
||||||
|
const size = Math.max(1, part.size * p.scale);
|
||||||
|
|
||||||
|
ctx.fillStyle = `rgba(34, 197, 94, ${alpha})`;
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.arc(p.sx, p.sy, size, 0, Math.PI * 2);
|
||||||
|
ctx.fill();
|
||||||
|
}
|
||||||
|
|
||||||
|
// ── Radial speed lines on canvas ──
|
||||||
|
const LINE_COUNT = 36;
|
||||||
|
for (let i = 0; i < LINE_COUNT; i++) {
|
||||||
|
const angle = (i / LINE_COUNT) * Math.PI * 2 + (time * 0.00005);
|
||||||
|
const innerR = 50;
|
||||||
|
const outerR = TUNNEL_RADIUS * 1.5;
|
||||||
|
const x1 = Math.cos(angle) * innerR + CX;
|
||||||
|
const y1 = Math.sin(angle) * innerR + CY;
|
||||||
|
const x2 = Math.cos(angle) * outerR + CX;
|
||||||
|
const y2 = Math.sin(angle) * outerR + CY;
|
||||||
|
|
||||||
|
ctx.strokeStyle = 'rgba(34, 197, 94, 0.04)';
|
||||||
|
ctx.lineWidth = 1;
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.moveTo(x1, y1);
|
||||||
|
ctx.lineTo(x2, y2);
|
||||||
|
ctx.stroke();
|
||||||
|
}
|
||||||
|
|
||||||
|
requestAnimationFrame(draw);
|
||||||
|
}
|
||||||
|
|
||||||
|
requestAnimationFrame(draw);
|
||||||
|
|
||||||
|
// ── Radial lines (DOM) ──
|
||||||
|
const linesContainer = document.getElementById('radial-lines');
|
||||||
|
for (let i = 0; i < LINE_COUNT; i++) {
|
||||||
|
const line = document.createElement('div');
|
||||||
|
const isFast = Math.random() > 0.7;
|
||||||
|
line.className = 'radial-line' + (isFast ? ' fast' : '');
|
||||||
|
line.style.width = (30 + Math.random() * 35) + 'vw';
|
||||||
|
line.style.transform = `rotate(${(i / LINE_COUNT) * 360}deg)`;
|
||||||
|
line.style.opacity = 0.2 + Math.random() * 0.4;
|
||||||
|
linesContainer.appendChild(line);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ── KPI cards stagger ──
|
||||||
|
document.querySelectorAll('.kpi-card').forEach((card, i) => {
|
||||||
|
card.style.animationDelay = `${0.3 + i * 0.12}s`;
|
||||||
|
});
|
||||||
|
|
||||||
|
// ── Animate KPI values ──
|
||||||
|
document.querySelectorAll('.kpi-value[data-target]').forEach(el => {
|
||||||
|
const target = parseFloat(el.dataset.target);
|
||||||
|
const decimals = parseInt(el.dataset.decimals) || 0;
|
||||||
|
const suffix = el.dataset.suffix || '';
|
||||||
|
const duration = 1800;
|
||||||
|
const start = performance.now();
|
||||||
|
|
||||||
|
function fmt(v) {
|
||||||
|
if (target >= 10000) return v.toLocaleString('ru-RU', { maximumFractionDigits: 0 }) + suffix;
|
||||||
|
return v.toFixed(decimals) + suffix;
|
||||||
|
}
|
||||||
|
|
||||||
|
function tick(now) {
|
||||||
|
const progress = Math.min((now - start) / duration, 1);
|
||||||
|
const ease = 1 - Math.pow(1 - progress, 3);
|
||||||
|
el.textContent = fmt(target * ease);
|
||||||
|
if (progress < 1) requestAnimationFrame(tick);
|
||||||
|
}
|
||||||
|
|
||||||
|
setTimeout(() => requestAnimationFrame(tick), 400 + Math.random() * 400);
|
||||||
|
});
|
||||||
|
|
||||||
|
// ── Mouse parallax ──
|
||||||
|
let mx = 0, my = 0;
|
||||||
|
document.addEventListener('mousemove', (e) => {
|
||||||
|
mx = (e.clientX / W - 0.5) * 0.3;
|
||||||
|
my = (e.clientY / H - 0.5) * 0.3;
|
||||||
|
});
|
||||||
|
|
||||||
|
function updateParallax() {
|
||||||
|
canvas.style.transform = `translate(${mx * 10}px, ${my * 10}px)`;
|
||||||
|
requestAnimationFrame(updateParallax);
|
||||||
|
}
|
||||||
|
requestAnimationFrame(updateParallax);
|
||||||
|
|
||||||
|
// ── Resize ──
|
||||||
|
window.addEventListener('resize', () => {
|
||||||
|
ctx.setTransform(1, 0, 0, 1, 0, 0);
|
||||||
|
resize();
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
+412
@@ -0,0 +1,412 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ru">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>ROI24 — Hero Preview</title>
|
||||||
|
<link rel="preconnect" href="https://fonts.cdnfonts.com">
|
||||||
|
<link href="https://fonts.cdnfonts.com/css/inter" rel="stylesheet">
|
||||||
|
<link href="https://fonts.cdnfonts.com/css/jetbrains-mono" rel="stylesheet">
|
||||||
|
<style>
|
||||||
|
/* ============================================================
|
||||||
|
DESIGN TOKENS
|
||||||
|
============================================================ */
|
||||||
|
:root {
|
||||||
|
--bg: #0a0a0a;
|
||||||
|
--surface: #111111;
|
||||||
|
--card: #161618;
|
||||||
|
--border: rgba(255,255,255,0.06);
|
||||||
|
--border-hover: rgba(255,255,255,0.12);
|
||||||
|
--text: #f5f5f5;
|
||||||
|
--text-sec: #a1a1aa;
|
||||||
|
--text-dim: #52525b;
|
||||||
|
--accent: #22c55e;
|
||||||
|
--accent-dim: rgba(34,197,94,0.12);
|
||||||
|
--accent-glow: rgba(34,197,94,0.18);
|
||||||
|
--blue: #3b82f6;
|
||||||
|
--blue-dim: rgba(59,130,246,0.12);
|
||||||
|
--amber: #f59e0b;
|
||||||
|
--red: #ef4444;
|
||||||
|
--red-dim: rgba(239,68,68,0.12);
|
||||||
|
--font: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
||||||
|
--mono: 'JetBrains Mono', 'SF Mono', monospace;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================================
|
||||||
|
RESET
|
||||||
|
============================================================ */
|
||||||
|
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
|
||||||
|
body {
|
||||||
|
background: var(--bg); color: var(--text); font-family: var(--font);
|
||||||
|
line-height: 1.6; overflow-x: hidden; min-height: 100vh;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================================
|
||||||
|
ANIMATED HERO BACKGROUND (composio.dev style)
|
||||||
|
============================================================ */
|
||||||
|
.hero-bg {
|
||||||
|
position: fixed; inset: 0; z-index: 0; pointer-events: none;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Layer 1: Noise texture */
|
||||||
|
.hero-bg::before {
|
||||||
|
content: ''; position: absolute; inset: 0;
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.025'/%3E%3C/svg%3E");
|
||||||
|
opacity: 0.5; z-index: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Layer 2: Big radial gradient blob — статичное brand-glow */
|
||||||
|
.hero-glow {
|
||||||
|
position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);
|
||||||
|
width: 900px; height: 900px; border-radius: 50%;
|
||||||
|
background: radial-gradient(
|
||||||
|
circle at 50% 50%,
|
||||||
|
var(--accent-glow) 0%,
|
||||||
|
var(--accent-dim) 25%,
|
||||||
|
rgba(34,197,94,0.02) 55%,
|
||||||
|
transparent 70%
|
||||||
|
);
|
||||||
|
z-index: 1;
|
||||||
|
pointer-events: none;
|
||||||
|
animation: glowPulse 4s ease-in-out infinite;
|
||||||
|
}
|
||||||
|
@keyframes glowPulse {
|
||||||
|
0%, 100% { opacity: 0.7; transform: translate(-50%, -50%) scale(1); }
|
||||||
|
50% { opacity: 1; transform: translate(-50%, -50%) scale(1.05); }
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Layer 3: Animated gradient sweep */
|
||||||
|
.hero-sweep {
|
||||||
|
position: absolute; inset: 0; z-index: 1;
|
||||||
|
background: linear-gradient(
|
||||||
|
90deg,
|
||||||
|
transparent 0%,
|
||||||
|
transparent 28%,
|
||||||
|
rgba(255,255,255,0.04) 40%,
|
||||||
|
rgba(34,197,94,0.15) 50%,
|
||||||
|
rgba(255,255,255,0.03) 60%,
|
||||||
|
transparent 72%,
|
||||||
|
transparent 100%
|
||||||
|
);
|
||||||
|
background-size: 200% 100%;
|
||||||
|
/* position driven by JS requestAnimationFrame */
|
||||||
|
pointer-events: none;
|
||||||
|
will-change: background-position;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================================
|
||||||
|
HERO CONTAINER
|
||||||
|
============================================================ */
|
||||||
|
.hero {
|
||||||
|
position: relative; z-index: 10;
|
||||||
|
min-height: 100vh; display: flex; flex-direction: column;
|
||||||
|
align-items: center; justify-content: center;
|
||||||
|
padding: 120px 24px 80px;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================================
|
||||||
|
KPI CARDS — floating on sides
|
||||||
|
============================================================ */
|
||||||
|
.kpi-cards {
|
||||||
|
position: absolute; top: 0; left: 0; right: 0; bottom: 0;
|
||||||
|
z-index: 20; pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.kpi-card {
|
||||||
|
position: absolute;
|
||||||
|
pointer-events: auto;
|
||||||
|
background: rgba(22,22,24,0.85);
|
||||||
|
backdrop-filter: blur(12px);
|
||||||
|
border: 1px solid rgba(255,255,255,0.08);
|
||||||
|
border-radius: 14px;
|
||||||
|
padding: 16px 18px;
|
||||||
|
width: 180px;
|
||||||
|
transform: translateY(-50%);
|
||||||
|
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
|
||||||
|
}
|
||||||
|
.kpi-card:hover {
|
||||||
|
border-color: rgba(255,255,255,0.18);
|
||||||
|
transform: translateY(-50%) translateY(-3px);
|
||||||
|
box-shadow: 0 12px 40px rgba(0,0,0,0.4);
|
||||||
|
}
|
||||||
|
|
||||||
|
.kpi-card.left { left: calc(50% - 440px); }
|
||||||
|
.kpi-card.right { left: calc(50% + 260px); }
|
||||||
|
.kpi-card.l1 { top: 28%; }
|
||||||
|
.kpi-card.l2 { top: 72%; }
|
||||||
|
.kpi-card.r1 { top: 28%; }
|
||||||
|
.kpi-card.r2 { top: 72%; }
|
||||||
|
|
||||||
|
.kpi-card-label {
|
||||||
|
font-size: 10px; text-transform: uppercase; letter-spacing: 0.08em;
|
||||||
|
color: var(--text-dim); font-weight: 600; margin-bottom: 6px;
|
||||||
|
}
|
||||||
|
.kpi-card-value {
|
||||||
|
font-family: var(--mono); font-size: 22px; font-weight: 700;
|
||||||
|
line-height: 1.15; margin-bottom: 4px;
|
||||||
|
}
|
||||||
|
.kpi-card-value.green { color: var(--accent); }
|
||||||
|
.kpi-card-value.blue { color: var(--blue); }
|
||||||
|
.kpi-card-value.amber { color: var(--amber); }
|
||||||
|
|
||||||
|
.kpi-card-trend {
|
||||||
|
display: inline-flex; align-items: center; gap: 3px;
|
||||||
|
padding: 2px 6px; border-radius: 5px;
|
||||||
|
font-family: var(--mono); font-weight: 600; font-size: 10px;
|
||||||
|
}
|
||||||
|
.kpi-card-trend.up { color: var(--accent); background: var(--accent-dim); }
|
||||||
|
.kpi-card-trend.down { color: var(--red); background: var(--red-dim); }
|
||||||
|
|
||||||
|
.kpi-card-chart {
|
||||||
|
margin-top: 10px; width: 100%; height: 36px;
|
||||||
|
border-radius: 6px; overflow: hidden;
|
||||||
|
background: rgba(255,255,255,0.02);
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Mini sparkline bars */
|
||||||
|
.spark-bars {
|
||||||
|
display: flex; align-items: flex-end; gap: 3px;
|
||||||
|
height: 100%; padding: 4px 4px 0;
|
||||||
|
}
|
||||||
|
.spark-bar {
|
||||||
|
flex: 1; background: var(--accent-dim);
|
||||||
|
border-radius: 2px 2px 0 0;
|
||||||
|
transition: height 0.6s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================================
|
||||||
|
CENTER CONTENT (composio.dev style — clean, minimal bg)
|
||||||
|
============================================================ */
|
||||||
|
.hero-center {
|
||||||
|
position: relative; z-index: 30;
|
||||||
|
text-align: center; max-width: 640px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-badge {
|
||||||
|
display: inline-flex; align-items: center; gap: 8px;
|
||||||
|
padding: 6px 16px; border: 1px solid rgba(255,255,255,0.1);
|
||||||
|
border-radius: 100px; margin-bottom: 24px;
|
||||||
|
font-size: 12px; color: var(--text-sec); font-family: var(--mono);
|
||||||
|
background: rgba(255,255,255,0.02);
|
||||||
|
}
|
||||||
|
.hero-badge-dot {
|
||||||
|
width: 6px; height: 6px; background: var(--accent);
|
||||||
|
border-radius: 50%;
|
||||||
|
animation: livePulse 1.5s ease-in-out infinite;
|
||||||
|
}
|
||||||
|
@keyframes livePulse {
|
||||||
|
0%, 100% { box-shadow: 0 0 4px var(--accent); }
|
||||||
|
50% { box-shadow: 0 0 12px var(--accent); }
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-center h1 {
|
||||||
|
font-size: clamp(2rem, 6vw, 4.5rem);
|
||||||
|
font-weight: 800;
|
||||||
|
letter-spacing: -0.04em;
|
||||||
|
line-height: 1.08;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
.hero-center h1 .accent { color: var(--accent); }
|
||||||
|
|
||||||
|
.hero-center .hero-sub {
|
||||||
|
font-size: 1.125rem; color: rgba(255,255,255,0.45);
|
||||||
|
line-height: 1.65; margin-bottom: 36px; max-width: 520px;
|
||||||
|
margin-left: auto; margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-center .hero-sub .dim { color: rgba(255,255,255,0.25); }
|
||||||
|
|
||||||
|
.hero-actions {
|
||||||
|
display: flex; gap: 12px; justify-content: center;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
display: inline-flex; align-items: center; justify-content: center; gap: 8px;
|
||||||
|
padding: 16px 32px; border-radius: 100px; font-weight: 600; font-size: 0.9375rem;
|
||||||
|
cursor: pointer; border: none; transition: all 0.25s ease;
|
||||||
|
white-space: nowrap; text-decoration: none;
|
||||||
|
}
|
||||||
|
.btn-accent {
|
||||||
|
background: var(--accent); color: #000;
|
||||||
|
}
|
||||||
|
.btn-accent:hover {
|
||||||
|
background: #16a34a; color: #000;
|
||||||
|
transform: translateY(-1px);
|
||||||
|
box-shadow: 0 12px 40px rgba(34,197,94,0.25);
|
||||||
|
}
|
||||||
|
.btn-outline {
|
||||||
|
background: transparent; border: 1px solid rgba(255,255,255,0.2);
|
||||||
|
color: var(--text);
|
||||||
|
}
|
||||||
|
.btn-outline:hover {
|
||||||
|
border-color: rgba(255,255,255,0.4);
|
||||||
|
background: rgba(255,255,255,0.03);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================================
|
||||||
|
RESPONSIVE
|
||||||
|
============================================================ */
|
||||||
|
@media (max-width: 1024px) {
|
||||||
|
.kpi-cards {
|
||||||
|
position: relative; top: auto; left: auto; right: auto; bottom: auto;
|
||||||
|
display: grid; grid-template-columns: 1fr 1fr;
|
||||||
|
gap: 12px; width: 100%; max-width: 660px;
|
||||||
|
margin: 0 auto 32px;
|
||||||
|
pointer-events: auto;
|
||||||
|
}
|
||||||
|
.kpi-card {
|
||||||
|
position: static; transform: none;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.kpi-card.left, .kpi-card.right { left: auto; }
|
||||||
|
.hero { padding-top: 160px; }
|
||||||
|
.hero-glow { width: 500px; height: 500px; }
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 640px) {
|
||||||
|
.kpi-cards { grid-template-columns: 1fr; max-width: 320px; }
|
||||||
|
.hero-center h1 { font-size: clamp(1.75rem, 8vw, 2.5rem); }
|
||||||
|
.hero { padding: 140px 16px 60px; }
|
||||||
|
.btn { padding: 14px 24px; font-size: 0.875rem; }
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="hero-bg">
|
||||||
|
<div class="hero-glow"></div>
|
||||||
|
<div class="hero-sweep" id="heroSweep"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<section class="hero">
|
||||||
|
|
||||||
|
<!-- KPI cards on sides -->
|
||||||
|
<div class="kpi-cards" id="kpiCards">
|
||||||
|
<div class="kpi-card left l1">
|
||||||
|
<div class="kpi-card-label">Выручка за 30 дней</div>
|
||||||
|
<div class="kpi-card-value green">2 051 857 ₽</div>
|
||||||
|
<span class="kpi-card-trend up">↑ +15%</span>
|
||||||
|
<div class="kpi-card-chart">
|
||||||
|
<div class="spark-bars" id="spark1"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="kpi-card left l2">
|
||||||
|
<div class="kpi-card-label">CPA средний</div>
|
||||||
|
<div class="kpi-card-value blue">890 ₽</div>
|
||||||
|
<span class="kpi-card-trend down">↓ −5%</span>
|
||||||
|
<div class="kpi-card-chart">
|
||||||
|
<div class="spark-bars" id="spark2"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="kpi-card right r1">
|
||||||
|
<div class="kpi-card-label">Прибыль</div>
|
||||||
|
<div class="kpi-card-value green">981 857 ₽</div>
|
||||||
|
<span class="kpi-card-trend up">↑ +12%</span>
|
||||||
|
<div class="kpi-card-chart">
|
||||||
|
<div class="spark-bars" id="spark3"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="kpi-card right r2">
|
||||||
|
<div class="kpi-card-label">ROI рекламы</div>
|
||||||
|
<div class="kpi-card-value amber">91.8%</div>
|
||||||
|
<span class="kpi-card-trend up">↑ +5%</span>
|
||||||
|
<div class="kpi-card-chart">
|
||||||
|
<div class="spark-bars" id="spark4"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Center content -->
|
||||||
|
<div class="hero-center">
|
||||||
|
<div class="hero-badge">
|
||||||
|
<span class="hero-badge-dot"></span>
|
||||||
|
АНАЛИТИКА ДЛЯ СОБСТВЕННИКОВ
|
||||||
|
</div>
|
||||||
|
<h1>
|
||||||
|
Живые цифры<br>вашего <span class="accent">бизнеса</span>
|
||||||
|
</h1>
|
||||||
|
<p class="hero-sub">
|
||||||
|
10 ключевых метрик из 1С, CRM и банков —<br>
|
||||||
|
автоматически, без обучения, каждое утро<br>
|
||||||
|
<span class="dim">в вашем телефоне.</span>
|
||||||
|
</p>
|
||||||
|
<div class="hero-actions">
|
||||||
|
<a href="#cta" class="btn btn-accent" id="ctaBtn"
|
||||||
|
onmouseenter="accelerateBg(true)"
|
||||||
|
onmouseleave="accelerateBg(false)">
|
||||||
|
Получить демо за 3 дня
|
||||||
|
</a>
|
||||||
|
<a href="#demo" class="btn btn-outline"
|
||||||
|
onmouseenter="accelerateBg(true)"
|
||||||
|
onmouseleave="accelerateBg(false)">
|
||||||
|
Посмотреть пример
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
/* ============================================================
|
||||||
|
BACKGROUND ACCELERATION — JS-driven, smooth speed transition
|
||||||
|
============================================================ */
|
||||||
|
const sweepEl = document.getElementById('heroSweep');
|
||||||
|
let bgOffset = 100;
|
||||||
|
let bgTargetSpeed = 8; // seconds per full sweep
|
||||||
|
let bgCurrentSpeed = 8; // lerped toward target
|
||||||
|
|
||||||
|
function accelerateBg(active) {
|
||||||
|
bgTargetSpeed = active ? 1.2 : 8;
|
||||||
|
const glow = document.querySelector('.hero-glow');
|
||||||
|
if (active) {
|
||||||
|
glow.style.animation = 'none';
|
||||||
|
glow.style.opacity = '1.3';
|
||||||
|
glow.style.transform = 'translate(-50%, -50%) scale(1.08)';
|
||||||
|
glow.style.transition = 'opacity 0.4s ease, transform 0.4s ease';
|
||||||
|
} else {
|
||||||
|
glow.style.opacity = '';
|
||||||
|
glow.style.transform = '';
|
||||||
|
glow.style.animation = '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
(function bgLoop() {
|
||||||
|
// Smooth interpolation toward target speed
|
||||||
|
bgCurrentSpeed += (bgTargetSpeed - bgCurrentSpeed) * 0.04;
|
||||||
|
// Frame advance: 100% range over (speed * 60fps) frames
|
||||||
|
bgOffset += (100 / (bgCurrentSpeed * 60)) * 1.5;
|
||||||
|
if (bgOffset > 200) bgOffset -= 200;
|
||||||
|
if (bgOffset < 0) bgOffset += 200;
|
||||||
|
sweepEl.style.backgroundPosition = bgOffset.toFixed(2) + '% 50%';
|
||||||
|
requestAnimationFrame(bgLoop);
|
||||||
|
})();
|
||||||
|
|
||||||
|
/* ============================================================
|
||||||
|
SPARKLINES — tiny bars inside KPI cards
|
||||||
|
============================================================ */
|
||||||
|
function renderSpark(elId, values, color) {
|
||||||
|
const el = document.getElementById(elId);
|
||||||
|
const max = Math.max(...values);
|
||||||
|
el.innerHTML = values.map(v => {
|
||||||
|
const h = (v / max) * 100;
|
||||||
|
return `<div class="spark-bar" style="height:${h}%;background:${color}"></div>`;
|
||||||
|
}).join('');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Revenue trend (up)
|
||||||
|
renderSpark('spark1', [80,85,82,90,88,95,92,98], 'var(--accent-dim)');
|
||||||
|
// CPA trend (down = good, so bars going down)
|
||||||
|
renderSpark('spark2', [95,88,85,78,72,68,62,58], 'var(--blue-dim)');
|
||||||
|
// Profit trend (up)
|
||||||
|
renderSpark('spark3', [60,65,68,75,78,82,88,90], 'var(--accent-dim)');
|
||||||
|
// ROI trend (up)
|
||||||
|
renderSpark('spark4', [70,72,75,78,82,85,88,92], 'rgba(245,158,11,0.15)');
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
+462
@@ -0,0 +1,462 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ru">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>ROI24 — Tunnel Hero</title>
|
||||||
|
<link rel="preconnect" href="https://fonts.cdnfonts.com">
|
||||||
|
<link href="https://fonts.cdnfonts.com/css/inter" rel="stylesheet">
|
||||||
|
<link href="https://fonts.cdnfonts.com/css/jetbrains-mono" rel="stylesheet">
|
||||||
|
<style>
|
||||||
|
/* ============================================================
|
||||||
|
DESIGN TOKENS
|
||||||
|
============================================================ */
|
||||||
|
:root {
|
||||||
|
--bg: #0a0a0a;
|
||||||
|
--text: #f5f5f5;
|
||||||
|
--text-sec: #a1a1aa;
|
||||||
|
--text-dim: #52525b;
|
||||||
|
--accent: #22c55e;
|
||||||
|
--accent-dim: rgba(34,197,94,0.12);
|
||||||
|
--blue: #3b82f6;
|
||||||
|
--blue-dim: rgba(59,130,246,0.12);
|
||||||
|
--amber: #f59e0b;
|
||||||
|
--red: #ef4444;
|
||||||
|
--font: 'Inter', -apple-system, sans-serif;
|
||||||
|
--mono: 'JetBrains Mono', 'SF Mono', monospace;
|
||||||
|
}
|
||||||
|
|
||||||
|
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
|
||||||
|
body {
|
||||||
|
background: var(--bg); color: var(--text); font-family: var(--font);
|
||||||
|
overflow-x: hidden; min-height: 100vh;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================================
|
||||||
|
TUNNEL CONTAINER — perspective origin at center
|
||||||
|
============================================================ */
|
||||||
|
.tunnel {
|
||||||
|
position: relative; width: 100%; height: 100vh;
|
||||||
|
overflow: hidden;
|
||||||
|
perspective: 800px;
|
||||||
|
perspective-origin: 50% 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================================
|
||||||
|
CENTER GLOW — the light at the end of the tunnel
|
||||||
|
============================================================ */
|
||||||
|
.tunnel-glow {
|
||||||
|
position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);
|
||||||
|
width: 600px; height: 600px; border-radius: 50%;
|
||||||
|
background: radial-gradient(circle,
|
||||||
|
rgba(34,197,94,0.12) 0%,
|
||||||
|
rgba(34,197,94,0.04) 30%,
|
||||||
|
rgba(34,197,94,0.01) 55%,
|
||||||
|
transparent 70%
|
||||||
|
);
|
||||||
|
pointer-events: none; z-index: 1;
|
||||||
|
animation: glowBreath 3s ease-in-out infinite;
|
||||||
|
}
|
||||||
|
@keyframes glowBreath {
|
||||||
|
0%, 100% { opacity: 0.6; transform: translate(-50%, -50%) scale(1); }
|
||||||
|
50% { opacity: 1; transform: translate(-50%, -50%) scale(1.08); }
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================================
|
||||||
|
SPEED LINES — horizontal streaks rushing past
|
||||||
|
Three depth layers: near (fast), mid, far (slow)
|
||||||
|
============================================================ */
|
||||||
|
.speed-lines { position: absolute; inset: 0; pointer-events: none; z-index: 2; }
|
||||||
|
|
||||||
|
.speed-line {
|
||||||
|
position: absolute; height: 1px;
|
||||||
|
background: linear-gradient(90deg,
|
||||||
|
transparent 0%,
|
||||||
|
rgba(255,255,255,0.06) 30%,
|
||||||
|
rgba(34,197,94,0.15) 50%,
|
||||||
|
rgba(255,255,255,0.04) 70%,
|
||||||
|
transparent 100%
|
||||||
|
);
|
||||||
|
filter: blur(0.5px);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Near layer — thick, fast, blurred */
|
||||||
|
.speed-line.near {
|
||||||
|
height: 2px; opacity: 0.7;
|
||||||
|
filter: blur(1.5px);
|
||||||
|
background: linear-gradient(90deg,
|
||||||
|
transparent 0%,
|
||||||
|
rgba(255,255,255,0.1) 35%,
|
||||||
|
rgba(34,197,94,0.25) 50%,
|
||||||
|
rgba(255,255,255,0.06) 65%,
|
||||||
|
transparent 100%
|
||||||
|
);
|
||||||
|
}
|
||||||
|
.speed-line.mid { height: 1.5px; opacity: 0.4; filter: blur(0.8px); }
|
||||||
|
.speed-line.far { height: 1px; opacity: 0.2; filter: blur(0.3px); }
|
||||||
|
|
||||||
|
/* ============================================================
|
||||||
|
KPI CARDS — flying through the tunnel at different depths
|
||||||
|
============================================================ */
|
||||||
|
.kpi-card {
|
||||||
|
position: absolute;
|
||||||
|
background: rgba(22,22,24,0.8);
|
||||||
|
backdrop-filter: blur(8px);
|
||||||
|
border: 1px solid rgba(255,255,255,0.06);
|
||||||
|
border-radius: 12px;
|
||||||
|
padding: 14px 16px;
|
||||||
|
width: 200px;
|
||||||
|
pointer-events: none;
|
||||||
|
transform-style: preserve-3d;
|
||||||
|
transition: filter 0.3s ease;
|
||||||
|
z-index: 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Depth layers via translateZ */
|
||||||
|
.kpi-card.depth-1 { /* nearest — large, fast, blurred */
|
||||||
|
box-shadow: 0 0 40px rgba(34,197,94,0.08);
|
||||||
|
border-color: rgba(255,255,255,0.1);
|
||||||
|
}
|
||||||
|
.kpi-card.depth-2 { /* mid */
|
||||||
|
box-shadow: 0 0 20px rgba(0,0,0,0.4);
|
||||||
|
}
|
||||||
|
.kpi-card.depth-3 { /* far — small, slow, sharp */
|
||||||
|
box-shadow: none;
|
||||||
|
border-color: rgba(255,255,255,0.04);
|
||||||
|
}
|
||||||
|
|
||||||
|
.kpi-card .label {
|
||||||
|
font-size: 9px; text-transform: uppercase; letter-spacing: 0.08em;
|
||||||
|
color: var(--text-dim); font-weight: 600; margin-bottom: 4px;
|
||||||
|
}
|
||||||
|
.kpi-card .value {
|
||||||
|
font-family: var(--mono); font-weight: 700; line-height: 1.15;
|
||||||
|
margin-bottom: 3px;
|
||||||
|
}
|
||||||
|
.kpi-card .value.green { color: var(--accent); }
|
||||||
|
.kpi-card .value.blue { color: var(--blue); }
|
||||||
|
.kpi-card .value.amber { color: var(--amber); }
|
||||||
|
|
||||||
|
.kpi-card .trend {
|
||||||
|
display: inline-flex; align-items: center; gap: 3px;
|
||||||
|
padding: 2px 5px; border-radius: 4px;
|
||||||
|
font-family: var(--mono); font-weight: 600; font-size: 9px;
|
||||||
|
}
|
||||||
|
.kpi-card .trend.up { color: var(--accent); background: var(--accent-dim); }
|
||||||
|
.kpi-card .trend.down { color: var(--red); background: rgba(239,68,68,0.12); }
|
||||||
|
|
||||||
|
/* Motion blur on cards — depends on speed */
|
||||||
|
.kpi-card .trail {
|
||||||
|
position: absolute; inset: 0; border-radius: 12px;
|
||||||
|
background: inherit; opacity: 0;
|
||||||
|
pointer-events: none;
|
||||||
|
z-index: -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================================
|
||||||
|
CENTER CONTENT — the destination
|
||||||
|
============================================================ */
|
||||||
|
.hero-center {
|
||||||
|
position: absolute; top: 50%; left: 50%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
text-align: center; z-index: 30; max-width: 600px;
|
||||||
|
width: 100%; padding: 0 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-badge {
|
||||||
|
display: inline-flex; align-items: center; gap: 8px;
|
||||||
|
padding: 5px 14px; border: 1px solid rgba(255,255,255,0.1);
|
||||||
|
border-radius: 100px; margin-bottom: 20px;
|
||||||
|
font-size: 11px; color: var(--text-sec); font-family: var(--mono);
|
||||||
|
background: rgba(255,255,255,0.02);
|
||||||
|
}
|
||||||
|
.badge-dot {
|
||||||
|
width: 5px; height: 5px; background: var(--accent); border-radius: 50%;
|
||||||
|
animation: dotPulse 1.5s ease-in-out infinite;
|
||||||
|
}
|
||||||
|
@keyframes dotPulse {
|
||||||
|
0%, 100% { box-shadow: 0 0 3px var(--accent); }
|
||||||
|
50% { box-shadow: 0 0 10px var(--accent); }
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-center h1 {
|
||||||
|
font-size: clamp(1.8rem, 5vw, 4rem);
|
||||||
|
font-weight: 800; letter-spacing: -0.04em;
|
||||||
|
line-height: 1.08; margin-bottom: 16px;
|
||||||
|
}
|
||||||
|
.hero-center h1 .accent { color: var(--accent); }
|
||||||
|
|
||||||
|
.hero-center .sub {
|
||||||
|
font-size: 1rem; color: rgba(255,255,255,0.4);
|
||||||
|
line-height: 1.6; margin-bottom: 32px; max-width: 460px;
|
||||||
|
margin-left: auto; margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btns { display: flex; gap: 10px; justify-content: center; flex-wrap: wrap; }
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
display: inline-flex; align-items: center; justify-content: center; gap: 8px;
|
||||||
|
padding: 14px 28px; border-radius: 100px; font-weight: 600;
|
||||||
|
font-size: 0.9rem; cursor: pointer; border: none;
|
||||||
|
transition: all 0.25s ease; text-decoration: none;
|
||||||
|
}
|
||||||
|
.btn-accent {
|
||||||
|
background: var(--accent); color: #000;
|
||||||
|
}
|
||||||
|
.btn-accent:hover {
|
||||||
|
background: #16a34a; transform: translateY(-1px);
|
||||||
|
box-shadow: 0 12px 40px rgba(34,197,94,0.25);
|
||||||
|
}
|
||||||
|
.btn-outline {
|
||||||
|
background: transparent; border: 1px solid rgba(255,255,255,0.2);
|
||||||
|
color: var(--text);
|
||||||
|
}
|
||||||
|
.btn-outline:hover {
|
||||||
|
border-color: rgba(255,255,255,0.4);
|
||||||
|
background: rgba(255,255,255,0.03);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================================
|
||||||
|
RESPONSIVE
|
||||||
|
============================================================ */
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.kpi-card { width: 150px; padding: 10px 12px; }
|
||||||
|
.kpi-card .value { font-size: 16px; }
|
||||||
|
.speed-line.near { opacity: 0.4; }
|
||||||
|
}
|
||||||
|
@media (max-width: 480px) {
|
||||||
|
.kpi-card { width: 120px; padding: 8px 10px; }
|
||||||
|
.kpi-card .value { font-size: 14px; }
|
||||||
|
.kpi-card .label { font-size: 8px; }
|
||||||
|
.speed-line.near, .speed-line.mid { opacity: 0.25; }
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="tunnel" id="tunnel">
|
||||||
|
|
||||||
|
<!-- Center glow -->
|
||||||
|
<div class="tunnel-glow" id="tunnelGlow"></div>
|
||||||
|
|
||||||
|
<!-- Speed lines -->
|
||||||
|
<div class="speed-lines" id="speedLines"></div>
|
||||||
|
|
||||||
|
<!-- KPI cards — injected by JS -->
|
||||||
|
|
||||||
|
<!-- Center content -->
|
||||||
|
<div class="hero-center">
|
||||||
|
<div class="hero-badge">
|
||||||
|
<span class="badge-dot"></span>
|
||||||
|
АНАЛИТИКА ДЛЯ СОБСТВЕННИКОВ
|
||||||
|
</div>
|
||||||
|
<h1>Живые цифры<br>вашего <span class="accent">бизнеса</span></h1>
|
||||||
|
<p class="sub">
|
||||||
|
10 ключевых метрик из 1С, CRM и банков —<br>
|
||||||
|
автоматически, каждое утро в телефоне
|
||||||
|
</p>
|
||||||
|
<div class="btns">
|
||||||
|
<a href="#cta" class="btn btn-accent"
|
||||||
|
onmouseenter="setSpeed(1)"
|
||||||
|
onmouseleave="setSpeed(0)">
|
||||||
|
Получить демо за 3 дня
|
||||||
|
</a>
|
||||||
|
<a href="#demo" class="btn btn-outline"
|
||||||
|
onmouseenter="setSpeed(1)"
|
||||||
|
onmouseleave="setSpeed(0)">
|
||||||
|
Посмотреть пример
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
/* ============================================================
|
||||||
|
TUNNEL ENGINE — cards & speed lines fly past at variable speed
|
||||||
|
============================================================ */
|
||||||
|
|
||||||
|
const tunnel = document.getElementById('tunnel');
|
||||||
|
const speedLinesEl = document.getElementById('speedLines');
|
||||||
|
const glow = document.getElementById('tunnelGlow');
|
||||||
|
|
||||||
|
// ── SPEED STATE ──
|
||||||
|
let targetSpeed = 0; // 0 = cruise, 1 = full throttle
|
||||||
|
let currentSpeed = 0; // lerped
|
||||||
|
const CRUISE = 0.8; // baseline perpetual motion
|
||||||
|
const BOOST = 2.5; // max throttle multiplier
|
||||||
|
|
||||||
|
// ── SPEED LINES ──
|
||||||
|
const LINES_COUNT = 30;
|
||||||
|
const lines = [];
|
||||||
|
|
||||||
|
function createSpeedLines() {
|
||||||
|
speedLinesEl.innerHTML = '';
|
||||||
|
const vw = window.innerWidth;
|
||||||
|
for (let i = 0; i < LINES_COUNT; i++) {
|
||||||
|
const div = document.createElement('div');
|
||||||
|
const depthRoll = Math.random();
|
||||||
|
let cls, w;
|
||||||
|
if (depthRoll < 0.18) {
|
||||||
|
cls = 'near'; w = 80 + Math.random() * 120;
|
||||||
|
} else if (depthRoll < 0.45) {
|
||||||
|
cls = 'mid'; w = 40 + Math.random() * 80;
|
||||||
|
} else {
|
||||||
|
cls = 'far'; w = 20 + Math.random() * 40;
|
||||||
|
}
|
||||||
|
div.className = `speed-line ${cls}`;
|
||||||
|
div.style.top = Math.random() * 100 + '%';
|
||||||
|
div.style.width = w + '%';
|
||||||
|
speedLinesEl.appendChild(div);
|
||||||
|
// Start randomly across the viewport + off-screen right
|
||||||
|
const startX = -w * vw / 100 + Math.random() * (vw + w * vw / 100);
|
||||||
|
lines.push({ el: div, cls, width: w, offset: startX, speedMul: cls === 'near' ? 3.5 : cls === 'mid' ? 2 : 1 });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ── KPI CARDS ──
|
||||||
|
const CARD_DATA = [
|
||||||
|
{ label: 'Выручка за 30 дней', value: '2 051 857 ₽', trend: '↑ +15%', dir: 'up', color: 'green', depth: 1, side: 'left' },
|
||||||
|
{ label: 'CPA средний', value: '890 ₽', trend: '↓ −5%', dir: 'down', color: 'blue', depth: 2, side: 'left' },
|
||||||
|
{ label: 'ROI рекламы', value: '91.8%', trend: '↑ +5%', dir: 'up', color: 'amber', depth: 2, side: 'right' },
|
||||||
|
{ label: 'Прибыль', value: '981 857 ₽', trend: '↑ +12%', dir: 'up', color: 'green', depth: 1, side: 'right' },
|
||||||
|
{ label: 'Продажи', value: '1 247 шт', trend: '↑ +12%', dir: 'up', color: 'blue', depth: 3, side: 'left' },
|
||||||
|
{ label: 'Конверсия', value: '2.8%', trend: '↑ +0.3%',dir: 'up', color: 'amber', depth: 3, side: 'right' },
|
||||||
|
];
|
||||||
|
|
||||||
|
const cards = [];
|
||||||
|
|
||||||
|
function createCards() {
|
||||||
|
CARD_DATA.forEach((d, i) => {
|
||||||
|
const div = document.createElement('div');
|
||||||
|
div.className = `kpi-card depth-${d.depth}`;
|
||||||
|
div.innerHTML = `
|
||||||
|
<div class="label">${d.label}</div>
|
||||||
|
<div class="value ${d.color}">${d.value}</div>
|
||||||
|
<span class="trend ${d.dir}">${d.trend}</span>
|
||||||
|
`;
|
||||||
|
tunnel.appendChild(div);
|
||||||
|
|
||||||
|
const rect = div.getBoundingClientRect();
|
||||||
|
const vw = window.innerWidth;
|
||||||
|
|
||||||
|
// Starting position: spread across viewport, some visible immediately
|
||||||
|
let startX;
|
||||||
|
if (Math.random() < 0.4) {
|
||||||
|
// Start inside viewport for immediate visibility
|
||||||
|
const buffer = rect.width + 40;
|
||||||
|
startX = d.side === 'left'
|
||||||
|
? buffer + Math.random() * (vw * 0.3)
|
||||||
|
: vw - buffer - Math.random() * (vw * 0.3);
|
||||||
|
} else {
|
||||||
|
startX = d.side === 'left'
|
||||||
|
? -rect.width - 100 - Math.random() * 300
|
||||||
|
: window.innerWidth + 100 + Math.random() * 200;
|
||||||
|
}
|
||||||
|
|
||||||
|
const startY = 15 + Math.random() * 70; // % of viewport height
|
||||||
|
|
||||||
|
div.style.top = startY + '%';
|
||||||
|
div.style.left = startX + 'px';
|
||||||
|
div.style.transform = `scale(${1 - d.depth * 0.12})`;
|
||||||
|
|
||||||
|
cards.push({
|
||||||
|
el: div,
|
||||||
|
depth: d.depth,
|
||||||
|
side: d.side,
|
||||||
|
x: startX,
|
||||||
|
y: startY,
|
||||||
|
scale: 1 - d.depth * 0.12,
|
||||||
|
speed: 0.5 + (4 - d.depth) * 0.5, // depth1=2.0, depth2=1.5, depth3=1.0
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// ── ANIMATION LOOP ──
|
||||||
|
function loop() {
|
||||||
|
const dt = 1 / 60; // approximate frame delta
|
||||||
|
const lerp = 0.035;
|
||||||
|
|
||||||
|
// Smooth speed transition
|
||||||
|
const effectiveTarget = CRUISE + targetSpeed * BOOST;
|
||||||
|
currentSpeed += (effectiveTarget - currentSpeed) * lerp;
|
||||||
|
|
||||||
|
// ── Move speed lines ──
|
||||||
|
const vw = window.innerWidth;
|
||||||
|
lines.forEach(line => {
|
||||||
|
line.offset += currentSpeed * line.speedMul * 2.5;
|
||||||
|
const lineW = line.width * vw / 100;
|
||||||
|
// Reset when fully off-screen right
|
||||||
|
if (line.offset > vw + 100) {
|
||||||
|
line.offset = -lineW - Math.random() * 300;
|
||||||
|
line.el.style.top = Math.random() * 100 + '%';
|
||||||
|
}
|
||||||
|
line.el.style.transform = `translateX(${line.offset}px)`;
|
||||||
|
});
|
||||||
|
|
||||||
|
// ── Move KPI cards ──
|
||||||
|
cards.forEach(card => {
|
||||||
|
const cardSpeed = card.speed * currentSpeed * 1.2;
|
||||||
|
const dir = card.side === 'left' ? 1 : -1;
|
||||||
|
|
||||||
|
card.x += cardSpeed * dir;
|
||||||
|
|
||||||
|
const cardW = card.el.offsetWidth;
|
||||||
|
const cardH = card.el.offsetHeight;
|
||||||
|
|
||||||
|
// Reset when off-screen
|
||||||
|
const offRight = card.side === 'left' && card.x > vw + 100;
|
||||||
|
const offLeft = card.side === 'right' && card.x < -cardW - 100;
|
||||||
|
|
||||||
|
if (offRight || offLeft) {
|
||||||
|
card.x = card.side === 'left'
|
||||||
|
? -cardW - Math.random() * 400
|
||||||
|
: vw + Math.random() * 200;
|
||||||
|
card.y = 10 + Math.random() * 75;
|
||||||
|
card.el.style.top = card.y + '%';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Motion blur via filter
|
||||||
|
const blur = Math.min(currentSpeed * 2.5, 4);
|
||||||
|
card.el.style.filter = `blur(${blur}px)`;
|
||||||
|
|
||||||
|
card.el.style.left = card.x + 'px';
|
||||||
|
card.el.style.transform = `scale(${card.scale})`;
|
||||||
|
});
|
||||||
|
|
||||||
|
// ── Glow reacts to speed ──
|
||||||
|
const glowScale = 1 + currentSpeed * 0.15;
|
||||||
|
const glowOpacity = 0.5 + currentSpeed * 0.6;
|
||||||
|
glow.style.transform = `translate(-50%, -50%) scale(${glowScale})`;
|
||||||
|
glow.style.opacity = Math.min(glowOpacity, 1.3);
|
||||||
|
|
||||||
|
requestAnimationFrame(loop);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ── SPEED CONTROL ──
|
||||||
|
function setSpeed(active) {
|
||||||
|
targetSpeed = active ? 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ── INIT ──
|
||||||
|
createSpeedLines();
|
||||||
|
createCards();
|
||||||
|
requestAnimationFrame(loop);
|
||||||
|
|
||||||
|
// Handle resize
|
||||||
|
window.addEventListener('resize', () => {
|
||||||
|
// Reset card positions to spread across viewport
|
||||||
|
const vw = window.innerWidth;
|
||||||
|
cards.forEach(card => {
|
||||||
|
if (card.x > vw + 200 || card.x < -card.el.offsetWidth - 200) {
|
||||||
|
card.x = card.side === 'left'
|
||||||
|
? -card.el.offsetWidth - Math.random() * 300
|
||||||
|
: vw + Math.random() * 200;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
+391
@@ -0,0 +1,391 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ru">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>ROI24 — Orbital Hero</title>
|
||||||
|
<link rel="preconnect" href="https://fonts.cdnfonts.com">
|
||||||
|
<link href="https://fonts.cdnfonts.com/css/inter" rel="stylesheet">
|
||||||
|
<link href="https://fonts.cdnfonts.com/css/jetbrains-mono" rel="stylesheet">
|
||||||
|
<style>
|
||||||
|
/* ============================================================
|
||||||
|
DESIGN TOKENS
|
||||||
|
============================================================ */
|
||||||
|
:root {
|
||||||
|
--bg: #0a0a0a;
|
||||||
|
--text: #f5f5f5;
|
||||||
|
--text-sec: #a1a1aa;
|
||||||
|
--text-dim: #52525b;
|
||||||
|
--accent: #22c55e;
|
||||||
|
--accent-dim: rgba(34,197,94,0.12);
|
||||||
|
--blue: #3b82f6;
|
||||||
|
--blue-dim: rgba(59,130,246,0.12);
|
||||||
|
--amber: #f59e0b;
|
||||||
|
--red: #ef4444;
|
||||||
|
--font: 'Inter', -apple-system, sans-serif;
|
||||||
|
--mono: 'JetBrains Mono', 'SF Mono', monospace;
|
||||||
|
}
|
||||||
|
|
||||||
|
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
|
||||||
|
body {
|
||||||
|
background: var(--bg); color: var(--text); font-family: var(--font);
|
||||||
|
overflow: hidden; height: 100vh;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================================
|
||||||
|
STAGE
|
||||||
|
============================================================ */
|
||||||
|
.stage {
|
||||||
|
position: relative; width: 100%; height: 100vh;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================================
|
||||||
|
FX LAYER
|
||||||
|
============================================================ */
|
||||||
|
.fx-layer {
|
||||||
|
position: absolute; inset: 0; pointer-events: none; z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Noise */
|
||||||
|
.fx-layer::before {
|
||||||
|
content: ''; position: absolute; inset: 0;
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.02'/%3E%3C/svg%3E");
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ── Glow at center ── */
|
||||||
|
.goo {
|
||||||
|
position: absolute; top: 50%; left: 50%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
width: 500px; height: 500px; border-radius: 50%;
|
||||||
|
background: radial-gradient(circle,
|
||||||
|
rgba(34,197,94,0.10) 0%,
|
||||||
|
rgba(34,197,94,0.03) 35%,
|
||||||
|
transparent 65%
|
||||||
|
);
|
||||||
|
transition: transform 0.5s ease, opacity 0.5s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ── Radial lines from center ── */
|
||||||
|
.radial-line {
|
||||||
|
position: absolute; top: 50%; left: 50%;
|
||||||
|
height: 1px;
|
||||||
|
background: linear-gradient(90deg,
|
||||||
|
rgba(255,255,255,0.08) 0%,
|
||||||
|
rgba(34,197,94,0.2) 30%,
|
||||||
|
rgba(34,197,94,0.05) 60%,
|
||||||
|
transparent 100%
|
||||||
|
);
|
||||||
|
transform-origin: left center;
|
||||||
|
}
|
||||||
|
.radial-line.fast {
|
||||||
|
background: linear-gradient(90deg,
|
||||||
|
rgba(255,255,255,0.15) 0%,
|
||||||
|
rgba(34,197,94,0.3) 25%,
|
||||||
|
rgba(34,197,94,0.08) 55%,
|
||||||
|
transparent 100%
|
||||||
|
);
|
||||||
|
height: 1.5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================================
|
||||||
|
ORBITING CARDS
|
||||||
|
============================================================ */
|
||||||
|
.orbit-card {
|
||||||
|
position: absolute;
|
||||||
|
background: rgba(22,22,24,0.88);
|
||||||
|
backdrop-filter: blur(6px);
|
||||||
|
border: 1px solid rgba(255,255,255,0.08);
|
||||||
|
border-radius: 10px;
|
||||||
|
padding: 12px 16px;
|
||||||
|
width: 190px;
|
||||||
|
pointer-events: none;
|
||||||
|
transition: opacity 0.2s ease;
|
||||||
|
}
|
||||||
|
.orbit-card .tl {
|
||||||
|
font-size: 9px; text-transform: uppercase; letter-spacing: 0.07em;
|
||||||
|
color: var(--text-dim); font-weight: 600; margin-bottom: 4px;
|
||||||
|
}
|
||||||
|
.orbit-card .tv {
|
||||||
|
font-family: var(--mono); font-size: 18px; font-weight: 700;
|
||||||
|
line-height: 1.15; margin-bottom: 3px;
|
||||||
|
}
|
||||||
|
.orbit-card .tv.g { color: var(--accent); }
|
||||||
|
.orbit-card .tv.b { color: var(--blue); }
|
||||||
|
.orbit-card .tv.a { color: var(--amber); }
|
||||||
|
|
||||||
|
.orbit-card .td {
|
||||||
|
display: inline-flex; align-items: center; gap: 3px;
|
||||||
|
padding: 2px 6px; border-radius: 4px;
|
||||||
|
font-family: var(--mono); font-weight: 600; font-size: 10px;
|
||||||
|
}
|
||||||
|
.orbit-card .td.up { color: var(--accent); background: var(--accent-dim); }
|
||||||
|
.orbit-card .td.down { color: var(--red); background: rgba(239,68,68,0.12); }
|
||||||
|
|
||||||
|
/* ============================================================
|
||||||
|
CENTER — clean headline
|
||||||
|
============================================================ */
|
||||||
|
.center {
|
||||||
|
position: absolute; top: 50%; left: 50%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
text-align: center; z-index: 30; max-width: 560px;
|
||||||
|
width: 100%; padding: 0 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.badge {
|
||||||
|
display: inline-flex; align-items: center; gap: 8px;
|
||||||
|
padding: 4px 14px; border: 1px solid rgba(255,255,255,0.1);
|
||||||
|
border-radius: 100px; margin-bottom: 20px;
|
||||||
|
font-size: 11px; color: var(--text-sec); font-family: var(--mono);
|
||||||
|
background: rgba(255,255,255,0.02);
|
||||||
|
}
|
||||||
|
.badge-dot {
|
||||||
|
width: 5px; height: 5px; background: var(--accent); border-radius: 50%;
|
||||||
|
animation: dPulse 1.5s ease-in-out infinite;
|
||||||
|
}
|
||||||
|
@keyframes dPulse {
|
||||||
|
0%,100% { box-shadow: 0 0 3px var(--accent); }
|
||||||
|
50% { box-shadow: 0 0 10px var(--accent); }
|
||||||
|
}
|
||||||
|
|
||||||
|
.center h1 {
|
||||||
|
font-size: clamp(1.8rem, 5vw, 4rem);
|
||||||
|
font-weight: 800; letter-spacing: -0.04em;
|
||||||
|
line-height: 1.08; margin-bottom: 16px;
|
||||||
|
}
|
||||||
|
.center h1 .accent { color: var(--accent); }
|
||||||
|
|
||||||
|
.center .sub {
|
||||||
|
font-size: 1rem; color: rgba(255,255,255,0.4);
|
||||||
|
line-height: 1.6; margin-bottom: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btns { display: flex; gap: 10px; justify-content: center; flex-wrap: wrap; }
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
display: inline-flex; align-items: center; justify-content: center; gap: 8px;
|
||||||
|
padding: 14px 28px; border-radius: 100px; font-weight: 600;
|
||||||
|
font-size: 0.9rem; cursor: pointer; border: none;
|
||||||
|
transition: all 0.25s ease; text-decoration: none;
|
||||||
|
}
|
||||||
|
.btn-accent {
|
||||||
|
background: var(--accent); color: #000;
|
||||||
|
}
|
||||||
|
.btn-accent:hover {
|
||||||
|
background: #16a34a; transform: translateY(-1px);
|
||||||
|
box-shadow: 0 12px 40px rgba(34,197,94,0.25);
|
||||||
|
}
|
||||||
|
.btn-outline {
|
||||||
|
background: transparent; border: 1px solid rgba(255,255,255,0.2);
|
||||||
|
color: var(--text);
|
||||||
|
}
|
||||||
|
.btn-outline:hover {
|
||||||
|
border-color: rgba(255,255,255,0.4);
|
||||||
|
background: rgba(255,255,255,0.03);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================================
|
||||||
|
RESPONSIVE
|
||||||
|
============================================================ */
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.orbit-card { width: 150px; padding: 10px 12px; }
|
||||||
|
.orbit-card .tv { font-size: 15px; }
|
||||||
|
}
|
||||||
|
@media (max-width: 480px) {
|
||||||
|
.orbit-card { width: 120px; padding: 8px 10px; }
|
||||||
|
.orbit-card .tv { font-size: 13px; }
|
||||||
|
.orbit-card .tl { font-size: 8px; }
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="stage" id="stage">
|
||||||
|
|
||||||
|
<div class="fx-layer" id="fxLayer">
|
||||||
|
<div class="goo" id="goo"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Orbit cards injected by JS -->
|
||||||
|
|
||||||
|
<div class="center">
|
||||||
|
<div class="badge">
|
||||||
|
<span class="badge-dot"></span>
|
||||||
|
АНАЛИТИКА ДЛЯ СОБСТВЕННИКОВ
|
||||||
|
</div>
|
||||||
|
<h1>Живые цифры<br>вашего <span class="accent">бизнеса</span></h1>
|
||||||
|
<p class="sub">
|
||||||
|
10 ключевых метрик из 1С, CRM и банков —<br>
|
||||||
|
автоматически, каждое утро в телефоне
|
||||||
|
</p>
|
||||||
|
<div class="btns">
|
||||||
|
<a href="#cta" class="btn btn-accent"
|
||||||
|
onmouseenter="setSpeed(1)"
|
||||||
|
onmouseleave="setSpeed(0)">
|
||||||
|
Получить демо за 3 дня
|
||||||
|
</a>
|
||||||
|
<a href="#demo" class="btn btn-outline"
|
||||||
|
onmouseenter="setSpeed(1)"
|
||||||
|
onmouseleave="setSpeed(0)">
|
||||||
|
Посмотреть пример
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
/* ============================================================
|
||||||
|
ORBITAL ENGINE
|
||||||
|
Cards rotate around center on elliptical paths
|
||||||
|
============================================================ */
|
||||||
|
|
||||||
|
const stage = document.getElementById('stage');
|
||||||
|
const fxLayer = document.getElementById('fxLayer');
|
||||||
|
const goo = document.getElementById('goo');
|
||||||
|
|
||||||
|
// ── SPEED ──
|
||||||
|
let targetSpeed = 0;
|
||||||
|
let currentSpeed = 0;
|
||||||
|
const CRUISE = 0.4;
|
||||||
|
const BOOST = 3.0;
|
||||||
|
|
||||||
|
// ── CARD DATA ──
|
||||||
|
const CARD_DATA = [
|
||||||
|
{ label: 'Выручка за 30 дн', value: '2 051 857 ₽', trend: '+15%', clr: 'g', dir: 'up' },
|
||||||
|
{ label: 'CPA средний', value: '890 ₽', trend: '−5%', clr: 'b', dir: 'down' },
|
||||||
|
{ label: 'Продажи', value: '1 247 шт', trend: '+12%', clr: 'b', dir: 'up' },
|
||||||
|
{ label: 'ROI рекламы', value: '91.8%', trend: '+5%', clr: 'a', dir: 'up' },
|
||||||
|
{ label: 'Прибыль', value: '981 857 ₽', trend: '+12%', clr: 'g', dir: 'up' },
|
||||||
|
{ label: 'Конверсия', value: '2.8%', trend: '+0.3%',clr: 'a', dir: 'up' },
|
||||||
|
{ label: 'LTV клиента', value: '12 400 ₽', trend: '+18%', clr: 'g', dir: 'up' },
|
||||||
|
{ label: 'Ср. чек', value: '1 850 ₽', trend: '−2%', clr: 'b', dir: 'down' },
|
||||||
|
];
|
||||||
|
|
||||||
|
// ── ORBIT CARDS ──
|
||||||
|
let orbitCards = [];
|
||||||
|
// Each: { el, angle, orbitRx, orbitRy, yOffset, data, visible }
|
||||||
|
|
||||||
|
function createOrbitCards() {
|
||||||
|
CARD_DATA.forEach((d, i) => {
|
||||||
|
const div = document.createElement('div');
|
||||||
|
div.className = 'orbit-card';
|
||||||
|
div.innerHTML = `
|
||||||
|
<div class="tl">${d.label}</div>
|
||||||
|
<div class="tv ${d.clr}">${d.value}</div>
|
||||||
|
<span class="td ${d.dir}">${d.dir === 'up' ? '↑' : '↓'} ${d.trend}</span>
|
||||||
|
`;
|
||||||
|
stage.appendChild(div);
|
||||||
|
|
||||||
|
// Distribute cards evenly around the orbit
|
||||||
|
const angle = (i / CARD_DATA.length) * Math.PI * 2;
|
||||||
|
// Elliptical orbit: wider than tall
|
||||||
|
const orbitRx = 320 + Math.random() * 60; // horizontal radius
|
||||||
|
const orbitRy = 100 + Math.random() * 40; // vertical radius
|
||||||
|
const yOffset = (Math.random() - 0.5) * 60;
|
||||||
|
|
||||||
|
orbitCards.push({
|
||||||
|
el: div, angle, orbitRx, orbitRy, yOffset,
|
||||||
|
data: d,
|
||||||
|
speedMul: 0.7 + Math.random() * 0.6,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// ── RADIAL LINES ──
|
||||||
|
let radialLines = [];
|
||||||
|
function spawnRadialLine() {
|
||||||
|
const div = document.createElement('div');
|
||||||
|
const isFast = Math.random() < 0.2;
|
||||||
|
div.className = isFast ? 'radial-line fast' : 'radial-line';
|
||||||
|
const angle = Math.random() * 360;
|
||||||
|
const length = 30 + Math.random() * 120;
|
||||||
|
div.style.width = length + 'px';
|
||||||
|
div.style.transform = `rotate(${angle}deg) translateY(-50%)`;
|
||||||
|
div.style.opacity = '0';
|
||||||
|
fxLayer.appendChild(div);
|
||||||
|
return { el: div, angle, length, speedM: 0.3 + Math.random() * 1.0, life: 0 };
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let i = 0; i < 60; i++) {
|
||||||
|
radialLines.push(spawnRadialLine());
|
||||||
|
}
|
||||||
|
|
||||||
|
// ── LOOP ──
|
||||||
|
function loop() {
|
||||||
|
const lerp = 0.04;
|
||||||
|
currentSpeed += (CRUISE + targetSpeed * BOOST - currentSpeed) * lerp;
|
||||||
|
const spd = currentSpeed;
|
||||||
|
|
||||||
|
const cx = window.innerWidth / 2;
|
||||||
|
const cy = window.innerHeight / 2;
|
||||||
|
|
||||||
|
// ── RADIAL LINES ──
|
||||||
|
radialLines.forEach(line => {
|
||||||
|
line.life += spd * line.speedM * 1.5;
|
||||||
|
const dist = line.life;
|
||||||
|
const alpha = dist < 10 ? dist / 10 : Math.max(0, 1 - (dist - 10) / 70);
|
||||||
|
line.el.style.opacity = alpha;
|
||||||
|
line.el.style.transform = `rotate(${line.angle}deg) translateX(${dist}px)`;
|
||||||
|
if (dist > 80) {
|
||||||
|
line.life = 0;
|
||||||
|
line.angle = Math.random() * 360;
|
||||||
|
line.el.style.transform = `rotate(${line.angle}deg) translateX(0px)`;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// ── ORBIT CARDS — circular motion around center ──
|
||||||
|
orbitCards.forEach(card => {
|
||||||
|
card.angle += spd * card.speedMul * 0.015;
|
||||||
|
|
||||||
|
const a = card.angle;
|
||||||
|
const rx = card.orbitRx;
|
||||||
|
const ry = card.orbitRy;
|
||||||
|
|
||||||
|
// Position on ellipse
|
||||||
|
const x = cx + rx * Math.cos(a);
|
||||||
|
const y = cy + ry * Math.sin(a) + card.yOffset;
|
||||||
|
|
||||||
|
// Z-depth: cards in front (cos(a) > 0) are larger/brighter
|
||||||
|
// Cards behind (cos(a) < 0) are faded
|
||||||
|
const frontness = Math.cos(a); // 1 = right, -1 = left, but we want the "arc" visibility
|
||||||
|
const depthFactor = Math.abs(Math.sin(a)); // 0 at left/right edges, 1 at top/bottom
|
||||||
|
|
||||||
|
// Visibility: most visible when near the horizontal axis (left or right of center)
|
||||||
|
const horizontalFactor = Math.abs(Math.cos(a)); // 1 at right/left, 0 at front/back
|
||||||
|
const opacity = Math.max(0.10, horizontalFactor * 0.9 + 0.1);
|
||||||
|
const scale = 0.6 + horizontalFactor * 0.4;
|
||||||
|
|
||||||
|
card.el.style.left = x + 'px';
|
||||||
|
card.el.style.top = y + 'px';
|
||||||
|
card.el.style.transform = `translate(-50%, -50%) scale(${scale})`;
|
||||||
|
card.el.style.opacity = opacity;
|
||||||
|
});
|
||||||
|
|
||||||
|
// ── GLOW ──
|
||||||
|
const glowScale = 1 + spd * 0.2;
|
||||||
|
const glowOpacity = 0.5 + spd * 0.4;
|
||||||
|
goo.style.transform = `translate(-50%, -50%) scale(${glowScale})`;
|
||||||
|
goo.style.opacity = glowOpacity;
|
||||||
|
|
||||||
|
requestAnimationFrame(loop);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ── SPEED CONTROL ──
|
||||||
|
function setSpeed(active) {
|
||||||
|
targetSpeed = active ? 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ── INIT ──
|
||||||
|
createOrbitCards();
|
||||||
|
requestAnimationFrame(loop);
|
||||||
|
|
||||||
|
window.addEventListener('resize', () => {
|
||||||
|
// Cards will naturally adjust to new center on next frame
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
+1571
File diff suppressed because it is too large.
Load diff
+2633
File diff suppressed because it is too large.
Load diff
+2435
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,498 @@
|
|||||||
|
# Глубокое исследование: Дашборды и бизнес-метрики 2026
|
||||||
|
|
||||||
|
> Исследование проведено: Июнь 2026
|
||||||
|
> Источники: Shopify, Optifai, FathomHQ, FlowGent, HubSpot, Mindtickle, Zoom, Oracle, NetSuite, и другие
|
||||||
|
> Цель: Определение ключевых метрик для дашбордов по сегментам бизнеса
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ЧАСТЬ 1: ОСНОВНЫЕ ПРИНЦИПЫ ДИЗАЙНА ДАШБОРДОВ
|
||||||
|
|
||||||
|
### 1.1 Золотые правила дизайна
|
||||||
|
|
||||||
|
1. **Один экран без прокрутки** — 5-7 ключевых метрик на дашборд
|
||||||
|
2. **Контекст важнее числа** — показывать тренды и сравнения: «Выручка: 1.2М ₽ (↑15% vs месяц)»
|
||||||
|
3. **Цветовое кодирование** — зелёный (выше плана), жёлтый (80-100%), красный (<80%)
|
||||||
|
4. **Правильная визуализация**:
|
||||||
|
- Тренды (выручка, рост) — линейные графики
|
||||||
|
- Сравнения (по менеджерам) — столбчатые диаграммы
|
||||||
|
- Прогресс (план/факт) — прогресс-бары/гайды
|
||||||
|
- Распределение (по возрастам) — гистограммы
|
||||||
|
- Избегать: круговых диаграмм (сложно сравнивать), 3D-графиков
|
||||||
|
5. **Разные дашборды для разных ролей** — менеджер видит одно, собственник другое
|
||||||
|
|
||||||
|
### 1.2 Частота обновления
|
||||||
|
|
||||||
|
| Частота | Метрики |
|
||||||
|
|---------|---------|
|
||||||
|
| Ежедневно | Трафик, конверсия, корзина, реклама |
|
||||||
|
| Еженедельно | CAC, AOV, вовлечённость, воронка |
|
||||||
|
| Ежемесячно | Рост выручки, CLV, оборачиваемость, ROAS |
|
||||||
|
| Квартально | LTV, EBITDA, доля рынка, стратегия |
|
||||||
|
|
||||||
|
### 1.3 Типичные ошибки
|
||||||
|
|
||||||
|
- 30+ метрик на одном экране → nobody looks
|
||||||
|
- Только «мертвые» метрики (revenue) без опережающих (pipeline)
|
||||||
|
- Нет формул в одном месте → Sales считает одно, Finance другое
|
||||||
|
- Нет ответственности за каждую метрику
|
||||||
|
- Дашборд без плейбука «если X ниже Y, делаем Z»
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ЧАСТЬ 2: ECOMMERCE / ИНТЕРНЕТ-ТОРГОВЛЯ (Shopify данные)
|
||||||
|
|
||||||
|
### 2.1 Ключевые метрики (Top 20)
|
||||||
|
|
||||||
|
| # | Метрика | Формула | Бенчмарк |
|
||||||
|
|---|---------|---------|----------|
|
||||||
|
| 1 | **Conversion Rate (CVR)** | (# Покупок / # Сессий) × 100 | 1-3% |
|
||||||
|
| 2 | **Average Order Value (AOV)** | Выручка / # Заказов | $45-150 |
|
||||||
|
| 3 | **Customer Lifetime Value (CLV)** | Ср.покупка × частота × длительность | >3× CAC |
|
||||||
|
| 4 | **Customer Acquisition Cost (CAC)** | Расходы на маркетинг / Новые клиенты | < CLV/3 |
|
||||||
|
| 5 | **Cart Abandonment Rate** | (Завершения / Созданные корзины) × 100 | 60-70% |
|
||||||
|
| 6 | **Returning Customer Rate** | Возвратные клиенты / Всего × 100 | 20-40% |
|
||||||
|
| 7 | **Bounce Rate** | Односторонние визиты / Всего | <50% |
|
||||||
|
| 8 | **NPS** | % Промоутеров - % Детракторов | >50 отлично |
|
||||||
|
| 9 | **CTR** | (Клики / Показы) × 100 | Email: 2%+ |
|
||||||
|
| 10 | **Traffic Sources** | Поиск, Директ, Соцсети, Email | Зависит от ниши |
|
||||||
|
| 11 | **Top Products** | По количеству продаж | — |
|
||||||
|
| 12 | **Inventory Turnover** | COGS / Средний запас | 4-6 раз/год |
|
||||||
|
| 13 | **Return Rate** | Возвраты / Продажи × 100 | 5-10% |
|
||||||
|
| 14 | **Churn Rate** | Ушедшие / Всего × 100 | <5% подписки |
|
||||||
|
|
||||||
|
### 2.2 Как Shopify показывает дашборд
|
||||||
|
|
||||||
|
Shopify Analytics предоставляет:
|
||||||
|
- **60+ готовых дашбордов** (не нужно строить с нуля)
|
||||||
|
- **Конверсионная воронка**: Просмотр → Добавление в корзину → Начало оплаты → Покупка
|
||||||
|
- **Тренды по времени** с возможностью сравнения периодов
|
||||||
|
- **Сегментация**: по устройству, локации, источнику, продукту
|
||||||
|
- **AI-ассистент Sidekick** — вопросы на естественном языке: «Каков CLV клиентов из Google за квартал?»
|
||||||
|
- **Insights** — автоматически подсвечивает аномалии и тренды
|
||||||
|
- **Метрики-цели** (targets) — устанавливает goal для каждой метрики
|
||||||
|
|
||||||
|
### 2.3 Пример структуры дашборда для Ecommerce
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────────────────────────────────────────────────┐
|
||||||
|
│ Выручка: 1.2М ₽ ↑15% | Заказы: 342 | AOV: 3 509 ₽ │
|
||||||
|
├─────────────────────────────────────────────────────────────┤
|
||||||
|
│ Конверсия: 2.4% ↑0.3% | CAC: 420 ₽ | CLV: 4 200 ₽ │
|
||||||
|
├──────────────────────────────┬──────────────────────────────┤
|
||||||
|
│ [График выручки 30 дней] │ Воронка конверсии: │
|
||||||
|
│ │ Просмотры: 14 500 │
|
||||||
|
│ [Топ-5 товаров] │ Корзины: 3 200 (22%) │
|
||||||
|
│ 1. Товар А — 120 шт │ Оплата: 1 100 (34%) │
|
||||||
|
│ 2. Товар Б — 98 шт │ Покупки: 342 (31%) │
|
||||||
|
│ 3. Товар В — 76 шт │ │
|
||||||
|
│ [Трафик по источникам] │ [Удержание клиентов] │
|
||||||
|
│ Поиск 45% Соц 30% Email 25%│ Новые 78% Возвратные 22% │
|
||||||
|
└──────────────────────────────┴──────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ЧАСТЬ 3: B2B SALES (Optifai данные)
|
||||||
|
|
||||||
|
### 3.1 Фреймворк 4 категории, 15 KPI
|
||||||
|
|
||||||
|
**Категория 1: Выручка и Рост (Lagging Indicators)**
|
||||||
|
| # | Метрика | Формула | Бенчмарк |
|
||||||
|
|---|---------|---------|----------|
|
||||||
|
| 1 | MRR / Выручка | Сумма всех подписок | SaaS: 15-25% MoM |
|
||||||
|
| 2 | Revenue Growth Rate | ((Текущий - Пред.)/Пред.) × 100 | SaaS: 20-30% YoY |
|
||||||
|
| 3 | ASP (Average Selling Price) | Выручка / # Сделок | Rастущий тренд |
|
||||||
|
| 4 | LTV | (Ср.доход/мес × Маржа) / Churn | LTV:CAC ≥ 3:1 |
|
||||||
|
|
||||||
|
**Категория 2: Здоровье Воронки (Leading Indicators)**
|
||||||
|
| # | Метрика | Формула | Бенчмарк |
|
||||||
|
|---|---------|---------|----------|
|
||||||
|
| 5 | Pipeline Value | Σ (Сделка × Вероятность) | 3-5× от квоты |
|
||||||
|
| 6 | Pipeline Velocity | (Возможности × Ср.сделка × WinRate) / Цикл | +15-20% QoQ |
|
||||||
|
| 7 | Win Rate | Выиграно / Всего закрытых × 100 | B2B SaaS: 20-30% |
|
||||||
|
| 8 | Pipeline Coverage | Pipeline / Квота | 3-5× минимум |
|
||||||
|
|
||||||
|
**Категория 3: Эффективность (Process Metrics)**
|
||||||
|
| # | Метрика | Формула | Бенчмарк |
|
||||||
|
|---|---------|---------|----------|
|
||||||
|
| 9 | Sales Cycle Length | Средняя длительность сделки | SMB: 30-90 дней |
|
||||||
|
| 10 | Lead-to-Customer Rate | Клиенты / Лиды × 100 | B2B: 2-5% |
|
||||||
|
| 11 | CAC | (Продажи + Маркетинг) / Новые клиенты | Payback <12 мес |
|
||||||
|
| 12 | Quota Attainment | Факт / План × 100 | Команда: 85-90% |
|
||||||
|
|
||||||
|
**Категория 4: Активности и Прогноз**
|
||||||
|
| # | Метрика | Формула | Бенчмарк |
|
||||||
|
|---|---------|---------|----------|
|
||||||
|
| 13 | Sales Activities | Звонки, письма, встречи | 30-50 звонков/день |
|
||||||
|
| 14 | Demo-to-Close Rate | Закрытые / Демо × 100 | 20-30% |
|
||||||
|
| 15 | Forecast Accuracy | 100% - |Variance| | ±10% приемлемо |
|
||||||
|
|
||||||
|
### 3.2 Как Optifai показывает дашборд
|
||||||
|
|
||||||
|
Оптимизация через Revenue Velocity (скорость конвертации воронки в деньги). Команды, фокусирующиеся на Pipeline Velocity, показали **рост выручки на 23% быстрее** по сравнению с теми, кто следит только за Pipeline Value.
|
||||||
|
|
||||||
|
**Рекомендации по количеству метрик:**
|
||||||
|
- Команда <10 человек: 5-7 метрик (фокус на закрытие)
|
||||||
|
- Команда 10-30: + Pipeline Velocity, CAC, Demo-to-Close
|
||||||
|
- Команда 30-50: + LTV, Forecast Accuracy, Activity Metrics
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ЧАСТЬ 4: ФИНАНСОВЫЙ ДАШБОРД (FathomHQ, Oracle, NetSuite данные)
|
||||||
|
|
||||||
|
### 4.1 11 финансовых KPI по категориям
|
||||||
|
|
||||||
|
#### Прибыльность (Profitability)
|
||||||
|
| # | Метрика | Формула | Бенчмарк |
|
||||||
|
|---|---------|---------|----------|
|
||||||
|
| 1 | Gross Profit Margin | (Выручка - COGS) / Выручка × 100 | 30-70% |
|
||||||
|
| 2 | Net Profit Margin | Чистая прибыль / Выручка × 100 | 5-15% |
|
||||||
|
| 3 | EBITDA | Чистая прибыль + Проценты + Налоги + Амм. | Растущий тренд |
|
||||||
|
| 4 | ROI | (Доход - Затраты) / Затраты × 100 | >15% |
|
||||||
|
|
||||||
|
#### Ликвидность (Liquidity)
|
||||||
|
| # | Метрика | Формула | Бенчмарк |
|
||||||
|
|---|---------|---------|----------|
|
||||||
|
| 5 | Current Ratio | Текущие активы / Текущие обязательства | >2.0 |
|
||||||
|
| 6 | Quick Ratio | (Наличие + Дебиторка) / Обязательства | >1.0 |
|
||||||
|
|
||||||
|
#### Эффективность (Efficiency)
|
||||||
|
| # | Метрика | Формула | Бенчмарк |
|
||||||
|
|---|---------|---------|----------|
|
||||||
|
| 7 | Inventory Turnover | COGS / Средний запас | 4-8 раз/год |
|
||||||
|
| 8 | AR Turnover | Продажи / Средняя дебиторка | 6-12 раз/год |
|
||||||
|
| 9 | Days Sales Outstanding | 365 / AR Turnover | 30-45 дней |
|
||||||
|
|
||||||
|
#### Долгосрочная устойчивость (Solvency)
|
||||||
|
| # | Метрика | Формула | Бенчмарк |
|
||||||
|
|---|---------|---------|----------|
|
||||||
|
| 10 | Debt to Equity | Долг / Собственный капитал × 100 | <100% |
|
||||||
|
| 11 | Interest Coverage | EBITDA / Проценты | >3.0 |
|
||||||
|
|
||||||
|
### 4.2 Кэш-флоу (Cash Flow) — критично для бизнеса
|
||||||
|
|
||||||
|
| Метрика | Описание |
|
||||||
|
|---------|----------|
|
||||||
|
| **Cash Conversion Cycle (CCC)** | Дни между оплатой поставщикам и получением денег от клиентов |
|
||||||
|
| **Burn Rate** | Сколько денег компания тратит в месяц |
|
||||||
|
| **Runway (месяцы)** | Текущий кэш / Burn Rate = сколько месяцев хватит |
|
||||||
|
| **Working Capital** | Текущие активы - Текущие обязательства |
|
||||||
|
|
||||||
|
### 4.3 CFO Dashboard — 20 ключевых метрик (по Oracle)
|
||||||
|
|
||||||
|
- Revenue Growth Rate
|
||||||
|
- Gross Profit Margin
|
||||||
|
- EBITDA Margin
|
||||||
|
- Compound Annual Growth Rate (CAGR)
|
||||||
|
- Net Profit Margin
|
||||||
|
- Operating Cash Flow
|
||||||
|
- Free Cash Flow
|
||||||
|
- Current Ratio
|
||||||
|
- Quick Ratio
|
||||||
|
- AR Days
|
||||||
|
- AP Days
|
||||||
|
- Inventory Days
|
||||||
|
- Debt-to-Equity
|
||||||
|
- ROE (Return on Equity)
|
||||||
|
- ROA (Return on Assets)
|
||||||
|
- Customer Concentration Risk
|
||||||
|
- Revenue by Region/Product
|
||||||
|
- Headcount Growth
|
||||||
|
- Revenue per Employee
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ЧАСТЬ 5: ДАШБОРД КЛИЕНТСКОГО СЕРВИСА (FlowGent, HubSpot, Zoom данные)
|
||||||
|
|
||||||
|
### 5.1 8 ключевых KPI
|
||||||
|
|
||||||
|
| # | Метрика | Формула | Бенчмарк |
|
||||||
|
|---|---------|---------|----------|
|
||||||
|
| 1 | **CSAT** | (Удовлетворённые / Всего) × 100 | >80% отлично |
|
||||||
|
| 2 | **NPS** | % Промоутеры - % Детракторы | 0-100 шкала |
|
||||||
|
| 3 | **FCR** | Решено с 1-го контакта / Всего × 100 | Dell: 85% |
|
||||||
|
| 4 | **AHT** | (Говорить + Ожидание + Закрытие) / Звонки | 4-15 мин |
|
||||||
|
| 5 | **CES** | Средний балл «Насколько легко решить проблему» | 1-7 шкала |
|
||||||
|
| 6 | **SLA Compliance** | Задачи в SLA / Всего задач × 100 | >90% |
|
||||||
|
| 7 | **First Response Time** | Среднее время до первого ответа | <5 мин |
|
||||||
|
| 8 | **Resolution Time** | Среднее время до полного решения | Зависит от типа |
|
||||||
|
|
||||||
|
### 5.2 Как Zendesk и Freshdesk показывают дашборд
|
||||||
|
|
||||||
|
- **Agent Performance View** — таблица по агентам с CSAT, AHT, FCR
|
||||||
|
- **Ticket Trend** — график по дням (открыто/закрыто)
|
||||||
|
- **Volume by Channel** — email, чат, телефон (круговая или столбчатая)
|
||||||
|
- **SLA Breach Rate** — % нарушенных SLA
|
||||||
|
- **Customer Sentiment** — тренд NPS/CSAT по времени
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ЧАСТЬ 6: ДИЗАЙН-ПРЕЦЕДЕНТЫ ЗАРУБЕЖНЫХ КОМПАНИЙ
|
||||||
|
|
||||||
|
### 6.1 Stripe Dashboard
|
||||||
|
|
||||||
|
**Ключевые принципы:**
|
||||||
|
- Минималистичный чёрно-белый дизайн с акцентным фиолетовым
|
||||||
|
- Графики revenue с возможностью zoom и period comparison
|
||||||
|
- Метрики в «карточках» с trend arrows (↑/↓)
|
||||||
|
- Left sidebar навигация по разделам
|
||||||
|
- Детальные страницы с фильтрами и экспортом
|
||||||
|
- Real-time streaming данных для транзакций
|
||||||
|
|
||||||
|
### 6.2 Shopify Analytics
|
||||||
|
|
||||||
|
**Ключевые принципы:**
|
||||||
|
- 60+ встроенных дашбордов (не строить с нуля)
|
||||||
|
- AI-ассистент для вопросов на естественном языке
|
||||||
|
- «Insights» — автоматическое выявление аномалий
|
||||||
|
- Конверсионные воронки
|
||||||
|
- Segmentation по всем параметрам (устройство, геология, продукт)
|
||||||
|
- Mobile-first responsive design
|
||||||
|
- Pre-built reports с возможностью кастомизации
|
||||||
|
|
||||||
|
### 6.3 HubSpot Analytics
|
||||||
|
|
||||||
|
**Ключевые принципы:**
|
||||||
|
- Единая CRM-панель (marketing + sales + service в одном месте)
|
||||||
|
- Attribution reporting (какой канал принёс клиента)
|
||||||
|
- Deal pipeline visualization
|
||||||
|
- Revenue forecasting
|
||||||
|
- Goal tracking с progress bars
|
||||||
|
- Custom report builder (drag-and-drop)
|
||||||
|
|
||||||
|
### 6.4 Datadog / Grafana (IT Operations)
|
||||||
|
|
||||||
|
**Ключевые принципы:**
|
||||||
|
- Real-time monitoring с графиками в реальном времени
|
||||||
|
- Alerting и alert history
|
||||||
|
- Service-level dashboards (SLO/SLI)
|
||||||
|
- Heatmaps для пиковых нагрузок
|
||||||
|
- Custom widgets и panels
|
||||||
|
- Alert notification by channel (Slack, email, PagerDuty)
|
||||||
|
|
||||||
|
### 6.5 Tableau / Power BI (Enterprise BI)
|
||||||
|
|
||||||
|
**Ключевые принципы:**
|
||||||
|
- Self-service BI (бизнес-пользователи строят отчёты сами)
|
||||||
|
- 50+ источников данных подключаются
|
||||||
|
- Data storytelling — narrative dashboards
|
||||||
|
- Natural language queries («Покажи выручку по регионам за Q1»)
|
||||||
|
- Scheduled email delivery отчётов
|
||||||
|
- Embedded analytics в клиентских порталах
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ЧАСТЬ 7: МАРКЕТИНГ ДАШБОРД (AI Digital, HubSpot данные)
|
||||||
|
|
||||||
|
### 7.1 15 маркетинговых KPI
|
||||||
|
|
||||||
|
| # | Метрика | Формула | Бенчмарк |
|
||||||
|
|---|---------|---------|----------|
|
||||||
|
| 1 | Brand Awareness | Охват / Уникальные пользователи | Зависит от ниши |
|
||||||
|
| 2 | Engagement Rate | (Лайки+Комменты+Шары) / Охват × 100 | 1-5% |
|
||||||
|
| 3 | CTR | (Клики / Показы) × 100 | Email: 2%+ |
|
||||||
|
| 4 | Bounce Rate | Односторонние / Всего | <50% |
|
||||||
|
| 5 | **Conversion Rate** | Цели / Визиты × 100 | 2-5% |
|
||||||
|
| 6 | **CPL** | Расходы / Лиды | Зависит от ниши |
|
||||||
|
| 7 | **CPA** | Расходы / Клиенты | < CLV/3 |
|
||||||
|
| 8 | **ROAS** | Выручка от рекламы / Расходы | >4:1 |
|
||||||
|
| 9 | **MER** | Вся выручка / Все расходы | >2.0 |
|
||||||
|
| 10 | **CAC** | Расходы на маркетинг / Новые клиенты | < CLV/3 |
|
||||||
|
| 11 | **CLV** | (Ср.покупка × частота × годы) | >3× CAC |
|
||||||
|
| 12 | **CRR** | Сохранившиеся клиенты / Всего | >85% |
|
||||||
|
| 13 | **NPS** | % Промоутеры - % Детракторы | >50 отлично |
|
||||||
|
| 14 | **ROI** | (Доход - Затраты) / Затраты × 100 | >200% |
|
||||||
|
| 15 | **Attribution Accuracy** | Совпадение моделей атрибуции | >90% |
|
||||||
|
|
||||||
|
### 7.2 Ключевой инсайт
|
||||||
|
|
||||||
|
> 83% маркетологов говорят, что доказывание ROI — их главная проблема. Организации, которые активно отслеживают KPI, в 2.3 раза чаще превышают revenue goals.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ЧАСТЬ 8: УНИВЕРСАЛЬНЫЙ ДАШБОРД ДЛЯ БИЗНЕСА (Executive Dashboard)
|
||||||
|
|
||||||
|
### 8.1 Top-10 метрик для собственника бизнеса
|
||||||
|
|
||||||
|
Эти 10 метрик дают полный обзор бизнеса. Они объединяют финансы, продажи, маркетинг, клиентов и операционку.
|
||||||
|
|
||||||
|
| # | Метрика | Категория | Почему важна |
|
||||||
|
|---|---------|-----------|-------------|
|
||||||
|
| 1 | **Выручка** (мес/квартал) | Финансы | Главный индикатор масштаба |
|
||||||
|
| 2 | **Чистая маржа** (%) | Финансы | Реальная эффективность бизнеса |
|
||||||
|
| 3 | **Денежный поток** (кэш в кассе) | Финансы | Деньги = жизнь бизнеса |
|
||||||
|
| 4 | **Дебиторская задолженность** (средний срок) | Финансы | Когда придут реальные деньги |
|
||||||
|
| 5 | **Конверсия воронки** (%) | Продажи | Насколько эффективно лиды в деньги |
|
||||||
|
| 6 | **Стоимость клиента (CAC)** | Продажи/Маркетинг | Сколько стоит привлечение |
|
||||||
|
| 7 | **LTV клиента** | Продажи/Маркетинг | Сколько клиент принесёт за жизнь |
|
||||||
|
| 8 | **NPS / CSAT** | Клиенты | Здоровье клиентской базы |
|
||||||
|
| 9 | **Оборачиваемость запасов** | Операционка | Насколько эффективно работает склад |
|
||||||
|
| 10 | **Рост клиентов** (% MoM) | Стратегия | Тренд роста бизнеса |
|
||||||
|
|
||||||
|
### 8.2 Пример Executive Dashboard
|
||||||
|
|
||||||
|
```
|
||||||
|
┌────────────────────────────────────────────────────────────────┐
|
||||||
|
│ ROI24 Dashboard 20.06.2026 │
|
||||||
|
│ Пн 13.00 │ Live ● │ Обновлено 5 мин назад │
|
||||||
|
├────────────┴───────────────────────────────────────────────────┤
|
||||||
|
│ ВЫРУЧКА ЧИСТАЯ МАРЖА КАССА ДЕБИТОРКА │
|
||||||
|
│ 4.2М ₽ ↑12% 23% ↑3% 1.8М ₽ 890K ₽ 45дн │
|
||||||
|
├────────────────────────────────────────────────────────────────┤
|
||||||
|
│ КОНВЕРСИЯ CAC LTV NPS ОБОР.СКЛАД │
|
||||||
|
│ 2.8% ↑0.4 1 200 ₽ 12 500 ₽ 68 28 дней │
|
||||||
|
├────────────────────────────────────────────────────────────────┤
|
||||||
|
│ [График выручки 12 месяцев с трендом] │
|
||||||
|
│ [Денежный поток по неделям: прогноз на 30 дней] │
|
||||||
|
│ [Воронка продаж: Лиды → Квалиф → Контракт → Оплата] │
|
||||||
|
│ [Топ-5 каналов привлечения: SEO 35%, Контекст 28%, Прямой 22%]│
|
||||||
|
└────────────────────────────────────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ЧАСТЬ 9: АРХИТЕКТУРА ДАННЫХ И ИСТОЧНИКИ
|
||||||
|
|
||||||
|
### 9.1 Типичные источники данных для дашборда
|
||||||
|
|
||||||
|
| Источник | Тип данных | Как подключается |
|
||||||
|
|----------|-----------|------------------|
|
||||||
|
| 1С / Битрикс24 | Продажи, склад, CRM | API, выгрузка CSV |
|
||||||
|
| Яндекс.Директ / VK Ads | Маркетинг | API |
|
||||||
|
| Яндекс.Метрика / GA4 | Трафик | API |
|
||||||
|
| Онлайн-банки (Сбер, Тинькофф) | Кассовый разрыв | API (СберБизнес, Тинькофф Бизнес) |
|
||||||
|
| МойСклад / 1С:Склад | Инвентарь | API |
|
||||||
|
| ЮKassa / CloudPayments | Оплата | API/вебхуки |
|
||||||
|
| Google Analytics 4 | Трафик | API |
|
||||||
|
| Битрикс24 / amoCRM | Продажи | REST API |
|
||||||
|
|
||||||
|
### 9.2 Архитектура данных
|
||||||
|
|
||||||
|
```
|
||||||
|
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
|
||||||
|
│ 1С / CRM │ │ Маркетинг │ │ Онлайн-банки │
|
||||||
|
│ Продажи │ │ Каналы │ │ Касса │
|
||||||
|
└──────┬───────┘ └──────┬───────┘ └──────┬───────┘
|
||||||
|
│ │ │
|
||||||
|
└────────────────────┼────────────────────┘
|
||||||
|
▼
|
||||||
|
┌──────────────┐
|
||||||
|
│ ETL Layer │
|
||||||
|
│ (Python) │
|
||||||
|
│ normalize │
|
||||||
|
└──────┬───────┘
|
||||||
|
▼
|
||||||
|
┌──────────────┐
|
||||||
|
│ PostgreSQL │
|
||||||
|
│ Raw Data │
|
||||||
|
└──────┬───────┘
|
||||||
|
▼
|
||||||
|
┌──────────────┐
|
||||||
|
│ ClickHouse │
|
||||||
|
│ Aggregates │
|
||||||
|
└──────┬───────┘
|
||||||
|
▼
|
||||||
|
┌──────────────┐
|
||||||
|
│ Dashboard │
|
||||||
|
│ (HTML/ECharts│
|
||||||
|
└──────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ЧАСТЬ 10: СРАВНЕНИЕ ПО СЕГМЕНТАМ БИЗНЕСА
|
||||||
|
|
||||||
|
### 10.1 Ecommerce
|
||||||
|
|
||||||
|
**Приоритетные дашборды:**
|
||||||
|
1. Продажи и конверсия (реальное время)
|
||||||
|
2. Воронка продаж (просмотр → корзина → оплата → покупка)
|
||||||
|
3. Маркетинговая эффективность (CAC, ROAS по каналам)
|
||||||
|
4. Инвентарь (топ товаров, оборачиваемость, остатки)
|
||||||
|
5. Клиенты (повторные покупки, CLV, чарн)
|
||||||
|
|
||||||
|
### 10.2 Услуги / Agency
|
||||||
|
|
||||||
|
**Приоритетные дашборды:**
|
||||||
|
1. Пайплайн продаж (возможности по стадиям)
|
||||||
|
2. Выручка и маржинальность по проектам
|
||||||
|
3. Загрузка команды (utilization rate)
|
||||||
|
4. KPI клиентов (NPS, SLA, satisfaction)
|
||||||
|
5. Cash flow (проекты в работе, дебиторка)
|
||||||
|
|
||||||
|
### 10.3 Производство
|
||||||
|
|
||||||
|
**Приоритетные дашборды:**
|
||||||
|
1. Производство (план/факт, OEE, простои)
|
||||||
|
2. Качество (дефекты, возвраты, брак)
|
||||||
|
3. Инвентарь сырья и готовой продукции
|
||||||
|
4. Поставки (надёжность, сроки, стоимость)
|
||||||
|
5. Финансы (себестоимость, маржа, оборачиваемость)
|
||||||
|
|
||||||
|
### 10.4 B2B SaaS
|
||||||
|
|
||||||
|
**Приоритетные дашборды:**
|
||||||
|
1. MRR/ARR и Growth Rate
|
||||||
|
2. Churn Rate и Retention
|
||||||
|
3. LTV:CAC и Payback Period
|
||||||
|
4. Pipeline и Forecast
|
||||||
|
5. Product Usage (активные пользователи, фичи)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ЧАСТЬ 11: КЛЮЧЕВЫЕ ИНСАЙТЫ 2024-2026
|
||||||
|
|
||||||
|
### 11.1 Что изменилось
|
||||||
|
|
||||||
|
1. **AI в аналитике** — Shopify Sidekick, HubSpot AI, natural language queries к данным
|
||||||
|
2. **Real-time данные** — не «отчёт за вчера», а живые цифры
|
||||||
|
3. **Алёрты и аномалии** — система сама подсвечивает, когда метрика ушла вниз
|
||||||
|
4. **Mobile-first** — собственник смотрит дашборд с телефона
|
||||||
|
5. **Self-service BI** — бизнес-пользователь строит отчёты без IT
|
||||||
|
|
||||||
|
### 11.2 Тренды дашбордов
|
||||||
|
|
||||||
|
- От статических отчётов → к живым дашбордам
|
||||||
|
- От «показать цифры» → к «подсказать действие» (если конверсия <2% → проверить рекламу)
|
||||||
|
- От Excel/1С → к cloud-native решениям
|
||||||
|
- От «один дашборд на всех» → к ролевым дашбордам
|
||||||
|
- От ретроспективы → к предиктивной аналитике (AI-прогнозы)
|
||||||
|
|
||||||
|
### 11.3 Ключевые цифры
|
||||||
|
|
||||||
|
- 70% B2B-продавцов не выполняли квоты (2024, Xactly Insights)
|
||||||
|
- Команды, отслеживающие 5-7 KPI, достигают 91% выполнения квоты vs 73% для команд с 0-3 KPI (Optifai, 2025)
|
||||||
|
- 83% маркетологов говорят, что доказывание ROI — их главная проблема
|
||||||
|
- Организации с активным трекингом KPI в 2.3 раза чаще превышают revenue goals
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ЧАСТЬ 12: РЕКОМЕНДАЦИИ ДЛЯ ПРОЕКТА ROI24
|
||||||
|
|
||||||
|
### 12.1 Что строить в первую очередь
|
||||||
|
|
||||||
|
1. **Универсальный Executive Dashboard** — 10 метрик, охватывающих финансы, продажи, маркетинг
|
||||||
|
2. **Модульные дашборды** — Ecommerce, Услуги, Производство (отключаемые модули)
|
||||||
|
3. **Связь с источниками данных** — 1С, CRM, банки, реклама
|
||||||
|
4. **AI Insights** — автоматическое выявление проблем и рекомендаций
|
||||||
|
5. **Mobile-first** — дашборд должен работать на телефоне
|
||||||
|
|
||||||
|
### 12.2 Что НЕ строить
|
||||||
|
|
||||||
|
- 50+ метрик на одном экране (паралич аналитика)
|
||||||
|
- Статические PDF-отчёты (живые данные — наше преимущество)
|
||||||
|
- Отдельный дашборд под каждую метрику (слишком много)
|
||||||
|
- Гейты за каждую метрику (метрики должны быть понятны без объяснений)
|
||||||
|
|
||||||
|
### 12.3 Позиционирование
|
||||||
|
|
||||||
|
> **«Живые цифры бизнеса за 3 дня»**
|
||||||
|
> Не ещё один BI-инструмент для аналитиков.
|
||||||
|
> 10 метрик, которые видит собственник каждое утро.
|
||||||
|
> Обновляются автоматически из 1С, CRM, банков, рекламы.
|
||||||
|
> Смотрятся с телефона.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Исследование завершено. Источники: Shopify Blog, Optifai, FathomHQ, FlowGent, HubSpot, Oracle, NetSuite, Mindtickle, Zoom, Telnyx, GoodData, Kyriba, и другие.*
|
||||||
Whitespace-only changes.
Whitespace-only changes.
Reference in new issue
Block a user