/** * @file simulator.css * @brief Ergänzungen zum reveal.js-Dracula-Theme: scrollbare Fragen-Folien, Optionen, Auflösung, Werkzeugleiste * @author Björn Runden * @owner Björn Runden * @assist KI-unterstützt (Claude Opus 5.5), geprüft von Björn Runden * @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; } }