Files

292 lines
18 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>ViewMate — эскизы телефонного интерфейса</title>
<style>
* { box-sizing: border-box; margin: 0; padding: 0; }
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
background: #1b1d22; color: #e8e8e8; padding: 32px; line-height: 1.45;
}
h1 { font-size: 22px; margin-bottom: 6px; }
.sub { color: #999; margin-bottom: 28px; font-size: 14px; }
.screens { display: flex; flex-wrap: wrap; gap: 36px; align-items: flex-start; }
.screen-wrap { display: flex; flex-direction: column; }
.screen-title { font-size: 15px; font-weight: 600; margin-bottom: 10px; color: #ffb454; }
.phone {
width: 320px; height: 640px; background: #0e0f12; border: 2px solid #3a3d46;
border-radius: 28px; overflow: hidden; position: relative;
display: flex; flex-direction: column;
box-shadow: 0 8px 30px rgba(0,0,0,.5);
}
.statusbar { padding: 8px 16px 2px; display: flex; justify-content: space-between; font-size: 11px; color: #aaa; }
/* общие компоненты */
.searchbar { margin: 6px 14px; padding: 8px 12px; background: #23262e; border-radius: 10px; color: #777; font-size: 12px; }
/* экран 1: каталог */
.tabs-row { display: flex; gap: 10px; padding: 10px 14px 0; }
.tab { padding: 6px 12px; border-radius: 8px; font-size: 12px; background: #23262e; color: #999; }
.tab.active { background: #ffb454; color: #1b1d22; font-weight: 600; }
.grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; padding: 14px; flex: 1; overflow: hidden; }
.card { background: #181a1f; border-radius: 12px; padding: 8px; position: relative; }
.poster { background: linear-gradient(135deg,#2a2e38,#1d2026); height: 90px; border-radius: 8px; display: flex; align-items: center; justify-content: center; font-size: 10px; color: #555; }
.card-title { font-size: 11px; margin-top: 6px; color: #ddd; }
.badge { position: absolute; top: 14px; right: 14px; font-size: 9px; padding: 2px 6px; border-radius: 6px; font-weight: 700; }
.b-done { background: #2e7d32; color: #c8ffc8; }
.b-work { background: #f9a825; color: #1b1d22; }
.b-none { background: #555; color: #ddd; }
.b-part { background: #0277bd; color: #d3f0ff; }
.bottombar { border-top: 1px solid #2a2d35; display: flex; padding: 8px 0 12px; }
.btab { flex: 1; text-align: center; font-size: 10px; color: #777; }
.btab.active { color: #ffb454; }
.btab .ico { font-size: 16px; display: block; }
/* экран 2: детали */
.detail-poster { margin: 8px 14px; height: 130px; background: linear-gradient(135deg,#3a2f24,#1d2026); border-radius: 12px; display:flex; align-items:center; justify-content:center; font-size:11px; color:#777; }
.detail-title { padding: 0 14px; font-size: 15px; font-weight: 700; }
.detail-meta { padding: 2px 14px 0; font-size: 11px; color: #888; }
.section { margin: 12px 14px 0; }
.section-label { font-size: 10px; text-transform: uppercase; color: #888; margin-bottom: 6px; letter-spacing: .5px; }
.audio-row { display: flex; align-items: center; gap: 8px; padding: 7px 10px; background: #181a1f; border-radius: 8px; margin-bottom: 6px; font-size: 11px; }
.audio-row.selected { border: 1px solid #ffb454; }
.radio { width: 12px; height: 12px; border-radius: 50%; border: 2px solid #666; flex-shrink: 0; }
.radio.on { border-color: #ffb454; background: #ffb454; }
.audio-row .lang { margin-left: auto; color: #888; }
.status-block { background: #181a1f; border-radius: 10px; padding: 10px 12px; margin-bottom: 8px; }
.status-line { display: flex; justify-content: space-between; font-size: 11px; margin-bottom: 4px; }
.progress { height: 6px; background: #2a2d35; border-radius: 3px; overflow: hidden; }
.progress > div { height: 100%; background: #ffb454; border-radius: 3px; }
.chip { font-size: 9px; padding: 2px 8px; border-radius: 8px; background: #23262e; color: #aaa; }
.btn { text-align: center; padding: 10px; border-radius: 10px; font-size: 12px; font-weight: 600; margin-bottom: 8px; }
.btn-primary { background: #ffb454; color: #1b1d22; }
.btn-ghost { background: #23262e; color: #ccc; }
.btn-danger { background: #4a1f24; color: #ff8a93; }
/* экран 3: очки */
.ocu-block { margin: 10px 14px; background: #181a1f; border-radius: 12px; padding: 12px; }
.ocu-row { display: flex; align-items: center; gap: 10px; margin-bottom: 10px; }
.ocu-row:last-child { margin-bottom: 0; }
.ocu-icon { width: 34px; height: 34px; border-radius: 10px; background: #23262e; display:flex; align-items:center; justify-content:center; font-size: 16px; flex-shrink: 0; }
.ocu-label { font-size: 11px; color: #999; }
.ocu-value { font-size: 13px; font-weight: 600; }
.ocu-bar { flex: 1; height: 8px; background: #2a2d35; border-radius: 4px; overflow: hidden; }
.ocu-bar > div { height: 100%; background: #4caf50; border-radius: 4px; }
.ocu-bar.red > div { background: #e53935; }
.remote-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; padding: 0 14px; }
.rbtn { background: #23262e; border-radius: 10px; padding: 12px 8px; text-align: center; font-size: 11px; color: #ddd; }
.rbtn.big { grid-column: span 2; background: #ffb454; color: #1b1d22; font-weight: 700; }
/* экран 4: чат */
.session-list { padding: 8px 14px; flex: 1; overflow: hidden; }
.session { display: flex; align-items: center; gap: 10px; padding: 9px 10px; background: #181a1f; border-radius: 10px; margin-bottom: 7px; }
.session .av { width: 28px; height: 28px; border-radius: 50%; background: #2a2e38; display:flex; align-items:center; justify-content:center; font-size: 12px; flex-shrink: 0; }
.session .s-name { font-size: 12px; font-weight: 600; }
.session .s-sub { font-size: 10px; color: #777; }
.session.active { border: 1px solid #ffb454; }
.chat-area { flex: 1; padding: 10px 14px; overflow: hidden; display: flex; flex-direction: column; gap: 8px; }
.msg { max-width: 80%; padding: 8px 10px; border-radius: 10px; font-size: 11px; }
.msg.them { background: #23262e; color: #ddd; align-self: flex-start; }
.msg.me { background: #3a3d46; color: #eee; align-self: flex-end; }
.listen-ind { display: flex; align-items: center; justify-content: center; gap: 8px; padding: 6px; font-size: 12px; color: #ff6b6b; }
.dot { width: 10px; height: 10px; border-radius: 50%; background: #e53935; animation: blink 1s infinite; }
@keyframes blink { 50% { opacity: .25; } }
.think-ind { display: flex; align-items: center; justify-content: center; gap: 6px; padding: 6px; font-size: 11px; color: #aaa; }
.think-ind .t { width: 6px; height: 6px; border-radius: 50%; background: #ffb454; animation: blink 1.2s infinite; }
.think-ind .t:nth-child(2){ animation-delay: .2s; } .think-ind .t:nth-child(3){ animation-delay: .4s; }
.rec-btn { width: 46px; height: 46px; border-radius: 50%; background: #e53935; margin: 0 auto 10px; display:flex; align-items:center; justify-content:center; font-size: 18px; color: #fff; }
.legend { margin-top: 12px; max-width: 320px; }
.legend .l { display: flex; gap: 8px; font-size: 11px; color: #bbb; margin-bottom: 3px; }
.legend .n { color: #ffb454; font-weight: 700; flex-shrink: 0; width: 18px; text-align: right; }
/* нумерация компонентов */
.marker { position: absolute; background: #ffb454; color: #1b1d22; font-size: 9px; font-weight: 700; width: 16px; height: 16px; border-radius: 50%; display:flex; align-items:center; justify-content:center; z-index: 5; }
</style>
</head>
<body>
<h1>ViewMate — эскизы интерфейса телефона (раскладка компонентов)</h1>
<div class="sub">Не дизайн, а расположение элементов. Четыре экрана: каталог, детали фильма, статус очков, чат. Номера = легенда под каждым экраном.</div>
<div class="screens">
<!-- ══════════ ЭКРАН 1: КАТАЛОГ ══════════ -->
<div class="screen-wrap">
<div class="screen-title">Экран 1 — Каталог (Jellyfin)</div>
<div class="phone">
<div class="statusbar"><span>21:47</span><span>🔋 84%</span></div>
<span class="marker" style="top:34px;left:8px;">1</span>
<div class="searchbar" style="margin-top:8px;">🔍 поиск по каталогу…</div>
<span class="marker" style="top:80px;left:8px;">2</span>
<div class="tabs-row">
<div class="tab active">Фильмы</div>
<div class="tab">Сериалы</div>
<div class="tab">Папки</div>
</div>
<div class="grid">
<div class="card"><div class="poster">постер</div><div class="card-title">Дюна: Часть вторая</div><span class="badge b-done">✓</span></div>
<div class="card"><div class="poster">постер</div><div class="card-title">Интерстеллар</div><span class="badge b-work">⟳ 45%</span></div>
<div class="card"><div class="poster">постер</div><div class="card-title">Бегущий по лезвию 2049</div><span class="badge b-none">нет</span></div>
<div class="card"><div class="poster">постер</div><div class="card-title">Гостья из будущего</div><span class="badge b-part">↓ часть</span></div>
</div>
<div class="bottombar">
<div class="btab active"><span class="ico">🎬</span>Каталог</div>
<div class="btab"><span class="ico">🕶️</span>Очки</div>
<div class="btab"><span class="ico">💬</span>Чат</div>
</div>
</div>
<div class="legend">
<div class="l"><span class="n">1</span>поиск по каталогу (строка вверху)</div>
<div class="l"><span class="n">2</span>вкладки: Фильмы / Сериалы / Папки (вход в папки Jellyfin)</div>
<div class="l"><span class="n">3</span>карточка элемента: постер + название</div>
<div class="l"><span class="n">4</span>статус зеркала: ✓ готово / ⟳ конвертируется / нет / ↓ частично скачано</div>
<div class="l"><span class="n">5</span>нижняя навигация: Каталог / Очки / Чат</div>
</div>
</div>
<!-- ══════════ ЭКРАН 2: ДЕТАЛИ ФИЛЬМА ══════════ -->
<div class="screen-wrap">
<div class="screen-title">Экран 2 — Детали фильма + озвучка + скачивание</div>
<div class="phone">
<div class="statusbar"><span>‹ назад</span><span>🔋 84%</span></div>
<div class="detail-poster">постер / обложка</div>
<div class="detail-title">Дюна: Часть вторая</div>
<div class="detail-meta">2024 · фантастика · 2ч 46м · 1080p</div>
<div class="section">
<div class="section-label">1 · выбор озвучки</div>
<div class="audio-row selected"><span class="radio on"></span>Дубляж (Reanimedia)<span class="lang">rus</span></div>
<div class="audio-row"><span class="radio"></span>Оригинал<span class="lang">eng</span></div>
<div class="audio-row"><span class="radio"></span>Профессиональный многоголосый<span class="lang">rus</span></div>
</div>
<div class="section">
<div class="section-label">2 · статус конвертации</div>
<div class="status-block">
<div class="status-line"><span>Конвертация зеркала</span><span>⟳ 45%</span></div>
<div class="progress"><div style="width:45%"></div></div>
</div>
</div>
<div class="section">
<div class="section-label">3 · скачивание на устройства</div>
<div class="status-block">
<div class="status-line"><span>🕶️ Очки — видео</span><span class="chip">✓ скачано</span></div>
<div class="status-line"><span>🕶️ Очки — звук</span><span class="chip">↓ качается…</span></div>
<div class="status-line"><span>📱 Телефон — видео</span><span class="chip">нет</span></div>
<div class="status-line"><span>📱 Телефон — звук</span><span class="chip">✓ скачано</span></div>
</div>
<div class="btn btn-danger">Удалить скачанное (очки + телефон)</div>
</div>
<div class="section" style="margin-top:auto; padding: 0 14px 12px;">
<div class="btn btn-primary">▶ Смотреть на очках</div>
<div class="btn btn-ghost">Скачать на телефон</div>
</div>
</div>
<div class="legend">
<div class="l"><span class="n">1</span>список дорожек из зеркала (title + language), радио-выбор</div>
<div class="l"><span class="n">2</span>статус/прогресс конвертации зеркала</div>
<div class="l"><span class="n">3</span>что скачано на очках и на телефоне: видео/звук отдельно (в т.ч. «частично»)</div>
<div class="l"><span class="n">4</span>удаление скачанного с обоих устройств</div>
<div class="l"><span class="n">5</span>главные действия: смотреть / скачать</div>
</div>
</div>
<!-- ══════════ ЭКРАН 3: СТАТУС ОЧКОВ ══════════ -->
<div class="screen-wrap">
<div class="screen-title">Экран 3 — Статус очков + пульт</div>
<div class="phone">
<div class="statusbar"><span>21:47</span><span>🔋 84%</span></div>
<div class="ocu-block">
<div class="ocu-row">
<div class="ocu-icon">🕶️</div>
<div style="flex:1"><div class="ocu-label">Связь с очками</div><div class="ocu-value">подключено (WiFi)</div></div>
<span class="chip" style="background:#2e7d32;color:#c8ffc8;">●</span>
</div>
<div class="ocu-row">
<div class="ocu-icon">🔋</div>
<div style="flex:1"><div class="ocu-label">Батарея очков</div><div class="ocu-value">68%</div></div>
<div class="ocu-bar" style="width:70px"><div style="width:68%"></div></div>
</div>
<div class="ocu-row">
<div class="ocu-icon">💾</div>
<div style="flex:1"><div class="ocu-label">Память очков</div><div class="ocu-value">41,2 ГБ из 128 ГБ занято</div></div>
<div class="ocu-bar red" style="width:70px"><div style="width:32%"></div></div>
</div>
<div class="ocu-row">
<div class="ocu-icon">🎬</div>
<div style="flex:1"><div class="ocu-label">Сейчас на очках</div><div class="ocu-value">Дюна 2 · 12:34 / 56:00</div></div>
<span class="chip">пауза</span>
</div>
</div>
<div class="remote-grid">
<div class="rbtn">⏪ −30с</div>
<div class="rbtn">⏩ +30с</div>
<div class="rbtn">▶ Плей</div>
<div class="rbtn">⏸ Пауза</div>
<div class="rbtn">🔀 Режим: Кино</div>
<div class="rbtn">💬 Режим: Чат</div>
<div class="rbtn big">Скачанное на очках →</div>
</div>
</div>
<div class="legend">
<div class="l"><span class="n">1</span>карточка очков: связь / батарея / память (всего и занято) / что сейчас на экране</div>
<div class="l"><span class="n">2</span>пульт: перемотка, плей/пауза</div>
<div class="l"><span class="n">3</span>переключение режима очков (Кино ⇄ Чат)</div>
<div class="l"><span class="n">4</span>список скачанного на очках (управление памятью очков)</div>
</div>
</div>
<!-- ══════════ ЭКРАН 4: ЧАТ ══════════ -->
<div class="screen-wrap">
<div class="screen-title">Экран 4 — Чат с Порфирием (сессии)</div>
<div class="phone">
<div class="statusbar"><span>21:47</span><span>🔋 84%</span></div>
<div class="chat-area">
<div class="think-ind"><span class="t"></span><span class="t"></span><span class="t"></span> Порфирий думает…</div>
<div class="msg them">Дорогой друг, зеркало для «Дюны» готово, можно смотреть. Озвучка — дубляж Reanimedia, русская дорожка.</div>
<div class="msg me">Отлично, включай на очках с дубляжом.</div>
<div class="msg them">Включаю. 12:34 / 56:00, звук на телефоне.</div>
<div class="listen-ind"><span class="dot"></span> слушаю… 0:07</div>
<div class="msg me">Переключи на сессию про работу.</div>
</div>
<div class="session-list" style="border-top:1px solid #2a2d35;">
<div class="session active"><span class="av">🕶️</span><div><div class="s-name">Очки / кино</div><div class="s-sub">активная</div></div></div>
<div class="session"><span class="av">💼</span><div><div class="s-name">Работа</div><div class="s-sub">3 сообщения</div></div></div>
<div class="session"><span class="av">🏠</span><div><div class="s-name">Общее</div><div class="s-sub">вчера</div></div></div>
</div>
<div class="rec-btn">🎙</div>
</div>
<div class="legend">
<div class="l"><span class="n">1</span>лента разговора: сообщения ассистента и пользователя</div>
<div class="l"><span class="n">2</span>индикаторы состояния: «думает…» / «слушаю… + таймер записи» (красная точка)</div>
<div class="l"><span class="n">3</span>список сессий Hermes — переключение активной (параллельная работа)</div>
<div class="l"><span class="n">4</span>кнопка записи голоса (диктовка)</div>
</div>
</div>
</div>
</body>
</html>