:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--ink:#162334;--paper:#e0d5bf;--muted:#aba796;--gold:#c9b17e;--line:#79715f;--soft-line:#4e514f;--danger:#e3b2a2;color:var(--paper);background:var(--ink);font-synthesis:none;font-family:Yu Mincho,YuMincho,Hiragino Mincho ProN,Noto Serif JP,serif;font-weight:500;line-height:1.7}*{box-sizing:border-box}body{background:radial-gradient(ellipse at 45% 38%, #21304435, transparent 70%), var(--ink);min-width:320px;margin:0}body:before{content:"";pointer-events:none;opacity:.1;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 160 160' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.92' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' opacity='.32' filter='url(%23n)'/%3E%3C/svg%3E");position:fixed;inset:0}button,select,input{font:inherit;color:inherit}button,select{-webkit-tap-highlight-color:transparent}button{cursor:pointer;background:0 0;border:0;padding:8px 0}button:hover,a:hover{color:var(--gold)}button:focus-visible,select:focus-visible,a:focus-visible{outline:1px solid var(--gold);outline-offset:6px}a{color:var(--paper);text-underline-offset:5px}select{border:0;border-bottom:1px solid var(--soft-line);background:var(--ink);cursor:pointer;border-radius:0;padding:6px 24px 6px 0}option{background:var(--ink)}kbd,code,.roman-guide,.question-count,.frame-footer b,.progress-row>span,.result-score strong,.result-stats b,.score-cell{font-family:Consolas,SFMono-Regular,Liberation Mono,monospace;font-weight:400}kbd{border:1px solid var(--line);border-radius:3px;padding:0 8px;font-size:.86em;line-height:1.65;display:inline-block}.app-shell{max-width:1680px;margin:auto;padding:28px clamp(24px,4.7vw,78px) 20px;position:relative}.site-header{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;min-height:86px;padding-bottom:13px;display:flex}.brand{letter-spacing:.04em;padding:0;font-size:clamp(26px,3.1vw,48px);line-height:1.4}.header-actions{align-items:center;gap:27px;font-size:18px;display:flex}.sound-button{place-items:center;width:30px;display:grid}.dataset-nav{border-bottom:1px solid var(--line);align-items:stretch;gap:clamp(24px,4.3vw,66px);height:66px;margin:24px 0 35px;display:flex}.dataset-nav>button,.extra-datasets{white-space:nowrap;padding:6px 0 15px;font-size:clamp(17px,1.6vw,25px);position:relative}.dataset-nav .selected:after{content:"";background:var(--gold);height:2px;position:absolute;bottom:0;left:0;right:0}.extra-datasets{align-items:center;gap:14px;display:flex}.extra-datasets select{appearance:none;max-width:190px;font-size:inherit;background:0 0;border:0;padding:0}.practice-frame{border:1px solid var(--line);flex-direction:column;min-height:640px;padding:32px clamp(24px,3.3vw,51px) 0;display:flex;position:relative}.frame-heading{justify-content:space-between;align-items:center;gap:20px;display:flex}.frame-heading h1{letter-spacing:.015em;margin:0;font-size:clamp(20px,1.9vw,29px);font-weight:500}.question-count{white-space:nowrap;color:var(--muted);font-size:24px}.question-count span{color:var(--line);padding:0 10px}.progress-row{align-items:center;gap:20px;margin-top:5px;display:flex}.progress-track{background:var(--soft-line);flex:1;height:3px}.progress-track>div{background:var(--gold);height:100%;transition:width .15s}.progress-row>span{color:var(--muted);text-align:right;min-width:4ch;font-size:14px}.typing-content{text-align:center;flex-direction:column;flex:1;justify-content:center;align-items:center;min-height:416px;padding:50px 0 22px;display:flex}.prompt{letter-spacing:.035em;overflow-wrap:anywhere;max-width:100%;margin:0;font-size:clamp(27px,3.55vw,55px);font-weight:500;line-height:1.65}.prompt.long-prompt{font-size:clamp(25px,2.65vw,41px)}.quote-credits{width:100%;color:var(--muted);text-align:right;flex-wrap:wrap;justify-content:flex-end;align-items:baseline;gap:5px 24px;margin:7px 0 0;font-family:Yu Gothic,sans-serif;font-size:13px;line-height:1.65;display:flex}.quote-credits span{overflow-wrap:anywhere;max-width:100%}.quote-credits b{color:var(--paper);margin-right:7px;font-weight:400}.reading{color:var(--muted);overflow-wrap:anywhere;margin:20px 0 0;font-size:clamp(17px,2.05vw,32px);line-height:1.85}.translation{color:var(--muted);margin:20px 0 0;font-size:clamp(16px,1.4vw,22px)}.roman-guide{letter-spacing:.045em;overflow-wrap:anywhere;white-space:pre-wrap;max-width:100%;margin-top:36px;font-size:clamp(21px,2.65vw,41px);line-height:1.65}.scroll-window .typed{color:var(--gold)}.roman-guide .remaining{color:var(--paper)}.scroll-window{flex:none;width:100%;max-height:2lh;overflow:hidden}.scroll-content{white-space:pre-wrap;overflow-wrap:anywhere;transition:transform .18s ease-out;position:relative}.roman-guide .scroll-content{word-break:break-all}.typing-content.long-content{padding-top:28px;padding-bottom:16px}.long-content .prompt{font-size:clamp(26px,2.25vw,35px)}.long-content .reading{margin-top:14px;font-size:clamp(17px,1.5vw,23px)}.long-content .roman-guide{margin-top:20px;font-size:clamp(22px,2.05vw,32px)}.long-content .attribution{margin-top:16px}.typing-caret{background:var(--gold);pointer-events:none;width:1px;height:1.35em;margin-top:.15em;position:absolute}.display-controls{flex-wrap:wrap;gap:28px;display:flex}.display-controls button{white-space:nowrap;padding:0}.attribution{color:var(--muted);margin:28px 0 0;font-size:15px}.input-feedback{color:var(--danger);opacity:0;min-height:21px;margin:8px 0 0;font-family:Yu Gothic,sans-serif;font-size:12px}.input-feedback.flash{animation:.65s ease-out miss-feedback}@keyframes miss-feedback{0%,65%{opacity:1}to{opacity:0}}.frame-footer{border-top:1px solid var(--line);color:var(--muted);justify-content:space-between;align-items:center;gap:20px;margin-top:auto;padding:23px 0 26px;font-size:17px;display:flex}.frame-footer b{color:var(--paper);margin-left:18px;font-size:27px}.frame-footer small{padding-left:3px;font-size:17px}.practice-footer{border-top:1px solid var(--line);color:var(--muted);justify-content:space-between;align-items:center;margin-top:39px;padding-top:22px;font-size:17px;display:flex}.practice-footer kbd{margin-right:10px}.practice-footer>button{padding:0}.guide-toggle{margin-left:15px}.guide-toggle i{border:1px solid var(--line);vertical-align:-2px;width:16px;height:16px;margin-left:8px;display:inline-block}[aria-pressed=true] .guide-toggle i{background:var(--gold);box-shadow:inset 0 0 0 3px var(--ink)}.ready-content,.countdown-content{text-align:center;flex-direction:column;flex:1;justify-content:center;align-items:center;padding:34px 0 28px;display:flex}.eyebrow{letter-spacing:.05em;color:var(--muted);margin:0;font-size:16px}.ready-content h2{letter-spacing:.09em;margin:20px 0 12px;font-size:clamp(33px,4vw,60px);font-weight:500;line-height:1.6}.mobile-break{display:none}.session-summary{color:var(--muted);margin:6px 0 23px;font-size:17px}.session-summary span{color:var(--line);padding:0 10px}.start-button{border:1px solid var(--line);align-items:center;gap:20px;padding:12px 24px;font-size:20px;display:flex}.start-button:hover{border-color:var(--gold);background:#c9b17e0c}.start-button kbd{color:var(--gold)}.resume-button{text-underline-offset:4px;margin-top:8px;font-size:16px;text-decoration:underline}.resume-button span{color:var(--muted);font-size:13px}.ready-note{color:var(--muted);margin:22px 0 0;font-size:13px}.countdown-number{color:var(--gold);margin:8px 0;font-size:126px;font-weight:400;line-height:1.4}.countdown-content>p:last-child{color:var(--muted);font-size:14px}.result-content{text-align:center;padding:27px 0 22px}.result-score{justify-content:center;align-items:center;gap:27px;margin:8px 0 20px;display:flex}.result-score strong{color:var(--gold);font-size:clamp(68px,6.5vw,100px);line-height:1.2}.result-score>div{text-align:left}.result-level{font-size:32px}.result-score p{color:var(--muted);margin:2px 0 0;font-size:12px}.result-stats{grid-template-columns:repeat(4,1fr);max-width:760px;margin:0 auto 15px;display:grid}.result-stats>div{border-right:1px solid var(--soft-line)}.result-stats>div:last-child{border:0}.result-stats span{color:var(--muted);font-size:14px;display:block}.result-stats b{font-size:26px}.result-stats small{padding-left:6px;font-family:Yu Mincho,serif;font-size:12px}.weak-keys{color:var(--muted);margin:13px 0 9px;font-size:15px}.weak-keys>span{color:var(--paper);padding-left:15px}.record-caption,.sub-metric{color:var(--muted);margin:8px 0;font-size:13px}.next-button{border-bottom:1px solid var(--line);margin-top:6px;padding:10px 6px;font-size:18px}.next-button kbd{margin-right:12px}.next-button>span{padding-left:28px}.colophon{color:var(--muted);justify-content:space-between;gap:20px;padding-top:23px;font-size:11px;display:flex}.colophon button{text-underline-offset:4px;padding:0;text-decoration:underline}.document-frame{border:1px solid var(--line);min-height:630px;margin-top:46px;padding:40px clamp(22px,3.3vw,51px)}.document-heading{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:20px;margin-bottom:25px;padding-bottom:25px;display:flex}.document-heading h1{margin:8px 0 0;font-size:34px;font-weight:500}.history-controls{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:20px;margin-bottom:20px;display:flex}.history-controls>div{gap:20px;font-size:14px;display:flex}.history-table-wrap{overflow-x:auto}table{border-collapse:collapse;text-align:left;white-space:nowrap;width:100%;font-size:16px}th{color:var(--muted);font-size:13px;font-weight:500}td,th{border-bottom:1px solid var(--soft-line);padding:16px 18px 16px 0}td small{color:var(--muted);font-size:11px;display:block}.score-cell{color:var(--gold);font-size:25px}.empty-state{text-align:center;color:var(--muted);padding:90px 0;line-height:2.4}.document-note{color:var(--muted);max-width:900px;margin-top:35px;font-size:13px;line-height:2}.notice{color:var(--danger);padding:5px 0;font-family:Yu Gothic,sans-serif;font-size:13px}.about{max-width:1100px;margin-left:auto;margin-right:auto}.about h2{margin:34px 0 16px;font-size:25px;font-weight:500}.about p{color:var(--muted);font-size:16px;line-height:2.2}@media (width>=1600px){.practice-frame{min-height:680px}}@media (width<=850px){.app-shell{padding:18px 24px}.site-header{min-height:65px}.header-actions{gap:14px;font-size:15px}.dataset-nav{gap:26px;height:57px;margin:18px 0 24px;overflow-x:auto}.dataset-nav>button,.extra-datasets{font-size:17px}.practice-frame{min-height:600px;padding:25px 26px 0}.typing-content{min-height:370px;padding-top:36px}.roman-guide{margin-top:25px;font-size:25px}.frame-footer{padding:18px 0;font-size:14px}.frame-footer b{margin-left:10px;font-size:22px}.progress-row{margin-top:18px}.practice-footer{margin-top:27px;font-size:15px}}@media (width<=520px){.app-shell{padding:15px 16px}.brand{font-size:26px}.header-actions{gap:12px;font-size:13px}.sound-button{width:20px}.dataset-nav{gap:25px;margin-bottom:20px}.dataset-nav>button,.extra-datasets{font-size:16px}.practice-frame{min-height:570px;padding:20px 18px 0}.frame-heading h1,.question-count{font-size:18px}.question-count span{padding:0 5px}.prompt,.prompt.long-prompt{font-size:26px;line-height:1.8}.quote-credits{gap:2px 14px;margin-top:5px;font-size:11px}.reading{font-size:17px}.roman-guide{margin-top:25px;font-size:22px}.attribution{font-size:12px}.typing-content{min-height:377px;padding:35px 0 20px}.frame-footer{font-size:12px}.frame-footer b{font-size:20px}.frame-footer small{font-size:13px}.frame-footer>span:first-child{max-width:64%}.eyebrow{font-size:12px}.mobile-break{display:block}.ready-content h2{margin:20px 0;font-size:35px;line-height:1.6}.session-summary{font-size:12px}.session-summary span{padding:0 3px}.start-button{gap:14px;padding:10px 17px;font-size:17px}.ready-note{max-width:240px;font-size:11px}.result-score{gap:16px;margin-top:20px}.result-score p{font-size:9px}.result-level{font-size:24px}.result-stats{grid-template-columns:repeat(2,1fr);row-gap:14px}.result-stats>div:nth-child(2){border:0}.weak-keys{font-size:12px}.record-caption{font-size:11px}.colophon{flex-direction:column;align-items:flex-start;gap:10px;font-size:10px}.document-frame{margin-top:25px;padding:22px 18px}.document-heading{align-items:flex-start}.document-heading h1{font-size:25px}.document-heading>button{font-size:12px}.about p{font-size:15px}.practice-footer{flex-wrap:wrap;gap:17px}.display-controls{gap:22px;width:100%;font-size:14px}.guide-toggle{margin-left:8px}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition:none!important;animation:none!important}.input-feedback.flash{opacity:1}}
