AP4 Spielanleitungen & Hints: gemeinsames Guide-Modul + MindMatch Paar-Blitz
- game-guide.js/.css (neu): gemeinsames "So funktioniert's"-Overlay mit ?-Button
in der Header-Tools-Leiste, Auto-Open beim Erstbesuch (localStorage
mf-guide-seen:<slug>), Escape/Backdrop schliesst, Fokus-Trap; deutsches Inline-
Registry fuer 7 Spiele (Networker bleibt bewusst bei seinem Inline-Guide). API
window.MindfluxGuide = {open, close, registerHintProvider} fuer einheitliche
Tipp-Buttons. Injektion via theme.js nur auf Game-Routen (wie FluxTimer), keine
Template-Edits.
- mindmatch.js: Hint "Paar-Blitz" (3 Ladungen) deckt ~1s ein ungematchtes Paar
auf und kostet +1 Zug -> Score/Sterne degradieren ueber die bestehende
Serverformel (null Backend-Aenderung); Reset in newGame, Verstecken in
finish/cancelGame; .mm-card.hinted-Glow.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WFxcjtc9HNP4VECT6Ur1tE
This commit is contained in:
@@ -0,0 +1,167 @@
|
||||
/* Mindflux – Gemeinsames Guide-Modul „So funktioniert's".
|
||||
Styles für den „?"-Trigger, den Tipp-Button, das Overlay und den MindMatch-Hint-Glow.
|
||||
Theme-bewusst: dunkel als Standard, helle Überschreibungen für data-theme="light". */
|
||||
|
||||
/* ---------- Buttons in der Header-Tools-Leiste ---------- */
|
||||
.mf-guide-trigger,
|
||||
.mf-guide-hint {
|
||||
font: inherit;
|
||||
color: inherit;
|
||||
cursor: pointer;
|
||||
border: 1px solid rgba(255, 255, 255, 0.28);
|
||||
background: rgba(255, 255, 255, 0.06);
|
||||
border-radius: 999px;
|
||||
transition: background-color .2s ease, border-color .2s ease, transform .12s ease;
|
||||
}
|
||||
.mf-guide-trigger {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 2.1rem;
|
||||
height: 2.1rem;
|
||||
font-size: 1.05rem;
|
||||
font-weight: 700;
|
||||
line-height: 1;
|
||||
}
|
||||
.mf-guide-hint {
|
||||
padding: .34rem .8rem;
|
||||
font-size: .85rem;
|
||||
font-weight: 600;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.mf-guide-trigger:hover,
|
||||
.mf-guide-hint:hover:not(:disabled) {
|
||||
background: rgba(255, 255, 255, 0.16);
|
||||
border-color: rgba(255, 255, 255, 0.5);
|
||||
transform: translateY(-1px);
|
||||
}
|
||||
.mf-guide-trigger:focus-visible,
|
||||
.mf-guide-hint:focus-visible {
|
||||
outline: 2px solid currentColor;
|
||||
outline-offset: 2px;
|
||||
}
|
||||
.mf-guide-hint:disabled {
|
||||
opacity: .45;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
/* ---------- Overlay ---------- */
|
||||
.mf-guide-backdrop {
|
||||
position: fixed;
|
||||
inset: 0;
|
||||
z-index: 99999;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 1.25rem;
|
||||
background: rgba(5, 8, 16, 0.72);
|
||||
backdrop-filter: blur(4px);
|
||||
}
|
||||
.mf-guide-backdrop[hidden] { display: none; }
|
||||
|
||||
.mf-guide-panel {
|
||||
width: min(34rem, 100%);
|
||||
max-height: min(82vh, 640px);
|
||||
overflow-y: auto;
|
||||
box-sizing: border-box;
|
||||
padding: 1.4rem 1.5rem 1.6rem;
|
||||
border-radius: 18px;
|
||||
border: 1px solid rgba(255, 255, 255, 0.14);
|
||||
background: #141a26;
|
||||
color: #eef2f8;
|
||||
box-shadow: 0 24px 60px rgba(0, 0, 0, 0.5);
|
||||
animation: mf-guide-in .22s ease;
|
||||
}
|
||||
@keyframes mf-guide-in {
|
||||
from { opacity: 0; transform: translateY(12px) scale(.98); }
|
||||
to { opacity: 1; transform: translateY(0) scale(1); }
|
||||
}
|
||||
.mf-guide-head {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 1rem;
|
||||
margin-bottom: .4rem;
|
||||
}
|
||||
.mf-guide-kicker {
|
||||
font-size: .72rem;
|
||||
letter-spacing: .16em;
|
||||
text-transform: uppercase;
|
||||
opacity: .7;
|
||||
}
|
||||
.mf-guide-close {
|
||||
flex: none;
|
||||
width: 2rem;
|
||||
height: 2rem;
|
||||
border: none;
|
||||
border-radius: 50%;
|
||||
cursor: pointer;
|
||||
font-size: 1.3rem;
|
||||
line-height: 1;
|
||||
color: inherit;
|
||||
background: rgba(255, 255, 255, 0.08);
|
||||
}
|
||||
.mf-guide-close:hover { background: rgba(255, 255, 255, 0.18); }
|
||||
.mf-guide-title {
|
||||
margin: 0 0 .9rem;
|
||||
font-size: 1.3rem;
|
||||
line-height: 1.25;
|
||||
}
|
||||
.mf-guide-steps {
|
||||
margin: 0 0 1rem;
|
||||
padding-left: 1.2rem;
|
||||
display: grid;
|
||||
gap: .5rem;
|
||||
}
|
||||
.mf-guide-steps li { line-height: 1.45; }
|
||||
.mf-guide-tip {
|
||||
margin: 0;
|
||||
padding: .75rem .9rem;
|
||||
border-radius: 12px;
|
||||
line-height: 1.45;
|
||||
background: rgba(120, 170, 255, 0.14);
|
||||
border: 1px solid rgba(120, 170, 255, 0.3);
|
||||
}
|
||||
body.mf-guide-open { overflow: hidden; }
|
||||
|
||||
/* ---------- Helles Theme ---------- */
|
||||
:root[data-theme="light"] .mf-guide-trigger,
|
||||
:root[data-theme="light"] .mf-guide-hint {
|
||||
border-color: rgba(20, 30, 50, 0.28);
|
||||
background: rgba(20, 30, 50, 0.05);
|
||||
}
|
||||
:root[data-theme="light"] .mf-guide-trigger:hover,
|
||||
:root[data-theme="light"] .mf-guide-hint:hover:not(:disabled) {
|
||||
background: rgba(20, 30, 50, 0.12);
|
||||
border-color: rgba(20, 30, 50, 0.45);
|
||||
}
|
||||
:root[data-theme="light"] .mf-guide-backdrop { background: rgba(15, 23, 42, 0.5); }
|
||||
:root[data-theme="light"] .mf-guide-panel {
|
||||
background: #ffffff;
|
||||
color: #16202e;
|
||||
border-color: rgba(20, 30, 50, 0.12);
|
||||
}
|
||||
:root[data-theme="light"] .mf-guide-close { background: rgba(20, 30, 50, 0.08); }
|
||||
:root[data-theme="light"] .mf-guide-close:hover { background: rgba(20, 30, 50, 0.16); }
|
||||
:root[data-theme="light"] .mf-guide-tip {
|
||||
background: rgba(60, 110, 220, 0.12);
|
||||
border-color: rgba(60, 110, 220, 0.28);
|
||||
}
|
||||
|
||||
/* ---------- MindMatch – kurz aufgedecktes Tipp-Paar ---------- */
|
||||
.mm-card.hinted {
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
box-shadow: 0 0 0 2px #ffd54a, 0 0 22px 5px rgba(255, 213, 74, 0.6);
|
||||
border-radius: 14px;
|
||||
animation: mf-hint-pulse 1s ease;
|
||||
}
|
||||
@keyframes mf-hint-pulse {
|
||||
0%, 100% { filter: none; }
|
||||
50% { filter: brightness(1.12); }
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
.mf-guide-panel { animation: none; }
|
||||
.mm-card.hinted { animation: none; }
|
||||
}
|
||||
Reference in New Issue
Block a user