﻿@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=Noto+Sans+JP:wght@400;500;600;700;800&display=swap');

/* Shared tokens: warm paper, navy ink, and a quiet golden accent. */
:root{color-scheme:light;--bg:#f6f5f0;--paper:#fff;--text:#253448;--muted:#647083;--line:#d5d8db;--accent:#d4ab55;--accent-soft:#f6ecd6;--green:#253448;--light-green:#f6ecd6;--success:#337663;--danger:#ac4545;--mono:'SFMono-Regular',Consolas,'Liberation Mono',monospace;--sans:'DM Sans','Noto Sans JP',sans-serif;--radius:8px}
*{box-sizing:border-box}
[hidden]{display:none!important}
body{margin:0;background:var(--bg);color:var(--text);font-family:var(--sans);-webkit-font-smoothing:antialiased}
button,input,select,textarea{font:inherit}
button{border:0;color:inherit;background:none;cursor:pointer}
button:disabled{cursor:default;opacity:.42}
button,a,input,select,textarea{-webkit-tap-highlight-color:transparent}
button,a{touch-action:manipulation}
a{text-decoration:none;color:inherit}
svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;display:block}
[data-icon]{display:inline-flex;flex-shrink:0}
:focus-visible{outline:3px solid var(--accent);outline-offset:4px}
.skip-link{position:fixed;top:-100px;left:20px;padding:12px 20px;background:var(--text);color:#fff;z-index:20;border-radius:var(--radius)}
.skip-link:focus{top:12px}
.header{min-height:64px;padding:0 max(32px,calc((100vw - 1280px)/2));display:flex;align-items:center;gap:64px;border-bottom:1px solid var(--line)}
.brand{font-family:Georgia,'Times New Roman',serif;font-size:31px;font-weight:700;letter-spacing:-.8px;white-space:nowrap}
.brand-dot{color:var(--accent);font-size:38px;line-height:0}
.header nav{display:flex;gap:35px;align-self:stretch}
.nav-item{position:relative;display:flex;align-items:center;gap:8px;padding:0 2px;font-size:14px;color:var(--muted);white-space:nowrap}
.nav-item>[data-icon]{display:none}
.nav-item.active{color:var(--text);font-weight:700}
.nav-item.active:after{content:'';position:absolute;bottom:0;left:0;right:0;height:3px;background:var(--accent)}
.nav-item:hover,.help-button:hover{color:var(--text)}
.nav-count{font-size:12px;font-weight:400;color:var(--muted)}
.help-button{display:flex;align-items:center;gap:8px;margin-left:auto;color:var(--muted);font-size:13px;min-height:44px}
.help-button svg{width:17px;height:17px}
main{max-width:1344px;margin:auto;padding:0 32px;min-height:calc(100vh - 144px)}
main:focus{outline:none}
.intro{display:grid;grid-template-columns:1fr 1.12fr;align-items:center;gap:50px;padding:24px 0 18px}
h1{font-size:clamp(30px,3.15vw,46px);line-height:1.4;letter-spacing:-.035em;font-weight:800;margin:0}
h1>span{text-decoration:underline;text-decoration-color:var(--accent);text-decoration-thickness:4px;text-underline-offset:10px}
.intro-description{padding-top:14px}
.intro-description p{font-size:14px;line-height:1.9;color:var(--muted);margin:12px 0 0}
.intro-description .intro-phrase{font-family:Georgia,'Times New Roman',serif;font-size:28px;font-style:italic;color:#43536b;letter-spacing:-.6px;margin:0}
.mobile-break{display:none}
.settings-bar{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:8px 0 16px}
.select-label{display:flex;align-items:center;gap:16px;font-size:13px}
.select-label>span{white-space:nowrap}
.select-label select{color:var(--text);background:var(--paper);border:1px solid #c5cbd1;border-radius:5px;padding:10px 36px 10px 14px;min-height:42px;font-size:13px;min-width:200px;cursor:pointer}
.select-label select:disabled{opacity:.6;cursor:default}
.text-button{display:inline-flex;justify-content:center;align-items:center;gap:9px;padding:8px;min-height:40px;font-size:12px;color:var(--muted);border-radius:5px}
.text-button:hover:not(:disabled){color:var(--text);background:#ecece7}
.text-button svg{width:18px;height:18px}
.manage-button{color:#8a641f;font-size:13px;padding-right:0}
.manage-button>span{margin-left:8px;font-size:20px}
.practice-card{background:var(--paper);border:1px solid #c9cfd4;border-radius:var(--radius);overflow:hidden}
.session-top{margin:0 28px;padding:20px 0 17px;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:center;gap:16px}
.session-label{display:flex;align-items:center;gap:9px;font-size:15px;font-weight:600}
.status-dot,.tiny-dot{display:inline-block;width:6px;height:6px;background:var(--accent);border-radius:50%;flex-shrink:0}
.translation-toggle{display:flex;align-items:center;flex-direction:row-reverse;gap:10px;position:relative;font-size:12px;color:var(--muted);cursor:pointer;min-height:24px}
.translation-toggle input{position:absolute;opacity:0;right:0;width:36px;height:24px;margin:0;cursor:pointer}
.switch{width:36px;height:21px;padding:3px;background:#939ca8;border-radius:20px;transition:background .18s}
.switch:after{content:'';display:block;width:15px;height:15px;border-radius:50%;background:#fff;transition:transform .18s}
.translation-toggle input:checked+.switch{background:#ae812c}
.translation-toggle input:checked+.switch:after{transform:translateX(15px)}
.translation-toggle input:focus-visible+.switch{outline:3px solid var(--text);outline-offset:4px}
.metrics{display:grid;grid-template-columns:repeat(4,1fr);padding:16px 28px}
.metric{padding:0 36px;border-left:1px solid var(--line)}
.metric:first-child{padding-left:0;border:0}
.metric-label{font-size:12px;color:var(--muted)}
.metric>div{display:flex;align-items:baseline;gap:9px;margin-top:5px}
.metric strong{font-size:29px;line-height:1.25;font-weight:500;font-variant-numeric:tabular-nums;letter-spacing:-.8px}
.time-metric strong{font-family:var(--mono);font-size:27px}
.unit{font-size:12px;color:var(--muted)}
.practice-rule{margin:0 28px;border-top:1px solid var(--line)}
.typing-area{padding:24px 28px 17px;position:relative;min-height:201px;cursor:text}
.word-board{display:flex;flex-wrap:wrap;gap:22px 30px;align-content:flex-start;min-height:160px}
.word{display:flex;flex-direction:column;align-items:flex-start;gap:5px;padding-bottom:5px;max-width:100%}
.word-en{font-family:var(--mono);font-size:28px;line-height:1.3;color:#7b8593;overflow-wrap:anywhere}
.word-ja{font-size:13px;line-height:1.6;min-height:19px;color:#6d7786;max-width:280px;overflow-wrap:anywhere}
.word.current .word-en{color:var(--text);box-shadow:0 3px 0 var(--accent)}
.word.current .word-ja{color:var(--text)}
.word.done .word-en,.character.correct{color:var(--success)}
.word.failed .word-en{color:var(--danger)}
.character.wrong{color:var(--danger);background:#fbe9e7;border-radius:2px}
.character.caret{position:relative}
.character.caret:before{content:'';position:absolute;left:-2px;top:1px;width:2px;height:29px;background:#a77b28;animation:blink 1.1s steps(2,start) infinite}
.end-caret{display:inline-block;width:0}
.hide-translations .word-ja{visibility:hidden}
.pause-overlay{position:absolute;inset:0;z-index:2;display:flex;flex-direction:column;align-items:center;justify-content:center;background:#fffffff2;backdrop-filter:blur(7px);padding:24px;cursor:default}
.pause-overlay>[data-icon]{color:#9a732b}
.pause-overlay h2{margin:14px 0 0}
.pause-overlay p{font-size:13px;color:var(--muted);margin:12px 0 20px}
.input-row{display:flex;align-items:center;gap:14px;padding:13px 16px;min-height:50px;margin:0 28px;border:1px solid #bdc6d0;border-radius:5px;background:#fcfcfb}
.input-row>[data-icon]{color:#54657b;border-right:1px solid var(--line);padding-right:14px}
.input-row input{width:100%;min-width:0;border:0;outline:none;background:transparent;color:var(--text);font-family:var(--mono);font-size:15px;padding:0}
.input-row:focus-within{border-color:#8f6b26;box-shadow:0 0 0 3px var(--accent-soft)}
.input-row input::placeholder{font-family:var(--sans);color:#717c8a;font-size:13px}
#input-message{font-size:11px;color:var(--muted);white-space:nowrap;border-left:1px solid var(--line);padding-left:16px}
.card-bottom{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:10px 24px 12px 28px}
.card-bottom p{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin:0;color:var(--muted);font-size:12px}
.card-bottom p>span{margin:0 4px}
kbd{font-family:var(--mono);font-size:11px;padding:3px 6px;border:1px solid #ccd1d6;border-bottom-width:2px;border-radius:4px;background:#fafafa;color:#43536b}
.session-actions{display:flex;align-items:center;gap:8px;flex-shrink:0}
#finish{color:var(--text);font-weight:600;background:var(--accent-soft);padding-inline:13px}
.below-card{display:flex;align-items:center;gap:24px;justify-content:space-between;padding:16px 0 20px}
.below-card p{font-size:11px;line-height:1.9;margin:0;color:var(--muted)}
.below-card strong{color:var(--text);font-size:12px;font-weight:600}
.local-label{display:flex;align-items:center;gap:7px;color:var(--muted);font-size:11px;white-space:nowrap}
.local-label .tiny-dot{background:#6f8176;width:5px;height:5px}
.storage-warning{color:var(--danger)}
.keyboard-section{display:grid;grid-template-columns:1fr 1.6fr 1fr;align-items:center;gap:30px;border-top:1px solid var(--line);padding:14px 0 14px}
.keyboard-heading{display:flex;flex-direction:column;gap:8px;color:var(--muted);font-size:11px}
.keyboard-heading strong{font-size:13px;color:var(--text);font-weight:600}
.keyboard-input-note{font-size:10px}
.keyboard-guide{max-width:490px;width:100%}
.keyboard{display:flex;flex-direction:column;align-items:center;gap:5px}
.key-row{display:flex;justify-content:center;width:100%;gap:5px}
.key{display:flex;align-items:center;justify-content:center;width:34px;height:22px;border:1px solid #c8cdd1;border-bottom-width:2px;border-radius:4px;background:#fafaf8;color:#657187;font-family:var(--mono);font-size:10px}
.key.wide{width:48px;font-size:8px}
.key.space{width:164px;height:20px;font-size:9px}
.key.next{background:var(--accent);border-color:#a87f30;color:#253448}
.keyboard-legend{display:flex;align-items:center;justify-content:center;gap:6px;font-size:10px;color:var(--muted);margin-top:9px}
footer{display:flex;align-items:center;gap:22px;padding:21px max(32px,calc((100vw - 1280px)/2));border-top:1px solid var(--line);color:var(--muted);font-size:11px}
.footer-brand{font-family:Georgia,'Times New Roman',serif;font-size:22px;font-weight:700;letter-spacing:-.6px;color:var(--text)}
.footer-brand>span{color:#a77b28}
.footer-right{margin-left:auto;font-size:9px;letter-spacing:2.5px}
.primary{display:inline-flex;align-items:center;justify-content:center;gap:24px;min-height:44px;padding:12px 22px;border:1px solid var(--text);border-radius:5px;background:var(--text);color:#fff;font-size:13px;font-weight:500}
.primary:hover:not(:disabled){background:#3c4f67}
.eyebrow{font-size:10px;letter-spacing:2px;color:#8a641f;font-weight:600}
h2{font-size:22px;line-height:1.6;font-weight:600}
.results{padding:28px;margin:8px 0 28px;background:var(--paper);border:1px solid var(--line);border-radius:var(--radius)}
.section-heading{display:flex;align-items:center;justify-content:space-between;gap:24px;margin-bottom:24px}
.section-heading h2{margin:10px 0}
.section-heading p{font-size:13px;line-height:1.9;color:var(--muted);margin:0}
.review-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0 24px}
.review-word{display:flex;justify-content:space-between;align-items:center;gap:12px;min-width:0;padding:18px 0;border-bottom:1px solid var(--line)}
.review-word>div{min-width:0}
.review-word strong{font-family:var(--mono);font-size:18px;font-weight:500;overflow-wrap:anywhere}
.review-word p{font-size:12px;line-height:1.7;color:var(--muted);margin:6px 0 0;overflow-wrap:anywhere}
.review-word .mistake{color:var(--danger);font-size:11px}
.save-button{display:flex;align-items:center;justify-content:center;padding:9px;width:38px;min-height:40px;flex-shrink:0;color:#687a8e;border-radius:5px}
.save-button:hover{background:var(--accent-soft)}
.save-button.saved{color:#85601f;background:var(--accent-soft)}
.save-button.saved svg{fill:#ebd19a}
.secondary-view{padding:44px 0 60px}
.secondary-view h1{font-size:clamp(28px,3.1vw,42px)}
.view-description{color:var(--muted);font-size:14px;line-height:1.9;margin:18px 0 0}
.collection-toolbar{display:flex;align-items:center;gap:16px;margin:30px 0 18px;color:var(--muted);font-size:13px}
.collection-toolbar>span{margin-left:auto;font-variant-numeric:tabular-nums;white-space:nowrap}
.search-box{display:flex;align-items:center;gap:12px;border:1px solid #c5cbd1;border-radius:5px;background:var(--paper);min-height:44px;padding:10px 14px;width:min(48%,580px)}
.search-box:focus-within{outline:3px solid var(--accent-soft);border-color:#8f6b26}
.search-box input{width:100%;min-width:0;border:0;outline:none;background:transparent;font-size:13px;color:var(--text)}
.search-box input::placeholder{color:var(--muted)}
.empty-state{padding:56px 24px;text-align:center;grid-column:1/-1;color:var(--muted);font-size:13px;line-height:2}
.empty-state strong{display:block;font-size:22px;font-weight:600;color:var(--text);margin:14px 0 8px}
.empty-state .primary{margin-top:22px}
#word-board>.empty-state{width:100%;padding:20px}
.history-summary{display:grid;grid-template-columns:repeat(3,1fr);margin:46px 0 0;padding:0 0 32px;border-bottom:1px solid var(--line)}
.summary-card{text-align:center;border-right:1px solid var(--line);font-size:13px;color:var(--muted);padding:0 20px}
.summary-card:last-child{border:0}
.summary-card strong{display:block;font-size:42px;font-weight:500;letter-spacing:-1px;color:var(--text);margin-top:14px;font-variant-numeric:tabular-nums}
.summary-card small{font-size:14px;letter-spacing:0;color:var(--muted)}
#history-list{margin-top:28px}
#history-list>.empty-state{padding:40px 24px 58px}
.history-empty-icon{display:flex;align-items:center;justify-content:center;width:82px;height:82px;border:1.5px solid var(--text);border-radius:50%;margin:0 auto 24px}
.history-empty-icon svg{width:38px;height:38px;stroke-width:1.25}
.history-row{display:grid;grid-template-columns:1.5fr repeat(3,1fr);gap:20px;padding:24px 10px;border-bottom:1px solid var(--line);font-size:13px}
.history-row>div:not(:first-child){text-align:right}
.history-row strong{font-size:20px;font-weight:500}
.history-row small{display:block;font-size:11px;color:var(--muted);margin-top:7px}
dialog{max-width:620px;width:calc(100% - 40px);max-height:calc(100dvh - 48px);overflow:auto;border:1px solid #c4cbd2;border-radius:12px;padding:34px;color:var(--text);background:var(--paper);box-shadow:0 24px 80px #1d2b4333}
dialog::backdrop{background:#25344866;backdrop-filter:blur(4px)}
dialog h2{margin:16px 0 10px;padding-right:14px}
dialog p,dialog li{font-size:13px;line-height:1.95;color:var(--muted)}
dialog ol{padding-left:20px}
dialog li{padding-left:5px;margin-bottom:13px}
.dialog-close{position:absolute;right:10px;top:8px;display:flex;align-items:center;justify-content:center;width:44px;height:44px;font-size:26px;line-height:1;color:var(--muted);border-radius:5px}
.dialog-close:hover{background:var(--bg)}
.help-note{padding-top:16px;border-top:1px solid var(--line);font-size:11px}
.toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);z-index:10;padding:14px 22px;max-width:calc(100vw - 32px);width:max-content;background:var(--text);color:#fff;font-size:12px;line-height:1.8;border-radius:7px;box-shadow:0 6px 24px #25344820}
@keyframes blink{to{opacity:0}}
@media(max-width:1000px){
 .header{gap:36px;padding-inline:28px}.header nav{gap:24px}main{padding-inline:28px}
 .intro{gap:32px;grid-template-columns:1fr 1fr}h1{font-size:36px}.intro-description .intro-phrase{font-size:25px}.intro-description p{font-size:12px}
 .metric{padding-inline:24px}.word-board{gap:20px 26px}.word-en{font-size:24px}
 .keyboard-section{grid-template-columns:1fr 1.65fr}.review-grid{grid-template-columns:repeat(2,minmax(0,1fr))}footer{padding-inline:28px}
}
@media(max-width:700px){
 .header{flex-wrap:wrap;gap:0;padding:15px 20px 0;min-height:106px}.brand{font-size:28px}.brand-dot{font-size:32px}.help-button{font-size:12px;min-height:32px}
 .header nav{width:100%;order:3;justify-content:space-between;gap:18px;min-height:46px;margin-top:7px}.nav-item{font-size:12px;padding:0 4px;gap:5px}.nav-count{font-size:10px}
 main{padding:0 20px;min-height:calc(100vh - 177px)}.intro{display:block;padding:24px 0 18px}h1{font-size:30px;line-height:1.4;letter-spacing:-.04em}
 h1>span{text-underline-offset:8px;text-decoration-thickness:3px}.intro-description{padding-top:12px}.intro-description .intro-phrase{font-size:19px;line-height:1.4}.intro-description p{font-size:12px;line-height:1.8;margin-top:4px}.mobile-break{display:block}
 .settings-bar{flex-wrap:wrap;gap:6px;padding:0 0 13px}.settings-bar .select-label{justify-content:space-between;width:100%;gap:12px;font-size:12px}
 .select-label select{min-width:0;font-size:12px;min-height:40px;padding:9px 25px 9px 11px}.settings-bar select{width:58%}.manage-button{margin-left:auto;font-size:11px;min-height:32px;padding-block:4px}
 .session-top{margin:0 17px;padding:16px 0;gap:10px;align-items:flex-start}.session-label{font-size:11px;font-weight:500;gap:6px;min-height:24px}
 .translation-toggle{font-size:10px;gap:7px;flex-shrink:0}.switch{width:31px;height:19px}.switch:after{width:13px;height:13px}.translation-toggle input:checked+.switch:after{transform:translateX(12px)}
 .metrics{padding:18px 17px}.metric{padding:0 12px}.metric:last-child{padding-right:0}.metric-label{font-size:9px;white-space:nowrap}.metric>div{gap:4px;margin-top:7px;flex-wrap:wrap;row-gap:2px}.metric strong{font-size:24px}.time-metric strong{font-size:22px}.unit{font-size:9px}
 .practice-rule{margin:0 17px}.typing-area{padding:23px 17px 20px;min-height:205px}.word-board{min-height:162px;gap:21px 23px}.word-en{font-size:24px}.word-ja{font-size:11px;max-width:100%}.character.caret:before{height:27px}
 .input-row{margin:0 17px;padding:13px 11px;gap:11px}.input-row>[data-icon]{padding-right:10px}.input-row input{font-size:16px}.input-row input::placeholder{font-size:10px}#input-message{display:none}
 .card-bottom{padding:7px 12px 12px 17px;flex-wrap:wrap;gap:3px}.card-bottom p{font-size:9px;gap:5px}kbd{font-size:9px;padding:2px 4px}.session-actions{margin-left:auto;gap:2px}.text-button{font-size:10px;padding-inline:6px}
 .below-card{align-items:flex-start;flex-direction:column;gap:10px;padding:16px 0 20px}.below-card p{font-size:10px}.below-card strong{font-size:11px}.local-label{font-size:10px}
 .keyboard-section{display:flex;flex-direction:column;gap:18px;padding:20px 0}.keyboard-heading{width:100%;display:grid;grid-template-columns:1fr 1fr;gap:8px;font-size:10px}.keyboard-heading strong{font-size:11px}.keyboard-heading>span{text-align:right}.keyboard-input-note{display:none}
 .keyboard-guide{max-width:390px}.key-row{gap:4px}.key{width:8.7%;height:25px}.key.wide{width:13%}.keyboard-legend{font-size:9px}
 .secondary-view{padding:30px 0 44px}.secondary-view h1{font-size:28px;line-height:1.6}.view-description{font-size:12px;margin-top:17px}
 .section-heading{align-items:flex-start;flex-direction:column;gap:16px}.section-heading h2{font-size:19px}.section-heading p{font-size:12px}.results{padding:20px}.review-grid{grid-template-columns:1fr}.review-word strong{font-size:17px}
 .collection-toolbar{flex-wrap:wrap;gap:12px;margin-top:24px}.search-box{width:100%}.collection-toolbar .select-label{max-width:70%}.collection-toolbar .select-label select{width:100%}.collection-toolbar>span{font-size:12px}
 .history-summary{display:flex;flex-direction:column;gap:0;padding-bottom:0;margin-top:28px}.summary-card{border:0;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:center;text-align:left;padding:18px 4px;font-size:12px}
 .summary-card strong{font-size:30px;margin:0}.summary-card small{font-size:12px}#history-list>.empty-state{padding:20px 8px 35px}.empty-state strong{font-size:19px}.empty-state{font-size:12px;padding-inline:12px}
 .history-empty-icon{width:65px;height:65px;margin-bottom:18px}.history-empty-icon svg{width:30px;height:30px}.history-row{gap:10px;font-size:10px;padding:20px 0;grid-template-columns:1.5fr 1fr 1fr 1fr}.history-row strong{font-size:15px}.history-row small{font-size:9px;line-height:1.7}
 footer{padding:19px 20px;gap:12px;flex-wrap:wrap}.footer-brand{font-size:20px}footer>span:nth-child(2){display:none}.footer-right{font-size:8px;letter-spacing:1.6px}
 dialog{padding:28px 22px;width:calc(100% - 28px);max-height:calc(100dvh - 28px)}dialog h2{font-size:20px}dialog p,dialog li{font-size:12px}.pause-overlay h2{font-size:18px}.pause-overlay p{font-size:11px}
}
@media(max-width:360px){main{padding-inline:14px}.header{padding-inline:14px}h1{font-size:29px}.metric{padding-inline:8px}.metric strong{font-size:22px}.metric-label{font-size:8px}.session-top{flex-wrap:wrap}.translation-toggle{margin-left:auto}.session-actions{gap:0}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}
