Files
2026-10-30 10:11:43 +01:00

201 lines
8.9 KiB
CSS
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* @file simulator.css
* @brief Ergänzungen zum reveal.js-Dracula-Theme: scrollbare Fragen-Folien, Optionen, Auflösung, Werkzeugleiste
* @author Björn Runden <br@runden.de>
* @owner Björn Runden <br@runden.de>
* @assist KI-unterstützt (Claude Opus 5.5), geprüft von Björn Runden <br@runden.de>
* @version 0.1.1 (29.10.2026)
*/
:root {
--bg: #282a36;
--line: #44475a;
--fg: #f8f8f2;
--comment: #6272a4;
--cyan: #8be9fd;
--green: #50fa7b;
--orange: #ffb86c;
--pink: #ff79c6;
--purple: #bd93f9;
--red: #ff5555;
--yellow: #f1fa8c;
--tb-h: 3rem;
--gutter: max(16px, 4vw);
/* reveal.js skaliert hier nicht (disableLayout) – Schrift relativ zum Fenster */
--r-main-font-size: clamp(15px, 0.6vw + 11px, 21px);
--r-heading-font: var(--r-main-font);
}
html, body { background: var(--bg); }
/* ---------------------------------------------------------------- Werkzeugleiste */
.toolbar {
position: fixed;
inset: 0 0 auto 0;
z-index: 50;
min-height: var(--tb-h);
padding: calc(env(safe-area-inset-top, 0px) + 0.4rem) var(--gutter) 0.4rem;
box-sizing: border-box;
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 0.4rem 1rem;
background: #21222c;
border-bottom: 1px solid var(--line);
color: var(--fg);
font: 15px/1.3 -apple-system, BlinkMacSystemFont, "Segoe UI", Ubuntu, Cantarell, Roboto, sans-serif;
}
.tb-title { color: var(--purple); font-weight: 600; }
.tb-info { color: var(--cyan); font-variant-numeric: tabular-nums; }
#tb-timer.low { color: var(--red); font-weight: 700; }
.tb-buttons { margin-left: auto; display: flex; flex-wrap: wrap; gap: 0.3rem; }
/* ---------------------------------------------------------------- Buttons */
.btn {
font: inherit;
font-size: 0.9em;
color: var(--fg);
background: var(--line);
border: 1px solid var(--comment);
border-radius: 6px;
padding: 0.45em 1em;
cursor: pointer;
}
.btn:hover:not(:disabled) { border-color: var(--purple); color: var(--purple); }
.btn:disabled { opacity: 0.4; cursor: default; }
.btn.primary { background: var(--purple); border-color: var(--purple); color: var(--bg); font-weight: 600; }
.btn.primary:hover { background: var(--pink); border-color: var(--pink); color: var(--bg); }
.btn.small { padding: 0.25em 0.7em; font-size: 0.85em; }
/* ---------------------------------------------------------------- Folien */
.reveal .slides { text-align: left; }
.reveal .slides > section {
top: 0;
height: 100%;
overflow-y: auto;
box-sizing: border-box;
/* --tb-h wird per JS auf die tatsächliche (ggf. umbrochene) Höhe der Werkzeugleiste gesetzt */
padding: calc(var(--tb-h) + 1.5rem) var(--gutter) 4.5rem;
line-height: 1.45;
}
.reveal .slides > section > * { max-width: 62rem; margin-left: auto; margin-right: auto; }
.reveal h1 { font-size: 2em; color: var(--purple); }
.reveal h2 { font-size: 1.6em; color: var(--purple); }
.reveal h3 { font-size: 1.15em; color: var(--pink); margin: 0 0 0.6em; }
.reveal code { font-family: var(--r-code-font); color: var(--green); font-size: 0.92em; }
.reveal small { color: var(--comment); font-size: 0.85em; }
.reveal p { margin: 0 auto 0.8em; }
/* ---------------------------------------------------------------- Startseite */
.card {
background: rgba(68, 71, 90, 0.35);
border: 1px solid var(--line);
border-radius: 10px;
padding: 1.2em 1.4em;
margin-bottom: 1.2em;
}
.card.resume { border-color: var(--orange); }
.setup fieldset { border: 0; padding: 0; margin: 0 0 1em; }
.setup legend { color: var(--cyan); font-weight: 600; margin-bottom: 0.3em; }
.exam-group { margin-bottom: 0.4em; }
.exam-level { display: block; color: var(--orange); font-size: 0.9em; }
.choice { display: flex; gap: 0.6em; align-items: baseline; padding: 0.2em 0; cursor: pointer; }
.choice small { display: inline-block; margin-left: 0.4em; }
.inline { display: inline-flex; gap: 0.5em; align-items: center; margin-right: 1.5em; }
.setup input[type=number], .setup select {
font: inherit; color: var(--fg); background: var(--bg); border: 1px solid var(--comment);
border-radius: 5px; padding: 0.2em 0.4em;
}
.setup input[type=number] { width: 5em; }
input[type=radio], input[type=checkbox] { accent-color: var(--purple); width: 1.05em; height: 1.05em; }
.footnote { color: var(--comment); font-size: 0.8em; }
.warn-text { color: var(--orange); }
/* ---------------------------------------------------------------- Frage */
.q-head {
display: flex; flex-wrap: wrap; gap: 0.3em 1.2em; align-items: baseline;
border-bottom: 1px solid var(--line); padding-bottom: 0.5em; margin-bottom: 1em; font-size: 0.85em;
}
.q-no { color: var(--purple); font-weight: 700; }
.q-obj { color: var(--comment); }
.flag { margin-left: auto; color: var(--orange); cursor: pointer; display: inline-flex; gap: 0.4em; align-items: center; }
.q-text { font-size: 1.1em; margin-bottom: 0.8em; }
.q-code {
background: #21222c; border: 1px solid var(--line); border-radius: 6px; padding: 0.7em 1em;
overflow-x: auto; font-size: 0.85em; width: auto; box-shadow: none; margin-bottom: 1em;
}
.reveal pre.q-code code { color: var(--fg); max-height: none; padding: 0; white-space: pre; }
.q-hint { color: var(--yellow); font-style: italic; }
/* reveal-Theme setzt Listen auf inline-block mit Einzug – für Optionen/Erläuterungen aufheben */
.reveal ol.options, .reveal ul.explain { display: block; list-style: none; padding: 0; margin: 0 auto 1em; }
.reveal ol.options > li, .reveal ul.explain > li { margin-left: 0; }
.option label {
display: flex; gap: 0.8em; align-items: baseline; padding: 0.55em 0.9em; margin-bottom: 0.45em;
border: 1px solid var(--line); border-radius: 8px; cursor: pointer; background: rgba(68, 71, 90, 0.25);
}
.option label:hover { border-color: var(--purple); }
.option:has(input:checked) label { border-color: var(--purple); background: rgba(189, 147, 249, 0.12); }
.letter { color: var(--cyan); font-weight: 700; min-width: 1.2em; }
.locked .option label { cursor: default; }
.locked .option.is-correct label { border-color: var(--green); background: rgba(80, 250, 123, 0.1); }
.locked .option.is-wrong label { border-color: var(--red); background: rgba(255, 85, 85, 0.12); }
.locked .option.is-missed label { border-style: dashed; }
input.fill {
/* block statt inline-block: nur so greift margin:auto der Inhaltsspalte (sonst klebt das Feld links) */
display: block;
font-family: var(--r-code-font); font-size: 1em; width: 100%; box-sizing: border-box;
color: var(--green); background: #21222c; border: 1px solid var(--comment); border-radius: 6px;
padding: 0.5em 0.8em; margin-bottom: 1em;
}
input.fill:focus { outline: none; border-color: var(--purple); }
input.fill.is-correct { border-color: var(--green); }
input.fill.is-wrong { border-color: var(--red); color: var(--red); }
/* ---------------------------------------------------------------- Auflösung */
.solution {
border-left: 4px solid var(--pink); background: rgba(68, 71, 90, 0.3);
border-radius: 0 8px 8px 0; padding: 1em 1.2em; margin-top: 0.5em;
}
.verdict { font-weight: 700; font-size: 1.15em; }
.verdict.right { color: var(--green); }
.verdict.wrong { color: var(--red); }
.verdict.skipped { color: var(--orange); }
.explain li { padding: 0.25em 0; }
.explain .mark { font-weight: 600; margin-right: 0.3em; }
.explain li.ok .mark { color: var(--green); }
.explain li.no .mark { color: var(--red); }
.explanation { color: var(--fg); border-top: 1px solid var(--line); padding-top: 0.6em; }
.refs { color: var(--comment); font-size: 0.85em; margin-top: 0.6em; }
/* ---------------------------------------------------------------- Ergebnis */
.big { font-size: 1.5em; color: var(--cyan); }
.table-wrap { overflow-x: auto; }
.reveal table { border-collapse: collapse; margin: 0 0 1em; font-size: 0.9em; }
.reveal table th, .reveal table td { border-bottom: 1px solid var(--line); padding: 0.35em 0.8em; text-align: left; }
.bar { display: inline-block; width: 6em; height: 0.6em; background: var(--line); border-radius: 3px; vertical-align: middle; }
.bar > span { display: block; height: 100%; background: var(--green); border-radius: 3px; }
.actions .btn { margin: 0 0.4em 0.4em 0; }
/* ---------------------------------------------------------------- Meldungen */
.toast-box {
position: fixed; z-index: 60; right: var(--gutter); bottom: calc(env(safe-area-inset-bottom, 0px) + 3.5rem);
display: flex; flex-direction: column; gap: 0.4rem; max-width: min(28rem, calc(100vw - 32px));
}
.toast {
background: var(--line); color: var(--fg); border-left: 4px solid var(--cyan); border-radius: 6px;
padding: 0.6em 0.9em; font: 14px/1.35 -apple-system, BlinkMacSystemFont, "Segoe UI", Ubuntu, Roboto, sans-serif;
box-shadow: 0 4px 14px rgba(0, 0, 0, 0.4);
}
.toast.warn { border-left-color: var(--orange); }
.toast.error { border-left-color: var(--red); }
/* reveal-Steuerung nicht über den Inhalt legen */
.reveal .controls { bottom: calc(env(safe-area-inset-bottom, 0px) + 12px); right: 12px; }
@media (max-width: 600px) {
.tb-buttons { margin-left: 0; }
.flag { margin-left: 0; }
}