@font-face{font-family:Bravura;src:url(/font/Bravura.woff2)format("woff2"),url(/font/Bravura.woff)format("woff");font-display:block}:root{--bg:#f7f6f3;--surface:#fff;--surface-2:#f0efeb;--border:#e3e1dc;--border-strong:#cfccc4;--text:#1c1c1e;--text-2:#6b6b70;--accent:#2f6b5a;--accent-hover:#255746;--accent-soft:#e6f0ec;--on-accent:#fff;--danger:#b42318;--danger-soft:#fbe9e7;--warn-soft:#fbf3dc;--paper:#fff;--shadow-float:0 4px 16px #00000014;--kind-warmup:#b98b2e;--kind-technique:#4a6fa5;--kind-homework:#7b5ea7;--kind-repertoire:#2f6b5a;--kind-reading:#4b8b8f;--kind-finish:#6b6b70;--tag-problem:#b42318;--tag-fingering:#4a6fa5;--tag-musical:#7b5ea7;--tag-technique:#b98b2e;--tag-idea:#2f6b5a;--tag-question:#b06a1f;--r-sm:6px;--r:10px;--font:system-ui, -apple-system, "Segoe UI Variable Text", "Segoe UI", Roboto, "Helvetica Neue", sans-serif;--font-serif:"Source Serif 4", Georgia, "Times New Roman", serif;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#141416;--surface:#1c1d1f;--surface-2:#242528;--border:#2e2f33;--border-strong:#3d3e43;--text:#e6e6e6;--text-2:#8e8e93;--accent:#6fb8a2;--accent-hover:#86c7b3;--accent-soft:#1f3a33;--on-accent:#0f1f1a;--danger:#f07a6e;--danger-soft:#3a1f1c;--warn-soft:#36301c;--paper:#fdfcf8;--shadow-float:0 4px 16px #0006;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}}:root[data-theme=dark]{--bg:#141416;--surface:#1c1d1f;--surface-2:#242528;--border:#2e2f33;--border-strong:#3d3e43;--text:#e6e6e6;--text-2:#8e8e93;--accent:#6fb8a2;--accent-hover:#86c7b3;--accent-soft:#1f3a33;--on-accent:#0f1f1a;--danger:#f07a6e;--danger-soft:#3a1f1c;--warn-soft:#36301c;--paper:#fdfcf8;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}html,body{margin:0}body{background:var(--bg);color:var(--text);font:15px/1.5 var(--font);-webkit-font-smoothing:antialiased}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}h1,h2,h3,h4{letter-spacing:-.01em;margin:0 0 4px;font-weight:600;line-height:1.25}h1{font-size:24px}h2{font-size:18px}h3{margin-top:20px;font-size:15px}h4{text-transform:uppercase;letter-spacing:.05em;color:var(--text-2);margin-top:14px;font-size:12px}p{margin:6px 0}code{background:var(--surface-2);word-break:break-all;border-radius:4px;padding:1px 5px;font-size:13px}kbd{background:var(--surface-2);border:1px solid var(--border);border-radius:4px;padding:0 5px;font-size:12px}.muted{color:var(--text-2)}.small{font-size:13px}.break{word-break:break-word}.serif{font-family:var(--font-serif)}.num{font-variant-numeric:tabular-nums}.icon{flex-shrink:0;display:block}input,select,textarea{font:inherit;color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:var(--r-sm);min-width:0;padding:7px 10px}input::placeholder,textarea::placeholder{color:var(--text-2);opacity:.8}input:focus-visible,select:focus-visible,textarea:focus-visible,button:focus-visible,a:focus-visible{outline:2px solid var(--accent);outline-offset:1px}textarea{resize:vertical;width:100%}input[type=checkbox]{accent-color:var(--accent);width:16px;height:16px}input[type=range]{accent-color:var(--accent);background:0 0;border:0;padding:0}input.mini{width:84px}input.bars{width:120px}.btn{border:1px solid var(--border);background:var(--surface);color:var(--text);border-radius:var(--r-sm);font:inherit;cursor:pointer;white-space:nowrap;justify-content:center;align-items:center;gap:6px;padding:7px 14px;font-weight:500;transition:background .12s,border-color .12s;display:inline-flex;text-decoration:none!important}.btn:hover{background:var(--surface-2)}.btn:disabled{opacity:.45;cursor:default}.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}.btn.primary:hover{background:var(--accent-hover)}.btn.danger{background:var(--danger);border-color:var(--danger);color:#fff}.btn.ghost{background:0 0;border-color:#0000}.btn.ghost:hover{background:var(--surface-2)}.btn.sm{padding:4px 10px;font-size:13px}.btn.lg{padding:11px 22px;font-size:16px}.btn.wide{width:100%}.icon-btn{border:1px solid var(--border);background:var(--surface);color:var(--text);border-radius:var(--r-sm);cursor:pointer;min-width:32px;height:32px;font:inherit;justify-content:center;align-items:center;padding:0 7px;font-weight:500;display:inline-flex}.icon-btn:hover{background:var(--surface-2)}.icon-btn:disabled{opacity:.4;cursor:default}.icon-btn.plain{background:0 0;border-color:#0000}.link-btn{color:var(--accent);cursor:pointer;font:inherit;background:0 0;border:0;padding:0}.link-btn.danger{color:var(--danger)}.link-btn.muted{color:var(--text-2)}.chip{border:1px solid var(--border);background:var(--surface);color:var(--text);border-radius:var(--r-sm);font:inherit;cursor:pointer;white-space:nowrap;align-items:center;gap:5px;padding:4px 10px;font-size:13px;display:inline-flex}.chip:hover{background:var(--surface-2)}.chip.on{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}.file-btn{cursor:pointer}.segmented{background:var(--surface-2);border-radius:8px;flex-wrap:wrap;gap:2px;padding:2px;display:inline-flex}.segmented button{color:var(--text-2);font:inherit;cursor:pointer;background:0 0;border:0;border-radius:6px;padding:5px 12px;font-size:14px;font-weight:500}.segmented button:hover{color:var(--text)}.segmented button.on{background:var(--surface);color:var(--text);box-shadow:0 1px 2px #0000001a}.row{align-items:center;gap:8px;display:flex}.row.wrap{flex-wrap:wrap}.row.spread{justify-content:space-between}.row.end{justify-content:flex-end}.row>input:not([type=checkbox]):not(.mini):not(.bars),.spacer{flex:1}.divider{background:var(--border);align-self:stretch;width:1px;margin:0 2px}.shell{grid-template-columns:224px minmax(0,1fr);min-height:100vh;display:grid}.sidebar{border-right:1px solid var(--border);background:var(--surface);flex-direction:column;gap:2px;height:100vh;padding:16px 12px;display:flex;position:sticky;top:0}.brand{color:var(--text);align-items:center;gap:10px;padding:4px 10px 18px;font-weight:600;display:flex}.brand:hover{text-decoration:none}.sidebar nav{flex-direction:column;gap:2px;display:flex}.sidebar nav a,.tabbar a,.tabbar button{border-radius:var(--r-sm);color:var(--text-2);align-items:center;gap:10px;padding:8px 10px;font-weight:500;text-decoration:none;display:flex}.sidebar nav a:hover{background:var(--surface-2);color:var(--text)}.sidebar nav a.on{background:var(--accent-soft);color:var(--accent)}.nav-group{text-transform:uppercase;letter-spacing:.06em;color:var(--text-2);margin:18px 10px 6px;font-size:11px}.resume{margin-top:auto}.content{min-width:0}.tabbar{display:none}.shell.focus{grid-template-columns:minmax(0,1fr)}.shell.focus .sidebar,.shell.focus .tabbar{display:none!important}.page{max-width:1120px;margin:0 auto;padding:28px 32px 64px}.page.narrow{max-width:720px}.page-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:16px;margin-bottom:20px;display:flex}.page-head p{margin:2px 0 0}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);margin-bottom:16px;padding:18px 20px}.card.soft{background:var(--surface-2);border-color:#0000}.card-head{justify-content:space-between;align-items:baseline;gap:10px;margin-bottom:6px;display:flex}.card-head h3{margin:0}.grid-2{grid-template-columns:1fr 1fr;gap:16px;display:grid}.empty{text-align:center;color:var(--text-2);padding:32px 16px}.banner{padding:10px 16px;font-size:14px}.banner.error{background:var(--danger-soft);color:var(--danger);border-radius:var(--r-sm);margin:8px}.banner.warn{background:var(--warn-soft);border-radius:var(--r-sm);margin-bottom:12px}.banner.slim{border-radius:0;margin:0;padding:6px 12px;font-size:13px}.tab-body{margin-top:16px}.group-title{text-transform:uppercase;letter-spacing:.05em;color:var(--text-2);flex-wrap:wrap;align-items:baseline;gap:8px;margin:24px 0 8px;font-size:12px;font-weight:600;display:flex}.group-title .muted{text-transform:none;letter-spacing:0;font-weight:400}.filters{flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:16px;display:flex}.filters input[type=search]{flex:1;min-width:180px}.stats{gap:24px;display:flex}.stat{flex-direction:column;display:flex}.stat b{font-variant-numeric:tabular-nums;font-size:22px;font-weight:600;line-height:1.2}.stat span{color:var(--text-2);font-size:12px}.field{flex-direction:column;gap:6px;margin-bottom:14px;display:flex}.field .label{color:var(--text-2);font-size:13px;font-weight:500}.field-row{flex-wrap:wrap;align-items:flex-end;gap:14px;margin-bottom:14px;display:flex}.field-row .field{flex:1;min-width:150px;margin-bottom:0}.check{cursor:pointer;align-items:center;gap:6px;font-size:14px;display:inline-flex}.form .field input,.form .field select{width:100%}.form .field input.mini{width:100px}.inline-field{color:var(--text-2);align-items:center;gap:6px;font-size:13px;display:inline-flex}details.more>summary{cursor:pointer;color:var(--text-2);margin:4px 0 12px;font-size:14px;list-style:none}details.more>summary::-webkit-details-marker{display:none}details.more>summary:before{content:"+ "}details.more[open]>summary:before{content:"− "}.start{grid-template-columns:minmax(0,1fr) 250px;gap:28px;display:grid}.start .side{border-left:1px solid var(--border);flex-direction:column;justify-content:center;gap:12px;padding-left:24px;display:flex}.focus-list{grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:6px;margin:12px 0 4px;display:grid}.focus-card{text-align:left;border:1px solid var(--border);background:var(--surface);border-radius:var(--r-sm);cursor:pointer;font:inherit;color:var(--text);flex-direction:column;gap:1px;padding:9px 12px;display:flex}.focus-card b{font-weight:500}.focus-card span{color:var(--text-2);font-size:12px}.focus-card:hover{border-color:var(--border-strong)}.focus-card.on{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}.focus-card.on b{color:var(--accent)}.level-summary{color:var(--text-2);font-size:13px}.hw{margin-bottom:10px}.hw-title{color:var(--text);font-weight:500}.list-plain{margin:0;padding:0;list-style:none}.list-plain>li{border-bottom:1px solid var(--border);align-items:center;gap:10px;padding:9px 0;display:flex}.list-plain>li:last-child{border-bottom:0}.list-plain .grow{min-width:0;color:var(--text);flex:1}.note-feed{margin:0;padding:0;list-style:none}.note-feed li{border-bottom:1px solid var(--border);flex-wrap:wrap;align-items:baseline;gap:10px;padding:8px 0;display:flex}.note-feed li>span:nth-last-child(2){flex:1;min-width:200px}.note-feed li.resolved{opacity:.55}.level-picker{align-items:center;gap:6px;display:flex}.level-steps{flex:1;display:flex;position:relative}.level-steps:before{content:"";background:var(--border-strong);height:1px;position:absolute;top:10px;left:8%;right:8%}.step{cursor:pointer;font:inherit;color:var(--text-2);background:0 0;border:0;flex-direction:column;flex:1;align-items:center;gap:4px;padding:2px;display:flex;position:relative}.step-dot{background:var(--surface);border:1.5px solid var(--border-strong);border-radius:50%;width:12px;height:12px;margin-top:4px}.step.past .step-dot{background:var(--accent-soft);border-color:var(--accent)}.step.on .step-dot{background:var(--accent);border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.step.on{color:var(--accent);font-weight:600}.step-label{text-align:center;font-size:11px;line-height:1.2}.step:hover .step-dot{border-color:var(--accent)}.ex-list{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);margin:0;padding:0;list-style:none;overflow:hidden}.ex-row{border-bottom:1px solid var(--border);flex-wrap:wrap;align-items:center;gap:10px;padding:10px 14px;display:flex}.ex-row:last-child{border-bottom:0}.ex-row:hover{background:var(--surface-2)}.ex-main{color:var(--text);flex-direction:column;flex:1;min-width:220px;display:flex}.ex-main:hover{text-decoration:none}.ex-main b{font-weight:500}label.ex-main{cursor:pointer;flex-direction:row;align-items:flex-start;gap:10px}label.ex-main>span{flex-direction:column;display:flex}.ex-meta{color:var(--text-2);font-variant-numeric:tabular-nums;gap:10px;display:flex}.ex-row.pick.on{background:var(--accent-soft)}.preview{background:var(--paper);border-radius:var(--r-sm);flex-direction:column;flex-basis:100%;gap:6px;padding:8px;display:flex}.preview img{width:100%;height:auto}.status-dot{background:var(--border-strong);border-radius:50%;flex-shrink:0;width:8px;height:8px}.status-dot.learning{background:var(--accent)}.status-dot.polishing{background:var(--kind-technique)}.status-dot.repertoire{background:var(--text-2)}.tag{background:var(--surface-2);color:var(--text);border:0;border-radius:4px;align-items:center;gap:5px;margin-right:4px;padding:1px 7px;font-family:inherit;font-size:12px;display:inline-flex}.tag:before{content:"";background:var(--tag-color,var(--text-2));border-radius:50%;width:6px;height:6px}.tag.plain:before,.tag.link:before{display:none}.tag.plain{border:1px solid var(--border);background:0 0}.tag.link{cursor:pointer;color:var(--accent)}.tag-problem{--tag-color:var(--tag-problem)}.tag-fingering{--tag-color:var(--tag-fingering)}.tag-musical{--tag-color:var(--tag-musical)}.tag-technique{--tag-color:var(--tag-technique)}.tag-idea{--tag-color:var(--tag-idea)}.tag-question{--tag-color:var(--tag-question)}.dropzone{border:1px dashed var(--border-strong);border-radius:var(--r);background:var(--surface);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:14px;margin-bottom:14px;padding:16px;display:flex}.dropzone.on{border-color:var(--accent);background:var(--accent-soft)}.modal-back{z-index:50;background:#0a0a0c66;place-items:center;padding:16px;display:grid;position:fixed;inset:0}.modal{background:var(--surface);border-radius:12px;width:min(520px,100%);max-height:calc(100vh - 32px);padding:20px 22px;overflow:auto;box-shadow:0 20px 60px #00000040}.modal.wide{width:min(880px,100%)}.modal-head{justify-content:space-between;align-items:center;margin-bottom:14px;display:flex}.picker-list{max-height:55vh;margin:10px 0;padding-right:4px;overflow:auto}.picker-foot{border-top:1px solid var(--border);padding-top:12px}.pdf,.tabview,.sheet{flex-direction:column;height:100%;min-height:0;display:flex}.toolbar,.pdf-bar{background:var(--surface);border-bottom:1px solid var(--border);flex-wrap:wrap;flex:none;align-items:center;gap:6px;padding:8px 12px;display:flex}.pdf-bar .sep{background:var(--border);width:1px;height:20px;margin:0 4px}.pdf-bar label{align-items:center;gap:6px;display:inline-flex}.pick-row{flex-wrap:wrap;gap:4px;display:flex}.pg{font-variant-numeric:tabular-nums;align-items:center;gap:4px;font-size:14px;display:inline-flex}.pg input{text-align:center;width:54px;padding:4px 6px}.bpm-ctl{align-items:center;gap:4px;display:inline-flex}.bpm-ctl input{text-align:center;font-variant-numeric:tabular-nums;width:60px;padding:5px 4px;font-weight:600}.unit{color:var(--text-2);font-size:12px}.pdf-scroll{background:var(--surface-2);flex:1;min-height:0;padding:16px;overflow:auto}.pdf-page{background:#fff;width:fit-content;margin:0 auto;position:relative;box-shadow:0 1px 3px #0000001f}.pdf-page canvas{display:block}.pdf-page.pinning{cursor:crosshair}.pin{background:var(--accent);color:#fff;cursor:pointer;border:2px solid #fff;border-radius:50%;width:22px;height:22px;padding:0;font-size:11px;font-weight:700;position:absolute;transform:translate(-50%,-50%);box-shadow:0 1px 4px #0000004d}.pin.tag-problem{background:var(--tag-problem)}.pin.tag-fingering{background:var(--tag-fingering)}.pin.tag-musical{background:var(--tag-musical)}.pin.tag-question{background:var(--tag-question)}.pin.resolved{opacity:.45}.pin-pop{background:var(--text);color:var(--bg);border-radius:var(--r-sm);text-align:left;z-index:3;white-space:pre-wrap;width:max-content;max-width:260px;padding:6px 10px;font-size:13px;font-weight:400;position:absolute;top:26px;left:50%;transform:translate(-50%)}.pin-draft{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);z-index:4;width:280px;box-shadow:var(--shadow-float);padding:8px;position:absolute;transform:translate(-10px,14px)}.pin-draft textarea{height:70px;margin-bottom:6px}.tab-scroll{flex:1;min-height:0;overflow:auto}.paper{background:var(--paper);color:#000}.tab-text{padding:20px;overflow:auto}.tab-text pre{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);padding:16px;font:14px/1.45 Consolas,Cascadia Mono,monospace;overflow-x:auto}.media{flex-direction:column;gap:10px;padding:16px;display:flex}.media audio{width:100%}.media video{border-radius:var(--r-sm);background:#000;width:100%;max-height:60vh}.img-view{padding:12px;overflow:auto}.img-view img{max-width:100%}.crops{background:var(--surface-2);flex-direction:column;flex:1;gap:14px;min-height:0;padding:16px;display:flex;overflow:auto}.crop{background:var(--paper);border-radius:var(--r-sm);flex-shrink:0;margin:0;overflow:hidden;box-shadow:0 1px 3px #0000001f}.crop figcaption{background:var(--surface);border-bottom:1px solid var(--border);color:var(--text);justify-content:space-between;gap:10px;padding:6px 12px;font-size:13px;font-weight:500;display:flex}.crop img{width:100%;max-width:1100px;height:auto;margin:0 auto;display:block}.detail{grid-template-columns:minmax(0,1fr) 360px;height:100vh;display:grid}.detail-view{border-right:1px solid var(--border);flex-direction:column;min-width:0;min-height:0;display:flex}.detail-view>:last-child{flex:1;min-height:0}.view-switch{background:var(--surface);border-bottom:1px solid var(--border);padding:8px 12px;flex:none!important}.detail-side{background:var(--surface);padding:18px 20px 40px;overflow:auto}.detail-side h1{font-size:22px;font-family:var(--font-serif);margin-top:8px;font-weight:600}.detail-side .row.wrap{margin:12px 0}.back{color:var(--text-2);align-items:center;gap:4px;font-size:13px;display:inline-flex}.instruction{color:var(--text);white-space:pre-line;border-left:2px solid var(--border-strong);margin:10px 0;padding:2px 0 2px 12px;font-size:14px}.hint{color:var(--text-2);font-size:13px}.danger-zone{border-top:1px solid var(--border);flex-wrap:wrap;align-items:center;gap:8px;margin-top:32px;padding-top:12px;display:flex}.title-input{width:100%;font-size:22px;font-weight:600;font-family:var(--font-serif);background:0 0;border:0;border-bottom:1px solid #0000;border-radius:0;margin:6px 0 12px;padding:4px 0}.title-input:hover,.title-input:focus{border-bottom-color:var(--border-strong)}.side-section{margin-top:22px}.side-section>h3{margin:0 0 8px}.notes{flex-direction:column;gap:8px;display:flex}.note-form{flex-direction:column;gap:6px;display:flex}.note-form .row select{flex:1}.note-list{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}.note{border:1px solid var(--border);border-radius:var(--r-sm);padding:8px 10px}.note.resolved{opacity:.55}.note-meta{flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:2px;display:flex}.note-text{white-space:pre-wrap;font-size:14px}.note-actions{gap:12px;margin-top:4px;font-size:12px;display:flex}.checklist{margin:6px 0;padding:0;list-style:none}.checklist li{justify-content:space-between;align-items:flex-start;gap:8px;padding:5px 0;display:flex}.checklist label{cursor:pointer;align-items:flex-start;gap:8px;display:flex}.checklist input{flex-shrink:0;margin-top:3px}.questions li{border-bottom:1px solid var(--border);padding:8px 0}.tempo{flex-direction:column;gap:8px;display:flex}.tempo-head{justify-content:space-between;display:flex}.big{font-variant-numeric:tabular-nums;font-size:26px;font-weight:600;line-height:1.1}.big.dim{color:var(--text-2)}.target{text-align:right}.spark{background:var(--surface-2);border-radius:var(--r-sm);width:100%;height:80px}.spark-line{fill:none;stroke:var(--accent);stroke-width:2px}.spark-dot{fill:var(--accent)}.spark-target{stroke:var(--text-2);stroke-dasharray:4 4;stroke-width:1px}.metronome{border:1px solid var(--border);border-radius:var(--r);flex-direction:column;gap:8px;padding:12px;display:flex}.metro-row{flex-wrap:wrap;justify-content:center;align-items:center;gap:6px;display:flex}.metro-row.small select{padding:4px 6px;font-size:13px}.metro-row .btn{flex:1}.bpm{align-items:baseline;gap:4px;display:flex}.bpm input{text-align:center;font-variant-numeric:tabular-nums;width:72px;padding:2px 4px;font-size:24px;font-weight:600}.bpm span{color:var(--text-2);font-size:13px}.beats{justify-content:center;align-items:center;gap:8px;height:12px;display:flex}.dot{background:var(--border-strong);border-radius:50%;width:10px;height:10px}.dot.first{box-shadow:inset 0 0 0 2px var(--accent)}.dot.mute{opacity:.35}.dot.on{background:var(--accent)}.metro-inline{align-items:center;gap:6px;display:inline-flex}.metro-inline input{text-align:center;font-variant-numeric:tabular-nums;width:56px;padding:5px 4px;font-weight:600}.metro-pop{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);box-shadow:var(--shadow-float);z-index:10;flex-direction:column;gap:10px;min-width:250px;padding:12px;display:flex;position:absolute;bottom:calc(100% + 8px);right:0}.relative{position:relative}.plan{border:1px solid var(--border);border-radius:var(--r);background:var(--surface);margin:0 0 14px;padding:0;list-style:none;overflow:hidden}.plan-item{border-bottom:1px solid var(--border);flex-wrap:wrap;align-items:center;gap:12px;padding:10px 14px;display:flex}.plan-item:last-child{border-bottom:0}.plan-body{flex-direction:column;flex:1;min-width:200px;display:flex}.plan-body b{font-weight:500}.plan-mins{font-variant-numeric:tabular-nums;white-space:nowrap;align-items:center;gap:4px;display:flex}.plan-actions{gap:2px;display:flex}.kind{color:var(--text-2);align-items:center;gap:6px;min-width:116px;font-size:12px;display:inline-flex}.kind:before{content:"";background:var(--kind-color,var(--border-strong));border-radius:2px;width:8px;height:8px}.kind-warmup{--kind-color:var(--kind-warmup)}.kind-technique{--kind-color:var(--kind-technique)}.kind-homework{--kind-color:var(--kind-homework)}.kind-repertoire{--kind-color:var(--kind-repertoire)}.kind-reading{--kind-color:var(--kind-reading)}.kind-finish{--kind-color:var(--kind-finish)}.add-row{margin-bottom:12px}.add-row select{flex:1}.run{grid-template-rows:auto 3px minmax(0,1fr) auto;height:100vh;display:grid}.run-top{border-bottom:1px solid var(--border);background:var(--surface);align-items:center;gap:12px;padding:8px 14px;display:flex}.run-title{flex-direction:column;flex:1;min-width:0;display:flex}.run-title b{white-space:nowrap;text-overflow:ellipsis;font-weight:600;overflow:hidden}.run-title span{color:var(--text-2);white-space:nowrap;text-overflow:ellipsis;font-size:12px;overflow:hidden}.run-count{font-variant-numeric:tabular-nums;color:var(--text-2);font-size:13px}.run-progress{background:var(--surface-2)}.run-progress div{background:var(--accent);height:100%;transition:width 1s linear}.run-body{grid-template-columns:minmax(0,1fr) auto;min-height:0;display:grid}.run-view{flex-direction:column;min-width:0;min-height:0;display:flex}.run-view>:first-child{flex:1;min-height:0}.run-drawer{border-left:1px solid var(--border);background:var(--surface);width:340px;padding:16px 18px 24px;overflow:auto}.run-drawer h2{margin:6px 0 2px;font-size:17px}.run-bar{border-top:1px solid var(--border);background:var(--surface);align-items:center;gap:12px;padding:10px 14px;display:flex}.clock{font-variant-numeric:tabular-nums;letter-spacing:.01em;text-align:center;min-width:76px;font-size:28px;font-weight:500}.clock.over{color:var(--accent)}.steps{flex-wrap:wrap;gap:3px;display:flex}.stepper{background:var(--border);cursor:pointer;border:0;border-radius:3px;width:18px;height:6px;padding:0}.stepper.done{background:var(--accent-soft)}.stepper.on{background:var(--accent)}.summary-list{margin:12px 0;padding:0;list-style:none}.summary-list li{border-bottom:1px solid var(--border);align-items:center;gap:10px;padding:8px 0;display:flex}.summary-list li>:nth-child(2){flex:1}.summary-list.compact li{padding:4px 0;font-size:14px}.kind-dot{background:var(--border-strong);border-radius:2px;flex-shrink:0;width:8px;height:8px}.kind-dot[data-kind=warmup]{background:var(--kind-warmup)}.kind-dot[data-kind=technique]{background:var(--kind-technique)}.kind-dot[data-kind=homework]{background:var(--kind-homework)}.kind-dot[data-kind=repertoire]{background:var(--kind-repertoire)}.kind-dot[data-kind=reading]{background:var(--kind-reading)}.kind-dot[data-kind=finish]{background:var(--kind-finish)}.stars{gap:2px;display:flex}.stars button{color:var(--border-strong);cursor:pointer;background:0 0;border:0;padding:0 2px;font-size:26px;line-height:1}.stars button.on{color:var(--accent)}.reflection{border-left:2px solid var(--border-strong);white-space:pre-wrap;margin:8px 0 0;padding:2px 12px;font-size:14px}.session-list{margin:0;padding:0;list-style:none}.heatmap{grid-template-rows:repeat(7,1fr);grid-auto-flow:column;gap:3px;display:grid}.hm{aspect-ratio:1;background:var(--surface-2);border-radius:2px;min-width:10px;display:inline-block}.hm-1{background:color-mix(in srgb, var(--accent) 25%, var(--surface-2))}.hm-2{background:color-mix(in srgb, var(--accent) 50%, var(--surface-2))}.hm-3{background:color-mix(in srgb, var(--accent) 75%, var(--surface-2))}.hm-4{background:var(--accent)}.hm-f{background:0 0}.hm-legend{justify-content:flex-end;align-items:center;gap:4px;margin-top:8px;display:flex}.hm-legend .hm{width:11px;min-width:11px}.lessons-grid{grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);align-items:start}.lesson-list{border:1px solid var(--border);border-radius:var(--r);background:var(--surface);margin:0;padding:0;list-style:none;overflow:hidden}.lesson-list li{border-bottom:1px solid var(--border)}.lesson-list li:last-child{border-bottom:0}.lesson-card{color:var(--text);padding:12px 16px;display:block}.lesson-card:hover{background:var(--surface-2);text-decoration:none}.excerpt{color:var(--text-2);white-space:pre-line;margin:4px 0 0;font-size:14px}.smufl{fill:var(--text);font-family:Bravura}.staff{width:min(420px,100%);margin:0 auto;display:block}.staff-line{stroke:var(--text);stroke-width:1.1px}.clef8{fill:var(--text);font:italic 12px serif}.game-board{flex-direction:column;align-items:center;gap:14px;transition:box-shadow .2s;display:flex}.game-board.flash-ok{box-shadow:inset 0 0 0 2px var(--accent)}.game-board.flash-bad{box-shadow:inset 0 0 0 2px var(--danger)}.answer-grid{grid-template-columns:repeat(auto-fit,minmax(70px,1fr));gap:6px;width:min(620px,100%);display:grid}.btn.answer{flex-direction:column;gap:0;padding:10px 6px;font-size:20px}.btn.answer small{color:var(--text-2);font-size:12px;font-weight:400}.feedback{min-height:26px;font-size:17px;font-weight:600}.flash-ok .feedback{color:var(--accent)}.flash-bad .feedback{color:var(--danger)}.fretboard-wrap{width:100%;overflow-x:auto}.fretboard{min-width:420px;max-width:100%;height:auto;margin:0 auto;display:block}.fretboard .fret{stroke:var(--border-strong);stroke-width:2px}.fretboard .nut{stroke:var(--text);stroke-width:5px}.fretboard .string{stroke:var(--text);opacity:.7}.fretboard .string-name{fill:var(--text-2);font-size:12px;font-weight:600}.fretboard .inlay{fill:var(--border-strong)}.fretboard .cell{fill:#0000;cursor:pointer}.fretboard .cell:hover{fill:color-mix(in srgb, var(--accent) 15%, transparent)}.dot-q,.dot-ok{fill:var(--accent)}.dot-bad{fill:var(--danger)}.mic{text-align:center}.result{margin-top:14px}@media (width<=1080px){.detail,.run-body{grid-template-columns:1fr;height:auto}.detail-view{border-right:0;border-bottom:1px solid var(--border);height:70vh}.run{height:auto;min-height:100vh}.run-view{height:68vh}.run-drawer{border-left:0;border-top:1px solid var(--border);width:auto}.grid-2,.lessons-grid,.start{grid-template-columns:1fr}.start .side{border-left:0;border-top:1px solid var(--border);padding-top:16px;padding-left:0}}@media (width<=760px){.shell{grid-template-columns:1fr;padding-bottom:64px}.shell.focus{padding-bottom:0}.sidebar{display:none}.tabbar{z-index:30;background:var(--surface);border-top:1px solid var(--border);padding:4px 6px calc(4px + env(safe-area-inset-bottom));display:flex;position:fixed;bottom:0;left:0;right:0}.tabbar a,.tabbar button{cursor:pointer;background:0 0;border:0;flex-direction:column;flex:1;gap:2px;padding:6px 2px;font-family:inherit;font-size:11px}.tabbar a.on,.tabbar button.on{color:var(--accent)}.tabbar-more{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);box-shadow:var(--shadow-float);flex-direction:column;min-width:190px;padding:6px;display:flex;position:absolute;bottom:100%;right:8px}.tabbar-more a{flex-direction:row;padding:9px 10px;font-size:14px}.page{padding:18px 16px 40px}.stats{gap:16px}.step-label{display:none}.run-bar{flex-wrap:wrap;gap:8px}.clock{font-size:22px}h1{font-size:21px}}.routine-grid{grid-template-columns:repeat(auto-fill,minmax(330px,1fr));gap:16px;display:grid}.routine-card{flex-direction:column;gap:8px;margin:0;display:flex}.routine-card h2{margin:0}.routine-card.mine{border-color:var(--accent)}.routine-card p{margin:0}.routine-sections{flex-direction:column;gap:3px;margin:0;padding-left:18px;display:flex}.badge{color:var(--accent);background:var(--accent-soft);border-radius:4px;align-items:center;gap:4px;padding:2px 8px;font-size:12px;display:inline-flex}.meter{background:var(--surface-2);border-radius:3px;height:6px;overflow:hidden}.meter div{background:var(--accent);height:100%}.routine-strip{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;display:flex}.section-nav{flex-direction:column;gap:2px;margin:0;padding:0;list-style:none;display:flex}.section-nav button{text-align:left;border-radius:var(--r-sm);width:100%;font:inherit;color:var(--text);cursor:pointer;background:0 0;border:0;justify-content:space-between;gap:8px;padding:6px 8px;font-size:13px;display:flex}.section-nav button:hover{background:var(--surface-2)}.section-nav li.on button{background:var(--accent-soft);color:var(--accent);font-weight:500}.section-nav li.done button,.section-nav .num{color:var(--text-2)}.login{place-items:center;min-height:100vh;padding:16px;display:grid}.login-card{flex-direction:column;gap:4px;width:min(360px,100%);padding:28px;display:flex}.login-card .brand{padding:0 0 18px}.login-error{color:var(--danger);margin:0 0 8px;font-size:14px}
