html,body{overscroll-behavior:none;height:100%;overflow:hidden}body{background:var(--bg);touch-action:none;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}#ufo-canvas{touch-action:none;cursor:crosshair;width:100%;height:100%;display:block;position:fixed;inset:0}.bar{z-index:10;min-height:52px;padding:4px 16px;padding-top:max(4px, env(safe-area-inset-top));pointer-events:none;align-items:center;gap:12px;display:flex;position:fixed;top:0;left:0;right:0}.bar>*{pointer-events:auto}.bar .spacer{pointer-events:none;flex:1}.bar-link{min-height:44px;color:var(--muted);transition:color var(--duration-fast), background var(--duration-fast);border-radius:10px;align-items:center;padding:0 12px;font-size:13px;font-weight:600;display:inline-flex}.bar-link:hover{color:var(--ink);background:#ffffff0f}.bar-link:active{transform:scale(.97)}.hud{z-index:5;left:0;right:0;top:calc(max(4px, env(safe-area-inset-top)) + 52px);pointer-events:none;font:700 11px/1 var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--faint);justify-content:center;gap:26px;display:flex;position:fixed}.hud b{letter-spacing:-.02em;color:var(--ink);text-align:center;margin-top:6px;font:800 30px/1 Inter,system-ui,sans-serif;display:block}.hint{z-index:5;left:50%;bottom:calc(14% + env(safe-area-inset-bottom));border:1px solid var(--line);background:var(--panel);-webkit-backdrop-filter:var(--blur);color:var(--ink);pointer-events:none;white-space:nowrap;border-radius:999px;padding:10px 18px;font-size:13px;animation:1.6s ease-in-out infinite pulse;position:fixed;transform:translate(-50%)}.hint[hidden]{display:none}@keyframes pulse{50%{opacity:.55}}.banner{z-index:6;opacity:0;pointer-events:none;letter-spacing:-.02em;white-space:nowrap;background:linear-gradient(90deg, var(--violet), var(--cyan));-webkit-text-fill-color:transparent;transition:opacity var(--duration-base), transform var(--duration-base);-webkit-background-clip:text;background-clip:text;font-size:clamp(26px,6vw,44px);font-weight:800;position:fixed;top:34%;left:50%;transform:translate(-50%,8px)}.banner.show{opacity:1;transform:translate(-50%)}.panel{z-index:20;background:var(--panel);width:min(440px,100vw - 32px);max-height:calc(100dvh - 96px);-webkit-backdrop-filter:var(--blur);border:1px solid var(--line);box-shadow:var(--shadow);-webkit-user-select:text;user-select:text;touch-action:pan-y;border-radius:20px;padding:26px 24px 22px;animation:.35s cubic-bezier(.22,1,.36,1) both rise;position:fixed;top:50%;left:50%;overflow-y:auto;transform:translate(-50%,-50%)}.panel[hidden]{display:none}@keyframes rise{0%{opacity:0;transform:translate(-50%,calc(12px - 50%))}to{opacity:1;transform:translate(-50%,-50%)}}.panel h1,.panel h2{letter-spacing:-.02em;text-align:center;background:linear-gradient(90deg, var(--violet), var(--cyan));-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text;margin-bottom:6px;font-size:24px;font-weight:800}.panel .lead{color:var(--muted);text-align:center;max-width:36ch;margin:0 auto 16px;font-size:13.5px;line-height:1.55}.btn{border:1px solid color-mix(in srgb, var(--violet) 48%, var(--line));background:linear-gradient(135deg, color-mix(in srgb, var(--violet) 26%, var(--panel)), color-mix(in srgb, var(--cyan) 18%, var(--panel)));width:100%;min-height:46px;color:var(--ink);transition:transform var(--duration-fast), border-color var(--duration-base), filter var(--duration-base);border-radius:12px;justify-content:center;align-items:center;padding:0 18px;font-size:14px;font-weight:700;display:inline-flex}.btn:hover{filter:brightness(1.12);transform:translateY(-1px)}.btn:active{transform:scale(.98)}.btn:focus-visible,.link:focus-visible,.bar-link:focus-visible,input:focus-visible{outline:2px solid var(--cyan);outline-offset:2px}.btn:disabled{opacity:.5;cursor:not-allowed;filter:none;transform:none}.btn.ghost{border-color:var(--line);background:#ffffff0a;margin-top:8px;font-weight:600}.stats{justify-content:center;gap:30px;margin:10px 0 4px;display:flex}.stats div{text-align:center;font:700 10px/1 var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--faint)}.stats b{color:var(--ink);letter-spacing:-.02em;margin-top:6px;font:800 38px/1 Inter,system-ui,sans-serif;display:block}.note-line{text-align:center;color:var(--muted);min-height:1.4em;margin:8px 0 14px;font-size:13px}form{gap:8px;margin-bottom:4px;display:flex}form[hidden]{display:none}input[type=text]{border:1px solid var(--line);min-width:0;min-height:46px;color:var(--ink);font:inherit;background:#ffffff0d;border-radius:12px;flex:1;padding:0 14px;font-size:16px}form .btn{flex:none;width:auto}.status{text-align:center;min-height:1.3em;color:var(--muted);margin:6px 0 4px;font-size:12.5px}.status[data-tone=error]{color:#ff8d9d}.board-head{font:700 10px/1 var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--faint);margin:16px 0 6px}ol.board{border-top:1px solid var(--line);list-style:none}ol.board li{border-bottom:1px solid var(--line);grid-template-columns:28px 1fr auto 52px;align-items:center;gap:8px;min-height:36px;font-size:13.5px;display:grid}ol.board .rank{font:700 12px var(--mono);color:var(--faint)}ol.board .who{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}ol.board .lvl{font:600 11px var(--mono);color:var(--faint)}ol.board .pts{text-align:right;font-variant-numeric:tabular-nums;font-weight:800}ol.board li.note{color:var(--muted);text-align:center;padding:10px 0;display:block}ol.board li.skeleton{background:linear-gradient(90deg,#0000,#ffffff0f,#0000) 0 0/200% 100%;height:36px;animation:1.2s linear infinite shimmer}@keyframes shimmer{to{background-position:-200% 0}}.link{color:var(--cyan);text-underline-offset:3px;font-weight:600;text-decoration:underline}.more{text-align:center;color:var(--muted);margin-top:10px;font-size:12.5px;display:block}.more:hover{color:var(--ink)}.sr-only{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}@media (width<=480px){.panel{padding:22px 16px 18px}.hud{gap:20px}.hud b{font-size:26px}}@media (prefers-reduced-motion:reduce){.panel,.hint,ol.board li.skeleton{animation:none}.banner{transition:none}}
