983e57cd8d
- 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
168 lines
4.3 KiB
CSS
168 lines
4.3 KiB
CSS
/* 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; }
|
||
}
|