@import "https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500&family=Space+Grotesk:wght@500;600;700&family=Sora:wght@400;500;600;700&display=swap";.shell{gap:1rem;width:min(1080px,100%);min-height:calc(100vh - 3rem);margin:0 auto;display:grid}.shell__top{flex-wrap:wrap;align-items:center;gap:.75rem 1rem;padding:.35rem 0;display:flex}.shell__brand{color:var(--ink);font-family:var(--font-display);letter-spacing:-.04em;cursor:pointer;background:0 0;border:0;padding:0;font-size:1.35rem;font-weight:700}.shell__nav{flex-wrap:wrap;flex:1;gap:.25rem;display:flex}.shell__nav button{color:var(--dim);cursor:pointer;background:0 0;border:0;border-radius:999px;padding:.45rem .7rem;font-size:.85rem}.shell__nav button.is-active{color:var(--ink);background:#00e6b81f}.shell__auth{align-items:center;gap:.5rem;display:flex}.shell__user{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;align-items:center;gap:.35rem;max-width:160px;font-size:.78rem;display:inline-flex;overflow:hidden}.shell__user em{letter-spacing:.08em;text-transform:uppercase;color:var(--accent);border:1px solid #00e6b859;border-radius:999px;padding:.1rem .35rem;font-size:.62rem;font-style:normal}.shell__muted{color:var(--dim);font-size:.85rem}.shell__instruments{gap:.35rem;display:flex}.shell__instruments button{color:var(--muted);cursor:pointer;background:#ffffff08;border:1px solid #ffffff1a;border-radius:999px;padding:.4rem .85rem;font-size:.8rem}.shell__instruments button.is-active{color:var(--ink);background:#00e6b81a;border-color:#00e6b873}.shell__main{flex:1}.shell__foot{color:var(--dim);padding-bottom:.5rem;font-size:.72rem}.btn--sm{padding:.45rem .85rem;font-size:.8rem}.lesson-bar{align-items:center;gap:.75rem;width:100%;display:flex}.lesson-bar__meta{gap:.1rem;display:grid}.lesson-bar__meta strong{font-family:var(--font-display)}.lesson-bar__meta span{color:var(--dim);text-transform:uppercase;letter-spacing:.08em;font-size:.72rem}.hud{gap:.65rem;width:min(920px,100%);animation:.55s cubic-bezier(.22,1,.36,1) both hud-in;display:grid}.hud__row{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);background:linear-gradient(135deg,#00ffc814,#0000 40%),#080c12b8;border:1px solid #00ffc824;border-radius:16px;grid-template-columns:auto 1fr auto auto;align-items:center;gap:.65rem;padding:.7rem .85rem;display:grid}.hud__label{letter-spacing:.14em;color:var(--dim);font-size:.62rem;display:block}.hud__level,.hud__stat{min-width:3.4rem}.hud__level strong,.hud__stat strong{font-family:var(--font-display);letter-spacing:-.03em;font-size:1.25rem;font-weight:700}.hud__stat--combo.is-hot strong{color:var(--accent);text-shadow:0 0 18px #00ffc859;animation:.45s combo-pulse}.hud__xp{gap:.28rem;display:grid}.hud__xp-meta{color:var(--dim);justify-content:space-between;font-size:.72rem;display:flex}.hud__xp-flash{color:var(--accent);margin-left:.4rem;font-style:normal;animation:.7s both xp-pop}.hud__xp-bar{background:#ffffff0f;border-radius:999px;height:7px;overflow:hidden}.hud__xp-bar i{border-radius:inherit;background:linear-gradient(90deg,#00e6b8,#5cff9d);height:100%;transition:width .35s cubic-bezier(.22,1,.36,1);display:block;box-shadow:0 0 12px #00e6b873}.hud__badges{flex-wrap:wrap;gap:.35rem;margin:0;padding:0;list-style:none;display:flex}.hud__badges li{letter-spacing:.02em;color:#b7ffe8;background:#00ffc80f;border:1px solid #00ffc833;border-radius:999px;padding:.28rem .55rem;font-size:.68rem}.hud__empty{color:var(--dim);margin:0;font-size:.75rem}.hud__toast{z-index:40;background:#060a10f0;border:1px solid #00ffc859;border-radius:14px;width:min(280px,100vw - 2rem);padding:.9rem 1rem;animation:.4s cubic-bezier(.22,1,.36,1) toast-in;position:fixed;bottom:1rem;right:1rem;box-shadow:0 18px 50px #00000073}.hud__toast span{letter-spacing:.16em;color:var(--accent);font-size:.62rem}.hud__toast strong{font-family:var(--font-display);margin-top:.2rem;font-size:1.15rem;display:block}.hud__toast p{color:var(--muted);margin:.25rem 0 0;font-size:.82rem}@keyframes hud-in{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}@keyframes xp-pop{0%{opacity:0;transform:translateY(4px)}30%{opacity:1;transform:translateY(-2px)}to{opacity:0;transform:translateY(-10px)}}@keyframes combo-pulse{0%{transform:scale(1)}40%{transform:scale(1.12)}to{transform:scale(1)}}@keyframes toast-in{0%{opacity:0;transform:translateY(16px)scale(.96)}to{opacity:1;transform:translateY(0)scale(1)}}@media (width<=640px){.hud__row{grid-template-columns:auto 1fr}.hud__stat{display:none}.hud__stat--combo{grid-column:2;justify-self:end;display:block}}.fretboard{background:linear-gradient(#1a120c,#0e0a07);border:1px solid #c9a0642e;border-radius:16px;gap:.35rem;width:100%;max-width:680px;padding:.75rem;display:grid;box-shadow:0 18px 40px #0006}.fretboard__nut{font-family:var(--font-mono);color:#c9a064;gap:2px;font-size:.65rem;display:grid}.fretboard--guitar .fretboard__nut{grid-template-rows:repeat(6,28px)}.fretboard--bass .fretboard__nut{grid-template-rows:repeat(4,28px)}.fretboard__nut span{place-items:center;width:1.6rem;display:grid}.fretboard{grid-template-columns:auto 1fr}.fretboard__grid{background:repeating-linear-gradient(90deg, transparent, transparent calc(100% / var(--frets,8) - 1px), #ffdca01f calc(100% / var(--frets,8) - 1px), #ffdca01f calc(100% / var(--frets,8)));gap:2px;display:grid}.fretboard__cell{color:#04110c;width:22px;height:22px;font-family:var(--font-mono);cursor:default;background:0 0;border:0;border-radius:999px;margin:2px auto;font-size:.58rem}.fretboard.is-interactive .fretboard__cell:not(:disabled){cursor:pointer}.fretboard__cell.is-lit{background:#5cff9d;box-shadow:0 0 12px #00e6b873}.fretboard__cell.is-pressed{background:#00e6b8;transform:scale(1.08)}.fretboard__frets{font-family:var(--font-mono);color:#7a6a55;text-align:center;grid-column:2;grid-auto-columns:1fr;grid-auto-flow:column;font-size:.62rem;display:grid}.piano{-webkit-user-select:none;user-select:none;filter:drop-shadow(0 18px 40px #00000073);width:100%;max-width:680px;height:188px;position:relative}.piano__whites{background:linear-gradient(#12161c,#0a0d11);border-radius:14px;grid-auto-columns:1fr;grid-auto-flow:column;gap:3px;height:100%;padding:3px;display:grid}.piano__blacks{pointer-events:none;position:absolute;inset:3px 3px 40%}.piano__key{cursor:default;font:inherit;border:0;margin:0;padding:0}.piano--interactive .piano__key:not(:disabled){cursor:pointer}.piano--interactive .piano__key:not(:disabled):hover{filter:brightness(1.06)}.piano__key--white{color:#2a332f;background:linear-gradient(#f4f7f5 0%,#d7ddd9 100%);border-radius:0 0 10px 10px;justify-content:center;align-items:flex-end;padding-bottom:.6rem;transition:transform 80ms,background .15s;display:flex;box-shadow:inset 0 -3px #141e191f}.piano__key--white span{font-family:var(--font-mono);letter-spacing:.02em;opacity:.55;font-size:.65rem}.piano__key--white.is-lit{background:linear-gradient(#d8fff0 0%,#5cff9d 100%);box-shadow:inset 0 -3px #00644626,0 0 18px #00e6b859}.piano__key--white.is-pressed{background:linear-gradient(#b8ffe0 0%,#00e6b8 100%);transform:translateY(3px)}.piano__key--black{pointer-events:auto;z-index:2;background:linear-gradient(#2c3338 0%,#101418 100%);border-radius:0 0 6px 6px;width:5.6%;height:100%;transition:transform 80ms,background .15s;position:absolute;top:0;transform:translate(-50%)}.piano__key--black.is-lit{background:linear-gradient(#00e6b8 0%,#0a6b55 100%);box-shadow:0 0 16px #00e6b873}.piano__key--black.is-pressed{background:linear-gradient(#5cff9d 0%,#0d5c45 100%);transform:translate(-50%)translateY(2px)}.stage{gap:1.1rem;width:min(960px,100%);margin:0 auto;display:grid;position:relative}.stage--good{--pulse:#00ffb42e}.stage--bad{--pulse:#ff5a6e29}.stage--win{--pulse:#78ffc847}.stage:before{content:"";pointer-events:none;background:radial-gradient(ellipse at 50% 0%, var(--pulse,transparent), transparent 70%);z-index:0;height:42%;transition:background .35s;position:absolute;inset:-8% -4% auto}.stage>*{z-index:1;position:relative}.stage__burst{pointer-events:none;z-index:30;background:radial-gradient(circle at 20% 80%,#00ffb440,#0000 28%),radial-gradient(circle at 80% 30%,#5cff9d33,#0000 30%),radial-gradient(circle,#ffffff14,#0000 40%);animation:2.6s forwards burst;position:fixed;inset:0}.brand{text-align:center;padding-top:.35rem;animation:.6s cubic-bezier(.22,1,.36,1) both rise}.brand__mark{font-family:var(--font-display);letter-spacing:-.05em;background:linear-gradient(105deg,#eafff6 0%,#5cff9d 45%,#00e6b8 100%);color:#0000;-webkit-background-clip:text;background-clip:text;margin:0;font-size:clamp(2.4rem,7vw,3.6rem);font-weight:700;line-height:.95}.brand__line{letter-spacing:.18em;text-transform:uppercase;color:var(--dim);margin:.4rem 0 0;font-size:.78rem}.rail{background:#ffffff0f;border-radius:999px;height:3px;overflow:hidden}.rail i{background:linear-gradient(90deg,#00e6b8,#5cff9d);height:100%;transition:width .4s cubic-bezier(.22,1,.36,1);display:block}.steps{grid-template-columns:repeat(5,minmax(0,1fr));gap:.4rem;display:grid}.steps__item{color:var(--dim);text-align:left;background:#ffffff06;border:1px solid #0000;border-radius:12px;flex-direction:column;align-items:flex-start;gap:.15rem;padding:.6rem .55rem;font-size:.72rem;transition:all .2s;display:flex}.steps__item span{font-family:var(--font-mono);color:#5a6a66;font-size:.68rem}.steps__item.is-current{color:var(--ink);background:#00e6b814;border-color:#00e6b866;box-shadow:inset 0 0 0 1px #00e6b814}.steps__item.is-done{color:#8fe9c4}.panel{-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);background:linear-gradient(#00e6b80f,#0000 28%),#070b10c7;border:1px solid #00ffc81f;border-radius:22px;justify-items:center;gap:1rem;padding:1.35rem 1.05rem 1.4rem;animation:.55s cubic-bezier(.22,1,.36,1) 50ms both rise;display:grid}.panel__head{text-align:center;gap:.35rem;display:grid}.panel__kicker{letter-spacing:.16em;text-transform:uppercase;color:var(--accent);margin:0;font-size:.68rem}.panel__head h1{font-family:var(--font-display);letter-spacing:-.03em;margin:0;font-size:clamp(1.55rem,4vw,2.05rem)}.panel__hint{max-width:34rem;color:var(--muted);margin:0;font-size:.92rem;line-height:1.45}.degrees{flex-wrap:wrap;justify-content:center;gap:.45rem;display:flex}.chip{min-width:4.4rem;color:var(--ink);background:#ffffff08;border:1px solid #ffffff14;border-radius:14px;justify-items:center;gap:.12rem;padding:.7rem .8rem;transition:transform .15s,border-color .15s,background .15s;display:grid}.chip strong{font-family:var(--font-display);letter-spacing:-.02em;font-size:1.2rem}.chip span{font-family:var(--font-mono);color:var(--dim);font-size:.7rem}.chip:hover,.chip.is-active{background:#00e6b81a;border-color:#00e6b873;transform:translateY(-2px)}.actions,.build{flex-wrap:wrap;justify-content:center;align-items:center;gap:.5rem;display:flex}.slots{justify-content:center;gap:.45rem;width:100%;margin-bottom:.25rem;display:flex}.slot{width:2.6rem;height:2.6rem;font-family:var(--font-display);color:var(--dim);border:1px dashed #ffffff24;border-radius:10px;place-items:center;display:grid}.slot.is-filled{color:var(--ink);background:#00e6b81a;border-style:solid;border-color:#00e6b866;animation:.25s slot-pop}.target{text-align:center;width:100%;color:var(--muted);justify-content:center;align-items:baseline;gap:.55rem;margin:0;display:flex}.target strong{color:var(--ink);font-family:var(--font-display);font-size:1.15rem}.target span{font-family:var(--font-mono);color:var(--dim);font-size:.75rem}.btn{appearance:none;color:#04110c;letter-spacing:.01em;cursor:pointer;background:linear-gradient(135deg,#5cff9d,#00e6b8);border:0;border-radius:999px;padding:.72rem 1.2rem;font-weight:700;transition:transform .15s,filter .15s,opacity .15s}.btn:hover:not(:disabled){filter:brightness(1.06);transform:translateY(-1px)scale(1.01)}.btn:disabled{opacity:.35;cursor:not-allowed}.btn--ghost{color:var(--ink);background:0 0;border:1px solid #ffffff24}.piano-wrap{justify-content:center;width:100%;padding:.35rem 0 .15rem;animation:.5s .1s both rise;display:flex}.feedback{color:#c9ffe8;text-align:center;background:#00e6b81a;border-radius:12px;max-width:36rem;margin:0;padding:.65rem .95rem}.feedback--bad{color:#ffd0d7;background:#ff5a6e1f}.feedback--win{color:#e9fff3;background:#5cff9d29;font-weight:600}.nav{justify-content:space-between;gap:.75rem;width:100%;display:flex}@keyframes rise{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes slot-pop{0%{transform:scale(.9)}to{transform:scale(1)}}@keyframes burst{0%{opacity:0}15%{opacity:1}to{opacity:0}}@media (width<=720px){.steps{grid-template-columns:1fr 1fr}.steps__item:last-child{grid-column:1/-1}}.page{gap:1rem;animation:.45s both rise;display:grid}.page--home,.page--login{text-align:center;justify-items:center;padding:2rem 0 1rem}.page__kicker{letter-spacing:.16em;text-transform:uppercase;color:var(--accent);margin:0;font-size:.72rem}.page__hero,.page h1{font-family:var(--font-display);letter-spacing:-.04em;margin:0;font-size:clamp(1.8rem,5vw,2.8rem)}.page__lead{max-width:36rem;color:var(--muted);margin:0;line-height:1.5}.page__cta{flex-wrap:wrap;justify-content:center;gap:.55rem;display:flex}.lesson-grid{grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:.75rem;margin:0;padding:0;list-style:none;display:grid}.lesson-card{text-align:left;width:100%;color:var(--ink);cursor:pointer;background:#070b10b8;border:1px solid #00ffc81f;border-radius:16px;gap:.4rem;padding:1rem;transition:border-color .15s,transform .15s;display:grid}.lesson-card:hover{border-color:#00e6b866;transform:translateY(-2px)}.lesson-card strong{font-family:var(--font-display);font-size:1.05rem}.lesson-card p{color:var(--muted);margin:0;font-size:.85rem;line-height:1.4}.lesson-card__kind{letter-spacing:.12em;text-transform:uppercase;color:var(--accent);font-size:.65rem}.lesson-card__meta{color:var(--dim);justify-content:space-between;font-size:.72rem;display:flex}.cleared-list,.admin-list{color:var(--muted);gap:.35rem;margin:0;padding-left:1.1rem;display:grid}.admin-list code{color:var(--accent);font-family:var(--font-mono);font-size:.85em}:root{--font-display:"Space Grotesk", system-ui, sans-serif;--font-body:"Sora", system-ui, sans-serif;--font-mono:"IBM Plex Mono", ui-monospace, monospace;--ink:#eef7f3;--muted:#9aada4;--dim:#6d7f78;--accent:#00e6b8;--bg0:#05070a;--bg1:#0a1110;color:var(--ink);background:var(--bg0);font-family:var(--font-body);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased}*{box-sizing:border-box}html,body,#root{min-height:100%}body{background:radial-gradient(900px 420px at 85% -5%, #00e6b829, transparent 55%), radial-gradient(700px 380px at 5% 100%, #5cff9d14, transparent 50%), linear-gradient(165deg, var(--bg0), var(--bg1) 50%, #070d0c);background-attachment:fixed;min-width:320px;margin:0}body:before{content:"";pointer-events:none;opacity:.45;background-image:linear-gradient(#ffffff06 1px,#0000 1px),linear-gradient(90deg,#ffffff06 1px,#0000 1px);background-size:48px 48px;position:fixed;inset:0;-webkit-mask-image:radial-gradient(#000 35%,#0000 80%);mask-image:radial-gradient(#000 35%,#0000 80%)}#root{place-items:start center;padding:1.5rem 1rem 3rem;display:grid}button{font:inherit}button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important}}
