*{box-sizing:border-box}:root{--ink: #33305a;--ink-soft: #6b668f;--card: #fffdf6;--accent: #7e6bd9;--good: #13a04c;--bad: #e23d3d;--warn: #e08b00}html,body,#root{height:100%}body{margin:0;font-family:Segoe UI,Trebuchet MS,system-ui,sans-serif;color:var(--ink);background:radial-gradient(1200px 600px at 10% -10%,#ffe9f3 0%,transparent 60%),radial-gradient(1000px 700px at 110% 10%,#e3f4ff 0%,transparent 55%),linear-gradient(165deg,#fdf3ff,#eef4ff 55%,#fff7e3);overflow:hidden}.app{position:relative;height:100vh;height:100dvh;max-width:920px;margin:0 auto;padding:10px 18px 14px;display:flex;flex-direction:column;overflow:hidden}.topbar{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}h1{margin:0;font-size:clamp(1.25rem,2.6vw,1.75rem);font-weight:800;letter-spacing:.5px;white-space:nowrap}.mascot{display:inline-block;animation:bounce 2.2s ease-in-out infinite}@keyframes bounce{0%,to{transform:translateY(0) rotate(-4deg)}50%{transform:translateY(-6px) rotate(5deg)}}.stats{display:flex;gap:7px;flex-wrap:wrap}.stat{background:#fffc;border:2px solid #efe9ff;border-radius:999px;padding:3px 11px;font-size:.85rem;font-weight:600;color:var(--ink-soft);box-shadow:0 3px 10px #5a469614;white-space:nowrap}.stat b{color:var(--ink);font-size:.95rem}.stat.hot{border-color:#ffce9e;background:#fff3e4;animation:pulse .9s ease-in-out infinite}@keyframes pulse{50%{transform:scale(1.06)}}.top-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.icon-btn{border:2px solid #efe9ff;background:#fffc;border-radius:999px;padding:5px 12px;font-weight:700;font-size:.85rem;color:var(--ink);cursor:pointer;box-shadow:0 3px 10px #5a469614;transition:transform .1s,background .15s}.icon-btn:hover{background:#fff;transform:translateY(-1px)}.seg{display:inline-flex;background:#f1edff;border-radius:999px;padding:3px;gap:2px}.seg button{border:none;background:transparent;border-radius:999px;padding:5px 12px;font-weight:700;font-size:.83rem;color:var(--ink-soft);cursor:pointer;transition:background .15s,color .15s;white-space:nowrap}.seg button.on{background:var(--accent);color:#fff;box-shadow:0 2px 8px #7e6bd966}.card{flex:1;min-height:0;display:flex;flex-direction:column;background:var(--card);border-radius:22px;box-shadow:0 14px 40px #503c8224;padding:8px 16px 12px;margin-top:8px}.staff-wrap{flex:1;min-height:120px;display:flex;justify-content:center}.staff{width:100%;height:100%}.ng-pop{transform-box:fill-box;transform-origin:center;animation:ngpop .3s cubic-bezier(.3,1.6,.6,1)}@keyframes ngpop{0%{transform:scale(1.5)}}.ng-shake{animation:shake .4s ease}@keyframes shake{20%{transform:translate(-6px)}40%{transform:translate(5px)}60%{transform:translate(-3px)}80%{transform:translate(2px)}}.active-marker{transform-box:fill-box;animation:bob 1s ease-in-out infinite}@keyframes bob{0%,to{transform:translateY(0)}50%{transform:translateY(-5px)}}.status-area{flex:none;min-height:128px;display:flex;align-items:stretch}.meter{position:relative;width:100%;padding:2px 8px 0}.m-progress{position:absolute;top:-15px;right:8px;background:#f1edff;color:var(--accent);border-radius:999px;padding:2px 10px;font-size:.75rem;font-weight:800}.meter-flags{position:relative;height:58px}.meter-flag{position:absolute;transform:translate(-50%);display:flex;flex-direction:column;align-items:center;color:var(--ink-soft);transition:transform .12s,color .12s;line-height:1.05}.note-icon{vertical-align:-.18em}.meter-flag .glyph{display:block;height:26px;margin-bottom:1px}.meter-flag .fname{font-size:.64rem;font-weight:800;text-transform:uppercase;letter-spacing:.4px}.meter-flag .beats{font-size:.64rem;font-weight:600;opacity:.75}.meter-flag.now{color:var(--accent);transform:translate(-50%) scale(1.22)}.meter-track{position:relative;height:13px;border-radius:999px;background:linear-gradient(90deg,#ffd9e4 0% 34.7%,#ffe9c7 34.7% 57.8%,#d9f2d4 57.8% 80.9%,#d7e8ff 80.9% 100%);border:2px solid #ffffff;box-shadow:inset 0 1px 4px #503c8226;overflow:hidden}.meter-fill{position:absolute;inset:0 auto 0 0;background:linear-gradient(90deg,var(--accent),#b59df5);border-radius:999px}.meter-caption{margin-top:7px;text-align:center;font-size:.9rem;color:var(--ink-soft);font-weight:600;min-height:1.35em}.meter-caption b,.meter.live .meter-caption{color:var(--ink)}.ok-txt{color:var(--good);font-weight:700}.no-txt{color:var(--bad);font-weight:700}.dim{opacity:.65;font-weight:500}.summary{width:100%;text-align:center}.pop{animation:pop .25s cubic-bezier(.3,1.6,.6,1)}@keyframes pop{0%{transform:scale(.88);opacity:0}}.summary-head{display:flex;justify-content:center;align-items:baseline;gap:10px;flex-wrap:wrap}.headline{font-size:1.15rem;font-weight:800}.gained{font-weight:800;font-size:.9rem;color:#b8860b;background:#fff4d1;border-radius:999px;padding:2px 11px;animation:pop .35s cubic-bezier(.3,1.6,.6,1)}.summary-rows{margin:6px auto 8px;display:inline-flex;flex-direction:column;gap:4px;text-align:left;font-size:.88rem}.frow{display:flex;align-items:center;gap:8px}.chip{flex:none;width:20px;height:20px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-weight:900;color:#fff;font-size:.78rem}.chip.ok{background:var(--good)}.chip.no{background:var(--bad)}.fa-name{color:var(--ink-soft)}.recap{display:flex;justify-content:center;gap:6px;flex-wrap:wrap;margin:8px 0 10px}.recap-chip{border-radius:999px;padding:4px 12px;font-weight:800;font-size:.85rem;color:#fff}.rc-correct{background:var(--good)}.rc-partial{background:var(--warn)}.rc-wrong{background:var(--bad)}.next-btn{border:none;background:var(--accent);color:#fff;font-size:.95rem;font-weight:800;border-radius:999px;padding:9px 22px;cursor:pointer;box-shadow:0 4px #5d4bb5;transition:transform .08s,box-shadow .08s}.next-btn:active{transform:translateY(3px);box-shadow:0 1px #5d4bb5}.key-hint{font-weight:500;opacity:.75;font-size:.8rem}.pad{flex:none;display:grid;grid-template-columns:repeat(7,1fr);gap:9px;margin-top:10px;touch-action:none;user-select:none;-webkit-user-select:none}.note-btn{--c: #ccc;border:none;background:var(--c);border-radius:16px;padding:10px 0 7px;display:flex;flex-direction:column;align-items:center;gap:0;cursor:pointer;box-shadow:0 5px #00000038;transition:transform .08s,box-shadow .08s,filter .15s;touch-action:none}.note-btn .solfege{font-size:clamp(.9rem,2.2vw,1.2rem);font-weight:800}.note-btn .letter{font-size:.72rem;font-weight:700;opacity:.85}.note-btn.holding,.note-btn:not(:disabled):active{transform:translateY(4px) scale(.97);box-shadow:0 1px #00000038}.note-btn.holding{filter:brightness(1.12) saturate(1.15)}.note-btn:disabled{filter:grayscale(.55) brightness(1.05);opacity:.6;cursor:default}.modal-overlay{position:fixed;inset:0;background:#281e4673;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);display:flex;align-items:center;justify-content:center;z-index:50;padding:18px}.modal-card{background:var(--card);border-radius:20px;box-shadow:0 20px 60px #1e143c59;width:min(740px,100%);max-height:min(88vh,88dvh);display:flex;flex-direction:column;overflow:hidden}.modal-head{display:flex;align-items:center;justify-content:space-between;padding:14px 20px 10px;border-bottom:2px solid #f1edff}.modal-head h2{margin:0;font-size:1.25rem;font-weight:800}.modal-close{border:none;background:#f1edff;color:var(--ink);width:32px;height:32px;border-radius:50%;font-size:.95rem;font-weight:800;cursor:pointer;transition:background .15s,transform .1s}.modal-close:hover{background:#e4dcff;transform:scale(1.08)}.modal-body{padding:12px 20px 20px;overflow-y:auto}.modal-body h3{margin:10px 0 4px;font-size:1.02rem;font-weight:800}.guide-note{margin:4px 0 10px;color:var(--ink-soft);font-size:.9rem;font-weight:500}.guide-chart{width:100%;height:auto;background:#fff;border:2px solid #f1edff;border-radius:14px}.dur-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:10px;margin:8px 0 6px}.dur-card{background:#fff;border:2px solid #f1edff;border-radius:14px;padding:10px 8px;display:flex;flex-direction:column;align-items:center;gap:2px;text-align:center}.dur-glyph{height:40px;display:flex;align-items:center;color:var(--ink)}.dur-name{font-weight:800;font-size:.95rem}.dur-std{font-size:.8rem;color:var(--ink-soft);font-weight:600}.dur-beats{font-size:.82rem;font-weight:800;color:var(--accent)}.setting-block{margin-bottom:18px}.setting-label{display:flex;justify-content:space-between;align-items:baseline;font-weight:800;font-size:.98rem;margin-bottom:7px}.bpm-value{color:var(--accent);font-size:1.15rem}.bpm-slider{width:100%;accent-color:var(--accent);height:26px;cursor:pointer}.setting-hint{margin-top:5px;font-size:.82rem;color:var(--ink-soft);font-weight:500}.ledger-toggle{display:inline-flex;align-items:center;gap:9px;font-weight:700;font-size:.92rem;color:var(--ink);cursor:pointer;-webkit-user-select:none;user-select:none}.ledger-toggle input{width:18px;height:18px;accent-color:var(--accent);cursor:pointer;flex:none}.float-note{position:fixed;font-size:1.5rem;opacity:.16;pointer-events:none;animation:floaty 7s ease-in-out infinite;z-index:0}.fn1{top:12%;left:3%}.fn2{top:25%;right:3%;animation-delay:1.6s}.fn3{bottom:18%;left:4%;animation-delay:3.1s;font-size:1.9rem}.fn4{bottom:10%;right:5%;animation-delay:4.4s;font-size:2rem}@keyframes floaty{0%,to{transform:translateY(0) rotate(-8deg)}50%{transform:translateY(-18px) rotate(10deg)}}.confetti{position:fixed;inset:0;pointer-events:none;overflow:hidden;z-index:60}.confetti span{position:absolute;top:-20px;border-radius:2px;animation:fall linear forwards}@keyframes fall{to{transform:translateY(85vh) rotate(720deg);opacity:0}}@media(max-width:720px),(max-height:560px){body{overflow:auto}.app{height:auto;min-height:100vh;min-height:100dvh;overflow:visible}.card,.staff-wrap{flex:none}.staff{height:auto;max-height:46vh}.topbar{justify-content:center}}@media(max-width:480px){.pad{gap:5px}.note-btn{border-radius:12px}}
