@import url('https://fonts.googleapis.com/css2?family=Barlow+Condensed:wght@500;600;700;800&family=DM+Sans:wght@400;500;600;700&display=swap');
:root{color-scheme:dark;--bg:#0b0d14;--line:#242735;--muted:#797d92;--cyan:#5bf5da;--purple:#ae8aff}*{box-sizing:border-box}body{margin:0;background:radial-gradient(ellipse at 50% 10%,#1d193326,transparent 60%),var(--bg);color:#eeeef8;font:14px 'DM Sans',sans-serif}button,select{font:inherit;cursor:pointer}button{color:inherit;background:#1c1e2c;border:1px solid #313445;border-radius:6px;padding:13px 16px;font-size:11px;font-weight:700;letter-spacing:1px}button:hover{border-color:var(--cyan);background:#263034}button:disabled{opacity:.35;cursor:default}button:focus-visible,select:focus-visible,a:focus-visible{outline:2px solid var(--cyan);outline-offset:4px}header{height:94px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 4%}.logo{text-decoration:none;color:#fff;font-size:39px;font-weight:800;font-style:italic;letter-spacing:-3px;position:relative}.logo span{font-size:22px;vertical-align:super;color:var(--cyan);margin:0 2px}.logo i{display:inline-block;font:10px 'DM Sans',sans-serif;letter-spacing:2px;border-left:1px solid #373744;margin-left:25px;padding-left:25px;vertical-align:middle;color:#9295a9}.header-right{display:flex;align-items:center;gap:12px;font-size:10px;letter-spacing:1.4px;color:#969bad}.header-right button{margin-left:24px}.dot{width:6px;height:6px;border-radius:50%;background:var(--cyan);box-shadow:0 0 10px #5bf5da66}main{display:grid;grid-template-columns:minmax(260px,1fr) minmax(360px,1.42fr) minmax(215px,.78fr);gap:38px;max-width:1440px;margin:auto;padding:34px 4% 27px}.eyebrow{font-size:10px;letter-spacing:2px;color:#b5b6c6;display:flex;justify-content:space-between}.eyebrow span{color:#62677e}h1{font:600 43px/1.05 'Barlow Condensed',sans-serif;letter-spacing:-.7px;margin:25px 0 10px}h1 em{font-style:normal;color:var(--cyan)}.muted{color:var(--muted);font-size:12px;margin-bottom:29px}.song{width:100%;display:flex;align-items:center;text-align:left;gap:13px;padding:12px;margin-bottom:10px;background:#12151f;border:1px solid #232632;letter-spacing:0;position:relative}.song.selected{border-color:#67dbc38a;background:linear-gradient(100deg,#17332f,#131c24);box-shadow:inset 3px 0 var(--cyan)}.cover{flex:none;width:57px;height:57px;display:grid;place-items:center;border-radius:4px;background:radial-gradient(ellipse at 65% 70%,#24caaa66,transparent),linear-gradient(135deg,#132a4a,#2b5a56);overflow:hidden}.cover i{width:33px;height:33px;border:1px solid #72ffe5;transform:rotate(45deg);box-shadow:0 0 14px #66ffe955,inset 0 0 14px #66ffe955}.song:nth-child(2) .cover{filter:hue-rotate(95deg)}.song:nth-child(3) .cover{filter:hue-rotate(240deg)}.song strong{display:block;font-size:14px;margin-bottom:5px}.song small{font-size:10px;color:#989bae;font-weight:400}.song .level{margin-left:auto;color:var(--cyan);font:600 24px 'Barlow Condensed';text-align:center}.level small{display:block;font:8px 'DM Sans';letter-spacing:1px}.setup{display:grid;grid-template-columns:1fr 1fr;gap:13px;margin-top:25px}label{font-size:9px;letter-spacing:1px;color:#969aaf}select{width:100%;display:block;margin-top:9px;padding:11px;background:#151823;border:1px solid #303342;color:#e7e7f1;border-radius:4px;font-size:12px}.offset{display:flex;align-items:center;gap:8px;letter-spacing:0;margin:17px 0}.offset input{width:90px;accent-color:var(--cyan)}output{margin-left:auto;min-width:40px}.actions{display:flex;gap:8px}.primary{background:var(--cyan);border-color:var(--cyan);color:#07251f;flex:1;display:flex;justify-content:space-between;align-items:center}.primary:hover{background:#97ffe9}.note{font-size:9px;color:#62677b;margin-top:15px}.machine{border:1px solid #454153;border-radius:10px;background:#11131e;overflow:hidden;box-shadow:0 20px 70px #0007,0 0 70px #9c6aff06;align-self:start}.machine-top{height:65px;padding:14px 19px;display:flex;justify-content:space-between;border-bottom:1px solid #444154;background:linear-gradient(120deg,#252035,#151c2b)}small{font-size:9px;letter-spacing:1px;color:#9093aa}.machine-top strong{display:block;font-size:15px;margin-top:5px}.machine-top>span{font:600 27px 'Barlow Condensed';align-self:center}.machine-top>span small{display:block;text-align:right;font:8px 'DM Sans';color:var(--cyan)}.playfield{position:relative;height:456px;background:#080a11}canvas{width:100%;height:100%;display:block}#overlay{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;background:linear-gradient(#0b0c1466,#0c111ac9);text-align:center;padding:24px}#overlay h2{font:600 39px 'Barlow Condensed';margin:14px 0}#overlay p{font-size:11px;color:#a2a5ba;line-height:1.9}#overlay .primary{flex:none;width:200px;margin:16px 0}#overlay>small{font-size:9px;color:#777d94}.live-stats{position:absolute;top:33%;width:100%;text-align:center;pointer-events:none;text-shadow:0 0 25px #000}#judgment{font:700 italic 30px 'Barlow Condensed';color:var(--cyan);display:block}#combo{font:600 65px 'Barlow Condensed';display:block;line-height:1.1}#comboLabel{font-size:9px;letter-spacing:4px}.keys{display:grid;grid-template-columns:repeat(3,1fr) 1.35fr repeat(3,1fr);gap:3px;padding:0 9px 9px;background:#121723}.key{padding:15px 0 11px;text-align:center;border:1px solid #3f5860;border-top:3px solid #8ae6db;border-radius:0 0 5px 5px;background:linear-gradient(#344a56,#202a36);font-size:13px;color:#c3f9ef;box-shadow:0 3px 0 #090b10;touch-action:none}.key:nth-child(2),.key:nth-child(6){border-color:#625b82;border-top-color:#b7a3ec;background:linear-gradient(#4f456a,#292439);color:#dbc8ff}.key:nth-child(4){border-color:#746141;border-top-color:#ffd88b;background:linear-gradient(#5f4e32,#30291e);color:#ffe2a6;font-size:10px}.key.active{background:#a6ffef;color:#102b28;box-shadow:0 0 25px #5bf5da88}.machine-bottom{display:flex;gap:13px;align-items:center;padding:12px;font-size:9px;color:#8b91a8}.machine-bottom button{padding:7px;font-size:8px;border:0;background:transparent}.progress{height:3px;background:#303342;flex:1}.progress i{display:block;height:100%;width:0;background:var(--cyan)}aside{padding-top:2px}.score{margin:34px 0 24px}.score>small,.score>span{display:block}.score strong{font:600 43px 'Barlow Condensed';letter-spacing:2px;display:block;margin:8px 0}.score>span{font-size:8px;letter-spacing:1px;color:#687086}.statpair{display:flex;justify-content:space-between;padding-bottom:26px;border-bottom:1px solid var(--line)}.statpair strong{display:block;font:500 26px 'Barlow Condensed';margin-top:8px}.statpair strong span{font-size:15px;color:#73798c;margin-left:2px}.life{margin-top:23px}.life>div:first-child{display:flex;justify-content:space-between}.life span{font-size:10px;color:var(--cyan)}.gauge{height:7px;background:#222737;margin:11px 0;border-radius:2px}.gauge i{display:block;background:linear-gradient(90deg,#32a99a,var(--cyan));height:100%;width:100%;border-radius:2px;box-shadow:0 0 14px #5bf5da22}.life>small{font-size:9px;letter-spacing:0;color:#626c7e}.judgments{margin:25px 0 28px}.judgments>div{display:flex;align-items:center;font-size:10px;letter-spacing:1px;color:#9197ad;margin:16px 0}.judgments b{margin-left:auto;color:#d4d8e8;font-size:12px}.judgments i{width:5px;height:5px;border-radius:50%;margin-right:10px}.cyan{background:#5bf5da}.purple{background:#b092fc}.yellow{background:#ffd488}.pink{background:#fc7799}.instructions{border-top:1px solid var(--line);padding-top:19px}.instructions>span{font-size:8px;letter-spacing:1.2px;color:#697289}.instructions h3{font:500 23px 'Barlow Condensed';margin:10px 0}.instructions p{color:#81899f;font-size:10px;line-height:2.4}kbd{display:inline-block;font:9px 'DM Sans';padding:0 5px;border:1px solid #353b4c;border-radius:3px;margin:0 3px 4px 0;color:#b1b8cc}footer{display:flex;justify-content:space-between;align-items:center;border-top:1px solid var(--line);margin:0 4%;padding:22px 0;color:#5e667b;font-size:9px;letter-spacing:1px}footer span:nth-child(2){letter-spacing:0;font-size:11px}footer i{color:var(--cyan);font-style:normal;margin-left:10px}footer a{color:#8991a9;text-decoration:none}[hidden]{display:none!important}@media(min-height:850px){.playfield{height:540px}main{padding-top:45px}}@media(max-width:1050px){main{gap:22px;grid-template-columns:250px minmax(330px,1fr)}aside{grid-column:1/-1;display:flex;gap:30px;align-items:center}aside>.eyebrow,.instructions{display:none}.score{margin:0}.statpair{gap:20px;padding:0;border:0}.life{flex:1;margin:0}.judgments{min-width:120px;margin:0}.logo i{display:none}}@media(max-width:1024px){header{height:75px}.header-right{font-size:8px;gap:6px}.header-right button{margin-left:5px;padding:9px;font-size:8px}main{display:flex;flex-direction:column;padding:24px 16px}.library h1{font-size:32px;margin-top:17px}.library h1 br{display:none}.muted{margin-bottom:18px}.song{padding:8px}.cover{width:40px;height:40px}.setup{margin-top:16px}.machine{width:100%}.playfield{height:430px}aside{display:grid;grid-template-columns:1fr 1fr;width:100%;gap:20px}.score strong{font-size:34px}.judgments{display:grid;grid-template-columns:1fr 1fr;gap:0 15px}.judgments>div{margin:9px 0}footer span:nth-child(2){display:none}footer{font-size:8px}}@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto}}
.cover img{width:100%;height:100%;object-fit:cover}.song:nth-child(2) .cover:has(img),.song:nth-child(3) .cover:has(img){filter:none}
@media(min-width:1051px) and (max-height:820px){header{height:72px}main{padding-top:24px;padding-bottom:18px;gap:30px}h1{font-size:37px;margin:19px 0 8px}.muted{margin-bottom:20px}.song{padding:9px;margin-bottom:8px}.cover{width:47px;height:47px}.setup{margin-top:19px}.offset{margin:12px 0}.note{font-size:8px}.machine-top{height:58px;padding:10px 16px}.playfield{height:calc(100dvh - 282px);min-height:290px}.key{padding:12px 0 9px}.score{margin:26px 0 20px}.statpair{padding-bottom:20px}.life{margin-top:20px}.judgments{margin:20px 0}.instructions{padding-top:15px}.instructions p{line-height:2}.instructions h3{margin:8px 0}footer{padding:16px 0}}
.key,.key:nth-child(2),.key:nth-child(4),.key:nth-child(6){color:var(--key-color);border-color:color-mix(in srgb,var(--key-color) 35%,#1c202b);border-top-color:var(--key-color);background:linear-gradient(color-mix(in srgb,var(--key-color) 24%,#111725),#1a202b)}.key.active{background:var(--key-color);color:#151821}.power{margin:18px 0;border-top:1px solid var(--line);padding-top:14px}.power>div:first-child{display:flex;justify-content:space-between;align-items:center}.power b{color:var(--cyan);font:600 16px 'Barlow Condensed'}.power .gauge{height:5px;margin:9px 0}.power .gauge i{width:0;background:linear-gradient(90deg,#397cff,var(--cyan))}.pillrow{display:flex;align-items:center;justify-content:space-between;gap:8px}#pills{color:#3ebcff;letter-spacing:4px;font-size:17px;white-space:nowrap}#pillProgress{font-size:8px;letter-spacing:0}.power p{font-size:8px;color:#8590a4;margin:7px 0 0}.instructions{display:none}.judgments{margin-bottom:0}dialog{background:#141925;color:#f0f3fc;border:1px solid #495166;border-radius:13px;width:min(620px,94vw);max-height:88dvh;padding:27px;box-shadow:0 30px 140px #000b}dialog::backdrop{background:#050711bb;backdrop-filter:blur(7px)}.optionsTitle{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:17px}.optionsTitle h2{font:600 34px 'Barlow Condensed';margin:9px 0}.optionsTitle button{background:transparent;padding:8px 11px}.optiongrid{display:grid;grid-template-columns:1fr 1fr;gap:19px 20px}.optiongrid label{line-height:1.5}.optiongrid small{display:block;color:#7c879e;font-size:9px;letter-spacing:0;margin-top:6px}.optionExplain{margin:23px 0;padding-top:16px;border-top:1px solid #333c4e}.optionExplain h3{font:600 22px 'Barlow Condensed';margin:0 0 10px}.optionExplain p{font-size:12px;color:#b1bbce;line-height:1.6;margin:8px 0}.optionExplain small{font-size:9px;line-height:1.6;letter-spacing:0;display:block}.header-right button{margin-left:5px}#saveOptions{width:100%}body[data-theme=sakura] .machine-top{background:linear-gradient(120deg,#3a223d,#201c31)}body[data-theme=amber] .machine-top{background:linear-gradient(120deg,#3c3020,#201e1c)}body[data-theme=neon] .machine-top{background:linear-gradient(120deg,#332246,#132d32)}@media(max-width:1050px){aside{display:grid;grid-template-columns:1fr 1fr 1fr}.power{margin:0}.judgments{grid-column:3;grid-row:1 / span 2}.life{grid-column:2;grid-row:2}}@media(max-width:1024px){.header-right{font-size:0}.header-right .dot{display:none}.header-right button{font-size:8px}aside{grid-template-columns:1fr 1fr}.judgments{grid-column:2;grid-row:2 / span 2}.life{grid-column:1;grid-row:2}.power{grid-column:1;grid-row:3}.optiongrid{grid-template-columns:1fr}dialog{padding:20px}}

#overlay .results-music{display:block;margin:12px auto 0;padding:12px 22px;border:1px solid #71879c;border-radius:6px;background:#172536;color:#eef7ff;font:inherit;font-weight:700;cursor:pointer}#overlay .results-music:hover{background:#29435c;border-color:#b8e4ff}#overlay .results-music:focus-visible{outline:2px solid #f9d65c;outline-offset:3px}

/* Give the lanes the available window height during gameplay. */
body[data-screen="game"] header{height:60px}
body[data-screen="game"] footer{display:none}
body[data-screen="game"] main{max-width:1600px;grid-template-columns:minmax(190px,.75fr) minmax(440px,1.8fr) minmax(180px,.65fr);gap:24px;padding:8px 2%;height:calc(100dvh - 60px);min-height:480px}
body[data-screen="game"] .machine{height:100%;min-height:0;align-self:stretch;display:flex;flex-direction:column}
body[data-screen="game"] .machine-top,body[data-screen="game"] .keys,body[data-screen="game"] .machine-bottom{flex-shrink:0}
body[data-screen="game"] .playfield{height:auto;min-height:0;flex:1}
body[data-screen="game"] .library,body[data-screen="game"] aside{min-width:0;overflow-y:auto}
body[data-screen="game"] .library h1{font-size:34px;margin-top:18px}
body[data-screen="game"] .song{padding:9px;gap:8px}
body[data-screen="game"] aside{display:block;grid-column:auto}
@media(max-width:1000px){
 body[data-screen="game"] main{grid-template-columns:minmax(0,1fr) 190px;gap:16px}
 body[data-screen="game"] .library{display:none}
}
@media(max-width:1024px){
 body[data-screen="game"] main{display:block;padding:4px 6px;height:calc(100dvh - 60px);min-height:360px}
 body[data-screen="game"] aside{display:none}
 body[data-screen="game"] .machine-top{height:52px;padding:8px 12px}
 body[data-screen="game"] .logo{font-size:30px}
 body[data-screen="game"] header{padding:0 12px}
}
body[data-screen="game"] main{grid-template-columns:minmax(0,1fr) minmax(0,var(--playfield-width,620px)) minmax(0,1fr);gap:18px;max-width:none}
body[data-screen="game"] .machine{position:relative;grid-column:2;width:100%}
body[data-screen="game"] .library{grid-column:1}
body[data-screen="game"] aside{grid-column:3}
.field-resize{position:absolute;top:65px;bottom:42px;width:9px;padding:0;border:0;border-radius:0;z-index:5;background:transparent;cursor:ew-resize;touch-action:none}
.field-resize.left{left:0}.field-resize.right{right:0}
.field-resize::after{content:'';position:absolute;top:45%;left:2px;width:4px;height:48px;border-radius:4px;background:#93a8bd88}
.field-resize:hover,.field-resize:focus-visible{background:#5bf5da22}.field-resize:hover::after{background:var(--cyan)}
body.resizing-field{cursor:ew-resize;user-select:none}
@media(max-width:1000px){body[data-screen="game"] main{grid-template-columns:minmax(0,1fr) minmax(0,var(--playfield-width,620px)) minmax(0,1fr);gap:8px}body[data-screen="game"] aside{display:none}}
@media(max-width:1024px){body[data-screen="game"] main{display:flex;align-items:center;padding:4px 6px}body[data-screen="game"] .machine{width:min(100%,var(--playfield-width,620px));margin:auto}}
.optiongrid input[type=range]{display:block;width:100%;margin:14px 0;accent-color:var(--cyan)}.key-remap{grid-column:1/-1}#keyBindings{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}.key-remap #resetBindings{margin-top:10px}
#importDialog{width:min(760px,95vw)}#importDialog p,#importDialog>small{color:#b1bbce;line-height:1.6}#importDialog input:not([type=range]){display:block;width:100%;padding:10px;margin:8px 0;background:#0e1522;border:1px solid #536079;border-radius:4px;color:#fff}#importCanvas{width:100%;height:220px;margin:12px 0}#importAudio{width:100%}#importSummary{margin:15px 0;line-height:1.8;color:var(--cyan)}#regenerate,#saveImport{margin-top:15px}body[data-screen=game] #importMusic{display:none}

/* Shared palettes for the music selector and the playing cabinet. */
body[data-theme=ocean]{--menu-bg:#071722;--menu-panel:#102f42;--menu-accent:#66ddff;--menu-secondary:#5595ff;--menu-selected:#155472;--menu-text:#e1f8ff}
body[data-theme=ruby]{--menu-bg:#200b12;--menu-panel:#3a1522;--menu-accent:#ff718a;--menu-secondary:#e4ac70;--menu-selected:#6e243c;--menu-text:#ffe7ed}
body[data-theme=forest]{--menu-bg:#0c1911;--menu-panel:#1a3224;--menu-accent:#a3e783;--menu-secondary:#65bbae;--menu-selected:#345539;--menu-text:#ebffe3}
body[data-theme=monochrome]{--menu-bg:#111214;--menu-panel:#292b2f;--menu-accent:#f1f1ed;--menu-secondary:#a0a6ae;--menu-selected:#4a4d53;--menu-text:#fafafa}
body:is([data-theme=ocean],[data-theme=ruby],[data-theme=forest],[data-theme=monochrome]){--line:color-mix(in srgb,var(--menu-secondary) 30%,var(--menu-bg));--muted:color-mix(in srgb,var(--menu-text) 60%,var(--menu-bg))}
body:is([data-theme=ocean],[data-theme=ruby],[data-theme=forest],[data-theme=monochrome]) :is(.machine-top,dialog){background:linear-gradient(120deg,var(--menu-panel),var(--menu-bg));border-color:var(--menu-secondary)}
body:is([data-theme=ocean],[data-theme=ruby],[data-theme=forest],[data-theme=monochrome])[data-screen=game] header{background:var(--menu-bg);border-color:var(--menu-secondary)}
#testKeyLights{display:grid;grid-template-columns:repeat(7,1fr);gap:5px;margin:20px 0}#testKeyLights span{padding:14px 3px;border:1px solid #748093;text-align:center;font-size:11px}#testKeyLights .held{background:var(--cyan);color:#091820;box-shadow:0 0 12px var(--cyan)}#testKeyCount{font-size:22px;color:var(--cyan)}#testKeyEvents{height:160px;overflow:auto;color:#b5c5dc}#openKeyTest{margin:10px 0 0 8px}

/* Share the canvas lane boundaries with the keyboard receptors. */
.keys{gap:0;grid-template-columns:repeat(3,minmax(0,1fr)) minmax(0,1.35fr) repeat(3,minmax(0,1fr))}

.pause-difficulty{width:min(290px,100%);margin:8px 0}.pause-difficulty select{margin:6px 0}.pause-difficulty button{width:100%;padding:10px;font-size:10px}.pause-difficulty small{display:block;margin-top:7px;letter-spacing:0}#overlay:has(.pause-difficulty){overflow-y:auto}#overlay:has(.pause-difficulty) h2{margin:6px 0}

body[data-screen=menu] #restartGame{display:none}
/* Tuck the superscript into the following italic J. */
.logo span{margin-left:0;margin-right:-.2em}

/* Project the canvas only, keeping pause controls and touch keys readable. */
#game{position:absolute;left:0;top:0;transform-origin:50% 100%}
body[data-field-view="perspective"] .playfield{background:radial-gradient(ellipse at 50% 0%,color-mix(in srgb,var(--cyan) 12%,#080a11),#080a11 70%)}

.settings-group{border:1px solid var(--line);border-radius:8px;margin:10px 0;background:#10151d}
.settings-group>summary{cursor:pointer;padding:15px 16px;font-size:14px;font-weight:700;color:#eef3fa}
.settings-group>summary small{display:block;font-size:10px;font-weight:400;letter-spacing:0;color:#929db0;margin:5px 0 0 17px}
.settings-group[open]>summary{border-bottom:1px solid var(--line);color:var(--cyan)}
.settings-group>.optiongrid{padding:18px 16px}
.settings-group>.optionExplain{margin:0;padding:16px;border:0}
.settings-group summary:focus-visible{outline:2px solid var(--cyan);outline-offset:2px}
#optionsDialog>#saveOptions{margin-top:18px}
#keyBindings{display:grid;grid-template-columns:repeat(3,minmax(0,1fr)) 1.65fr repeat(3,minmax(0,1fr));gap:7px;padding-bottom:7px}
#keyBindings button{position:relative;min-width:0;height:65px;padding:6px 2px 10px;border:1px solid #6b7482;border-bottom:7px solid #242c38;border-radius:9px;background:linear-gradient(135deg,#525c6c,#333d4b);box-shadow:0 3px 0 #06090e,inset 0 1px 1px #a7b1c566,inset 0 -2px 4px #0007;color:#f3f6ff;letter-spacing:0}
#keyBindings button small{font:9px monospace;margin:0 0 4px;color:#abb7c9}
#keyBindings button strong{display:block;font-size:11px;overflow-wrap:anywhere}
#keyBindings button:hover{border-color:var(--cyan);color:var(--cyan)}
#keyBindings button:active{transform:translateY(3px);border-bottom-width:4px;box-shadow:0 0 0 #06090e}
.boolean-setting>span{font-size:9px;letter-spacing:1px;color:#969aaf}
.radio-toggle{display:flex;margin-top:9px;border:1px solid #394353;border-radius:6px;overflow:hidden}
.radio-toggle label{position:relative;flex:1;cursor:pointer;text-align:center}
.radio-toggle input{position:absolute;opacity:0;width:1px;height:1px}
.radio-toggle label span{display:block;padding:11px 14px;font-size:12px;background:#151b25;color:#b9c2d3}
.radio-toggle input:checked+span{background:var(--cyan);color:#071b19;font-weight:700}
.radio-toggle input:focus-visible+span{outline:2px solid white;outline-offset:-3px}

.playfield:has(#overlay:not([hidden])) .live-stats{visibility:hidden}
#overlay.stage-results{overflow-y:auto;justify-content:safe center;gap:8px;padding:18px}
#overlay.stage-results h2{font-size:clamp(24px,4vh,38px);margin:2px 0}
#overlay.stage-results p{margin:4px 0;line-height:1.6}
#overlay.stage-results .primary{margin:8px 0}
.result-record{--grade-color:#6cddff;position:relative;flex:none;width:clamp(110px,23vh,210px);height:clamp(110px,23vh,210px);display:grid;place-items:center;margin:2px auto}
.result-record[data-grade="S"],
.result-record[data-grade="S+"],
.result-record[data-grade="S-"]{--grade-color:#ffe275}.result-record[data-grade="A"],.result-record[data-grade="A+"],.result-record[data-grade="A-"]{--grade-color:#85f5c1}.result-record[data-grade="B"],.result-record[data-grade="B+"],.result-record[data-grade="B-"]{--grade-color:#73cfff}.result-record[data-grade="C"],.result-record[data-grade="C+"],.result-record[data-grade="C-"]{--grade-color:#c1a1ff}.result-record[data-grade="D"],.result-record[data-grade="D+"],.result-record[data-grade="D-"]{--grade-color:#ff8f9b}
.result-vinyl{position:absolute;inset:0;border-radius:50%;border:2px solid #59606b;background:repeating-radial-gradient(circle,#0b0d12 0 3px,#272b32 4px,#101219 5px 7px);box-shadow:0 8px 25px #0008,0 0 24px color-mix(in srgb,var(--grade-color) 20%,transparent)}
.result-vinyl img{position:absolute;inset:14%;width:72%;height:72%;object-fit:cover;border-radius:50%;opacity:1}
.result-grade{position:relative;color:var(--grade-color);font:900 italic clamp(86px,18vh,165px)/1 'Barlow Condensed',sans-serif;-webkit-text-stroke:1px #ffffff70;text-shadow:0 4px 0 #111827,0 8px 15px #000,0 0 28px var(--grade-color);transform:rotate(-8deg)}
.settings-preview{isolation:isolate;position:sticky;top:-27px;z-index:5;background:#111923;border:1px solid #435364;border-radius:8px;margin:0 0 16px;padding:10px;box-shadow:0 8px 20px #0008}
.settings-preview>div:first-child{display:flex;justify-content:space-between;gap:8px;margin-bottom:7px}
.settings-preview strong{font-size:9px;letter-spacing:1.5px;color:var(--cyan)}
.settings-preview small{font-size:9px;letter-spacing:0}
.preview-stage{height:150px;overflow:hidden;border-radius:4px;background:#090e16}
.preview-stage canvas{display:block;width:100%;height:150px}
@media(max-width:1024px){.settings-preview{top:-20px}}
/* Mobile resizing is confined to the visible upper handles, away from the pads. */
@media(max-width:1024px),(pointer:coarse){
 .field-resize{top:25%;bottom:auto;width:22px;height:64px;border:1px solid #64778b88;border-radius:8px;background:#192635cc;touch-action:none}
 .field-resize::after{top:14px;left:8px;width:4px;height:34px;background:#a9bfd9}
 body[data-screen="game"] .keys .key{min-height:clamp(76px,13dvh,112px);display:grid;place-items:center;padding:12px 0;font-size:15px;user-select:none;-webkit-user-select:none;touch-action:none}
 body[data-screen="game"] .keys .key:nth-child(4){font-size:11px}
}

/* Quiet touch grips; reveal both handles while resizing. */
@media(max-width:1024px),(pointer:coarse){
 .field-resize,.field-resize:hover{background:transparent;border-color:transparent;transition:background .15s,border-color .15s}
 .field-resize::after,.field-resize:hover::after{background:#a9bfd9;opacity:.28;transition:opacity .15s}
 body.resizing-field .field-resize,.field-resize:active,.field-resize:focus-visible{background:#192635e6;border-color:#8ba4bfaa}
 body.resizing-field .field-resize::after,.field-resize:active::after,.field-resize:focus-visible::after{opacity:1;background:var(--cyan,#a9bfd9)}
}
@media(max-width:1024px){
 body[data-screen="game"] .machine-top{gap:8px;align-items:center}
 .machine-top>div:first-child{flex:1;min-width:0}.machine-top #trackTitle{font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
 .machine-top .machine-bottom{display:grid;grid-template-columns:1fr auto;gap:4px;flex:1;min-width:90px;padding:0;font-size:8px}
 .machine-top .machine-bottom #time{white-space:nowrap;font-size:7px;grid-column:1/-1}
 .machine-top .machine-bottom .progress{width:100%;height:4px;min-width:35px}
 .machine-top .machine-bottom #pause{padding:4px;font-size:7px;letter-spacing:0;min-height:24px}
 .machine-top #bpm{flex:none}
 body[data-screen="game"] .keys .key{min-height:calc(clamp(76px,13dvh,112px) + 42px)}
}
@media(max-width:1024px){
 body[data-screen="game"]{overflow:hidden}
 body[data-screen="game"] main{position:fixed;inset:0;height:100dvh;min-height:0;padding:0;z-index:1}
 body[data-screen="game"] .machine{height:100%;border:0;border-radius:0;margin:auto;max-width:100vw}
 body[data-screen="game"] .machine-top{position:absolute;inset:0 0 auto;height:0;padding:0;border:0;background:none!important;z-index:7;pointer-events:none}
 body[data-screen="game"] .machine-top>div:first-child{position:absolute;top:calc(10px + env(safe-area-inset-top,0px));left:10px;width:38%;padding:8px;border-radius:8px;background:#0b101bcc}
 body[data-screen="game"] .machine-top .machine-bottom{position:absolute;top:calc(65px + env(safe-area-inset-top,0px));left:10px;width:34%;padding:6px;background:#0b101baa;border-radius:6px;pointer-events:auto}
 body[data-screen="game"] .machine-top #bpm{position:absolute;right:10px;top:calc(10px + env(safe-area-inset-top,0px));font-size:25px;background:#0b101baa;border-radius:8px;padding:6px}
 body[data-screen="game"] header{position:fixed;right:8px;top:calc(74px + env(safe-area-inset-top,0px));height:auto;padding:0;z-index:9;border:0;background:none;max-width:28%;pointer-events:none}
 body[data-screen="game"] header .logo,body[data-screen="game"] header #sound{display:none}
 body[data-screen="game"] .header-right{display:flex;flex-direction:column;gap:5px;font-size:0;align-items:stretch;width:100%}
 body[data-screen="game"] .header-right button{margin:0;padding:9px 6px;background:#111b29d9;pointer-events:auto;font-size:8px}
 body[data-screen="game"] .keys{padding-bottom:env(safe-area-inset-bottom,0px)}
 body[data-screen="game"] .keys .key{min-height:clamp(100px,18dvh,150px)}
}

.result-score{font-weight:800;font-variant-numeric:tabular-nums;color:#fff}.result-accuracy{font-variant-numeric:tabular-nums}
.result-record .result-vinyl{transition:translate .6s cubic-bezier(.2,.8,.2,1),scale .6s}
.result-record .result-grade{transition:translate .6s cubic-bezier(.2,.8,.2,1)}
.result-record.celebrating .result-vinyl{translate:-30% 0;scale:.8}
.result-record.celebrating .result-grade{translate:48% 0;animation:grade-final-pop .55s ease-out,grade-float 2.6s .55s ease-in-out infinite}
.grade-confetti{position:absolute;left:70%;top:45%;width:0;height:0;pointer-events:none;z-index:3}
.grade-confetti i{position:absolute;width:6px;height:10px;background:var(--grade-color);border-radius:1px}
@keyframes grade-final-pop{0%{scale:.8}55%{scale:1.28}100%{scale:1}}
@keyframes grade-float{0%,100%{transform:translateY(0) rotate(-8deg)}50%{transform:translateY(-9px) rotate(-4deg)}}
@media(prefers-reduced-motion:reduce){.result-record *{animation:none!important;transition:none!important}}

.result-record[data-grade="SS"],

.result-record[data-grade="SS+"],

.result-record[data-grade="SS-"]{--grade-color:#8eeaff}.result-record[data-grade="SSS"]{--grade-color:#ffb6f5}
.result-record[data-grade="SS"] .result-grade,
.result-record[data-grade="SS+"] .result-grade,
.result-record[data-grade="SS-"] .result-grade{font-size:clamp(65px,14vh,125px)}
.result-record[data-grade="SSS"] .result-grade{font-size:clamp(49px,10vh,95px)}

.grade-confetti{position:fixed;inset:0;width:100%;height:100dvh;overflow:hidden;pointer-events:none;z-index:100}

.logo img{display:inline-block;vertical-align:middle;width:clamp(155px,20vw,250px);height:auto}.logo:has(img){line-height:1}

/* Holds belong to the game, not browser selection or touch callouts. */
.machine,.machine *{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
.machine .playfield,.machine .keys{touch-action:none}
.machine input,.machine textarea,.machine [contenteditable=true]{-webkit-user-select:text;user-select:text;-webkit-touch-callout:default}

#overlay .loading-vinyl{position:relative;inset:auto;flex:none;width:clamp(100px,22vh,190px);height:auto;aspect-ratio:1;margin:0 auto 20px;animation:loading-record-spin 2.4s linear infinite}
.loading-vinyl:after{content:'';position:absolute;inset:calc(50% - 5px);border-radius:50%;background:#0b1018;border:2px solid #b5c6d5}
#overlay.song-loading #overlayAction,#overlay.song-loading>small{display:none}
#overlay[hidden] .loading-vinyl{animation:none}
@keyframes loading-record-spin{to{transform:rotate(360deg)}}
@media(prefers-reduced-motion:reduce){#overlay .loading-vinyl{animation:none}}

.result-record[data-grade="SSS"]{--grade-color:#ff80df}
.result-record[data-grade="SS"],
.result-record[data-grade="SS+"],
.result-record[data-grade="SS-"]{--grade-color:#ffd166}
.result-record[data-grade="S"],
.result-record[data-grade="S+"],
.result-record[data-grade="S-"]{--grade-color:#bd91ff}
.result-record[data-grade="A"],
.result-record[data-grade="A+"],
.result-record[data-grade="A-"]{--grade-color:#69c5ff}
.result-record[data-grade="B"],
.result-record[data-grade="B+"],
.result-record[data-grade="B-"]{--grade-color:#8bdf8c}
.result-record[data-grade="C"],
.result-record[data-grade="C+"],
.result-record[data-grade="C-"]{--grade-color:#ece8de}
.result-record[data-grade="D"],
.result-record[data-grade="D+"],
.result-record[data-grade="D-"]{--grade-color:#b6becd}
.result-record[data-grade="E"],
.result-record[data-grade="E+"],
.result-record[data-grade="E-"]{--grade-color:#cfaa89}
.result-record[data-grade="F"],
.result-record[data-grade="F+"],
.result-record[data-grade="F-"]{--grade-color:#9399a6}
