:root{
  --bg:var(--color-bg); --panel:var(--color-surface); --ink:var(--color-text); --muted:var(--color-muted); --line:var(--color-line);
  --blue:var(--color-accent-strong); --blue2:var(--color-accent-2-strong); --gold:var(--color-accent); --teal:var(--color-accent-2); --red:var(--color-bad);
  --shadow:var(--shadow-md); --radius:18px;
}
*{box-sizing:border-box} body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--font-body);line-height:1.6}
a{color:var(--blue2)} button,input,select{font:inherit} button{cursor:pointer}

.hero{background:linear-gradient(145deg,var(--color-surface-2),var(--color-surface-3));color:var(--ink);padding:56px 24px 42px;position:relative;overflow:hidden}
.hero:after{content:"";position:absolute;width:520px;height:520px;border:1px solid color-mix(in srgb, var(--ink) 12%, transparent);border-radius:50%;right:-220px;top:-270px;box-shadow:0 0 0 70px color-mix(in srgb, var(--ink) 4%, transparent),0 0 0 140px color-mix(in srgb, var(--ink) 3%, transparent)}
.hero-inner{max-width:1180px;margin:auto;position:relative;z-index:1}.eyebrow{letter-spacing:.13em;text-transform:uppercase;font-size:.78rem;font-weight:800;color:var(--blue)}.hero h1{font-size:clamp(2.4rem,6vw,5.7rem);line-height:.98;margin:.35rem 0 1rem;max-width:900px}.hero p{font-size:1.12rem;max-width:820px;color:var(--muted)}.badges{display:flex;gap:10px;flex-wrap:wrap;margin-top:22px}
main{max-width:1180px;margin:auto;padding:34px 20px 44px}.section{padding:42px 0;border-bottom:1px solid var(--line)}.section:last-child{border-bottom:0}.section-kicker{text-transform:uppercase;letter-spacing:.11em;color:var(--color-accent-text);font-weight:800;font-size:.77rem}.section h2{font-size:clamp(1.8rem,4vw,3rem);line-height:1.08;margin:.25rem 0 .8rem}.lead{font-size:1.08rem;color:var(--muted);max-width:900px}.grid{display:grid;gap:18px}.g2{grid-template-columns:repeat(2,minmax(0,1fr))}.g3{grid-template-columns:repeat(3,minmax(0,1fr))}.g4{grid-template-columns:repeat(4,minmax(0,1fr))}.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:20px;box-shadow:var(--shadow-sm)}.card h3{margin:.05rem 0 .45rem;font-size:1.15rem}.card p:last-child{margin-bottom:0}.soft{background:var(--color-accent-2-tint);border-color:color-mix(in srgb, var(--teal) 40%, transparent)}.gold{background:var(--color-accent-tint);border-color:color-mix(in srgb, var(--gold) 40%, transparent)}.warn{background:color-mix(in srgb, var(--red) 12%, var(--panel));border-color:color-mix(in srgb, var(--red) 40%, transparent)}.callout{border-left:5px solid var(--gold);padding:14px 18px;background:color-mix(in srgb, var(--gold) 10%, var(--panel));border-radius:0 14px 14px 0;margin:18px 0}.formula{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;background:#2b2216;color:#f6f1e6;padding:14px 16px;border-radius:13px;overflow:auto}.pillrow{display:flex;flex-wrap:wrap;gap:8px}.pill{display:inline-flex;align-items:center;gap:5px;border:1px solid var(--line);border-radius:999px;padding:6px 10px;background:var(--panel);font-size:.9rem}.mini{font-size:.9rem;color:var(--muted)}
.table-wrap{overflow:auto;border:1px solid var(--line);border-radius:15px;background:var(--panel)}.d-table .em{font-weight:800;color:var(--blue)}
.tools{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px}.tool{background:var(--panel);border:1px solid var(--line);border-radius:20px;padding:20px}.tool h3{margin-top:0}.controls{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:12px 0}.controls label,.controls .ctl{font-size:.88rem;color:var(--muted)}.controls select,.controls input[type=range],.controls input[type=text]{width:100%;margin-top:5px}.result{min-height:62px;margin-top:12px;padding:13px;border-radius:12px;background:var(--color-surface-2);border:1px solid var(--line)}.result strong{color:var(--blue)}
.piano{position:relative;height:190px;max-width:700px;margin:16px auto 8px;display:flex;user-select:none}.white-key{flex:1;border:1px solid #56636b;background:linear-gradient(#fff,#f3f3ef);border-radius:0 0 7px 7px;display:flex;align-items:flex-end;justify-content:center;padding:12px 4px;font-weight:800;color:#27353e}.white-key:active{background:#e5e0d6}.black-key{position:absolute;width:7.5%;height:118px;background:#1d2429;color:white;border:1px solid #0f1519;border-radius:0 0 6px 6px;top:0;display:flex;align-items:flex-end;justify-content:center;padding:8px 3px;font-size:.67rem;line-height:1.1;text-align:center;z-index:3}.black-key:active{background:#3b4449}
/* ===== Quintenzirkel: außen Dur, innen Moll; Größen relativ zur Breite des Kreises ===== */
.circle-tool{display:grid;grid-template-columns:minmax(0,1fr);gap:22px;align-items:start}
.circle-col{min-width:0}
.circle-wrap{position:relative;container-type:inline-size;width:min(520px,100%);aspect-ratio:1;margin:10px auto}
.circle-ring{position:absolute;border:1px dashed var(--line);border-radius:50%;pointer-events:none}
.circle-ring.outer{inset:8%}.circle-ring.inner{inset:23%}
.circle-core{position:absolute;inset:34%;border-radius:50%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:clamp(.7rem,3.4cqw,.95rem);line-height:1.35;color:var(--muted);pointer-events:none}
.circle-key{position:absolute;display:flex;flex-direction:column;align-items:center;justify-content:center;border:1px solid var(--line);background:var(--panel);color:var(--blue);font-weight:800;line-height:1;padding:0}
.circle-key.major{width:15cqw;height:10.5cqw;margin:-5.25cqw 0 0 -7.5cqw;border-radius:999px;font-size:clamp(.78rem,4.4cqw,1.1rem)}
.circle-key.minor{width:12.5cqw;height:9cqw;margin:-4.5cqw 0 0 -6.25cqw;border-radius:999px;font-size:clamp(.72rem,3.9cqw,1rem);font-weight:700}
.circle-key span{font-size:.78em;line-height:1.05}
.circle-key:hover{border-color:var(--blue)}
.circle-key.is-near{background:var(--color-accent-tint);border-color:color-mix(in srgb,var(--gold) 55%,transparent)}
.circle-key.is-dom{background:var(--color-accent-tint);border:2px dashed var(--color-accent-strong)}.circle-key.is-ref{background:var(--blue);border-color:var(--blue);color:var(--bg)}
.circle-key.is-cmp{background:var(--panel);border:3px solid var(--blue);color:var(--blue)}
.circle-key[data-fn]::after{content:attr(data-fn);position:absolute;top:-2.2cqw;right:-1cqw;min-width:4.2cqw;padding:0 1cqw;border-radius:999px;background:var(--ink);color:var(--bg);font-size:clamp(.6rem,2.6cqw,.72rem);font-weight:800;line-height:1.5}
.cz-note{margin-top:10px;padding:10px 12px;border-left:3px solid var(--color-accent-strong);border-radius:8px;background:var(--color-accent-tint);font-size:.92rem;line-height:1.45}.cz-tag{display:inline-block;min-width:1.4em;padding:0 .4em;border-radius:999px;background:var(--ink);color:var(--bg);font-size:.8em;font-weight:800;text-align:center}.circle-key:focus-visible,.circle-info button:focus-visible{outline:2px solid var(--blue);outline-offset:2px}
.circle-info{margin-top:10px;min-width:0}.circle-info p{margin:0 0 .6rem}
.cz-chips{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:12px}
.cz-chip{padding:3px 12px;border-radius:999px;font-weight:800;border:1px solid var(--line);background:var(--panel)}
.cz-chip.is-ref{background:var(--blue);border-color:var(--blue);color:var(--bg)}.cz-chip.is-cmp{background:var(--panel);border:2px solid var(--blue);color:var(--blue)}
.cz-rel h4{margin:0 0 .4rem;font-size:1.05rem}
.cz-near{display:inline-block;padding:2px 10px;border-radius:12px;background:var(--color-accent-tint);border:1px solid color-mix(in srgb,var(--gold) 45%,transparent);font-size:.85rem;font-weight:700}
.cz-names{margin:.2rem 0 .8rem}.cz-names dt{font-weight:800;color:var(--blue);margin-top:.55rem}.cz-names dt:first-child{font-size:1.1rem;margin-top:0}
.cz-names dd{margin:.1rem 0 0;font-size:.92rem}
.cz-back span,.cz-ways>span,.cz-facts li span{display:block;font-size:.75rem;text-transform:uppercase;letter-spacing:.08em;font-weight:800;color:var(--color-accent-text)}
.cz-back{margin:0 0 .8rem}.cz-ways{margin:0 0 .8rem}.cz-ways ul{margin:.2rem 0 0;padding:0;list-style:none}.cz-ways li{margin:.15rem 0}
.cz-step{color:var(--muted);font-size:.85em}
.cz-facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;margin:0 0 .4rem;padding:0;list-style:none}.cz-facts li{font-size:.92rem}
.cz-figs{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin:12px 0}
.cz-fig{margin:0;padding:8px 10px;border:1px solid var(--line);border-radius:12px;background:var(--panel);text-align:center;color:var(--ink)}
.cz-fig svg{display:block;width:min(100%,190px);height:auto;margin:0 auto}.cz-fig figcaption{font-size:.85rem;color:var(--muted);line-height:1.3}.cz-fig figcaption strong{color:var(--ink)}
.cz-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
@media(min-width:900px){.circle-tool{grid-template-columns:minmax(0,500px) minmax(0,1fr)}.circle-info{margin-top:0}}
.step-grid{display:grid;grid-template-columns:repeat(16,1fr);gap:6px;margin:14px 0}.step{aspect-ratio:1;border:1px solid var(--line);background:var(--color-surface-2);border-radius:7px}.step:nth-child(4n+1){border-left:3px solid var(--gold)}.step.on{background:var(--teal);border-color:var(--teal)}
.scorefig{margin:18px 0;background:var(--panel);border:1px solid var(--line);border-radius:18px;padding:12px;overflow:hidden}.scorefig img{width:100%;height:auto;display:block;border-radius:10px}.scorefig figcaption{font-size:.86rem;color:var(--muted);padding:9px 4px 2px}
.scoregrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}
.notechip{transition:background-color .12s,box-shadow .12s}.notechip.playing{background:var(--gold);color:var(--color-primary-content);box-shadow:0 0 0 2px var(--gold)}
.notation{font-family:"Times New Roman",serif;font-size:1.05rem}.roman{font-family:Georgia,serif;font-weight:700}.notechips{display:flex;flex-wrap:wrap;gap:8px;margin:8px 0}.notechip{background:var(--color-accent-2-tint);border:1px solid var(--line);border-radius:9px;padding:7px 10px;font-weight:800;color:var(--blue)}
.quiz-q{padding:15px 0;border-bottom:1px solid var(--line)}.quiz-q:last-child{border-bottom:0}.quiz-q fieldset{border:0;padding:0;margin:0}.quiz-q legend{font-weight:800;margin-bottom:8px}.quiz-q label{display:flex;align-items:center;gap:8px;margin:6px 0}.feedback{margin-top:8px;font-size:.92rem}.correct{color:var(--color-good)}.wrong{color:var(--red)}.checklist label{display:flex;gap:10px;align-items:flex-start;margin:9px 0}.checklist input{margin-top:5px}.glossary{columns:2;column-gap:18px;margin-top:16px}.term{break-inside:avoid;border:1px solid var(--line);background:var(--panel);border-radius:12px;padding:12px;margin:0 0 10px}.term b{color:var(--blue)}
.sources li{margin:8px 0}.tag{font-size:.76rem;text-transform:uppercase;letter-spacing:.06em;font-weight:800;color:var(--color-accent-2-text)}.source-local{border-left:4px solid var(--gold)}.source-web{border-left:4px solid var(--teal)}

