*{box-sizing:border-box}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}:root{--bg: #111;--fg: #eee;--panel: #1a1a1a;--panel-2: #222;--border: #2a2a2a;--muted: #888}html[data-theme=light]{--bg: #f4f4f6;--fg: #1a1a1a;--panel: #fff;--panel-2: #eaeaea;--border: #d0d0d0;--muted: #666}html,body{margin:0;padding:0;height:100%;background:var(--bg);color:var(--fg);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;transition:background .2s,color .2s}#app{max-width:960px;margin:0 auto;padding:24px 20px 40px}h1{margin:0 0 4px;font-size:22px;letter-spacing:-.3px}.hint{color:#a3a3a3;font-size:13px;margin-bottom:16px;line-height:1.6}.hint code{background:#222;padding:1px 6px;border-radius:3px;font-size:12px}canvas#waveform{width:100%;height:200px;background:#000;border-radius:10px;display:block;cursor:crosshair;touch-action:none}.active-bar{margin:12px 0 10px;display:flex;gap:8px;flex-wrap:wrap}.active-chip{display:inline-flex;align-items:center;gap:8px;padding:6px 12px;background:#1a1a1a;border:2px solid #2a2a2a;border-radius:20px;color:#ddd;cursor:pointer;font-size:13px;transition:all .1s}.active-chip:hover{background:#222}.active-chip.on{background:var(--c);border-color:var(--c);color:#000;font-weight:700;box-shadow:0 0 0 3px color-mix(in srgb,var(--c) 25%,transparent)}.active-chip .num{background:#00000040;padding:1px 6px;border-radius:8px;font-family:ui-monospace,monospace;font-size:11px}.active-chip:not(.on) .num{background:#333}.active-chip .jamo{font-size:16px;font-weight:700}.active-chip .sub{font-size:11px;opacity:.7;font-family:ui-monospace,monospace}.ticker{display:flex;gap:4px;flex-wrap:nowrap;overflow-x:auto;overflow-y:hidden;scroll-behavior:smooth;scrollbar-width:none;-ms-overflow-style:none;min-height:22px;margin:4px 0 6px;padding:0 50%;font-family:ui-monospace,monospace}.ticker::-webkit-scrollbar{display:none}.ticker-chip{scroll-snap-align:center;flex:0 0 auto}.ticker-chip{padding:1px 7px;border-radius:10px;font-size:10.5px;font-weight:700;color:#fff;background:color-mix(in srgb,var(--c) 25%,#111 75%);border:1px solid var(--c);animation:ticker-pop .22s ease-out,ticker-fade 4s linear forwards;white-space:nowrap;text-shadow:0 0 4px var(--c)}.ticker-chip.ticker-dj{background:color-mix(in srgb,var(--c) 40%,#111 60%);box-shadow:0 0 6px color-mix(in srgb,var(--c) 60%,transparent)}@keyframes ticker-pop{0%{transform:scale(.6) translateY(-8px);opacity:0}to{transform:scale(1) translateY(0);opacity:1}}@keyframes ticker-fade{0%,70%{opacity:1}to{opacity:0;transform:translate(-14px)}}html[data-theme=light] .ticker-chip{color:#111;background:color-mix(in srgb,var(--c) 70%,#fff 30%)}.presets{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:4px}.preset-btn{background:#1a1a1a;border:1px solid #2a2a2a;color:#ddd;padding:5px 12px;border-radius:16px;cursor:pointer;font-size:12px;font-weight:600;transition:background .12s}.preset-btn:hover{background:#242424;border-color:#5af}.preset-btn.active{background:#3a7fff;color:#fff;border-color:#3a7fff;box-shadow:0 0 0 2px #3a7fff4d}html[data-theme=light] .preset-btn{background:#fff;color:#222;border-color:#d0d0d0}html[data-theme=light] .preset-btn:hover{background:#eaf2ff}html[data-theme=light] .preset-btn.active{background:#3a7fff;color:#fff;border-color:#3a7fff}.keys{margin-top:20px;display:grid;grid-template-columns:repeat(12,1fr);gap:10px}.keys>.key:nth-child(-n+3){grid-column:span 4}.keys>.key:nth-child(n+4){grid-column:span 3}.key{background:#1e1e1e;border:2px solid #2a2a2a;border-radius:14px;padding:18px 10px;text-align:center;transition:transform .06s,border-color .1s,background .1s;cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;touch-action:manipulation;min-height:92px;display:flex;flex-direction:column;align-items:center;justify-content:center}.key:hover{background:#262626;border-color:color-mix(in srgb,var(--c, #5af) 35%,#2a2a2a)}.key.active{transform:scale(.96);background:color-mix(in srgb,var(--c, #5af) 20%,#1a1a1a);border-color:var(--c, #5af);box-shadow:0 0 0 2px color-mix(in srgb,var(--c, #5af) 40%,transparent),0 0 20px 2px color-mix(in srgb,var(--c, #5af) 35%,transparent)}.key .jamo{color:var(--c, #fff)}.key .jamo{font-size:44px;font-weight:700;line-height:1}.key .latin{font-size:12px;color:#888;margin-top:4px}.key .bind{margin-top:8px;font-family:ui-monospace,monospace;font-size:10px;color:#666}@media (max-width: 640px){#app{padding:16px 12px 120px}.keys{gap:8px}.key{min-height:78px;padding:12px 4px;border-radius:12px}.key .jamo{font-size:36px}.key .bind{display:none}canvas#waveform{height:140px}.dj-slots{grid-template-columns:repeat(auto-fill,minmax(180px,1fr))}}@media (max-width: 420px){.keys>.key:nth-child(n+4) .jamo{font-size:30px}.key{padding:10px 2px}}.segments{margin-top:24px;display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px}.seg{background:#1a1a1a;border-radius:8px;padding:10px 12px;border:1px solid #2a2a2a;cursor:pointer;transition:border-color .1s,background .1s}.seg:hover{background:#1f1f1f}.seg.active{border-color:#5af;background:#1a2a3a}.seg-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px}.seg-label{font-weight:700;font-size:14px}.seg-color{width:22px;height:22px;padding:0;border:1px solid #333;border-radius:4px;background:transparent;cursor:pointer}.seg-color::-webkit-color-swatch-wrapper{padding:0}.seg-color::-webkit-color-swatch{border:none;border-radius:3px}.seg-meta{font-size:11px;color:#888;font-family:ui-monospace,monospace}.seg input[type=range]{width:100%;margin:2px 0}.seg .row{font-size:11px;color:#999;display:flex;justify-content:space-between}.seg button{width:100%;margin-top:6px;padding:5px;background:#2a2a2a;color:#ddd;border:none;border-radius:4px;cursor:pointer;font-size:12px}.seg button:hover{background:#333}.dj-header{display:flex;align-items:center;justify-content:space-between;margin:24px 0 8px}.dj-filter{flex:1;min-width:80px;max-width:180px;background:#1a1a1a;border:1px solid #2a2a2a;color:#eee;padding:4px 10px;font-size:12px;border-radius:6px}.dj-filter:focus{outline:1px solid #5af}button:focus-visible,.key:focus-visible,.dj-slot-wrap:focus-visible,.dj-pad:focus-visible{outline:2px solid #5af;outline-offset:2px}html[data-theme=light] button:focus-visible,html[data-theme=light] .key:focus-visible,html[data-theme=light] .dj-slot-wrap:focus-visible,html[data-theme=light] .dj-pad:focus-visible{outline-color:#06c}.start-hint-btn:focus-visible{outline:3px solid #fff;outline-offset:4px}html[data-theme=light] .start-hint-btn:focus-visible{outline-color:#111}html[data-theme=light] .dj-filter{background:#fff;color:#222;border-color:#ccc}.dj-shuffle{background:#2a2a2a;color:#eee;border:1px solid #333;border-radius:6px;padding:5px 10px;font-size:11px;cursor:pointer}.dj-shuffle:hover{background:#333}.dj-slots{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px}.dj-slot-wrap{display:flex;flex-direction:column;position:relative}.dj-slot-wrap.firing .dj-slot{box-shadow:0 0 0 2px var(--c, #5af),0 0 24px 4px color-mix(in srgb,var(--c) 45%,transparent);animation:dj-fire .8s ease-out}@keyframes dj-fire{0%{transform:scale(1);filter:brightness(1.3)}40%{transform:scale(1.04)}to{transform:scale(1);filter:brightness(1)}}.dj-slot{display:flex;align-items:center;gap:6px;background:#1a1a1a;border:1px solid #2a2a2a;border-left:4px solid var(--c, #555);border-radius:8px 8px 0 0;padding:6px 8px}.dj-desc{font-size:10.5px;color:#888;background:#141414;border:1px solid #2a2a2a;border-left:4px solid var(--c, #555);border-top:none;border-radius:0 0 8px 8px;padding:4px 10px 6px 12px;margin-top:-1px;margin-bottom:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dj-num{background:#2a2a2a;color:var(--c, #fff);width:26px;height:26px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-family:ui-monospace,monospace;font-size:13px;font-weight:700;flex-shrink:0}.dj-slot select{flex:1;min-width:0;background:#222;color:#eee;border:1px solid #333;border-radius:4px;padding:7px 6px;font-size:12px;font-weight:600;cursor:pointer;min-height:32px}.dj-filter::placeholder{color:#888}html[data-theme=light] .dj-filter::placeholder{color:#999}.dj-slot select:hover{background:#2a2a2a}.dj-slot button{background:var(--c, #5af);color:#000;border:none;border-radius:4px;padding:5px 10px;font-weight:700;font-size:11px;cursor:pointer;touch-action:manipulation;-webkit-tap-highlight-color:transparent;min-height:34px;min-width:34px}.dj-slot button:hover{filter:brightness(1.15)}.dj-vol{position:relative;height:14px;margin:4px 0 6px;background:#141414;border:1px solid #2a2a2a;border-radius:3px;cursor:ew-resize;overflow:hidden;touch-action:none}.dj-vol-fill{position:absolute;left:0;top:0;bottom:0;background:linear-gradient(90deg,color-mix(in srgb,var(--c) 30%,#111),var(--c));pointer-events:none}.dj-vol-label{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;font-size:10px;font-family:ui-monospace,monospace;font-weight:700;color:#fff;text-shadow:0 0 3px rgba(0,0,0,.8);pointer-events:none;letter-spacing:.05em}.controls{margin-top:20px;display:flex;gap:8px;flex-wrap:wrap}.controls button{padding:8px 14px;background:#5af;color:#000;border:none;border-radius:6px;cursor:pointer;font-weight:600;font-size:13px}.controls button.secondary{background:#2a2a2a;color:#eee}.controls button.rec-btn{background:#e33;color:#fff}.controls button.make-clip-btn{background:linear-gradient(135deg,#6bcf7f,#4d96ff);color:#fff;font-weight:800}.controls button.make-clip-btn:disabled{opacity:.7;cursor:not-allowed}.controls button.loop-btn{background:#2a2a2a;color:#eee;border:1px solid #3a3a3a}.controls button.loop-btn.rec{background:#e33;color:#fff;animation:rec-blink 1s ease-in-out infinite}.controls button.loop-btn.on{background:#4d96ff;color:#000;font-weight:700;animation:loop-spin 2s linear infinite}@keyframes loop-spin{0%,to{box-shadow:inset 0 0 0 2px #fff0}50%{box-shadow:inset 0 0 0 2px #fff6}}.controls button.on{background:#6bcf7f;color:#000;font-weight:700}.controls button.rec-btn.recording{background:#ff1744;animation:rec-blink 1s ease-in-out infinite}@keyframes rec-blink{0%,to{box-shadow:0 0 #ff1744b3}50%{box-shadow:0 0 0 8px #ff174400}}.controls button.tap-btn{background:#2a2a2a;color:#eee;display:inline-flex;align-items:center;gap:8px;padding:8px 12px;border:1px solid #3a3a3a;transition:transform .06s}.controls button.tap-btn .tap-label{font-weight:700;color:#5af;letter-spacing:.08em;font-size:11px}.controls button.tap-btn .bpm-value{font-family:ui-monospace,monospace;font-size:12px;color:#ccc}.controls button.tap-btn.tap-pulse{animation:tap-pulse .18s ease}.controls button.tap-btn.tap-tick{animation:tap-tick .16s ease}@keyframes tap-pulse{0%{transform:scale(1.06);background:#f34;color:#fff;box-shadow:0 0 #f34c}60%{transform:scale(1);background:#f34;color:#fff;box-shadow:0 0 0 14px #f340}to{transform:scale(1);background:#2a2a2a;color:#eee;box-shadow:0 0 #f340}}@keyframes tap-tick{0%{box-shadow:inset 0 0 0 2px #5aaaffcc}to{box-shadow:inset 0 0 0 2px #5aaaff00}}.controls button:hover{opacity:.9}.master-vol-wrap{display:inline-flex;align-items:center;gap:8px;padding:4px 10px;background:#2a2a2a;border:1px solid #3a3a3a;border-radius:6px;font-size:12px;color:#ccc}.master-vol-wrap input[type=range]{width:110px;accent-color:#5af}html[data-theme=light] .master-vol-wrap{background:#e4e4e4;color:#222;border-color:#ccc}.error{color:#f66;padding:16px;background:#2a0a0a;border-radius:8px}@keyframes fx-shake{0%,to{transform:translate(0)}10%{transform:translate(-8px,4px)}20%{transform:translate(7px,-6px)}30%{transform:translate(-10px,-3px)}40%{transform:translate(6px,8px)}50%{transform:translate(-5px,5px)}60%{transform:translate(8px,-4px)}70%{transform:translate(-6px,-7px)}80%{transform:translate(4px,6px)}90%{transform:translate(-3px,-2px)}}body.fx-shake{animation:fx-shake .5s cubic-bezier(.36,.07,.19,.97)}.fps-meter{position:fixed;top:calc(10px + env(safe-area-inset-top,0px));left:calc(10px + env(safe-area-inset-left,0px));font:600 11px ui-monospace,monospace;color:#555;background:#0000004d;padding:2px 6px;border-radius:4px;z-index:10000;pointer-events:none;letter-spacing:.05em}.fps-meter.low{color:#ff6;background:#3c280080}.theme-toggle{display:none!important}html[data-theme=light] .theme-toggle{background:#ffffffb3;color:#222;border-color:#0000001a}.theme-toggle:hover{filter:brightness(1.2)}.top-tools{position:fixed;top:calc(10px + env(safe-area-inset-top,0px));right:calc(10px + env(safe-area-inset-right,0px));display:flex;gap:6px;align-items:center;z-index:10000}.top-tools button{height:26px;padding:0 10px;display:inline-flex;align-items:center;justify-content:center;gap:6px;background:#00000040;border:1px solid rgba(255,255,255,.1);color:#eee;border-radius:6px;font-size:12px;font-weight:600;letter-spacing:.03em;cursor:pointer;line-height:1}.top-tools button:hover{filter:brightness(1.2)}.devlog-link{height:26px;width:30px;display:inline-flex;align-items:center;justify-content:center;background:#00000040;border:1px solid rgba(255,255,255,.1);color:#eee;border-radius:6px;font-size:13px;line-height:1;cursor:pointer;text-decoration:none;opacity:.7;transition:opacity .15s,filter .15s}.devlog-link:hover{opacity:1;filter:brightness(1.2);text-decoration:none}html[data-theme=light] .devlog-link{background:#ffffffd9;color:#222;border-color:#0000001f}.lang-toggle{min-width:42px;font-family:ui-monospace,monospace!important;letter-spacing:.08em;transition:background .2s,color .2s,transform .1s}.lang-toggle.flash{animation:lang-flash .5s ease}@keyframes lang-flash{0%{transform:scale(1);box-shadow:0 0 #5aaaffb3}30%{transform:scale(1.15);box-shadow:0 0 0 8px #5aaaff00}to{transform:scale(1);box-shadow:0 0 #5aaaff00}}@media (max-width: 640px){.top-tools{flex-wrap:wrap;justify-content:flex-end;max-width:calc(100vw - 20px - env(safe-area-inset-left,0px) - env(safe-area-inset-right,0px));row-gap:4px}}@media (max-width: 380px){.top-tools{gap:4px;row-gap:4px}.top-tools button{padding:0 7px;font-size:11px;gap:4px}.dj-tap-float .tap-label{font-size:9px}.dj-tap-float #dj-tap-bpm{font-size:10px}.lang-toggle{min-width:28px}}.dj-mode-toggle.on{background:#f57!important;color:#fff!important;border-color:#f57!important;box-shadow:0 0 18px #ff557773}.dj-only-btn{display:none!important}body.dj-mode .dj-only-btn{display:inline-flex!important}.dj-tap-float .tap-label{font-weight:700;color:#5af;letter-spacing:.06em;font-size:10px}.dj-tap-float #dj-tap-bpm{font-family:ui-monospace,monospace;font-size:11px;color:#ccc}.dj-quant-float.on{background:#6bcf7f!important;color:#000!important;border-color:#6bcf7f!important}html[data-theme=light] .top-tools button{background:#ffffffd9;color:#222;border-color:#0000001f}html[data-theme=light] .dj-tap-float .tap-label{color:#3a7fff}html[data-theme=light] .dj-tap-float #dj-tap-bpm{color:#555}html[data-theme=light] .dj-mode-toggle{background:#ffffffb3;color:#222;border-color:#0000001a}.dj-slots-bar{display:none}body.dj-mode .dj-slots-bar{display:flex;justify-content:center;margin-top:10px}body.dj-mode .dj-slots-bar #dj-shuffle-inline{background:#2a2a2a;color:#eee;border:1px solid #333;border-radius:6px;padding:5px 12px;font-size:12px;font-weight:600;cursor:pointer;touch-action:manipulation}body.dj-mode .dj-slots-bar #dj-shuffle-inline:hover{background:#333}html[data-theme=light] body.dj-mode .dj-slots-bar #dj-shuffle-inline{background:#e4e4e4;color:#222;border-color:#ccc}body.dj-mode #app>*:not(.keys):not(.dj-slots):not(.ticker):not(.dj-slots-bar):not(#countdown):not(#toast){display:none}body.dj-mode .ticker{min-height:56px;gap:8px;margin:0 0 14px;justify-content:center}body.dj-mode .ticker-chip{padding:10px 18px;font-size:20px;border-radius:18px;border-width:2px}.dj-pad{display:none}@media (max-width: 640px){body.dj-mode .ticker{min-height:44px;margin-bottom:10px}body.dj-mode .ticker-chip{padding:7px 13px;font-size:16px;border-radius:14px}}body.dj-mode .fps-meter{display:none}body.dj-mode #app{min-height:100vh;display:flex;flex-direction:column;justify-content:center;padding:56px 20px 40px;box-sizing:border-box;max-width:820px}body.dj-mode .keys{margin-top:0;grid-template-columns:repeat(12,1fr);gap:14px}body.dj-mode .key{min-height:120px}body.dj-mode .dj-slots{grid-template-columns:repeat(3,1fr);gap:12px;margin-top:18px}@media (max-width: 640px){body.dj-mode{overflow:hidden;height:100dvh;overscroll-behavior:none}body.dj-mode #app{height:100dvh;min-height:0;padding:calc(52px + env(safe-area-inset-top,0px)) calc(10px + env(safe-area-inset-right,0px)) calc(14px + env(safe-area-inset-bottom,0px)) calc(10px + env(safe-area-inset-left,0px));justify-content:center;gap:14px}body.dj-mode .keys{grid-template-columns:repeat(12,1fr);gap:10px;flex:0 0 auto}body.dj-mode .key{min-height:84px;padding:8px 4px}body.dj-mode .key .jamo{font-size:36px}body.dj-mode .dj-slots{grid-template-columns:repeat(3,minmax(0,1fr));grid-auto-rows:64px;gap:8px;flex:0 0 auto;overflow:hidden}body.dj-mode .dj-slot-wrap{position:relative}body.dj-mode .dj-slot,body.dj-mode .dj-desc,body.dj-mode .dj-vol{display:none}body.dj-mode .dj-slot-wrap .dj-pad{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;height:100%;background:#141414;border:1px solid #2a2a2a;border-left:3px solid var(--c, #555);border-radius:10px;padding:4px 6px;box-shadow:0 0 color-mix(in srgb,var(--c) 40%,transparent);transition:transform .08s,box-shadow .15s;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;touch-action:manipulation}body.dj-mode .dj-slot-wrap.firing .dj-pad{background:color-mix(in srgb,var(--c, #5af) 28%,#141414 72%);border-color:var(--c, #5af);box-shadow:0 0 0 3px var(--c, #5af),0 0 28px 4px color-mix(in srgb,var(--c) 55%,transparent);animation:dj-pad-fire .45s ease-out}@keyframes dj-pad-fire{0%{transform:scale(1)}25%{transform:scale(.94)}60%{transform:scale(1.03)}to{transform:scale(1)}}body.dj-mode .dj-pad-num{font:700 14px ui-monospace,monospace;color:var(--c, #888);line-height:1}body.dj-mode .dj-pad-name{font-size:13px;font-weight:700;color:#eee;letter-spacing:.02em;text-align:center;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}html[data-theme=light] body.dj-mode .dj-slot-wrap .dj-pad{background:#fff;border-color:#d0d0d0}html[data-theme=light] body.dj-mode .dj-pad-name{color:#222}html[data-theme=light] body.dj-mode .dj-slot-wrap.firing .dj-pad{background:color-mix(in srgb,var(--c, #5af) 18%,#fff 82%);border-color:var(--c, #5af);box-shadow:0 0 0 3px var(--c, #5af),0 0 24px 4px color-mix(in srgb,var(--c) 35%,transparent)}html[data-theme=light] canvas#waveform{background:#fff}html[data-theme=light] .hint code{background:#e8e8e8;color:#222}html[data-theme=light] .hint{color:#555}html[data-theme=light] .key{background:#fff;border-color:#d0d0d0}html[data-theme=light] .key:hover{background:#f2f2f2}html[data-theme=light] .key .latin,html[data-theme=light] .key .bind{color:#888}html[data-theme=light] .active-chip{background:#fff;border-color:#d0d0d0;color:#222}html[data-theme=light] .active-chip:not(.on) .num{background:#e0e0e0;color:#333}html[data-theme=light] .seg{background:#fff;border-color:#d0d0d0}html[data-theme=light] .seg:hover{background:#f7f7f7}html[data-theme=light] .seg.active{background:#dff0ff;border-color:#3a8fe0}html[data-theme=light] .seg button{background:#e0e0e0;color:#222}html[data-theme=light] .seg .row{color:#555}html[data-theme=light] .dj-shuffle{background:#e4e4e4;color:#222;border-color:#ccc}html[data-theme=light] .dj-slot{background:#fff;border-color:#d0d0d0}html[data-theme=light] .dj-desc{background:#f4f4f4;border-color:#d0d0d0;color:#555}html[data-theme=light] .dj-slot select{background:#f4f4f4;color:#222;border-color:#ccc}html[data-theme=light] .dj-num{background:#e0e0e0}html[data-theme=light] .dj-vol{background:#e8e8e8;border-color:#ccc}html[data-theme=light] .dj-vol-label{color:#111;text-shadow:0 0 3px rgba(255,255,255,.8)}html[data-theme=light] .controls button.secondary{background:#e4e4e4;color:#222}html[data-theme=light] .controls button.tap-btn{background:#e4e4e4;color:#222;border-color:#ccc}html[data-theme=light] .controls button.tap-btn .bpm-value{color:#333}html[data-theme=light] .controls button.loop-btn{background:#e4e4e4;color:#222;border-color:#ccc}html[data-theme=light] .toast{background:#fff;color:#222;border-color:#ccc}html[data-theme=light] .keyhelp{background:#ffffffbf}html[data-theme=light] .keyhelp-card{background:#fff;color:#222;border-color:#ddd}html[data-theme=light] .keyhelp-grid{color:#333}html[data-theme=light] .keyhelp-grid kbd{background:#f4f4f4;color:#222;border-color:#ccc}html[data-theme=light] .keyhelp-stats{border-top-color:#e0e0e0}html[data-theme=light] .stats-row{color:#333}html[data-theme=light] .stats-row b{color:#000}.countdown{position:fixed;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;font-size:clamp(120px,24vw,300px);font-weight:900;color:#fff;background:radial-gradient(ellipse at center,#0006,#000000d9);z-index:10004;pointer-events:none;text-shadow:0 0 60px rgba(255,255,255,.35);letter-spacing:.02em}.countdown[hidden]{display:none}.countdown.tick{animation:cd-tick .5s ease-out}@keyframes cd-tick{0%{transform:scale(.5);opacity:0}30%{transform:scale(1.1);opacity:1}to{transform:scale(1);opacity:1}}.toast{position:fixed;bottom:28px;left:50%;transform:translate(-50%) translateY(20px);background:#1a1a1a;color:#eee;border:1px solid #333;border-radius:999px;padding:10px 18px;font-size:13px;font-weight:500;z-index:10003;opacity:0;transition:opacity .2s,transform .2s;box-shadow:0 8px 28px #00000080;pointer-events:none}.toast.show{opacity:1;transform:translate(-50%) translateY(0)}.cat-layer{position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:10000;overflow:hidden}.cat-pop{transform-origin:center;will-change:transform,opacity;filter:drop-shadow(0 6px 12px rgba(0,0,0,.45));backface-visibility:hidden;contain:layout paint}@keyframes cat-pop-1{0%{transform:rotate(var(--rot)) scale(0);opacity:0}18%{transform:rotate(var(--rot)) scale(1.35);opacity:1}32%{transform:rotate(var(--rot)) scale(.95)}45%{transform:rotate(var(--rot)) scale(1.03)}80%{transform:rotate(var(--rot)) scale(1);opacity:1}to{transform:rotate(calc(var(--rot) * 1.4)) scale(.6);opacity:0}}@keyframes cat-pop-2{0%{transform:rotate(-40deg) scale(0);opacity:0}12%{transform:rotate(15deg) scale(1.4);opacity:1}24%{transform:rotate(-8deg) scale(.95)}38%{transform:rotate(4deg) scale(1.02)}80%{transform:rotate(var(--rot)) scale(1);opacity:1}to{transform:rotate(calc(var(--rot) + 180deg)) scale(0);opacity:0}}@keyframes cat-pop-3{0%{transform:translateY(80px) rotate(var(--rot)) scale(.3);opacity:0}20%{transform:translateY(-20px) rotate(var(--rot)) scale(1.25);opacity:1}35%{transform:translateY(0) rotate(var(--rot)) scale(1)}80%{transform:translateY(0) rotate(var(--rot)) scale(1);opacity:1}to{transform:translateY(-40px) rotate(var(--rot)) scale(1.1);opacity:0}}.cat-pop-v1{animation:cat-pop-1 1.8s cubic-bezier(.175,.885,.32,1.275) forwards}.cat-pop-v2{animation:cat-pop-2 2s cubic-bezier(.175,.885,.32,1.275) forwards}.cat-pop-v3{animation:cat-pop-3 1.9s cubic-bezier(.175,.885,.32,1.4) forwards}@keyframes cat-pop-slow{0%{transform:translate3d(0,60px,0) rotate(calc(var(--rot) * .3)) scale(.25);opacity:0;filter:blur(22px) drop-shadow(0 0 0 rgba(200,140,255,0))}22%{transform:translateZ(0) rotate(var(--rot)) scale(1.04);opacity:1;filter:blur(0) drop-shadow(0 18px 50px rgba(200,140,255,.75))}55%{transform:translate3d(0,-8px,0) rotate(calc(var(--rot) * 1.15)) scale(1.02);opacity:1;filter:blur(0) drop-shadow(0 14px 44px rgba(200,140,255,.65))}85%{transform:translate3d(0,-26px,0) rotate(calc(var(--rot) * 1.35)) scale(1.08);opacity:.85;filter:blur(3px) drop-shadow(0 10px 38px rgba(200,140,255,.45))}to{transform:translate3d(0,-70px,0) rotate(calc(var(--rot) * 1.6)) scale(1.14);opacity:0;filter:blur(10px) drop-shadow(0 0 0 rgba(200,140,255,0))}}.cat-pop-slow{animation:cat-pop-slow 3s cubic-bezier(.22,.9,.3,1) forwards;will-change:transform,opacity}@keyframes cat-pop-rotate{0%{transform:rotate(0) scale(.2);opacity:0;filter:blur(8px)}15%{transform:rotate(calc(var(--spin-dir) * 60deg)) scale(1.08);opacity:1;filter:blur(0)}85%{transform:rotate(calc(var(--spin-dir) * 640deg)) scale(1);opacity:1;filter:blur(0)}to{transform:rotate(calc(var(--spin-dir) * 720deg)) scale(.4);opacity:0;filter:blur(6px)}}.cat-pop-rotate{animation:cat-pop-rotate var(--spin-sec, 2.8s) cubic-bezier(.4,0,.5,1) forwards;transform-origin:center;filter:drop-shadow(0 6px 16px rgba(77,208,225,.55));will-change:transform,opacity}@keyframes cat-pop-burst{0%{transform:translateZ(0) rotate(0) scale(.1);opacity:0;filter:drop-shadow(0 0 0 rgba(255,106,184,0)) blur(6px)}12%{transform:translate3d(calc(var(--dx) * .18),calc(var(--dy) * .18),0) rotate(calc(var(--spin) * .12)) scale(1.35);opacity:1;filter:drop-shadow(0 0 28px rgba(255,106,184,.9)) blur(0)}55%{transform:translate3d(calc(var(--dx) * .95),calc(var(--dy) * .95 - 40px),0) rotate(calc(var(--spin) * .6)) scale(1.05);opacity:1;filter:drop-shadow(0 10px 30px rgba(255,106,184,.7)) blur(0)}to{transform:translate3d(var(--dx),calc(var(--dy) + 180px),0) rotate(var(--spin)) scale(.5);opacity:0;filter:drop-shadow(0 30px 40px rgba(255,106,184,.1)) blur(4px)}}.cat-pop-burst{animation:cat-pop-burst 1.4s cubic-bezier(.2,.7,.3,1) forwards;transform-origin:center;will-change:transform,opacity}@keyframes cat-pop-rain{0%{transform:translateZ(0) rotate(0) scale(.7);opacity:0}10%{opacity:1}90%{opacity:1}to{transform:translate3d(0,var(--fall, 900px),0) rotate(var(--rot, 0deg)) scale(1);opacity:0}}.cat-pop-rain{animation-name:cat-pop-rain;animation-timing-function:cubic-bezier(.5,.05,.6,1);animation-fill-mode:forwards;will-change:transform,opacity;filter:drop-shadow(0 10px 24px rgba(0,0,0,.7))}@keyframes cat-pop-rise{0%{transform:translateZ(0) scale(.6);opacity:0}15%{opacity:1}to{transform:translate3d(var(--sx, 0px),var(--ly, -900px),0) scale(.9);opacity:0}}.cat-pop-rise{animation-name:cat-pop-rise;animation-timing-function:cubic-bezier(.3,.6,.4,1);animation-fill-mode:forwards;will-change:transform,opacity;filter:drop-shadow(0 0 28px rgba(107,207,127,.9))}@keyframes cat-pop-streak{0%{transform:translateZ(0) scaleX(1.4) scaleY(.9);opacity:0}15%{opacity:1}85%{opacity:1}to{transform:translate3d(var(--dist, 1200px),0,0) scaleX(1.4) scaleY(.9);opacity:0}}.cat-pop-streak{animation-name:cat-pop-streak;animation-timing-function:cubic-bezier(.3,0,.2,1);animation-fill-mode:forwards;will-change:transform,opacity;filter:drop-shadow(0 0 36px rgba(255,217,61,.95))}@keyframes cat-pop-corners{0%{transform:translateZ(0) rotate(0) scale(.4);opacity:0}20%{opacity:1}55%{transform:translate3d(var(--tx, 0px),var(--ty, 0px),0) rotate(var(--spin-mid, 200deg)) scale(1.1);opacity:1}to{transform:translate3d(var(--tx, 0px),var(--ty, 0px),0) rotate(var(--spin, 360deg)) scale(.2);opacity:0}}.cat-pop-corners{animation-name:cat-pop-corners;animation-timing-function:cubic-bezier(.3,.1,.4,1);animation-fill-mode:forwards;will-change:transform,opacity;filter:drop-shadow(0 0 30px rgba(200,107,255,.9))}@keyframes cat-pop-orbit{0%{transform:translate3d(var(--x0, 0px),var(--y0, 0px),0) scale(.4);opacity:0}15%{transform:translate3d(var(--x0, 0px),var(--y0, 0px),0) scale(1);opacity:1}50%{transform:translate3d(var(--xm, 0px),var(--ym, 0px),0) scale(1);opacity:1}85%{transform:translate3d(var(--x1, 0px),var(--y1, 0px),0) scale(1);opacity:1}to{transform:translate3d(var(--x1, 0px),var(--y1, 0px),0) scale(.2);opacity:0}}.cat-pop-orbit{animation-name:cat-pop-orbit;animation-timing-function:cubic-bezier(.3,.1,.4,1);animation-fill-mode:forwards;transform-origin:center;will-change:transform,opacity;filter:drop-shadow(0 0 28px rgba(77,208,225,.9))}@keyframes cat-pop-pulse{0%{transform:scale(.2);opacity:0;filter:drop-shadow(0 0 0 rgba(255,85,238,0))}20%{transform:scale(1.08);opacity:1;filter:drop-shadow(0 0 40px rgba(255,85,238,.85))}35%{transform:scale(.92)}50%{transform:scale(1.06);filter:drop-shadow(0 0 40px rgba(255,85,238,.85))}65%{transform:scale(.95)}80%{transform:scale(1.02)}to{transform:scale(.5);opacity:0;filter:drop-shadow(0 0 0 rgba(255,85,238,0))}}.cat-pop-pulse{animation-name:cat-pop-pulse;animation-timing-function:cubic-bezier(.4,0,.2,1);animation-fill-mode:forwards;transform-origin:center;will-change:transform,opacity}@keyframes cat-pop-shake{0%{transform:translateZ(0) scale(.2);opacity:0}10%{transform:translate3d(-8px,4px,0) scale(1.2);opacity:1}20%{transform:translate3d(10px,-6px,0) rotate(-6deg)}30%{transform:translate3d(-10px,6px,0) rotate(5deg)}40%{transform:translate3d(8px,-4px,0) rotate(-4deg)}50%{transform:translate3d(-6px,4px,0) rotate(3deg)}60%{transform:translate3d(4px,-2px,0) rotate(-2deg)}75%{transform:scale(1.25) rotate(0)}to{transform:scale(0) rotate(180deg);opacity:0}}.cat-pop-shake{animation-name:cat-pop-shake;animation-timing-function:cubic-bezier(.4,.05,.7,1);animation-fill-mode:forwards;transform-origin:center;will-change:transform,opacity;filter:drop-shadow(0 0 18px rgba(255,107,107,.7))}@keyframes cat-pop-zigzag{0%{transform:translateZ(0) rotate(0) scale(.5);opacity:0}10%{opacity:1}25%{transform:translate3d(var(--zig, 80px),var(--u1, -200px),0) rotate(-18deg) scale(1)}50%{transform:translate3d(var(--zigN, -80px),var(--u2, -400px),0) rotate(18deg) scale(1)}75%{transform:translate3d(var(--zig, 80px),var(--u3, -600px),0) rotate(-18deg) scale(1)}90%{opacity:1}to{transform:translate3d(0,var(--u4, -900px),0) rotate(0) scale(.7);opacity:0}}.cat-pop-zigzag{animation-name:cat-pop-zigzag;animation-timing-function:cubic-bezier(.4,0,.5,1);animation-fill-mode:forwards;will-change:transform,opacity;filter:drop-shadow(0 0 12px rgba(77,150,255,.7))}@keyframes cat-pop-mirror-l{0%{transform:translateZ(0) scale(.3);opacity:0}25%{opacity:1;transform:translate3d(var(--dMid, -200px),0,0) scale(1.15)}70%{transform:translate3d(var(--dN, -400px),0,0) scale(1);opacity:1}to{transform:translate3d(var(--dN, -400px),0,0) scale(.4);opacity:0}}@keyframes cat-pop-mirror-r{0%{transform:translateZ(0) scale(.3) scaleX(-1);opacity:0}25%{opacity:1;transform:translate3d(var(--dMid, 200px),0,0) scale(1.15) scaleX(-1)}70%{transform:translate3d(var(--d, 400px),0,0) scale(1) scaleX(-1);opacity:1}to{transform:translate3d(var(--d, 400px),0,0) scale(.4) scaleX(-1);opacity:0}}.cat-pop-mirror-l{animation-name:cat-pop-mirror-l;animation-timing-function:cubic-bezier(.3,.1,.3,1);animation-fill-mode:forwards;will-change:transform,opacity;filter:drop-shadow(0 0 28px rgba(255,107,107,.9))}.cat-pop-mirror-r{animation-name:cat-pop-mirror-r;animation-timing-function:cubic-bezier(.3,.1,.3,1);animation-fill-mode:forwards;will-change:transform,opacity;filter:drop-shadow(0 0 28px rgba(77,150,255,.9))}.start-hint{position:fixed;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;background:radial-gradient(ellipse at center,#00000073,#000000d9);z-index:10001;pointer-events:none;animation:sh-fadein .5s ease forwards}.start-hint.hiding{animation:sh-fadeout .45s ease forwards}.start-hint-inner{text-align:center;animation:sh-pulse 1.5s ease-in-out infinite}.start-jamo{font-size:clamp(72px,14vw,180px);font-weight:900;background:linear-gradient(90deg,#ff6b6b,#ffd93d,#6bcf7f,#4d96ff,#c86bff);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;letter-spacing:.08em;filter:drop-shadow(0 0 36px rgba(255,255,255,.18))}.start-text{font-size:18px;color:#eee;margin-top:14px;letter-spacing:.05em;opacity:.7}.start-hint-btn{pointer-events:auto;margin-top:24px;padding:14px 34px;font-size:17px;font-weight:700;color:#111;background:linear-gradient(90deg,#ff6b6b,#ffd93d,#6bcf7f,#4d96ff,#c86bff);background-size:200% 100%;border:none;border-radius:999px;cursor:pointer;box-shadow:0 10px 32px #ffd93d4d,0 0 0 4px #ffffff1a;animation:sh-btn-shift 3s linear infinite;letter-spacing:.05em;-webkit-tap-highlight-color:transparent;touch-action:manipulation}.start-hint-btn:hover{filter:brightness(1.05)}.start-hint-btn:active{transform:scale(.97)}@keyframes sh-btn-shift{0%{background-position:0% 50%}to{background-position:200% 50%}}@keyframes sh-fadein{0%{opacity:0}to{opacity:1}}@keyframes sh-fadeout{to{opacity:0}}@keyframes sh-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.05)}}.keyhelp{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000bf;z-index:10002;display:flex;align-items:center;justify-content:center;animation:sh-fadein .2s ease forwards}.keyhelp[hidden]{display:none}.keyhelp-card{background:#1a1a1a;border:1px solid #333;border-radius:14px;padding:24px 28px;max-width:520px;width:calc(100% - 40px);box-shadow:0 20px 60px #000000b3,0 0 0 1px #ffffff0a}.keyhelp-title{font-size:18px;font-weight:700;margin-bottom:16px;color:#fff;letter-spacing:.02em}.keyhelp-grid{display:grid;grid-template-columns:auto 1fr;gap:8px 14px;align-items:center;font-size:13px;color:#ccc}.keyhelp-grid kbd{display:inline-block;background:#2a2a2a;border:1px solid #3a3a3a;border-bottom-width:2px;border-radius:5px;padding:3px 9px;font-family:ui-monospace,monospace;font-size:12px;font-weight:600;color:#fff;text-align:center;min-width:36px}.keyhelp-stats{margin-top:20px;padding-top:16px;border-top:1px solid #2a2a2a}.stats-title{font-size:12px;font-weight:700;color:#5af;letter-spacing:.08em;text-transform:uppercase;margin-bottom:8px}.stats-row{display:flex;justify-content:space-between;font-size:13px;color:#ccc;padding:4px 0}.stats-row b{color:#fff;font-weight:700}.stats-chips{display:inline-flex;gap:4px;flex-wrap:wrap}.stats-chip{background:#2a2a2a;color:#fff;border-radius:10px;padding:2px 8px;font-family:ui-monospace,monospace;font-size:10.5px;font-weight:600}.stats-chip.dj{background:#3a1f5a;color:#fcf}html[data-theme=light] .stats-chip{background:#e4e4e4;color:#222}html[data-theme=light] .stats-chip.dj{background:#efdbff;color:#5a2a7f}.keyhelp-actions{display:flex;gap:8px;margin-top:18px;flex-wrap:wrap}.keyhelp-action{background:#2a2a2a;color:#eee;border:1px solid #3a3a3a;border-radius:6px;padding:6px 12px;cursor:pointer;font-size:12px;font-family:inherit;text-decoration:none;display:inline-block;line-height:normal}.keyhelp-action:hover{text-decoration:none}.keyhelp-action:hover{background:#333;border-color:#5af}.keyhelp-action.danger{color:#f87;border-color:#533}.keyhelp-action.danger:hover{background:#331a1a;border-color:#f87}html[data-theme=light] .keyhelp-action{background:#f4f4f4;color:#222;border-color:#ccc}html[data-theme=light] .keyhelp-action.danger{color:#c62828;border-color:#e8b0b0}.keyhelp-intensity{display:flex;align-items:center;gap:10px;margin-top:12px;font-size:12px;color:#aaa}.keyhelp-intensity input[type=range]{flex:1;accent-color:#5af}.keyhelp-intensity span{min-width:48px;text-align:right;font-family:ui-monospace,monospace;color:#fff}html[data-theme=light] .keyhelp-intensity span{color:#222}.keyhelp-close{margin-top:16px;color:#666;font-size:11px;text-align:right;letter-spacing:.05em}.tour{position:fixed;top:0;right:0;bottom:0;left:0;z-index:10005;pointer-events:none;animation:sh-fadein .25s ease forwards}.tour[hidden]{display:none}.tour-bubble{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);background:linear-gradient(135deg,#3a7fff,#a855ff);color:#fff;border-radius:14px;padding:18px 22px 16px;max-width:360px;width:calc(100% - 40px);box-shadow:0 24px 70px #000000b3,0 0 0 2px #ffffff1f;pointer-events:auto;transition:top .3s ease,left .3s ease}.tour-step{font-size:11px;letter-spacing:.15em;opacity:.7;font-family:ui-monospace,monospace;margin-bottom:6px}.tour-title{font-size:18px;font-weight:800;margin-bottom:6px;letter-spacing:.01em}.tour-body{font-size:13.5px;line-height:1.5;opacity:.95}.tour-btns{margin-top:14px;display:flex;justify-content:flex-end;gap:8px}.tour-skip,.tour-next{background:#ffffff2e;color:#fff;border:1px solid rgba(255,255,255,.25);border-radius:8px;padding:6px 14px;font-weight:600;font-size:12.5px;cursor:pointer}.tour-next{background:#fff;color:#222;border-color:#fff}.tour-skip:hover{background:#ffffff4d}.tour-next:hover{filter:brightness(.95)}.tour-arrow{position:absolute;width:48px;height:48px;border-radius:50%;border:3px dashed #fff;transition:left .3s,top .3s;animation:tour-arrow-pulse 1.1s ease-in-out infinite;box-shadow:0 0 28px #ffffff8c}@keyframes tour-arrow-pulse{0%,to{transform:scale(1);opacity:.85}50%{transform:scale(1.18);opacity:1}}
