diff --git a/frontend/dashboard.html b/frontend/dashboard.html index 6f3b6eb..60ba7e3 100644 --- a/frontend/dashboard.html +++ b/frontend/dashboard.html @@ -81,7 +81,7 @@ } .ab-btn:hover { background: rgba(255,255,255,0.25); } /* ── Hero cards row (Reading · Lab of day · Pet) ── */ - .hero-row { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; } + .hero-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 14px; } .hero-card { position: relative; border-radius: 18px; padding: 18px 20px; display: flex; flex-direction: column; min-height: 196px; @@ -3683,6 +3683,17 @@ col.style.display = any ? '' : 'none'; } + /* Hero-ряд (чтение/лаборатория/питомец): карточки скрываются по фиче (через CSS). + Подгоняем число колонок под видимые карточки и прячем весь ряд, если пусто. */ + function syncHeroRow() { + const row = document.getElementById('hero-row'); + if (!row) return; + const vis = [...row.querySelectorAll('.hero-card')] + .filter(c => getComputedStyle(c).display !== 'none'); + row.style.display = vis.length ? '' : 'none'; + // ширину колонок под число карточек делает CSS (auto-fit), мобайл не трогаем. + } + /* ══ WIDGET: Last results (compact, 5 items) ══════════════════════ */ function loadLastResultsWidget(rows) { const w = document.getElementById('w-last-results'); @@ -4300,6 +4311,7 @@ loadLabOfDay(); loadPetHero(); loadFlashcardWidget(); + syncHeroRow(); // спрятать карточки отключённых модулей и подогнать сетку } /* ══ WIDGET: Flashcard review (random card from pool) ════════════════ */ diff --git a/js/api.js b/js/api.js index 66498f1..900fabc 100644 --- a/js/api.js +++ b/js/api.js @@ -854,9 +854,14 @@ const FEATURE_HREFS = { sitemap: ['/sitemap', '/sitemap.html'], }; /* Контейнеры виджетов-модулей (дашборд и т.п.) — прячем блок целиком, а не только - ссылку, иначе остаётся пустой блок (напр. виджет флеш-карт #w-flashcard). */ + ссылку, иначе остаётся пустой блок (напр. виджет флеш-карт #w-flashcard). + Hero-карточки дашборда: у lab JS меняет href на /lab?sim=… → [href="/lab"] не + матчит, поэтому прячем по СТАБИЛЬНОМУ id #hc-lab (аналогично pet/чтение). */ const FEATURE_WIDGETS = { flashcards: ['#w-flashcard'], + lab: ['#hc-lab'], + pet: ['#hc-pet'], + textbooks: ['#hc-read'], }; /* Инъекция CSS, прячущего отключённые фичи. Ставится синхронно из localStorage-кэша на ранней загрузке (ДО построения сайдбара/виджетов) — против мигания (FOUC),