:root{font-family:system-ui,-apple-system,Hiragino Sans,Yu Gothic UI,sans-serif;line-height:1.5;color-scheme:light dark}*{box-sizing:border-box}body{margin:0;min-height:100vh}.app{max-width:560px;margin:0 auto;padding:16px;text-align:left}h1{font-size:1.3rem;margin:0 0 16px}h2{font-size:1.05rem;margin:28px 0 6px}.note{font-size:.85rem;opacity:.75;margin:0 0 8px}.intro{padding:4px 14px 12px;border-radius:12px;background:#4f6bed14}.intro dl{margin:0}.intro dt{font-weight:700;margin-top:10px}.intro dd{margin:2px 0 0;font-size:.9rem}.list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px}.item{display:flex;gap:12px;align-items:flex-start;padding:10px;border:1px solid #8883;border-radius:12px}.item .btns{display:flex;flex-direction:column;gap:6px;flex:none}.item .text{font-size:.9rem;min-width:0}.item .title{font-weight:700}.item .symbol{font-weight:400;opacity:.7;margin-left:4px}.item .meta{font-size:.8rem;opacity:.7;margin-bottom:2px}button{min-height:44px;padding:8px 12px;border:1px solid #8884;border-radius:10px;font-size:.95rem;cursor:pointer;background:#8881;color:inherit;touch-action:manipulation}button:active{transform:scale(.98)}button.play{min-width:96px;background:#4f6bed22;border-color:#4f6bed66;font-weight:600}button.play.sub{font-weight:400}button.primary{width:100%;min-height:64px;font-size:1.1rem;background:#4f6bed;color:#fff;border-color:transparent}button.sub{font-size:.85rem}button.stop{margin-top:20px;width:100%}.roll{display:block;width:100%;height:auto;border-radius:10px;border:1px solid #8884;overflow:hidden}.roll .row-w{fill:#f6f7fc}.roll .row-b{fill:#e4e7f3}.roll .key-w{fill:#fff;stroke:#0002;stroke-width:.5}.roll .key-b{fill:#3a3a4a}.roll .key-lit{fill:#ffb020}.roll .key-label{font-size:8px;fill:#555}.roll .oct-line{stroke:#0003;stroke-width:.7}.roll .note{fill:#5b74f0}.roll .note-lit{fill:#ff9f1a}.roll .playhead{stroke:#e0245e;stroke-width:1.5}.roll .roll-hint{font-size:11px;fill:#778}.roll-panel{position:sticky;top:0;z-index:5;margin:0 -16px 8px;padding:8px 16px;background:Canvas;border-bottom:1px solid #8883}.roll-title{font-size:.85rem;margin:0 0 4px;font-weight:700}.back{min-height:36px;padding:4px 10px;font-size:.85rem;margin-bottom:8px}.ref-link{width:100%;margin:8px 0 4px;text-align:left;background:#4f6bed14;border-color:#4f6bed55}button.level{width:100%;display:flex;flex-direction:column;align-items:flex-start;gap:4px;text-align:left;padding:12px}button.level:disabled{opacity:.5;cursor:not-allowed}.level-head{display:flex;gap:8px;align-items:baseline}.level-no{font-weight:700;color:#4f6bed}.level-title{font-weight:700}.level-desc{font-size:.85rem;opacity:.8}.level-status{font-size:.8rem;opacity:.7}.storage-note{margin-top:28px}button.reset{margin-top:12px;width:100%;opacity:.7}.quiz-top{display:flex;justify-content:space-between;align-items:center}.counter{font-size:.9rem;opacity:.75}.bar{width:100%;height:8px;accent-color:#4f6bed}.prompt{font-size:1.15rem;margin:20px 0 12px}button.listen{width:100%;min-height:72px;font-size:1.1rem;font-weight:700;background:#4f6bed;color:#fff;border-color:transparent;margin-bottom:16px}.choices{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px}button.choice{width:100%;min-height:56px;font-size:1.05rem;text-align:left;padding:10px 16px}button.choice:disabled{cursor:default;color:inherit}button.choice.correct{background:#2e9e5b33;border-color:#2e9e5b;font-weight:700}button.choice.wrong{background:#d3333333;border-color:#d33}button.choice.dim{opacity:.45}.feedback{margin-top:18px;padding:14px;border-radius:12px;border:1px solid #8884}.feedback.ok{background:#2e9e5b18}.feedback.ng{background:#d3333318}.feedback p{margin:6px 0 14px;font-size:.95rem}.verdict{font-weight:700;font-size:1.1rem}.score{text-align:center;padding:20px 14px;border-radius:14px;margin:8px 0}.score.ok{background:#2e9e5b22}.score.ng{background:#d3333318}.score .percent{font-size:3rem;font-weight:800;line-height:1.1}.wrong-item{border-color:#d3333366}.actions{display:flex;flex-direction:column;gap:10px;margin-top:24px}.volume{display:flex;align-items:center;gap:12px;margin-bottom:16px}.volume input{flex:1}.error{color:#d33}
