:root{--bg:#f6f7f4;--paper:#fff;--ink:#24372f;--muted:#7d8881;--green:#27735a;--light:#eaf3ec;--line:#e3e8e0;--accent:#c4d69c}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Microsoft YaHei",sans-serif;font-size:14px}button,input,textarea,select{font:inherit}button{cursor:pointer;transition:background .15s,transform .15s}button:disabled{opacity:.42;cursor:default}button:focus-visible,a:focus-visible{outline:3px solid #9abd9d;outline-offset:3px}.sidebar{position:fixed;inset:0 auto 0 0;width:224px;border-right:1px solid var(--line);padding:36px 20px;background:#fcfdf9;display:flex;flex-direction:column}.brand{display:flex;gap:12px;align-items:center;text-decoration:none;color:var(--ink);margin:0 10px 44px}.brand-icon{width:42px;height:42px;border-radius:13px;background:var(--green);color:#fff;font-size:27px;text-align:center;line-height:42px}.brand b{font-size:22px;letter-spacing:3px}.brand b span{display:block;font-size:10px;font-weight:400;letter-spacing:3px;margin-top:5px;color:var(--muted)}.nav-caption{font-size:10px;color:#929c94;letter-spacing:2px;margin:0 14px 12px}.second{margin-top:32px}nav{display:flex;flex-direction:column;gap:6px}nav button{border:0;background:transparent;text-align:left;padding:13px 15px;border-radius:9px;color:#778179;font-size:17px}nav button span{font-size:13px;margin-left:10px}nav button.active{background:#eaf1e6;color:#326144;font-weight:600}nav button:hover{background:#f0f4ec}.sidebar-bottom{margin-top:auto;font-size:11px;color:var(--muted);padding:20px 12px 0}.local-dot{display:inline-block;width:6px;height:6px;border-radius:50%;background:#8fac7a;margin-right:6px}.sidebar-bottom small{display:block;margin:10px 0 0 15px;font-size:10px;color:#a3aaa2}.shell{margin-left:224px}header{height:76px;border-bottom:1px solid var(--line);padding:0 42px;display:flex;align-items:center;justify-content:space-between;background:#ffffff80}.breadcrumb{font-size:12px;color:var(--muted)}.breadcrumb span{margin:0 14px;color:#bcc3b9}.breadcrumb b{font-weight:500;color:#405446}.header-right{display:flex;align-items:center;gap:14px}.preview-badge{font-size:10px;color:#969d90;border:1px solid #dbe1d4;padding:4px 7px;border-radius:4px}.membership{border:0;background:transparent;color:var(--green);font-size:12px}.avatar{border:0;background:#e8eddf;color:#52714d;border-radius:50%;width:32px;height:32px;font-size:12px}main{max-width:1240px;padding:37px 42px 20px;margin:auto}.eyebrow{font-size:10px;letter-spacing:2px;color:#8a987f;margin-bottom:12px}.heading{display:flex;justify-content:space-between;align-items:center;gap:20px;margin-bottom:28px}h1{font-size:29px;letter-spacing:1px;font-weight:600;margin:0 0 10px}h2{font-size:19px;font-weight:600;margin:0 0 12px}h3{font-size:15px;margin:0 0 10px}p{line-height:1.8;margin:8px 0;color:var(--muted);font-size:12px}.daily{background:#eef2e6;border:1px solid #dfe7d4;border-radius:9px;padding:12px 18px;color:#52673c;text-align:left;min-width:170px}.daily small{display:block;font-size:10px;color:#8a9777;margin-top:5px}.categories{display:grid;grid-template-columns:repeat(5,1fr);gap:11px;margin-bottom:28px}.category{position:relative;text-align:left;border:1px solid var(--line);background:#fff;border-radius:11px;min-height:112px;padding:17px 15px;color:#687568}.category .symbol{font-family:serif;font-size:25px;display:block;margin-bottom:12px;line-height:1}.category b{font-size:12px;font-weight:500}.category small{display:block;font-size:9px;margin-top:7px;color:#a0a89c}.category.selected{border-color:#68977a;background:#edf4ea;color:#315a3e}.category.selected:after{content:'●';position:absolute;right:13px;top:13px;font-size:7px;color:#548267}.workspace{display:grid;grid-template-columns:minmax(0,1fr) 230px;gap:20px;align-items:start}.card{border:1px solid var(--line);border-radius:13px;background:var(--paper);overflow:hidden}.practice-top{padding:21px 25px;border-bottom:1px solid #edf0e9;display:flex;align-items:center;justify-content:space-between;gap:12px}.practice-top h2{margin:0 0 6px;font-size:16px}.subtle{font-size:10px;color:#939d90;line-height:1.6}.tag{font-size:10px;color:#6e8560;background:#f0f4e9;border:1px solid #e3ebd9;border-radius:5px;padding:4px 8px;white-space:nowrap}.player{padding:25px;display:flex;align-items:center;gap:16px}.play{border:0;background:var(--green);color:white;width:45px;height:45px;border-radius:50%;font-size:17px;flex-shrink:0}.player-text b{font-size:12px;font-weight:500;display:block}.player-text span{font-size:10px;color:var(--muted);display:block;margin-top:6px}.waves{margin-left:auto;display:flex;gap:3px;align-items:center;height:25px}.waves i{display:block;width:3px;background:#d1ddc9;border-radius:3px}.waves.active i{background:#75a280;animation:pulse .6s infinite alternate}.waves i:nth-child(2n){animation-delay:.2s}@keyframes pulse{from{transform:scaleY(.5)}to{transform:scaleY(1.3)}}.answer-area{margin:0 25px 25px;background:#fafbf8;border:1px solid #e8ece3;border-radius:9px;min-height:224px;padding:20px}.empty-answer{height:180px;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:10px;color:#8b9786}.paper-icon{font-size:32px;color:#a7b39b}.empty-answer b{font-size:13px;font-weight:400}.empty-answer span{font-size:10px}.mode-tabs{display:flex;gap:5px;flex-wrap:wrap;margin-bottom:17px}.mode-tabs button{background:none;border:0;padding:6px 10px;font-size:11px;color:#88917e;border-radius:5px}.mode-tabs button.selected{background:#e7eee0;color:#436640}.answer-label{font-size:10px;letter-spacing:1px;color:#8b9981;margin-bottom:14px}.note-options{display:flex;gap:7px;flex-wrap:wrap}.note-options button,.tools button{min-width:39px;padding:9px;border:1px solid #dfe6d8;background:#fff;border-radius:6px;color:#4f6747}.tools{display:flex;gap:7px;align-items:center;flex-wrap:wrap;margin:10px 0}.tools select{border:1px solid #dfe6d8;border-radius:5px;padding:5px;background:#fff;color:#4c6047}.answer-value{margin:15px 0 8px;min-height:33px;letter-spacing:2px;font-size:19px}.text-answer{padding:12px;border:1px solid #d8e2cf;border-radius:6px;width:100%;background:white;color:#345339}.staff-canvas{display:block;width:100%;height:155px;touch-action:none;border-radius:6px;background:white;border:1px solid #e4eadc}.staff-canvas.ink{height:185px}.action-row{padding:0 25px 23px;display:flex;gap:10px;align-items:center;flex-wrap:wrap}.primary{border:1px solid var(--green);background:var(--green);color:white;border-radius:7px;padding:11px 21px;font-size:12px}.secondary{border:1px solid #dce4d5;background:white;color:#66775c;border-radius:7px;padding:11px 16px;font-size:12px}.plain{border:0;background:none;color:#8a967e;font-size:11px;padding:9px}.side-card{padding:20px;margin-bottom:14px}.side-card h3{font-size:12px}.side-card p{font-size:11px}.quota-row{display:flex;justify-content:space-between;font-size:10px;color:#87917f;margin-top:17px}.bar{height:4px;background:#edf1e7;border-radius:4px;margin-top:8px}.bar div{height:100%;background:#a2bb8e;border-radius:4px}.side-card .secondary{width:100%;margin-top:13px;padding:9px;font-size:11px}.side-label{font-size:9px;color:#a0aa96;letter-spacing:1px;margin-bottom:10px}.tip{font-size:10px;line-height:1.8;color:#97a18e;margin:17px 4px}.bottom-strip{display:flex;gap:25px;align-items:center;margin-top:19px;font-size:10px;color:#9aa58f}.bottom-strip span:before{content:'✓';margin-right:6px;color:#8da477}.result-notes{font-size:25px;letter-spacing:4px;color:#3e644b;margin:18px 0}.score{font-size:40px;color:#376d50;margin:12px 0}.score small{font-size:12px;color:#87977e}.warning{background:#fbf4e6;border:1px solid #eee2ca;color:#988156;padding:10px 12px;font-size:11px;border-radius:6px;line-height:1.7}.file-input{display:block;width:100%;margin:16px 0}.photo-preview{max-height:180px;max-width:100%;border-radius:6px}.page-card{padding:28px;max-width:850px}.page-actions{display:flex;gap:10px;margin-top:20px;flex-wrap:wrap}.list-item{border-top:1px solid var(--line);padding:15px 0;color:#64765a;font-size:12px;line-height:1.8}.list-item:first-child{margin-top:20px}.label{display:block;font-size:12px;margin:20px 0 8px;color:#66785b}textarea{width:100%;padding:12px;border:1px solid #dce4d5;border-radius:6px;resize:vertical;background:#fafbf8;min-height:100px}.field{padding:10px;border:1px solid #dce4d5;border-radius:6px;background:#fafbf8;max-width:100%}footer{font-size:10px;color:#a2aa9d;text-align:center;padding:25px 20px 30px}dialog{border:1px solid #dde5d5;border-radius:16px;padding:34px;max-width:500px;width:calc(100% - 30px);color:var(--ink);box-shadow:0 20px 100px #19301e26}dialog::backdrop{background:#23352755;backdrop-filter:blur(3px)}.dialog-close{position:absolute;right:15px;top:12px;background:none;border:0;font-size:23px;color:#899680}.dialog-badge{display:inline-block;font-size:10px;background:#eef3e8;padding:5px 9px;border-radius:5px;margin-bottom:15px;color:#7c8b6d}#toast{position:fixed;bottom:28px;left:50%;transform:translate(-50%,20px);max-width:90%;background:#294b38;color:white;padding:13px 24px;border-radius:9px;opacity:0;pointer-events:none;transition:.2s;font-size:12px;z-index:10}#toast.show{opacity:1;transform:translate(-50%,0)}.summary-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin:25px 0}.summary-grid>div{background:#f5f8f0;border-radius:8px;padding:17px}.summary-grid b{display:block;font-size:23px;font-weight:500;color:#426347}.summary-grid small{display:block;font-size:10px;color:#859476;margin-top:8px}@media(min-width:1500px){main{padding-top:48px}}@media(max-width:1100px){.sidebar{width:186px;padding:30px 13px}.shell{margin-left:186px}main{padding:30px 24px}.workspace{grid-template-columns:minmax(0,1fr) 200px}.categories{gap:7px}.category{padding:15px 10px}.category b{font-size:11px}header{padding:0 24px}}@media(max-width:820px){.sidebar{width:69px;padding:25px 7px}.brand{margin:0 6px 30px}.brand b,.nav-caption,nav button span,.sidebar-bottom{display:none}.brand-icon{width:40px;flex-shrink:0}nav button{text-align:center;padding:13px 0;font-size:22px}nav+nav{margin-top:20px}.shell{margin-left:69px}.workspace{grid-template-columns:1fr}.workspace>aside{display:grid;grid-template-columns:1fr 1fr;gap:12px}.tip{display:none}.side-card{margin:0}.heading h1{font-size:24px}.daily{min-width:145px}.categories{grid-template-columns:repeat(5,1fr)}.category small{display:none}.category{min-height:95px}.preview-badge{display:none}}@media(max-width:540px){header{height:60px;padding:0 14px}.breadcrumb{font-size:10px}.breadcrumb span{margin:0 5px}.header-right{gap:6px}main{padding:25px 14px 10px}.heading{display:block}.daily{margin-top:17px;width:100%}h1{font-size:23px}.categories{grid-template-columns:repeat(3,1fr);gap:7px}.category{min-height:84px;padding:12px}.category .symbol{font-size:21px;margin-bottom:9px}.practice-top{padding:17px}.player{padding:20px 17px}.answer-area{margin:0 17px 20px;padding:14px;min-height:220px}.action-row{padding:0 17px 20px;gap:7px}.primary,.secondary{padding:10px 13px}.workspace>aside{display:block}.side-card{margin-bottom:12px}.bottom-strip{display:block;line-height:2.2}.bottom-strip span{display:block}.summary-grid{grid-template-columns:1fr}.page-card{padding:20px}.waves{display:none}footer{font-size:9px}}
@font-face{font-family:Bravura;src:url('./fonts/Bravura.otf') format('opentype');font-display:block}
.rhythm-options{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-bottom:16px}
.rhythm-options button{padding:0;border:1px solid #dbe4d5;border-radius:7px;background:#fff;overflow:hidden}
.rhythm-options button:hover{border-color:#7aa478;background:#f4f8ef}
.rhythm-option{display:block;width:100%;height:92px}
#draft-staff{margin-top:16px}
.comparison-label{margin-top:24px}

.note-options{flex-wrap:wrap}.note-options button.black-key{background:#e7ebe7;color:#263c2c}
/* Keep the exercise and answer visible in ordinary desktop windows. */
@media(min-width:960px){main{padding:24px 30px 10px}.heading{margin-bottom:18px}.heading h1{font-size:27px}.categories{grid-template-columns:repeat(6,minmax(0,1fr));gap:9px;margin-bottom:20px}.category{min-height:86px;padding:12px 10px}.category .symbol{font-size:22px;margin-bottom:9px}.category b{font-size:12px}.category small{font-size:9px}.practice-top{padding:16px 22px}.player{padding:18px 22px}.answer-area{margin:0 22px 16px;padding:16px}.workspace{gap:18px}.side-card{padding:17px}}

.score-scroll{max-width:100%;overflow-x:auto;overflow-y:hidden}.score-scroll canvas{max-width:none}.rhythm-palette summary{cursor:pointer;color:#4f6747;font-size:12px;padding:10px 0}.rhythm-options{max-height:330px;overflow-y:auto;padding:2px 4px 8px;grid-template-columns:repeat(2,minmax(0,1fr))}.rhythm-options button{min-width:0;padding:6px;overflow:hidden}.rhythm-options button>span{font-size:10px;display:block;text-align:left;padding:3px 4px}.rhythm-options button:disabled{opacity:.3}.tonality-label{font-size:12px;color:#436640;margin-bottom:16px}.side-card select{display:block;margin:6px 0 12px;width:100%}@media(max-width:540px){.rhythm-options{grid-template-columns:1fr;max-height:270px}}

.stats-scroll{overflow-x:auto}.stats-table{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums;font-size:13px}.stats-table caption{text-align:left;padding:12px 0;font-weight:600}.stats-table th,.stats-table td{padding:13px 12px;text-align:right;border-bottom:1px solid var(--line);white-space:nowrap}.stats-table th:first-child{text-align:left}.stats-table thead{background:var(--light)}
