:root{--str-A: #f5d547;--str-A-dark: #c9a61a;--str-E: #4caf50;--str-E-dark: #2e7d32;--str-D: #ef5350;--str-D-dark: #c62828;--str-G: #42a5f5;--str-G-dark: #1976d2;--pink: #ffb8d1;--pink-deep: #ff7eb6;--mint: #b8f2e6;--cream: #fff8e7;--ink: #4a3f5e;--gold: #ffc93c}*{box-sizing:border-box;margin:0;padding:0}[hidden]{display:none!important}body{font-family:Kosugi Maru,sans-serif;background:radial-gradient(circle at 20% 20%,#ffe6f2 0%,transparent 50%),radial-gradient(circle at 80% 10%,#e0f5ff 0%,transparent 50%),radial-gradient(circle at 50% 80%,#fff4d6 0%,transparent 50%),linear-gradient(135deg,#fef6ff,#f0faff);min-height:100vh;color:var(--ink);overflow-x:hidden;padding:12px}.app{max-width:560px;margin:0 auto;padding:16px 12px}.brand{text-align:center;font-size:.85em;font-weight:700;letter-spacing:3px;color:var(--pink-deep);opacity:.7;margin-bottom:2px}h1{font-size:1.9em;text-align:center;color:var(--pink-deep);text-shadow:3px 3px 0 white,6px 6px 0 rgba(255,126,182,.2);margin-bottom:6px;letter-spacing:2px}.subtitle{text-align:center;color:var(--ink);opacity:.6;font-size:.85em;margin-bottom:14px}.nickname-bar{text-align:center;font-size:.95em;color:var(--ink);margin-bottom:10px}#nicknameDisplay{color:var(--pink-deep);font-weight:700}.nickname-change-btn{font-family:inherit;font-size:.75em;background:none;border:none;color:var(--ink);opacity:.5;cursor:pointer;padding:2px 6px;margin-left:4px;text-decoration:underline}.nickname-change-btn:hover{opacity:.85}.modal{position:fixed;top:0;right:0;bottom:0;left:0;background:#ffe6f2bf;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);display:flex;align-items:center;justify-content:center;z-index:1000;padding:20px}.modal-card{background:#fff;border:4px solid var(--pink);border-radius:26px;padding:30px 24px;text-align:center;box-shadow:0 8px #ff7eb640,0 20px 40px #0000001f;max-width:340px;width:100%}.modal-card h2{color:var(--pink-deep);font-size:1.7em;margin-bottom:10px;text-shadow:2px 2px 0 white,4px 4px 0 rgba(255,126,182,.2)}.modal-card p{color:var(--ink);opacity:.75;margin-bottom:18px;font-size:.95em}.modal-card input[type=text]{width:100%;padding:12px 16px;border:3px solid var(--pink);border-radius:18px;font-size:1.3em;font-family:inherit;text-align:center;margin-bottom:16px;box-sizing:border-box;color:var(--ink);background:#fffafc}.modal-card input[type=text]:focus{outline:none;border-color:var(--pink-deep);background:#fff}.modal-card button{width:100%}.result-history{font-size:.95em;color:var(--ink);opacity:.8;margin:4px 0 12px}.result-history.new-best{color:var(--pink-deep);font-weight:700;opacity:1;font-size:1.05em}.menu-section{margin-bottom:20px}.menu-section-title{font-weight:700;font-size:1.05em;color:var(--ink);margin-bottom:10px;padding-left:4px}.menu-cards{display:flex;flex-direction:column;gap:12px}.menu-card{font-family:inherit;background:#fff;border:4px solid var(--pink);border-radius:22px;padding:16px 18px;cursor:pointer;transition:transform .12s,box-shadow .12s;box-shadow:0 5px #ff7eb640,0 10px 20px #0000000f;display:flex;align-items:center;gap:14px;text-align:left;width:100%;color:var(--ink)}.menu-card:active{transform:translateY(3px);box-shadow:0 2px #ff7eb640}.card-emoji{font-size:2.6em;flex-shrink:0;line-height:1}.card-content{flex:1}.card-title{font-weight:700;font-size:1.15em;color:var(--pink-deep)}.card-subtitle{font-size:.85em;opacity:.7;margin-top:3px}.card-arrow{color:var(--pink-deep);font-size:1.2em;opacity:.5}.free-display{background:#fff;border:4px solid var(--pink);border-radius:24px;padding:28px 16px 18px;margin-bottom:14px;text-align:center;box-shadow:0 5px #ff7eb640,0 10px 20px #0000000f}.free-note{font-size:5em;font-weight:700;color:var(--ink);line-height:1;margin-bottom:8px;letter-spacing:2px;transition:color .15s}.free-note.silent{color:#ccc}.free-note.color-A{color:var(--str-A-dark)}.free-note.color-E{color:var(--str-E-dark)}.free-note.color-D{color:var(--str-D-dark)}.free-note.color-G{color:var(--str-G-dark)}.free-cents{font-size:1.1em;font-weight:700;color:var(--ink);opacity:.7;min-height:1.4em}.free-cents.in-tune{color:#2e7d32;opacity:1}.free-cents.off{color:#b35050;opacity:1}.pitch-scale{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;justify-content:space-between;align-items:center;padding:0 8px;font-size:.7em;opacity:.35;pointer-events:none}.strings-ref{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin-bottom:14px}.string-ref{background:#fff;padding:8px 10px;border-radius:14px;font-size:.85em;border:3px solid transparent;transition:all .2s;display:flex;align-items:baseline;gap:6px;opacity:.6}.string-ref b{font-weight:700;font-size:1.2em}.string-ref small{font-size:.75em;opacity:.7;margin-left:auto}.string-ref.color-A{color:var(--str-A-dark);border-color:var(--str-A)}.string-ref.color-E{color:var(--str-E-dark);border-color:var(--str-E)}.string-ref.color-D{color:var(--str-D-dark);border-color:var(--str-D)}.string-ref.color-G{color:var(--str-G-dark);border-color:var(--str-G)}.string-ref.active{opacity:1;transform:scale(1.05);box-shadow:0 3px 0 currentColor;background:var(--cream)}.btn-back{font-family:inherit;background:var(--cream);color:var(--ink);border:3px solid var(--ink);border-radius:24px;font-size:.95em;padding:8px 16px;cursor:pointer;box-shadow:0 3px 0 var(--ink);margin-bottom:8px;font-weight:700}.btn-back:active{transform:translateY(2px);box-shadow:0 1px 0 var(--ink)}.btn-back:disabled{opacity:.4;cursor:not-allowed}.character-stage{background:linear-gradient(180deg,#fff,#fef6ff);border:4px solid var(--pink);border-radius:24px;padding:14px;margin-bottom:12px;position:relative;box-shadow:0 6px #ff7eb633,0 10px 25px #00000014}.stage-top{display:flex;align-items:center;gap:14px}.character{font-size:3.5em;transition:transform .15s ease-out;filter:drop-shadow(0 4px 6px rgba(0,0,0,.1));flex-shrink:0}.character.jumping{animation:jump .4s ease-out}.character.dancing{animation:dance .6s ease-in-out}@keyframes jump{0%,to{transform:translateY(0) scale(1)}40%{transform:translateY(-25px) scale(1.15)}70%{transform:translateY(-8px) scale(1.05)}}@keyframes dance{0%,to{transform:rotate(0) scale(1)}25%{transform:rotate(-10deg) scale(1.1)}75%{transform:rotate(10deg) scale(1.1)}}.speech-bubble{background:var(--gold);border:3px solid var(--ink);border-radius:16px;padding:8px 14px;font-weight:700;font-size:1em;flex:1;position:relative;min-height:40px;display:flex;align-items:center}.speech-bubble:before{content:"";position:absolute;left:-12px;top:50%;transform:translateY(-50%);border:8px solid transparent;border-right-color:var(--ink)}.speech-bubble:after{content:"";position:absolute;left:-8px;top:50%;transform:translateY(-50%);border:7px solid transparent;border-right-color:var(--gold)}.stars-row{display:flex;justify-content:center;gap:6px;margin-top:10px;min-height:36px}.star{font-size:1.8em;filter:grayscale(1) opacity(.3);transition:all .4s cubic-bezier(.5,1.8,.4,.9)}.star.lit{filter:grayscale(0) opacity(1);animation:starpop .5s ease-out;text-shadow:0 0 20px var(--gold)}@keyframes starpop{0%{transform:scale(0) rotate(0)}50%{transform:scale(1.4) rotate(180deg)}to{transform:scale(1) rotate(360deg)}}.now-playing{background:#fff;border:3px solid var(--ink);border-radius:20px;padding:14px;margin-bottom:12px;display:flex;align-items:center;gap:14px;box-shadow:0 4px #0000001a}.now-label{font-size:.85em;color:var(--ink);opacity:.6;writing-mode:vertical-rl;text-orientation:upright;letter-spacing:4px}.now-circle{width:80px;height:80px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:3em;font-weight:700;color:var(--ink);flex-shrink:0;box-shadow:0 4px #00000026,inset 0 -6px #0000001a;transition:all .2s}.now-circle.pulse{animation:pulse .6s infinite}@keyframes pulse{0%,to{transform:scale(1)}50%{transform:scale(1.08)}}.now-circle.color-A{background:var(--str-A);border:4px solid var(--str-A-dark)}.now-circle.color-E{background:var(--str-E);border:4px solid var(--str-E-dark);color:#fff}.now-circle.color-D{background:var(--str-D);border:4px solid var(--str-D-dark);color:#fff}.now-circle.color-G{background:var(--str-G);border:4px solid var(--str-G-dark);color:#fff}.now-circle.waiting{background:#eee;border:4px solid #ccc;color:#999}.now-info{flex:1}.now-next-label{font-size:.75em;opacity:.5}.now-string-name{font-size:1.1em;font-weight:700;margin-top:2px}.now-finger{font-size:.9em;opacity:.7;margin-top:2px}.score-display{background:#fff;border:3px dashed var(--pink);border-radius:20px;padding:12px 8px;margin-bottom:12px}.score-title{font-size:.8em;color:var(--ink);opacity:.6;margin-bottom:8px;text-align:center}.phrase{margin-bottom:10px}.phrase-label{font-size:.75em;opacity:.5;margin-bottom:4px;padding-left:6px}.notes-track{display:flex;flex-wrap:wrap;gap:3px;justify-content:center;padding:4px}.note-circle{width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:.95em;color:var(--ink);border:2px solid transparent;transition:all .2s;flex-shrink:0;position:relative}.note-circle.color-A{background:var(--str-A);border-color:var(--str-A-dark)}.note-circle.color-E{background:var(--str-E);border-color:var(--str-E-dark);color:#fff}.note-circle.color-D{background:var(--str-D);border-color:var(--str-D-dark);color:#fff}.note-circle.color-G{background:var(--str-G);border-color:var(--str-G-dark);color:#fff}.note-circle.current{transform:scale(1.4);box-shadow:0 0 0 4px var(--ink),0 0 20px #4a3f5e80;z-index:2}.note-circle.great:after{content:"⭐";position:absolute;top:-8px;right:-8px;font-size:.85em;filter:drop-shadow(0 1px 2px rgba(0,0,0,.2))}.note-circle.correct:after{content:"⭕";position:absolute;top:-6px;right:-6px;font-size:.7em;background:#fff;border-radius:50%;padding:1px}.note-circle.almost{opacity:.75}.note-circle.almost:after{content:"🔺";position:absolute;top:-6px;right:-6px;font-size:.75em;filter:drop-shadow(0 1px 2px rgba(0,0,0,.2))}.note-circle.missed{opacity:.35;filter:grayscale(.6)}.note-circle.missed:after{content:"×";position:absolute;top:-4px;right:-4px;font-size:.8em;color:#d66;font-weight:700;background:#fff;border-radius:50%;width:14px;height:14px;display:flex;align-items:center;justify-content:center}.judgment-pop{position:fixed;font-weight:700;font-size:2.2em;pointer-events:none;z-index:50;transform:translate(-50%,-50%);text-shadow:2px 2px 0 white,-2px -2px 0 white,2px -2px 0 white,-2px 2px 0 white,0 0 8px rgba(255,255,255,.8);animation:judge-pop .7s cubic-bezier(.2,.7,.3,1) forwards;letter-spacing:1px}.judgment-great{color:#ffb300}.judgment-correct{color:#2e7d32}.judgment-almost{color:#b88652}.judgment-missed{color:#b35050;font-size:1.7em;opacity:.7}.judgment-wrong{color:#d32f2f;font-size:2em}.judgment-hint-flat{color:#1976d2;font-size:1.9em}.judgment-hint-sharp{color:#ad1457;font-size:1.9em}@keyframes judge-pop{0%{transform:translate(-50%,-50%) scale(.4);opacity:0}25%{transform:translate(-50%,-120%) scale(1.25);opacity:1}75%{transform:translate(-50%,-180%) scale(1.05);opacity:1}to{transform:translate(-50%,-240%) scale(.95);opacity:0}}.result-detail .tally-great,.result-detail .tally-correct,.result-detail .tally-almost,.result-detail .tally-missed{display:inline-block;margin:0 5px;font-weight:700}.result-detail .tally-great{color:#ffb300}.result-detail .tally-correct{color:#2e7d32}.result-detail .tally-almost{color:#b88652}.result-detail .tally-missed{color:#b35050}.pitch-meter{background:#fff;border:3px solid var(--mint);border-radius:16px;padding:10px 14px;margin-bottom:12px;display:flex;align-items:center;gap:12px;height:60px}.pitch-bar{flex:1;height:36px;background:linear-gradient(90deg,#ff6b6b,#ffd93d,#6bcf7f,#ffd93d,#ff6b6b);border-radius:18px;position:relative;overflow:hidden}.pitch-bar:before{content:"";position:absolute;left:50%;top:0;bottom:0;width:2px;background:var(--ink);opacity:.3;z-index:1}.pitch-dot{position:absolute;width:28px;height:28px;border-radius:50%;background:#fff;border:3px solid var(--ink);top:50%;left:50%;transform:translate(-50%,-50%);transition:left .1s ease-out;z-index:2;box-shadow:0 2px 6px #0000004d}.pitch-dot.silent{opacity:.3}.button-group{display:flex;gap:10px;justify-content:center;flex-wrap:wrap;margin-bottom:12px}button{font-family:inherit;font-size:1.1em;font-weight:700;padding:14px 28px;border-radius:30px;border:none;cursor:pointer;transition:all .15s;letter-spacing:1px}.btn-primary{background:linear-gradient(135deg,var(--pink-deep),#ff5ba7);color:#fff;box-shadow:0 5px #d64a8c,0 8px 20px #ff7eb666}.btn-primary:active{transform:translateY(3px);box-shadow:0 2px #d64a8c}.btn-primary:disabled{opacity:.4;cursor:not-allowed}.btn-secondary{background:var(--cream);color:var(--ink);border:3px solid var(--ink);box-shadow:0 4px 0 var(--ink)}.btn-secondary:active{transform:translateY(3px);box-shadow:0 1px 0 var(--ink)}.tempo-control{display:flex;align-items:center;gap:10px;justify-content:center;margin-bottom:12px;font-size:.9em}.tempo-control input[type=range]{width:140px}.tempo-value{background:var(--cream);padding:4px 10px;border-radius:12px;font-weight:700;min-width:50px;text-align:center;border:2px solid var(--ink)}.result-card{background:linear-gradient(135deg,#fff 0%,var(--cream) 100%);border:4px solid var(--gold);border-radius:30px;padding:24px 18px;margin-top:14px;text-align:center;box-shadow:0 8px #ffc93c4d;animation:pop-in .5s ease-out}@keyframes pop-in{0%{transform:scale(.5);opacity:0}to{transform:scale(1);opacity:1}}.result-medal{font-size:4.5em;margin-bottom:6px}.result-score{font-size:2.8em;font-weight:700;color:var(--pink-deep);margin:4px 0}.result-comment{font-size:1.1em;margin:8px 0}.result-detail{font-size:.85em;opacity:.7;margin-top:10px;line-height:1.6}.count-in{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);font-size:8em;font-weight:700;color:var(--pink-deep);text-shadow:4px 4px 0 white,8px 8px 0 rgba(255,126,182,.2);z-index:1000;animation:count-pop .8s ease-out;pointer-events:none}@keyframes count-pop{0%{transform:translate(-50%,-50%) scale(0);opacity:0}30%{transform:translate(-50%,-50%) scale(1.2);opacity:1}70%{transform:translate(-50%,-50%) scale(1);opacity:1}to{transform:translate(-50%,-50%) scale(1.3);opacity:0}}.streak-badge{position:fixed;top:28%;left:24px;z-index:20;pointer-events:none;font-family:Kosugi Maru,sans-serif;text-align:center;opacity:0;transform:scale(.7);transition:opacity .25s,transform .25s}.streak-badge.right{left:auto;right:24px}.streak-badge.active{opacity:1;transform:scale(1)}.streak-badge .streak-num{font-size:5em;font-weight:700;color:var(--pink-deep);line-height:1;text-shadow:4px 4px 0 white,8px 8px 0 rgba(255,126,182,.3);transition:color .3s,font-size .3s}.streak-badge .streak-label{font-size:1em;font-weight:700;color:var(--ink);opacity:.75;margin-top:6px;letter-spacing:1px}.streak-badge.bouncing .streak-num{animation:streak-bounce .35s cubic-bezier(.2,1.5,.5,1)}@keyframes streak-bounce{0%{transform:scale(1)}40%{transform:scale(1.3)}to{transform:scale(1)}}.streak-badge.tier-2 .streak-num{color:#ffb300}.streak-badge.tier-3 .streak-num{color:#ff5ba7;font-size:6em}.streak-badge.tier-3 .streak-label:after{content:" コンボ！";color:#ff5ba7}.streak-badge.tier-4 .streak-num{font-size:7em;animation:rainbow-shift 2s linear infinite}.streak-badge.tier-4 .streak-label:after{content:" フィーバー！";color:#ff5ba7}@keyframes rainbow-shift{0%{color:#ff7eb6}25%{color:#ffc93c}50%{color:#4caf50}75%{color:#42a5f5}to{color:#ff7eb6}}.streak-milestone{position:fixed;left:50%;top:25%;font-family:Kosugi Maru,sans-serif;font-weight:700;font-size:3em;color:var(--pink-deep);text-shadow:3px 3px 0 white,6px 6px 0 rgba(255,126,182,.4);z-index:60;pointer-events:none;animation:milestone-pop 1.3s ease-out forwards;letter-spacing:2px;white-space:nowrap}@keyframes milestone-pop{0%{transform:translate(-50%,-50%) scale(.2);opacity:0}20%{transform:translate(-50%,-50%) scale(1.35);opacity:1}80%{transform:translate(-50%,-50%) scale(1);opacity:1}to{transform:translate(-50%,-90%) scale(.9);opacity:0}}.side-particle{position:fixed;pointer-events:none;font-size:2.2em;animation:side-float 2s ease-out forwards;z-index:10}@keyframes side-float{0%{transform:translateY(0) scale(.4) rotate(0);opacity:0}20%{transform:translateY(-60px) scale(1.2) rotate(15deg);opacity:1}to{transform:translateY(-380px) scale(.85) rotate(-20deg);opacity:0}}@media (max-width: 899px){.streak-badge,.side-particle{display:none!important}}.particle{position:fixed;pointer-events:none;font-size:1.8em;animation:float-up 1.5s ease-out forwards;z-index:100}@keyframes float-up{0%{transform:translateY(0) scale(.5);opacity:1}to{transform:translateY(-140px) scale(1.3);opacity:0}}.status-text{text-align:center;font-size:.85em;color:var(--ink);opacity:.6;margin:8px 0;min-height:20px}.hidden{display:none!important}
