@import url('https://fonts.googleapis.com/css2?family=Golos+Text:wght@400;500;600;700;800;900&display=swap');
.scene-canvas{position:fixed;inset:0;display:block;z-index:5;pointer-events:none}
#plus,#bang{z-index:6}
.header-actions{display:flex;gap:12px;align-items:center}.profile{display:flex;align-items:center;gap:9px;border:1px solid #cab9df;background:#f4edfc;border-radius:28px;padding:7px 14px 7px 7px;color:#593d75;font-size:12px;max-width:260px}.avatar{background:#ddccef;border-radius:50%;height:27px;width:27px;display:grid;place-items:center;font-size:20px;flex-shrink:0}#player-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.edit-name{color:#9984aa}.leaderboard{max-width:580px;margin:30px auto 0;background:#f8f3ff99;border:1px solid #d8cbe7;border-radius:24px;padding:25px 30px}.rating-heading{display:flex;align-items:center;justify-content:space-between}.rating-heading h2{font-size:21px;letter-spacing:-.6px;margin:0 0 7px}.rating-heading p{font-size:11px;color:#8a739c;margin:0}.trophy{font-size:35px;color:#c59c42}#leaders{list-style:none;margin:20px 0 0;padding:0}#leaders li{display:flex;align-items:center;gap:13px;padding:12px 10px;border-top:1px solid #e3d8ed;font-size:13px;border-radius:8px}.rank{width:22px;color:#a28bb4;text-align:center;font-weight:700}.leader-name{flex:1;overflow-wrap:anywhere}#leaders strong{font-variant-numeric:tabular-nums}#leaders .is-me{background:#e9dcf7;color:#694090}#my-score{border-top:1px solid #dfd1eb;padding-top:15px;font-size:11px;color:#846a99;margin-bottom:0}dialog{border:1px solid #d7c5e8;background:#faf6ff;color:#38234b;border-radius:28px;padding:32px;width:min(430px,calc(100% - 32px));box-shadow:0 30px 100px #39214b40}dialog::backdrop{background:#3b25576b;backdrop-filter:blur(8px)}dialog form{display:flex;flex-direction:column}dialog h2{font-size:26px;line-height:1.2;letter-spacing:-.8px;margin:12px 0}dialog p{font-size:13px;line-height:1.6;color:#8b729e;margin:0 0 20px}.welcome-icon{font-size:42px;color:#8e64b2}dialog label{font-size:12px;font-weight:600;margin-bottom:8px}dialog input{font:inherit;font-size:16px;width:100%;padding:14px;border:1px solid #cfbbdf;border-radius:12px;background:white;color:#39214b}dialog input:focus{outline:2px solid #ae86ce;outline-offset:2px}#name-error{font-size:12px;color:#aa415a;min-height:20px;margin:7px 0}#name-submit{border:1px solid #d6aa44;border-radius:13px;padding:15px;background:#fcce55;color:#49331d;font-weight:800}#name-submit:disabled{opacity:.6;cursor:wait}#name-cancel{margin-top:10px;border:0;background:transparent;padding:9px;color:#8a719d}dialog small{font-size:10px;line-height:1.6;color:#9e89ae;margin-top:17px}body:has(dialog[open]){overflow:hidden}@media(max-width:700px){.header-actions{gap:6px}.profile{font-size:10px;max-width:150px;padding-right:9px;gap:5px}.avatar{width:23px;height:23px;font-size:16px}.leaderboard{margin:25px 20px 0;padding:22px}.rating-heading h2{font-size:19px}header{flex-wrap:wrap;gap:15px}.brand{margin-right:auto}}[hidden]{display:none!important}
:root{font-family:'Golos Text',Arial,sans-serif;color:#30213f;background:#e8e0f6}*{box-sizing:border-box}body{margin:0;background:radial-gradient(ellipse at 50% 44%,#f5f0ff,#e8e0f6 70%);min-height:100svh}button{font:inherit;cursor:pointer}button:focus-visible,a:focus-visible{outline:3px solid #7545c3;outline-offset:6px}header{max-width:1360px;margin:auto;padding:30px 48px;display:flex;align-items:center;justify-content:space-between}.brand{text-decoration:none;color:#38274c;display:flex;align-items:center;gap:11px;font-size:32px;font-weight:900}.brand span{font-size:18px;letter-spacing:-.7px}#sound{background:transparent;border:1px solid #c8bddb;border-radius:30px;padding:11px 17px;color:#69577d;font-size:12px}main{max-width:1200px;margin:auto}.intro{text-align:center;padding:22px 15px 0}.pill{display:inline-block;background:#f5effd;border:1px solid #d7cbe9;border-radius:24px;font-size:11px;padding:9px 13px;color:#766087}h1{font-size:clamp(36px,4.5vw,64px);line-height:1.07;letter-spacing:-3px;margin:20px 0 16px;font-weight:900}.intro p{font-size:13px;color:#83708e;margin:0}.arena{height:365px;position:relative;margin-top:10px}.score{position:absolute;left:80px;top:95px;z-index:2;display:flex;flex-direction:column;pointer-events:none}.score>span{font-size:12px;color:#78658a}.score strong{font-size:76px;line-height:1.1;letter-spacing:-5px;font-weight:800;font-variant-numeric:tabular-nums}.note{position:absolute;right:120px;top:115px;transform:rotate(9deg);font-size:14px;line-height:1.5;color:#9d89af}#scene{position:absolute;inset:0;overflow:hidden}#scene canvas{display:block;width:100%;height:100%}.target{position:absolute;bottom:8px;left:50%;transform:translateX(-50%);font-size:10px;color:#9582a5;white-space:nowrap}.controls{text-align:center;padding:20px 20px 0}#hit{background:#fcce55;color:#3e2a26;border:1px solid #e0ac3b;border-radius:20px;box-shadow:0 7px 0 #c79732,0 14px 25px #b99eaa40;padding:20px 32px;font-size:23px;letter-spacing:1px;font-weight:900;display:inline-flex;align-items:center;gap:26px;transition:transform .12s,box-shadow .12s}#hit:hover:enabled{background:#ffda74;transform:translateY(-2px);box-shadow:0 9px 0 #c79732,0 17px 25px #b99eaa40}#hit:active:enabled{transform:translateY(5px);box-shadow:0 2px 0 #c79732}#hit:disabled{cursor:wait;filter:saturate(.7)}kbd{font:14px Arial;border:1px solid #b28b3d;border-radius:5px;line-height:20px;width:23px;opacity:.7}.controls p{font-size:11px;color:#95839f;margin-top:23px}#error{color:#974b55;font-size:12px;min-height:16px}footer{display:flex;justify-content:space-between;font-size:10px;color:#a08eac;border-top:1px solid #d7cce5;margin:32px 48px 0;padding:20px 0 24px}#plus{position:absolute;left:55%;top:90px;color:#6841a4;font-size:65px;font-weight:900;opacity:0;pointer-events:none}#plus.pop{animation:plus 1.15s ease-out forwards}#bang{position:absolute;left:50%;top:170px;color:#fff6c4;-webkit-text-stroke:2px #6b3b70;font-weight:900;font-size:48px;transform:translateX(-50%) rotate(-12deg) scale(0);pointer-events:none}#bang.pop{animation:bang .55s ease-out forwards}@keyframes plus{0%{opacity:0;transform:translateY(30px) rotate(10deg) scale(.5)}20%{opacity:1;transform:translateY(0) rotate(10deg) scale(1.15)}70%{opacity:1}100%{opacity:0;transform:translateY(-65px) rotate(10deg)}}@keyframes bang{0%{transform:translateX(-50%) rotate(-12deg) scale(0)}25%,70%{transform:translateX(-50%) rotate(-12deg) scale(1)}100%{opacity:0;transform:translateX(-50%) rotate(-12deg) scale(1.2)}}@media(min-height:900px){.intro{padding-top:45px}.arena{height:410px}.controls{padding-top:30px}footer{margin-top:55px}}@media(max-width:700px){header{padding:20px}.brand span{font-size:15px}.brand{font-size:25px}#sound{padding:8px 11px;font-size:10px}.intro{padding-top:25px}h1{letter-spacing:-1.8px}.intro p{font-size:11px;line-height:1.6;max-width:270px;margin:auto}.pill{font-size:9px}.arena{height:360px;margin-top:0}.score{left:24px;top:20px}.score>span{font-size:10px}.score strong{font-size:48px;letter-spacing:-2px}.note{right:26px;top:42px;font-size:11px}.target{bottom:0}.controls{padding-top:22px}#hit{font-size:21px;padding:18px 27px}footer{margin:22px 22px 0;gap:20px;line-height:1.5;font-size:8px}footer>span{max-width:150px}#plus{top:110px;font-size:50px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition:none!important}}

/* Keep the full desktop game and ten ranking rows within one viewport. */
@media (min-width: 900px) {
  header {max-width:1480px;height:88px;padding:20px 36px}
  main {
    max-width:1480px;
    height:calc(100svh - 88px);
    min-height:570px;
    padding:0 36px;
    display:grid;
    grid-template-columns:280px minmax(0,1fr);
    grid-template-rows:auto minmax(230px,1fr) auto auto;
    grid-template-areas:"ranking intro" "ranking arena" "ranking controls" "footer footer";
    column-gap:40px;
  }
  .intro {grid-area:intro;padding:14px 0 0}
  h1 {font-size:clamp(38px,3.6vw,56px);letter-spacing:-2.3px;margin:15px 0 12px}
  .intro p {font-size:12px}
  .arena {grid-area:arena;height:auto;min-height:0;margin:0}
  .score {left:20px;top:40px}
  .score strong {font-size:64px;letter-spacing:-3px}
  .score>span {font-size:11px}
  .note {right:20px;top:60px;font-size:12px}
  .controls {grid-area:controls;padding:14px 12px 0}
  #hit {padding:17px 28px;font-size:22px}
  .controls p {margin:18px 0 8px}
  .leaderboard {
    grid-area:ranking;
    align-self:center;
    width:100%;max-width:none;
    margin:0;padding:23px 18px;
  }
  .rating-heading h2 {font-size:19px;line-height:1.2;max-width:180px}
  .rating-heading p {font-size:10px;line-height:1.5}
  .trophy {font-size:27px}
  #leaders {margin-top:16px}
  #leaders li {height:35px;padding:6px;gap:8px;font-size:12px}
  .rank {flex-shrink:0;width:19px}
  .leader-name {white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  #my-score {font-size:10px;line-height:1.5;margin:12px 0 0;padding-top:12px}
  footer {grid-area:footer;margin:14px 0 0;padding:14px 0 18px}
}
@media (min-width:900px) and (max-width:1150px) {
  main {grid-template-columns:235px minmax(0,1fr);column-gap:20px;padding:0 24px}
  header {padding-left:24px;padding-right:24px}
  .leaderboard {padding:20px 14px}
  .rating-heading h2 {font-size:17px}
  .score {left:5px;top:15px}
  .score strong {font-size:52px}
  .note {right:5px;top:22px;font-size:11px}
}
@media (min-width:900px) and (max-height:740px) {
  header {height:72px;padding-top:12px;padding-bottom:12px}
  main {height:calc(100svh - 72px);min-height:500px;grid-template-rows:auto minmax(210px,1fr) auto auto}
  .intro {padding-top:0}
  .pill {font-size:10px;padding:6px 11px}
  h1 {font-size:38px;margin:10px 0 8px;letter-spacing:-1.5px}
  .intro p {font-size:11px}
  .leaderboard {padding-top:18px;padding-bottom:18px}
  #leaders li {height:31px}
  .controls {padding-top:8px}
  #hit {padding:13px 26px;font-size:20px}
  .controls p {margin-top:14px}
  footer {margin-top:8px;padding:10px 0 12px}
}
@media (max-width:899px) {
  .leaderboard {max-width:540px}
  .intro {padding-top:12px}
  .arena {height:310px}
  .controls {padding-top:12px}
}
