:root{color-scheme:dark;--bg:#05060c;--panel:#10131f;--line:#2a2f45;--ink:#f2f4fa;--sub:#a3abc0;--gold:#ffc542;--red:#ff4a3d;font:15px/1.6 "Hiragino Sans","Hiragino Kaku Gothic ProN","Noto Sans JP",system-ui,sans-serif;color:var(--ink);background:var(--bg)}
*{box-sizing:border-box}
html,body{margin:0;height:100%;background:radial-gradient(ellipse at 50% -10%,#2a0f12 0,transparent 55%),var(--bg)}
body.playing{overflow:hidden;overscroll-behavior:none;touch-action:none;-webkit-user-select:none;user-select:none}
/* スマホは横幅いっぱい。パソコンなど横に広い画面だけ縦長の枠にする */
#app{position:relative;width:min(100vw,max(430px,calc(100dvh * 0.5625)));min-height:100dvh;margin:0 auto}
body.playing #app{height:100dvh}
h1,h2,h3,p{margin-top:0}
main{padding:calc(18px + env(safe-area-inset-top)) 16px calc(28px + env(safe-area-inset-bottom))}
.brand{margin:4px 0 18px}
h1{font-size:28px;line-height:1.25;margin:2px 0 0;font-family:"Hiragino Mincho ProN","Yu Mincho",serif;letter-spacing:.04em}
h1 span{color:var(--gold)}
h2{font-size:24px;margin:4px 0}
h3{font-size:16px;margin:22px 0 10px;color:var(--gold);letter-spacing:.06em}
.eyebrow{font-size:12px;letter-spacing:.08em;color:var(--gold);margin:0}
.song{background:linear-gradient(150deg,#1c1420,#0f111b 70%);border:1px solid var(--line);border-radius:18px;padding:16px}
.credit,.note{font-size:13px;color:var(--sub);margin:4px 0 0}
.chars{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.char{position:relative;display:flex;flex-direction:column;align-items:flex-start;gap:2px;padding:0 0 10px;border-radius:14px;border:2px solid #3a3f55;background:#0b0d16;color:var(--ink);font:inherit;text-align:left;overflow:hidden;cursor:pointer}
.char img{display:block;width:100%;aspect-ratio:4/4.4;object-fit:cover;object-position:50% 20%}
.char strong{font-size:18px;padding:4px 10px 0;font-family:"Hiragino Mincho ProN","Yu Mincho",serif}
.char small{font-size:12px;color:var(--sub);padding:0 10px;line-height:1.4}
.char[aria-pressed="true"]{border-color:var(--c);box-shadow:0 0 0 2px color-mix(in srgb,var(--c) 45%,transparent),0 0 26px color-mix(in srgb,var(--c) 55%,transparent)}
.char[aria-pressed="true"] strong{color:var(--s)}
.badge{position:absolute;top:8px;right:8px;font-size:11px;font-weight:700;background:#000a;border:1px solid var(--c);color:var(--c);padding:2px 8px;border-radius:99px}
.diff{border:0;padding:0;margin:20px 0 6px;display:grid;grid-template-columns:1fr 1fr;gap:10px}
.diff legend{font-size:13px;color:var(--sub);margin-bottom:8px}
.diff label{display:block}
.diff input{position:absolute;opacity:0}
.diff span{display:flex;flex-direction:column;border:2px solid #3a3f55;border-radius:12px;padding:10px 12px;background:#0b0d16;cursor:pointer}
.diff small{font-size:12px;color:var(--sub)}
.diff input:checked+span{border-color:var(--gold);box-shadow:0 0 18px #ffc54240}
.diff input:focus-visible+span{outline:2px solid #fff}
.status{min-height:1.6em;font-size:13px;color:var(--sub);margin:12px 0 8px}
button{font:inherit}
.primary,.ghost{display:block;width:100%;border-radius:14px;padding:14px;font-size:18px;font-weight:700;margin:0 0 10px;cursor:pointer}
.primary{border:0;color:#2a1300;background:linear-gradient(180deg,#ffe08a,#ffb22e);box-shadow:0 6px 24px #ffb22e44}
.ghost{border:1px solid #4a5068;color:var(--ink);background:#141826;font-size:15px}
.primary:disabled,.ghost:disabled{opacity:.45}
details{margin-top:14px;border-top:1px solid var(--line);padding-top:10px;font-size:14px}
summary{cursor:pointer;color:var(--sub)}
.row{display:flex;flex-direction:column;gap:6px;margin:12px 0}
.row input[type=number]{font:inherit;padding:8px;border-radius:8px;border:1px solid var(--line);background:#0b0d16;color:var(--ink);width:120px}
.row.check{flex-direction:row;align-items:center}
footer{margin-top:26px;font-size:12px;color:#727a90;line-height:1.7}
footer a{color:#9aa6c8}
#stage-screen{position:absolute;inset:0;overflow:hidden;background:#05060c}
#stage-mount{position:absolute;inset:0}
#stage-mount canvas{display:block}
#pause{position:absolute;top:calc(env(safe-area-inset-top) + 6px);right:8px;width:40px;height:40px;border-radius:50%;border:1px solid #ffffff66;background:#0008;color:#fff;font-size:15px;font-weight:700;z-index:5;cursor:pointer}
.overlay{position:absolute;inset:0;z-index:10;display:grid;place-items:center;background:#000b;padding:20px}
.overlay[hidden]{display:none}
.panel{width:100%;max-width:340px;background:linear-gradient(160deg,#1b1622,#0c0e17 70%);border:1px solid #3a3f55;border-radius:20px;padding:22px;text-align:center}
.panel h2{margin-bottom:6px}
.result .rank{font:900 88px/1 "Hiragino Mincho ProN","Yu Mincho",serif;margin:6px 0 2px;color:var(--gold);text-shadow:0 0 24px #ffb22e88}
.result .rank[data-rank="S"]{color:#fff3c4;text-shadow:0 0 18px #ffd84d,0 0 42px #ff7a1a}
.result .rank[data-rank="C"]{color:#b8bfcf;text-shadow:none}
.result .score{font-size:34px;font-weight:800;margin:6px 0 0;letter-spacing:.02em}
.badge-line{color:var(--gold);font-weight:700;min-height:1.4em;margin:2px 0 8px}
#result-numbers{display:grid;grid-template-columns:1fr auto;gap:4px 16px;margin:0 0 18px;font-size:15px;text-align:left}
#result-numbers dt{color:var(--sub)}
#result-numbers dd{margin:0;font-weight:700;text-align:right}
[hidden]{display:none!important}
button,input,summary,a{touch-action:manipulation}
button:focus-visible,a:focus-visible,summary:focus-visible{outline:2px solid var(--gold);outline-offset:3px}
.select-heading{font-size:22px;margin:22px 0 14px;font-family:"Hiragino Mincho ProN","Yu Mincho",serif}
.search-label{display:block;font-size:12px;color:var(--sub);margin:0 0 5px}
.search{display:block;width:100%;min-height:48px;border:1px solid #41455b;border-radius:12px;padding:10px 14px;background:#10131f;color:var(--ink);font:inherit;font-size:16px}
.search:focus{outline:2px solid var(--gold);outline-offset:2px}
.filters{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:5px;margin:14px 0 8px}
.filters button{min-height:44px;padding:8px 2px;border:1px solid #373c51;border-radius:10px;background:#10131f;color:var(--sub);font-size:13px;cursor:pointer}
.filters button[aria-pressed=true]{border-color:var(--gold);background:#372b16;color:#ffe1a0;font-weight:700}
.catalog-tools{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:0 0 10px}
.catalog-tools .note{margin:0;flex:1;min-width:0}
.random{min-height:44px;padding:8px 12px;flex-shrink:0;border:1px solid #645235;border-radius:10px;background:#221b14;color:#ffdc82;font-size:13px;cursor:pointer}
.random:disabled{opacity:.4}
.song-list{display:grid;gap:9px;margin-bottom:16px}
.song-row{position:relative;display:flex;flex-direction:column;align-items:stretch;gap:4px;width:100%;min-height:112px;padding:14px 32px 14px 14px;border:1px solid #30344a;border-radius:14px;background:linear-gradient(130deg,#191723,#0e111c);color:var(--ink);text-align:left;cursor:pointer;overflow:hidden}
.song-row:hover{border-color:#b58a3a}
.song-row[data-last=true]{border-color:#8a6735}
.song-row-title{font-size:16px;line-height:1.55;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;overflow-wrap:anywhere;font-weight:700}
.song-row-credit{color:#c8bed1;font-size:12px;line-height:1.5;overflow-wrap:anywhere}
.song-row-meta{color:var(--sub);font-size:11px;line-height:1.5}
.song-arrow{position:absolute;right:12px;top:50%;transform:translateY(-50%);color:#cba359;font-size:24px}
.text-button{min-height:44px;padding:8px 0;margin:-4px 0 10px;border:0;background:none;color:#d5bc89;font:inherit;font-size:14px;cursor:pointer}
#song-title,#result-title{overflow-wrap:anywhere}
#song-title{font-size:21px;line-height:1.5}
#song-genre{color:#dfc385}
#menu .brand{margin-bottom:12px}
#menu .char img{aspect-ratio:4/2.8;object-position:50% 24%}
summary{min-height:44px;padding:10px 0}
.row.check{min-height:44px}
footer a{display:inline-flex;align-items:center;min-height:44px}
#pause{width:44px;height:44px}
@media(max-width:380px){main{padding-left:12px;padding-right:12px}.filters button{font-size:12px}.char small{font-size:11px;padding:0 7px}.char strong{padding-left:7px}}

.row input[type=number]{min-height:44px}
.playing.showing-result{touch-action:pan-y}
.panel.result{max-height:calc(100dvh - 40px);overflow-y:auto;overscroll-behavior:contain;touch-action:pan-y}
.panel.result details{text-align:left;margin:12px 0}
.panel.result .primary,.panel.result .ghost{font-size:15px;padding:12px;margin-top:8px;min-height:44px}
#result-raw{font-size:11px;margin:0 0 12px}
#share-text{display:block;width:100%;background:#090b13;border:1px solid var(--line);border-radius:8px;color:var(--ink);padding:10px;font:inherit;font-size:12px;line-height:1.6;resize:vertical;min-height:120px}
.row input[type=text]{width:100%;min-height:44px;border:1px solid var(--line);border-radius:8px;background:#090b13;color:var(--ink);padding:10px;font:inherit;font-size:16px}
.recording-option{border:1px solid #4b3a25;border-radius:10px;background:#20190f;padding:10px 12px}
.rankings{list-style:none;padding:0;margin:8px 0;max-height:230px;overflow-y:auto}
.rankings li{display:flex;justify-content:space-between;gap:10px;padding:8px 0;border-bottom:1px solid var(--line);font-size:13px}
.rankings li span{overflow-wrap:anywhere;min-width:0}.rankings li strong{white-space:nowrap;color:var(--gold)}
.modal{position:fixed;inset:0;z-index:50;display:grid;place-items:center;background:#000d;padding:20px;touch-action:pan-y}
.modal p{font-size:14px}
#quota-summary{margin:0 0 12px;color:#c9b88f}
#video-status:empty,#share-status:empty{display:none}
/* 5回使い切った画面 */
.panel.quota{max-height:calc(100dvh - 40px);overflow-y:auto;overscroll-behavior:contain}
.panel.quota h2{font-size:20px;line-height:1.4}
.panel.quota h3{margin:14px 0 8px}
.quota-line{border:0;border-top:1px solid var(--line);margin:16px 0 0}
.quota-fan{font-size:14px;text-align:left;margin:0 0 8px}
.panel.quota .note{text-align:left;margin:0 0 14px}
a.primary{display:flex;align-items:center;justify-content:center;min-height:48px;text-decoration:none;text-align:center}
.panel.quota .ghost{min-height:44px}
