:root{--bg:#f7f6f2;--card:#fff;--ink:#1d1d1b;--muted:#6b6a65;--line:#e4e2db;--accent:#2f5d50;--accent-ink:#fff;--accent-soft:#e3eee9;--good:#2e7d4f;--good-soft:#e5f3ea;--warn:#a5590b;--warn-soft:#fbf0e1;--bad:#b3261e;--bad-soft:#fbe9e7;--t1:#3d5a99;--t1-soft:#e7edf8;--t2:#8a4b93;--t2-soft:#f3e9f5;--radius:14px;--shadow:0 1px 2px #0000000a, 0 4px 16px #0000000a}@media (prefers-color-scheme:dark){:root{--bg:#141513;--card:#1d1f1c;--ink:#ecebe6;--muted:#a3a29b;--line:#2f312d;--accent:#7fbfa8;--accent-ink:#10201a;--accent-soft:#1f3029;--good:#7cc796;--good-soft:#1b2d21;--warn:#e5a75a;--warn-soft:#33281a;--bad:#f08b84;--bad-soft:#3a1f1d;--t1:#9db4ea;--t1-soft:#1e2638;--t2:#d7a4de;--t2-soft:#2e2131;--shadow:none}}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased;padding-bottom:calc(76px + env(safe-area-inset-bottom));font:16px/1.55 system-ui,-apple-system,Segoe UI,Roboto,sans-serif}a{color:var(--accent);text-decoration:none}h1,h2,h3{margin:0 0 .4em;line-height:1.25}h1{letter-spacing:-.01em;font-size:1.6rem}h2{font-size:1.2rem}h3{font-size:1.05rem}p{margin:0 0 .8em}.wrap{max-width:760px;margin:0 auto;padding:20px 16px 32px}.muted{color:var(--muted)}.small{font-size:.875rem}.row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.between{justify-content:space-between}.stack>*+*{margin-top:12px}.grid2,.grid4{grid-template-columns:repeat(2,1fr);gap:10px;display:grid}@media (min-width:640px){.grid4{grid-template-columns:repeat(4,1fr)}}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:16px}.stat{text-align:left}.stat b{font-variant-numeric:tabular-nums;font-size:1.6rem;display:block}.stat span{color:var(--muted);font-size:.85rem}.btn{appearance:none;border:1px solid var(--line);background:var(--card);color:var(--ink);font:inherit;cursor:pointer;border-radius:10px;min-height:44px;padding:10px 14px;font-weight:600}.btn:hover{border-color:var(--accent)}.btn.primary{background:var(--accent);color:var(--accent-ink);border-color:var(--accent)}.btn.good{background:var(--good-soft);color:var(--good);border-color:#0000}.btn.warn{background:var(--warn-soft);color:var(--warn);border-color:#0000}.btn.bad{background:var(--bad-soft);color:var(--bad);border-color:#0000}.btn.block{width:100%}.btn:disabled{opacity:.5;cursor:default}.chip{border:1px solid var(--line);background:var(--card);color:var(--ink);font:inherit;cursor:pointer;white-space:nowrap;border-radius:999px;align-items:center;gap:4px;padding:6px 12px;font-size:.875rem;display:inline-flex}.chip.on{background:var(--accent);color:var(--accent-ink);border-color:var(--accent)}.chips{scrollbar-width:none;gap:6px;padding-bottom:4px;display:flex;overflow-x:auto}.chips::-webkit-scrollbar{display:none}.tag{background:var(--accent-soft);color:var(--accent);border-radius:6px;padding:2px 8px;font-size:.75rem;font-weight:600;display:inline-block}.tag.t1{background:var(--t1-soft);color:var(--t1)}.tag.t2{background:var(--t2-soft);color:var(--t2)}.tag.both{background:var(--accent-soft);color:var(--accent)}textarea,input[type=text],input[type=search],select{width:100%;font:inherit;color:var(--ink);background:var(--card);border:1px solid var(--line);border-radius:10px;padding:12px}textarea{resize:vertical;min-height:110px}textarea:focus,input:focus,select:focus{outline:2px solid var(--accent);outline-offset:1px;border-color:#0000}.pattern{background:var(--accent-soft);color:var(--accent);overflow-wrap:anywhere;border-radius:8px;padding:8px 10px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.85rem}.model{border-left:3px solid var(--good);background:var(--good-soft);border-radius:0 8px 8px 0;padding:6px 12px}.issue{border-left:3px solid var(--warn);background:var(--warn-soft);border-radius:0 8px 8px 0;padding:6px 12px}.issue.bad{border-color:var(--bad);background:var(--bad-soft)}.ok{color:var(--good);font-weight:600}.no{color:var(--bad);font-weight:600}.wrong{text-decoration:line-through;-webkit-text-decoration-color:var(--bad);text-decoration-color:var(--bad);color:var(--muted)}.bar{background:var(--line);border-radius:99px;height:8px;overflow:hidden}.bar>i{background:var(--accent);border-radius:99px;height:100%;display:block}.nav{z-index:10;background:var(--card);border-top:1px solid var(--line);padding:6px 4px calc(6px + env(safe-area-inset-bottom));justify-content:space-around;display:flex;position:fixed;bottom:0;left:0;right:0}.nav a{color:var(--muted);border-radius:8px;flex-direction:column;align-items:center;gap:2px;min-width:52px;padding:4px 6px;font-size:.7rem;display:flex}.nav a.on{color:var(--accent);font-weight:700}.nav svg{width:22px;height:22px}details>summary{cursor:pointer;list-style:none}details>summary::-webkit-details-marker{display:none}table{border-collapse:collapse;width:100%;font-size:.9rem}th,td{text-align:left;border-bottom:1px solid var(--line);vertical-align:top;padding:8px 6px}th{color:var(--muted);font-size:.8rem;font-weight:600}.flash{text-align:center;cursor:pointer;flex-direction:column;justify-content:center;min-height:220px;display:flex}.kbd{color:var(--muted);font-size:.75rem}.btn.suggest{outline-offset:2px;outline:2px solid}.typetext{white-space:pre-wrap;overflow-wrap:anywhere;color:var(--muted);font-size:1.2rem;line-height:1.8}.typetext .okc{color:var(--ink)}.typetext .bad{color:var(--bad);background:var(--bad-soft);border-radius:2px}.typetext .miss{color:var(--bad);-webkit-text-decoration:underline wavy var(--bad);text-decoration:underline wavy var(--bad);text-underline-offset:4px}.typetext .cur{border-left:2px solid var(--accent);margin-left:-2px;animation:1s step-end infinite blink}.typetext .hl{background:var(--accent-soft);box-shadow:0 2px 0 var(--accent)}.typetext .okc.hl{color:var(--accent);font-weight:600}.hl-label{background:var(--accent-soft);color:var(--accent);border-radius:4px;padding:1px 6px;font-weight:600}.typein{min-height:64px;font-size:1.05rem}@keyframes blink{50%{border-color:#0000}}@media (max-width:420px){.nav a{min-width:0;padding:4px 2px;font-size:.62rem}.nav svg{width:20px;height:20px}}
