feat: sound system — 12 new sounds + navigation category; dashboard FAB widget button
Sounds: - UI: modal_open, modal_close, tab_switch, delete - Navigation (new category): page_enter, section_reveal - Classroom: timer_warning, wb_clear, file_shared - Gamification: challenge_complete, daily_login - Quiz: time_up, quiz_bonus Dashboard: - Widget configurator moved from header to fixed FAB (bottom-right) no longer pushed off-screen by wide sidebar Profile settings: - Added Navigation category toggle - Expanded preview section: 12 test buttons covering all categories Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+31
-34
@@ -1167,39 +1167,37 @@
|
||||
/* Heatmap popup always right-anchored */
|
||||
.hm-day-popup { right: 10px !important; left: auto !important; top: auto !important; }
|
||||
}
|
||||
/* ── Widget configurator ── */
|
||||
.dash-cfg-btn {
|
||||
margin-left: auto; flex-shrink: 0;
|
||||
display: none; /* shown only for students via JS */
|
||||
align-items: center; gap: 6px;
|
||||
padding: 6px 12px; border-radius: 8px;
|
||||
background: rgba(155,93,229,0.13); border: 1px solid rgba(155,93,229,0.3);
|
||||
color: #9B5DE5; font-size: 0.78rem; font-weight: 600; cursor: pointer;
|
||||
transition: background .15s;
|
||||
/* ── Widget configurator FAB ── */
|
||||
.dash-cfg-fab {
|
||||
display: none; /* shown for students via JS */
|
||||
position: fixed; bottom: 88px; right: 20px; z-index: 80;
|
||||
width: 44px; height: 44px; border-radius: 50%;
|
||||
background: #9B5DE5; border: none; cursor: pointer;
|
||||
box-shadow: 0 4px 16px rgba(155,93,229,0.45);
|
||||
align-items: center; justify-content: center;
|
||||
transition: transform .15s, box-shadow .15s;
|
||||
}
|
||||
.dash-cfg-btn:hover { background: rgba(155,93,229,0.22); }
|
||||
.dash-cfg-btn svg { width: 14px; height: 14px; flex-shrink: 0; }
|
||||
.dash-cfg-fab:hover { transform: scale(1.08); box-shadow: 0 6px 24px rgba(155,93,229,0.55); }
|
||||
.dash-cfg-fab svg { width: 20px; height: 20px; color: #fff; flex-shrink: 0; }
|
||||
.dash-cfg-panel {
|
||||
display: none; position: absolute; top: calc(100% + 6px); right: 0;
|
||||
display: none; position: fixed; bottom: 140px; right: 20px;
|
||||
background: #1e1b2e; border: 1px solid rgba(155,93,229,0.3);
|
||||
border-radius: 12px; padding: 12px; min-width: 210px; z-index: 50;
|
||||
box-shadow: 0 8px 24px rgba(0,0,0,.35);
|
||||
border-radius: 14px; padding: 14px; min-width: 220px; z-index: 81;
|
||||
box-shadow: 0 8px 32px rgba(0,0,0,.45);
|
||||
}
|
||||
.dash-cfg-panel.open { display: block; }
|
||||
.dash-cfg-title {
|
||||
font-size: 0.72rem; font-weight: 700; color: #9B5DE5;
|
||||
text-transform: uppercase; letter-spacing: .5px; margin-bottom: 8px;
|
||||
text-transform: uppercase; letter-spacing: .5px; margin-bottom: 10px;
|
||||
}
|
||||
.dash-cfg-row {
|
||||
display: flex; align-items: center; justify-content: space-between;
|
||||
padding: 6px 4px; border-radius: 6px; cursor: pointer;
|
||||
padding: 7px 4px; border-radius: 6px; cursor: pointer;
|
||||
}
|
||||
.dash-cfg-row:hover { background: rgba(255,255,255,.05); }
|
||||
.dash-cfg-row label {
|
||||
font-size: 0.82rem; color: #e2e8f0; cursor: pointer; flex: 1;
|
||||
}
|
||||
.dash-cfg-row label { font-size: 0.83rem; color: #e2e8f0; cursor: pointer; flex: 1; }
|
||||
.dash-cfg-row input[type=checkbox] { accent-color: #9B5DE5; width: 15px; height: 15px; cursor: pointer; }
|
||||
.dash-cfg-wrap { position: relative; }
|
||||
.dash-cfg-wrap { display: contents; }
|
||||
</style>
|
||||
<script src="https://cdn.jsdelivr.net/npm/lucide@0.469.0/dist/umd/lucide.min.js"></script>
|
||||
</head>
|
||||
@@ -1222,20 +1220,19 @@
|
||||
<div class="stat-ring" id="sr-streak"></div>
|
||||
<div class="stat-ring" id="sr-pending"></div>
|
||||
</div>
|
||||
<div class="dash-cfg-wrap" id="dash-cfg-wrap">
|
||||
<button class="dash-cfg-btn" id="dash-cfg-btn" onclick="toggleDashCfg(event)" title="Настроить виджеты">
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 2.83-2.83l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z"/></svg>
|
||||
Виджеты
|
||||
</button>
|
||||
<div class="dash-cfg-panel" id="dash-cfg-panel">
|
||||
<div class="dash-cfg-title">Показывать виджеты</div>
|
||||
<div class="dash-cfg-row" onclick="toggleDashWidget('lb-section',this)"><label>Рейтинг</label><input type="checkbox" data-widget="lb-section" checked></div>
|
||||
<div class="dash-cfg-row" onclick="toggleDashWidget('ch-section',this)"><label>Испытания недели</label><input type="checkbox" data-widget="ch-section" checked></div>
|
||||
<div class="dash-cfg-row" onclick="toggleDashWidget('stats-section',this)"><label>Статистика</label><input type="checkbox" data-widget="stats-section" checked></div>
|
||||
<div class="dash-cfg-row" onclick="toggleDashWidget('w-my-subs',this)"><label>Мои сдачи</label><input type="checkbox" data-widget="w-my-subs" checked></div>
|
||||
<div class="dash-cfg-row" onclick="toggleDashWidget('w-theory-progress',this)"><label>Теория</label><input type="checkbox" data-widget="w-theory-progress" checked></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Widget configurator FAB (fixed, outside header flow) -->
|
||||
<button class="dash-cfg-fab" id="dash-cfg-btn" onclick="toggleDashCfg(event)" title="Настроить виджеты">
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 2.83-2.83l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z"/></svg>
|
||||
</button>
|
||||
<div class="dash-cfg-panel" id="dash-cfg-panel">
|
||||
<div class="dash-cfg-title">Показывать виджеты</div>
|
||||
<div class="dash-cfg-row" onclick="toggleDashWidget('lb-section',this)"><label>Рейтинг</label><input type="checkbox" data-widget="lb-section" checked></div>
|
||||
<div class="dash-cfg-row" onclick="toggleDashWidget('ch-section',this)"><label>Испытания недели</label><input type="checkbox" data-widget="ch-section" checked></div>
|
||||
<div class="dash-cfg-row" onclick="toggleDashWidget('stats-section',this)"><label>Статистика</label><input type="checkbox" data-widget="stats-section" checked></div>
|
||||
<div class="dash-cfg-row" onclick="toggleDashWidget('w-my-subs',this)"><label>Мои сдачи</label><input type="checkbox" data-widget="w-my-subs" checked></div>
|
||||
<div class="dash-cfg-row" onclick="toggleDashWidget('w-theory-progress',this)"><label>Теория</label><input type="checkbox" data-widget="w-theory-progress" checked></div>
|
||||
</div>
|
||||
|
||||
<div class="container">
|
||||
|
||||
Reference in New Issue
Block a user