v23 — явные подсказки на каждом шаге регистрации вместо ИИ-чата
This commit is contained in:
parent
155c193aae
commit
f6525cb094
104
index.html
104
index.html
@ -132,13 +132,6 @@ label.file-btn{display:inline-block;background:#1a2332;padding:12px 20px;border-
|
||||
label.file-btn:active{background:#2a3342}
|
||||
input[type=file]{display:none}
|
||||
|
||||
.ai-helper{position:fixed;bottom:16px;right:16px;z-index:350;width:280px;max-width:90vw;background:var(--ink);border:1px solid #2a3342;border-radius:16px;overflow:hidden;box-shadow:0 8px 32px rgba(0,0,0,.5);transition:transform .3s}
|
||||
.ai-helper.minimized{transform:translateY(calc(100% - 44px))}
|
||||
.ai-helper .ai-hdr{background:var(--cyan);color:var(--ink);padding:8px 14px;font-weight:700;font-size:13px;display:flex;justify-content:space-between;align-items:center;cursor:pointer}
|
||||
.ai-helper .ai-hdr button{background:none;border:none;color:var(--ink);font-size:16px;cursor:pointer}
|
||||
.ai-helper .ai-body{padding:10px;max-height:200px;overflow-y:auto;display:flex;flex-direction:column;gap:6px}
|
||||
.ai-helper .ai-msg{background:#1a2332;color:var(--cyan);padding:6px 10px;border-radius:10px;font-size:12px;line-height:1.4;animation:fadeIn .4s}
|
||||
@keyframes fadeIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}
|
||||
|
||||
|
||||
/* ROLE BUTTONS */
|
||||
@ -216,6 +209,7 @@ input[type=file]{display:none}
|
||||
<div class="reg-step" data-step="2">
|
||||
<h2>🔑 Придумай логин и пароль</h2>
|
||||
<p class="hint">Логин — твоё имя в приложении. Пароль — секрет.</p>
|
||||
<div style="background:#1a2332;border:1px solid var(--cyan);border-radius:10px;padding:10px 14px;margin-bottom:8px;font-size:13px;color:var(--cyan)">🤖 <b>Подсказка:</b> Логин — латиница, без пробелов. Пароль — минимум 3 символа.</div>
|
||||
<input type="text" id="rLogin" placeholder="Логин (латиница, без пробелов)">
|
||||
<input type="password" id="rPass" placeholder="Пароль (минимум 3 символа)" oninput="showPassStrength()"><div id="passStrength" style="font-size:12px;margin-bottom:4px"></div>
|
||||
<div class="reg-nav">
|
||||
@ -227,6 +221,7 @@ input[type=file]{display:none}
|
||||
<div class="reg-step" data-step="3">
|
||||
<h2>🏊 Твой вид спорта</h2>
|
||||
<p class="hint">Выбери из списка олимпийских видов</p>
|
||||
<div style="background:#1a2332;border:1px solid var(--cyan);border-radius:10px;padding:10px 14px;margin-bottom:8px;font-size:13px;color:var(--cyan)">🤖 <b>Подсказка:</b> Выбери свой вид спорта. В списке — все 39 олимпийских видов.</div>
|
||||
<select id="rSport"><option value="">Выбери вид спорта</option><option>Академическая гребля</option><option>Бадминтон</option><option>Баскетбол</option><option>Бокс</option><option>Борьба вольная</option><option>Борьба греко-римская</option><option>Велоспорт</option><option>Водное поло</option><option>Волейбол</option><option>Гандбол</option><option>Гимнастика спортивная</option><option>Гимнастика художественная</option><option>Гольф</option><option>Гребля на байдарках и каноэ</option><option>Дзюдо</option><option>Карате</option><option>Конный спорт</option><option>Лёгкая атлетика</option><option>Настольный теннис</option><option>Парусный спорт</option><option>Плавание</option><option>Прыжки в воду</option><option>Прыжки на батуте</option><option>Регби</option><option>Сёрфинг</option><option>Синхронное плавание</option><option>Скейтбординг</option><option>Современное пятиборье</option><option>Спортивное скалолазание</option><option>Стрельба из лука</option><option>Стрельба пулевая</option><option>Теннис</option><option>Триатлон</option><option>Тхэквондо</option><option>Тяжёлая атлетика</option><option>Фехтование</option><option>Футбол</option><option>Хоккей на траве</option></select>
|
||||
<div class="reg-nav">
|
||||
<button class="btn outline" onclick="prevStep()">← Назад</button>
|
||||
@ -238,6 +233,7 @@ input[type=file]{display:none}
|
||||
<div class="reg-step" data-step="4">
|
||||
<h2>👤 Кто ты?</h2>
|
||||
<p class="hint">Выбери свою роль в спорте</p>
|
||||
<div style="background:#1a2332;border:1px solid var(--cyan);border-radius:10px;padding:10px 14px;margin-bottom:8px;font-size:13px;color:var(--cyan)">🤖 <b>Подсказка:</b> Кто ты? Спортсмен, тренер или родитель? Если родитель — укажи имя ребёнка.</div>
|
||||
<div style="display:flex;flex-direction:column;gap:8px;margin-bottom:12px">
|
||||
<button class="role-btn" data-role="athlete" onclick="selectRole('athlete')">🏊 Спортсмен</button>
|
||||
<button class="role-btn" data-role="coach" onclick="selectRole('coach')">🏋️ Тренер</button>
|
||||
@ -254,6 +250,7 @@ input[type=file]{display:none}
|
||||
<div class="reg-step" data-step="5">
|
||||
<h2>🎂 Дата рождения</h2>
|
||||
<p class="hint">Возраст посчитается автоматически</p>
|
||||
<div style="background:#1a2332;border:1px solid var(--cyan);border-radius:10px;padding:10px 14px;margin-bottom:8px;font-size:13px;color:var(--cyan)">🤖 <b>Подсказка:</b> Дата рождения — возраст посчитается сам. Выбери аватарку или загрузи фото.</div>
|
||||
<input type="date" id="rBirth" onchange="autoAge()">
|
||||
<input type="text" id="rAge" placeholder="Возраст (авто)" readonly style="background:#0F1218;border-color:#1a2332">
|
||||
<p style="text-align:center;color:var(--gray-500);font-size:13px;margin-top:8px">📷 Выбери аватарку:</p>
|
||||
@ -278,6 +275,7 @@ input[type=file]{display:none}
|
||||
<div class="reg-step" data-step="6">
|
||||
<h2>🌍 Где ты?</h2>
|
||||
<p class="hint">Страна и город</p>
|
||||
<div style="background:#1a2332;border:1px solid var(--cyan);border-radius:10px;padding:10px 14px;margin-bottom:8px;font-size:13px;color:var(--cyan)">🤖 <b>Подсказка:</b> Сначала выбери страну, потом город.</div>
|
||||
<select id="rCountry" onchange="updateCities()"><option value="">Страна</option><option>Австралия</option><option>Австрия</option><option>Азербайджан</option><option>Армения</option><option>Беларусь</option><option>Бельгия</option><option>Болгария</option><option>Бразилия</option><option>Великобритания</option><option>Венгрия</option><option>Германия</option><option>Греция</option><option>Грузия</option><option>Дания</option><option>Египет</option><option>Израиль</option><option>Индия</option><option>Индонезия</option><option>Испания</option><option>Италия</option><option>Казахстан</option><option>Канада</option><option>Катар</option><option>Китай</option><option>Корея Южная</option><option>Куба</option><option>Кыргызстан</option><option>Латвия</option><option>Литва</option><option>Малайзия</option><option>Мексика</option><option>Молдова</option><option>Монголия</option><option>Нидерланды</option><option>Новая Зеландия</option><option>Норвегия</option><option>ОАЭ</option><option>Польша</option><option>Португалия</option><option>Россия</option><option>Румыния</option><option>Саудовская Аравия</option><option>Сербия</option><option>Сингапур</option><option>США</option><option>Таджикистан</option><option>Таиланд</option><option>Туркменистан</option><option>Турция</option><option>Узбекистан</option><option>Украина</option><option>Финляндия</option><option>Франция</option><option>Хорватия</option><option>Чехия</option><option>Швейцария</option><option>Швеция</option><option>Эстония</option><option>ЮАР</option><option>Япония</option></select>
|
||||
<input type="text" id="rCity" placeholder="Город" list="cityList" autocomplete="off">
|
||||
<datalist id="cityList"></datalist>
|
||||
@ -290,6 +288,7 @@ input[type=file]{display:none}
|
||||
<div class="reg-step" data-step="7">
|
||||
<h2>🏫 Клуб и тренер</h2>
|
||||
<p class="hint">Где и с кем ты тренируешься</p>
|
||||
<div style="background:#1a2332;border:1px solid var(--cyan);border-radius:10px;padding:10px 14px;margin-bottom:8px;font-size:13px;color:var(--cyan)">🤖 <b>Подсказка:</b> Укажи клуб, тренера и разряд. Цель — твоя главная мечта.</div>
|
||||
<input type="text" id="rClub" placeholder="Клуб / спортивная школа">
|
||||
<input type="text" id="rCoach" placeholder="Тренер (ФИО)">
|
||||
<input type="text" id="rRank" placeholder="Разряд / звание (например: 1 юн, 3 взр)">
|
||||
@ -303,6 +302,7 @@ input[type=file]{display:none}
|
||||
<div class="reg-step" data-step="8">
|
||||
<h2>📱 Контакты</h2>
|
||||
<p class="hint">Телефон и email — чтобы тренер и родители могли связаться</p>
|
||||
<div style="background:#1a2332;border:1px solid var(--cyan);border-radius:10px;padding:10px 14px;margin-bottom:8px;font-size:13px;color:var(--cyan)">🤖 <b>Подсказка:</b> Телефон ОБЯЗАТЕЛЕН (формат +77011234567). Email нужен для связи.</div>
|
||||
<input type="tel" id="rPhone" placeholder="+7 (___) ___-__-__" required>
|
||||
<input type="email" id="rEmail" placeholder="Email" required>
|
||||
<div class="reg-nav">
|
||||
@ -311,16 +311,7 @@ input[type=file]{display:none}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- AI Assistant Registration -->
|
||||
<div class="ai-helper show" id="aiRegHelper">
|
||||
<div class="ai-hdr" onclick="toggleAI('aiRegHelper','aiRegToggle')">
|
||||
🤖 Твой помощник
|
||||
<button onclick="event.stopPropagation();toggleAI('aiRegHelper','aiRegToggle')" id="aiRegToggle">▼</button>
|
||||
</div>
|
||||
<div class="ai-body" id="aiRegBody">
|
||||
<div class="ai-msg">👋 Привет! Я помогу заполнить профиль.</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- MAIN APP SCREEN -->
|
||||
@ -329,17 +320,6 @@ input[type=file]{display:none}
|
||||
<div class="bottom-nav" id="bottomNav"></div>
|
||||
</div>
|
||||
|
||||
<!-- AI Assistant App -->
|
||||
<div class="ai-helper" id="aiAppHelper">
|
||||
<div class="ai-hdr" onclick="toggleAI('aiAppHelper','aiAppToggle')">
|
||||
🤖 Помощник
|
||||
<button onclick="event.stopPropagation();toggleAI('aiAppHelper','aiAppToggle')" id="aiAppToggle">▼</button>
|
||||
</div>
|
||||
<div class="ai-body" id="aiAppBody">
|
||||
<div class="ai-msg">👋 Я здесь! Нажми на раздел — подскажу.</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="toast" id="toast"></div>
|
||||
<div class="lightbox" id="lightbox" style="display:none" onclick="this.style.display='none'"></div>
|
||||
|
||||
@ -501,52 +481,6 @@ const LS=(k)=>{try{return JSON.parse(localStorage.getItem('g_'+k))}catch{return
|
||||
const SS=(k,v)=>{try{localStorage.setItem('g_'+k,JSON.stringify(v))}catch{toast('Память полна!')}};
|
||||
let currentUser=null, currentPage='profile', currentChat=null, chatFilter='all';
|
||||
|
||||
function toggleAI(helperId, btnId) {
|
||||
const ai = document.getElementById(helperId);
|
||||
const btn = document.getElementById(btnId);
|
||||
if (!ai) return;
|
||||
ai.classList.toggle('minimized');
|
||||
btn.textContent = ai.classList.contains('minimized') ? '\u25B2' : '\u25BC';
|
||||
}
|
||||
|
||||
function aiSay(msg, target) {
|
||||
const body = document.getElementById(target || 'aiAppBody') || document.getElementById('aiRegBody');
|
||||
if (!body) return;
|
||||
const div = document.createElement('div');
|
||||
div.className = 'ai-msg';
|
||||
div.innerHTML = msg;
|
||||
body.appendChild(div);
|
||||
body.scrollTop = body.scrollHeight;
|
||||
}
|
||||
|
||||
function showAIForTab(tab) {
|
||||
const tips = {
|
||||
profile: '👤 Это твой профиль. Здесь значки, достижения, данные. Добавь достижение или скачай отчёт для тренера!',
|
||||
diary: '📖 Дневник тренировок. Записывай каждую! Через месяц увидишь прогресс.',
|
||||
calendar: '📅 Календарь соревнований. Добавляй турниры и сборы — не пропустишь ни одного старта!',
|
||||
chat: '💬 Чаты с другими спортсменами, тренерами и родителями. Жми 🎮 чтобы поиграть!',
|
||||
tools: '⚙ Инструменты: нормативы, сравнение с чемпионами, анализ видео, витамины, рейтинг.',
|
||||
students: '👥 Твои ученики. Здесь их дневники и прогресс.',
|
||||
child: '👶 Профиль твоего ребёнка. Смотри тренировки, значки, цели.'
|
||||
};
|
||||
if (tips[tab]) aiSay(tips[tab], 'aiAppBody');
|
||||
}
|
||||
|
||||
// Registration AI hints
|
||||
function aiRegHint(step) {
|
||||
const hints = {
|
||||
1: '✏ Напиши фамилию, имя и отчество полностью. Например: Кайрат Гали Аскарович.',
|
||||
2: '🔑 Придумай логин (латиница) и пароль. Пароль — минимум 3 символа. Смотри на индикатор силы!',
|
||||
3: '🏊 Выбери свой вид спорта. Все варианты — олимпийские!',
|
||||
4: '👤 Кто ты в спорте? Спортсмен, тренер или родитель? Если родитель — введи имя ребёнка.',
|
||||
5: '🎂 Дата рождения. Возраст посчитается сам! Выбери аватарку или загрузи фото.',
|
||||
6: '🌍 Где ты живёшь? Выбери страну — появятся города.',
|
||||
7: '🏫 Твой клуб, тренер, разряд и главная цель. Это важно!',
|
||||
8: '📱 Телефон и email ОБЯЗАТЕЛЬНЫ! Телефон в формате +7... Без них нельзя завершить регистрацию.'
|
||||
};
|
||||
if (hints[step]) aiSay(hints[step], 'aiRegBody');
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Show AI assistant on login
|
||||
@ -593,12 +527,6 @@ function backToLogin(){
|
||||
document.getElementById('regScreen').classList.remove('active');
|
||||
document.getElementById('loginScreen').classList.add('active');
|
||||
// Show AI helper on login
|
||||
setTimeout(() => {
|
||||
const ai = document.getElementById('aiAppHelper');
|
||||
if(ai) ai.classList.add('show');
|
||||
const aiReg = document.getElementById('aiRegHelper');
|
||||
if(aiReg) aiReg.classList.add('show');
|
||||
}, 500);
|
||||
}
|
||||
function showRegStep(n){
|
||||
regStep=n;
|
||||
@ -607,7 +535,7 @@ function showRegStep(n){
|
||||
if(step){step.classList.add('active');step.querySelector('input,select')?.focus()}
|
||||
document.getElementById('stepNum').textContent=n;
|
||||
updateStepDots();
|
||||
setTimeout(() => aiRegHint(n), 200);
|
||||
|
||||
}
|
||||
function buildStepDots(){
|
||||
let h=''; for(let i=1;i<=8;i++)h+=`<div class="step-dot${i<=regStep?' done':''}${i===regStep?' current':''}"></div>`;
|
||||
@ -743,7 +671,7 @@ function showPage(page){
|
||||
currentPage=page;
|
||||
document.querySelectorAll('.nav-item').forEach(n=>n.classList.toggle('active',n.dataset.page===page));
|
||||
renderPage();
|
||||
setTimeout(() => showAIForTab(page), 300);
|
||||
|
||||
}
|
||||
function renderPage(){
|
||||
if(isAdmin()){
|
||||
@ -1500,12 +1428,6 @@ function doLogout(){
|
||||
document.getElementById('appScreen').classList.remove('active');
|
||||
document.getElementById('loginScreen').classList.add('active');
|
||||
// Show AI helper on login
|
||||
setTimeout(() => {
|
||||
const ai = document.getElementById('aiAppHelper');
|
||||
if(ai) ai.classList.add('show');
|
||||
const aiReg = document.getElementById('aiRegHelper');
|
||||
if(aiReg) aiReg.classList.add('show');
|
||||
}, 500);
|
||||
document.getElementById('lUser').value='';document.getElementById('lPass').value='';
|
||||
}
|
||||
|
||||
@ -1529,12 +1451,6 @@ function renderAll(){
|
||||
if('serviceWorker'in navigator)navigator.serviceWorker.register('sw.js').catch(()=>{});
|
||||
document.getElementById('loginScreen').classList.add('active');
|
||||
// Show AI helper on login
|
||||
setTimeout(() => {
|
||||
const ai = document.getElementById('aiAppHelper');
|
||||
if(ai) ai.classList.add('show');
|
||||
const aiReg = document.getElementById('aiRegHelper');
|
||||
if(aiReg) aiReg.classList.add('show');
|
||||
}, 500);
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user