@media(max-width:900px){.g3,.g4{grid-template-columns:repeat(2,minmax(0,1fr))}.tools,.scoregrid{grid-template-columns:1fr}.glossary{columns:1}}
@media(max-width:640px){.g2,.g3,.g4{grid-template-columns:1fr}.controls{grid-template-columns:1fr}.hero{padding-top:42px}.section{padding:34px 0}.step-grid{gap:4px}.tool{padding:16px}}
@media print{.topbar,.interactive-only,.d-btn,.hero .badges{display:none!important}.hero{background:white;color:black;padding:20px 0}.hero p{color:#333}.section{break-inside:avoid}.card,.tool,details{box-shadow:none}.scorefig{break-inside:avoid}body{background:white}main{max-width:none}}
.d-table thead{color:var(--muted)}
.tool{min-width:0}
@media(max-width:900px){.tools,.scoregrid{grid-template-columns:minmax(0,1fr)}}

/* ===== Notenschlüssel-Trainer ===== */
#clefTrainer .ct-settings{display:grid;grid-template-columns:auto 1fr;gap:18px 28px;align-items:start;margin:14px 0 18px}
#clefTrainer fieldset{border:0;margin:0;padding:0;min-width:0}
#clefTrainer legend,.ct-range-head{font-weight:800;font-size:.9rem;margin-bottom:8px}
.ct-range-head{display:flex;justify-content:space-between;gap:12px;align-items:baseline}.ct-range-head output{font-weight:600;color:var(--color-accent-text);text-align:right}
.ct-toggles{grid-column:1/-1;display:flex;flex-wrap:wrap;gap:10px 28px}
.ct-toggle{display:flex;align-items:center;gap:10px;min-height:44px;cursor:pointer}.ct-toggle small{color:var(--muted)}
/* Regler mit zwei Griffen: zwei übereinanderliegende Schieber, nur die Griffe reagieren */
.dual-range{--lo:2;--hi:3;--min:2;--span:2;position:relative;height:28px;margin:4px 0 0}
.dual-range::before{content:"";position:absolute;left:0;right:0;top:50%;height:6px;margin-top:-3px;border-radius:6px;background:var(--color-surface-3)}
.dual-fill{position:absolute;top:50%;height:6px;margin-top:-3px;border-radius:6px;background:var(--color-primary);left:calc((var(--lo) - var(--min))*(100% - 22px)/var(--span) + 11px);width:calc((var(--hi) - var(--lo))*(100% - 22px)/var(--span))}
.dual-range input[type=range]{position:absolute;inset:0;width:100%;height:28px;margin:0;background:none;pointer-events:none;-webkit-appearance:none;appearance:none}
.dual-range input[type=range]::-webkit-slider-runnable-track{background:none;height:28px}
.dual-range input[type=range]::-moz-range-track{background:none;height:28px}
.dual-range input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;pointer-events:auto;width:22px;height:22px;margin-top:3px;border-radius:50%;border:3px solid var(--color-primary);background:var(--color-surface);cursor:grab;box-shadow:var(--shadow-sm)}
.dual-range input[type=range]::-moz-range-thumb{pointer-events:auto;width:16px;height:16px;border-radius:50%;border:3px solid var(--color-primary);background:var(--color-surface);cursor:grab}
.dual-range input[type=range]:focus-visible::-webkit-slider-thumb{outline:2px solid var(--color-primary);outline-offset:2px}
.dual-range input[type=range]:focus-visible::-moz-range-thumb{outline:2px solid var(--color-primary);outline-offset:2px}
.oct-ticks{display:flex;justify-content:space-between;padding:0 4px;font-size:.8rem;color:var(--muted);font-family:var(--font-heading)}
.ct-stage{position:relative;border:1px solid var(--line);border-radius:18px;background:var(--color-surface-2);padding:16px 16px 18px;transition:border-color .25s,box-shadow .25s;overflow:hidden}
.ct-top{display:flex;justify-content:space-between;align-items:center;gap:12px;font-weight:700;font-size:.92rem}
.ct-dots{display:flex;gap:5px}.ct-dot{width:10px;height:10px;border-radius:50%;background:var(--color-surface-3);border:1px solid var(--line)}
.ct-dot.now{border-color:var(--color-primary);background:transparent}.ct-dot.ok{background:var(--color-good);border-color:var(--color-good)}.ct-dot.bad{background:var(--color-bad);border-color:var(--color-bad)}
.ct-staff{display:flex;justify-content:center;color:var(--ink);padding:6px 0}.ct-staff svg{width:min(100%,300px);height:auto}
.ct-badge{position:absolute;right:16px;top:44px;width:54px;height:54px;border-radius:50%;display:grid;place-items:center;color:#fff;opacity:0;transform:scale(.4);pointer-events:none}
.ct-answer label{display:block;font-weight:700;margin-bottom:6px}
.ct-row{display:flex;gap:10px;flex-wrap:wrap}.ct-row .d-input{flex:1 1 160px;min-width:0;font-size:1.1rem}
.ct-feedback{min-height:1.6em;margin-top:10px;font-weight:700}.ct-feedback.ok{color:var(--color-good)}.ct-feedback.bad{color:var(--color-bad)}
.ct-stage.is-ok{border-color:var(--color-good);box-shadow:0 0 0 4px color-mix(in srgb,var(--color-good) 28%,transparent);animation:ct-pulse .6s ease}
.ct-stage.is-bad{border-color:var(--color-bad);box-shadow:0 0 0 4px color-mix(in srgb,var(--color-bad) 26%,transparent);animation:ct-shake .45s ease}
.ct-stage.is-ok .ct-badge{background:var(--color-good);animation:ct-pop .5s cubic-bezier(.3,1.6,.5,1) forwards}
.ct-stage.is-bad .ct-badge{background:var(--color-bad);animation:ct-pop .5s cubic-bezier(.3,1.6,.5,1) forwards}
@keyframes ct-pop{to{opacity:1;transform:scale(1)}}
@keyframes ct-pulse{0%{transform:scale(1)}40%{transform:scale(1.015)}100%{transform:scale(1)}}
@keyframes ct-shake{0%,100%{transform:translateX(0)}20%{transform:translateX(-7px)}40%{transform:translateX(7px)}60%{transform:translateX(-5px)}80%{transform:translateX(4px)}}
@media(prefers-reduced-motion:reduce){.ct-stage.is-ok,.ct-stage.is-bad{animation:none}.ct-stage.is-ok .ct-badge,.ct-stage.is-bad .ct-badge{animation:none;opacity:1;transform:none}}
.ct-result{text-align:center;border:1px solid var(--line);border-radius:18px;background:var(--color-surface-2);padding:26px 18px}
.ct-score{font-family:var(--font-heading);font-size:clamp(2.6rem,9vw,4rem);line-height:1;color:var(--color-accent-text)}
@media(max-width:640px){#clefTrainer .ct-settings{grid-template-columns:1fr}}
.step.playing{box-shadow:0 0 0 2px var(--gold);transform:translateY(-2px)}@media(prefers-reduced-motion:reduce){.step.playing{transform:none}}
/* Tempoanzeige wie ein digitales Metronom: große Zahl, darunter die Tempobezeichnung */
.tempo-display{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;padding:14px 16px;border:1px solid var(--line);border-radius:16px;background:var(--color-surface-2);text-align:center}
.tempo-num{display:flex;align-items:baseline;justify-content:center;gap:8px;line-height:1}
.tempo-num span{font-family:ui-monospace,"SF Mono",Menlo,Consolas,monospace;font-variant-numeric:tabular-nums;font-weight:700;font-size:clamp(2.8rem,9vw,4rem);letter-spacing:-.02em;min-width:3ch;text-align:right}
.tempo-num small{font-size:.9rem;font-weight:800;letter-spacing:.12em;color:var(--muted)}
.tempo-name{font-family:var(--font-heading);font-style:italic;font-size:1.3rem;color:var(--color-accent-text)}

/* ===== Tonleiter-Generator ===== */
.scale-controls{align-items:start}
.scale-clef{border:0;margin:0;padding:0;min-width:0;font-size:.88rem;color:var(--muted)}.scale-clef legend{padding:0;margin-bottom:5px}
.scale-clef .d-join{display:flex}.scale-clef .d-btn{flex:1}
#scaleResult{margin:0 0 14px}#scaleResult>strong{font-size:1.1rem}
.scale-staff{margin:8px 0 10px;color:var(--ink)}.scale-staff svg{display:block;width:100%;height:auto;margin:0 auto}
.scale-ext{display:flex;align-items:center;gap:12px;min-height:44px;cursor:pointer;font-weight:700;color:var(--ink)}
#scaleTool{position:relative}
@media(min-width:641px){.scale-ext{position:absolute;right:20px;bottom:20px}}
.degs{word-spacing:.3em}
.sn-name{font-family:var(--font-body)}

/* ===== Akkord-Baukasten ===== */
.chord-controls{align-items:start}
.chord-symbol-ctl{grid-column:1/-1}
.chord-input-row{display:flex;width:100%;margin-top:5px}
#chordInput{flex:1 1 auto;min-width:0;margin-top:0!important;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:1.05rem;font-weight:700}
#chordSup{flex:0 0 auto;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
#chordSup[aria-pressed="true"]{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-primary-content)}
#playChord{margin:14px 0}
.chord-staff{margin:10px 0}.chord-staff svg{display:block;width:100%;max-width:280px;height:auto;margin:0}
/* VexFlow zeichnet fest in Schwarz (fill/stroke="black"); im Dunkelmodus und für die Themenfarbe übersteuern wir das */
.notensatz svg *{fill:var(--ink)!important;stroke:var(--ink)!important}
.notensatz svg .playing,.notensatz svg .playing *{fill:var(--gold)!important;stroke:var(--gold)!important}
.notensatz svg .sn-name{stroke:none!important}
.notensatz svg .playing.sn-name{text-decoration:underline;text-underline-offset:3px}
.note-value{display:inline-block;line-height:0}
