:root{--paper: #fbfaf7;--paper-deep: #f1eee6;--ink: #1b1d1c;--ink-soft: #5c605d;--ink-faint: #9a9e99;--rule: #c8443c;--g1: #3b4e8c;--g2: #5a7245;--g3: #b5822a;--g4: #7a4a6b;--cjk: "Hiragino Sans", "Yu Gothic", "Noto Sans CJK KR", "Noto Sans CJK JP", "Noto Sans CJK SC", "Malgun Gothic", "Microsoft YaHei", "PingFang SC", "Apple SD Gothic Neo", sans-serif;--mono: ui-monospace, "SF Mono", "Cascadia Mono", "Roboto Mono", Menlo, monospace;--serif: "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, serif;--sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--paper);color:var(--ink);font-family:var(--sans);-webkit-font-smoothing:antialiased;min-height:100vh;display:flex;justify-content:center;padding:20px 14px 64px}.app{width:100%;max-width:640px}.masthead{display:flex;align-items:baseline;justify-content:space-between;gap:12px;border-bottom:1px solid var(--rule);padding-bottom:10px;margin-bottom:14px}.wordmark{font-family:var(--serif);font-size:19px;letter-spacing:.22em;text-transform:uppercase;font-weight:600}.tagline{font-family:var(--mono);font-size:10px;color:var(--ink-faint);letter-spacing:.06em;text-align:right;line-height:1.4}.toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:18px;flex-wrap:wrap}.langs{display:flex;gap:0;border:1px solid var(--ink)}.lang{font-family:var(--cjk);font-size:14px;padding:7px 14px;background:transparent;border:0;border-right:1px solid var(--ink);cursor:pointer;color:var(--ink);line-height:1}.lang:last-child{border-right:0}.lang[aria-pressed=true]{background:var(--ink);color:var(--paper)}.lang:focus-visible{outline:2px solid var(--rule);outline-offset:2px}.lives{display:flex;align-items:center;gap:7px}.lives-label{font-family:var(--mono);font-size:10px;letter-spacing:.1em;color:var(--ink-faint);text-transform:uppercase}.pip{width:9px;height:9px;border:1px solid var(--ink);border-radius:50%;background:var(--ink)}.pip.spent{background:transparent;border-color:var(--ink-faint)}.solved-list{display:flex;flex-direction:column;gap:8px;margin-bottom:8px}.strip{border:1px solid;padding:10px 12px;animation:drop .32s ease-out}.strip[data-lvl="0"]{border-color:var(--g1);background:color-mix(in srgb,var(--g1) 8%,var(--paper))}.strip[data-lvl="1"]{border-color:var(--g2);background:color-mix(in srgb,var(--g2) 8%,var(--paper))}.strip[data-lvl="2"]{border-color:var(--g3);background:color-mix(in srgb,var(--g3) 10%,var(--paper))}.strip[data-lvl="3"]{border-color:var(--g4);background:color-mix(in srgb,var(--g4) 8%,var(--paper))}.strip.missed{border-style:dashed;opacity:.72}.strip-words{font-family:var(--cjk);font-size:19px;letter-spacing:.02em}.strip-words span{margin-right:14px;white-space:nowrap}.strip-cat{font-family:var(--serif);font-style:italic;font-size:13px;color:var(--ink-soft);margin-top:5px}.strip-cat b{font-style:normal;font-weight:600;color:var(--ink)}.strip-cat-en{display:block;font-size:11px;font-style:normal;color:var(--ink-soft);margin-top:2px}.strip-cat-gloss{display:block;font-size:11px;font-style:normal;margin-top:2px}@keyframes drop{0%{transform:translateY(-8px);opacity:0}to{transform:none;opacity:1}}.grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}.cell{position:relative;background:var(--paper-deep);border:1px solid color-mix(in srgb,var(--rule) 42%,transparent);min-height:92px;padding:6px 4px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;cursor:pointer;-webkit-user-select:none;user-select:none;transition:background .12s,transform .08s,border-color .12s;font-family:inherit;color:var(--ink);text-align:center}.cell:before,.cell:after{content:"";position:absolute;background:color-mix(in srgb,var(--rule) 22%,transparent);transition:opacity .15s;pointer-events:none}.cell:before{left:8%;right:8%;top:50%;height:1px}.cell:after{top:8%;bottom:8%;left:50%;width:1px}.cell:hover{border-color:color-mix(in srgb,var(--rule) 75%,transparent)}.cell:active{transform:scale(.975)}.cell:focus-visible{outline:2px solid var(--ink);outline-offset:2px}.cell[aria-pressed=true]{background:var(--ink);border-color:var(--ink);color:var(--paper)}.cell[aria-pressed=true]:before,.cell[aria-pressed=true]:after{opacity:0}.w{font-family:var(--cjk);font-size:clamp(15px,4.6vw,22px);line-height:1.15;font-weight:500}.w.w-wrap{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;line-height:1.1;max-height:2.2em}.ipa{font-family:var(--mono);font-size:clamp(8.5px,2.4vw,11px);color:var(--ink-soft);line-height:1.2;word-break:break-all}.cell[aria-pressed=true] .ipa{color:color-mix(in srgb,var(--paper) 72%,var(--ink))}.en{font-family:var(--serif);font-style:italic;font-size:clamp(9px,2.5vw,11px);color:var(--ink-soft);line-height:1.15}.cell[aria-pressed=true] .en{color:color-mix(in srgb,var(--paper) 72%,var(--ink))}.shake{animation:shake .42s}@keyframes shake{10%,90%{transform:translate(-2px)}20%,80%{transform:translate(4px)}30%,50%,70%{transform:translate(-6px)}40%,60%{transform:translate(6px)}}.controls{display:flex;gap:8px;margin-top:16px;flex-wrap:wrap}.btn{font-family:var(--sans);font-size:13px;letter-spacing:.04em;padding:10px 18px;border:1px solid var(--ink);background:transparent;color:var(--ink);cursor:pointer;border-radius:0}.btn:hover:not(:disabled){background:var(--ink);color:var(--paper)}.btn:disabled{opacity:.32;cursor:default}.btn.primary{background:var(--ink);color:var(--paper)}.btn.primary:hover:not(:disabled){background:var(--rule);border-color:var(--rule)}.btn:focus-visible{outline:2px solid var(--rule);outline-offset:2px}.spacer{flex:1}.say{font-family:var(--mono);font-size:11.5px;letter-spacing:.04em;color:var(--ink-soft);min-height:17px;margin-top:12px}.say.warn{color:var(--rule)}.notes{margin-top:34px;border-top:1px solid color-mix(in srgb,var(--ink) 18%,transparent);padding-top:12px}.notes summary{font-family:var(--mono);font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-faint);cursor:pointer}.notes p{font-size:12.5px;line-height:1.6;color:var(--ink-soft);max-width:56ch}.notes code{font-family:var(--mono);font-size:11.5px}@media(max-width:420px){.cell{min-height:78px}.strip-words{font-size:16px}}@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}.sign-in-page{position:fixed;top:0;right:0;bottom:0;left:0;overflow:hidden;background:var(--paper)}body.sign-in-active{overflow:hidden;padding:0;display:block}.sign-in-rain-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:0;background-image:linear-gradient(color-mix(in srgb,var(--rule) 18%,transparent) 1px,transparent 1px),linear-gradient(90deg,color-mix(in srgb,var(--rule) 18%,transparent) 1px,transparent 1px);background-size:44px 44px;opacity:.35}.sign-in-rain-layer{position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:1;overflow:hidden}.sign-in-shell{position:relative;z-index:2;min-height:100dvh;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:24px 14px 48px;pointer-events:none}.sign-in-hero{font-family:var(--mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-faint);margin:0 0 16px;text-align:center;pointer-events:none}.sign-in{max-width:420px;width:min(420px,94vw);margin:0;padding:24px;border:1px solid color-mix(in srgb,var(--ink) 18%,transparent);background:color-mix(in srgb,var(--paper-deep) 92%,transparent);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);pointer-events:auto;box-shadow:0 12px 40px color-mix(in srgb,var(--ink) 8%,transparent)}.rain-block{position:fixed;top:-120px;width:88px;min-height:88px;padding:6px 4px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;border:1px solid color-mix(in srgb,var(--rule) 55%,transparent);background:color-mix(in srgb,var(--paper-deep) 88%,transparent);cursor:pointer;pointer-events:auto;-webkit-user-select:none;user-select:none;transform:scale(var(--rain-scale, 1));animation:rain-fall var(--rain-duration, 4s) linear forwards;font:inherit;color:var(--ink);text-align:center}.rain-block:before,.rain-block:after{content:"";position:absolute;background:color-mix(in srgb,var(--rule) 22%,transparent);pointer-events:none}.rain-block:before{left:8%;right:8%;top:50%;height:1px}.rain-block:after{top:8%;bottom:8%;left:50%;width:1px}.rain-block--g1{border-color:color-mix(in srgb,var(--g1) 55%,transparent)}.rain-block--g2{border-color:color-mix(in srgb,var(--g2) 55%,transparent)}.rain-block--g3{border-color:color-mix(in srgb,var(--g3) 55%,transparent)}.rain-block__w{font-family:var(--cjk);font-size:clamp(16px,4vw,22px);line-height:1.15;font-weight:500}.rain-block__ipa{font-family:var(--mono);font-size:9px;color:var(--ink-soft);line-height:1.2;word-break:break-all}.rain-block:hover{border-color:color-mix(in srgb,var(--rule) 85%,transparent)}.rain-block.is-popping{animation:rain-pop .22s ease-out forwards}@keyframes rain-fall{0%{transform:translateY(0) scale(var(--rain-scale, 1))}to{transform:translateY(calc(100vh + 120px)) scale(var(--rain-scale, 1))}}@keyframes rain-pop{to{transform:scale(calc(var(--rain-scale, 1) * 1.35));opacity:0}}.sign-in{max-width:420px;margin:48px auto;padding:24px;border:1px solid color-mix(in srgb,var(--ink) 18%,transparent);background:var(--paper-deep)}.sign-in h1{font-family:var(--serif);font-size:22px;letter-spacing:.12em;text-transform:uppercase;margin:0 0 8px}.sign-in p{font-size:14px;line-height:1.55;color:var(--ink-soft);margin:0 0 16px}.sign-in label{display:block;font-family:var(--mono);font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-faint);margin-bottom:6px}.sign-in input{width:100%;padding:10px 12px;border:1px solid var(--ink);background:var(--paper);font-size:15px;margin-bottom:12px}.sign-in .error{color:var(--rule);font-size:13px;margin-top:8px}.account-bar{display:flex;justify-content:flex-end;gap:8px;margin-bottom:8px}.account-bar .btn-link{font-family:var(--mono);font-size:11px;background:none;border:0;color:var(--ink-soft);cursor:pointer;text-decoration:underline}.admin-page{max-width:720px;margin:32px auto;padding:0 16px}.admin-page h1{font-family:var(--serif);letter-spacing:.1em;text-transform:uppercase}.admin-table{width:100%;border-collapse:collapse;margin-top:16px;font-size:14px}.admin-table th,.admin-table td{border:1px solid color-mix(in srgb,var(--ink) 20%,transparent);padding:8px 10px;text-align:left}.admin-form{display:flex;gap:8px;flex-wrap:wrap;margin-top:16px}.admin-form input{flex:1;min-width:200px;padding:8px 10px;border:1px solid var(--ink)}
