@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700;800&family=Noto+Sans+JP:wght@400;500;600;700;800&display=swap');
:root{color-scheme:light;--bg:#f6f5f0;--paper:#fffefa;--ink:#192724;--muted:#66746e;--line:#e4e7df;--deep:#143d33;--mint:#e4efe6;--teal:#357764;--rose:#a25c44;--pink:#faf0ea;--shadow:0 12px 45px rgba(27,51,39,.045);font-family:'DM Sans','Noto Sans JP',-apple-system,BlinkMacSystemFont,'Helvetica Neue',sans-serif;font-synthesis:none}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--ink);font-size:15px;line-height:1.65;min-width:320px;-webkit-tap-highlight-color:transparent}
button,input,textarea{font:inherit}
button{cursor:pointer;touch-action:manipulation;user-select:none;-webkit-user-select:none}
button:focus-visible,input:focus-visible,textarea:focus-visible,summary:focus-visible{outline:3px solid #6aaa91;outline-offset:3px}
button:disabled{cursor:not-allowed;opacity:.4}
a{color:inherit}
#app{min-height:100dvh}
.boot{padding:42vh 1rem;text-align:center;color:var(--muted)}
.shell{max-width:1120px;margin:0 auto;padding:0 30px 90px}
.site-header{height:91px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid #e4e6df;gap:16px}
.brand{display:flex;align-items:center;gap:10px;padding:7px 0;border:0;background:none;color:var(--ink);text-decoration:none;font-family:'DM Sans',sans-serif}
.brand-mark{display:grid;place-items:center;width:36px;height:36px;border-radius:11px;background:var(--deep);color:#e9f3e8;font-size:22px;font-weight:800;line-height:1}
.brand-name{font-weight:800;letter-spacing:-.055em;font-size:24px}
.header-actions{display:flex;align-items:center;gap:8px}
.header-link{background:none;border:0;border-radius:8px;padding:11px 13px;font-weight:700;color:#63716a;font-size:13px;white-space:nowrap}
.header-link:hover,.header-link.active{background:#e9eee7;color:var(--deep)}
.icon-button{width:40px;height:40px;display:grid;place-items:center;border:1px solid var(--line);background:var(--paper);border-radius:12px;color:var(--ink);font-size:19px}
.eyebrow{font-size:11px;font-weight:800;letter-spacing:.13em;text-transform:uppercase;color:var(--teal)}
.page-head{margin:48px 0 28px;display:flex;justify-content:space-between;align-items:end;gap:18px}
.page-head h1{font-size:clamp(30px,4vw,43px);letter-spacing:-.06em;line-height:1.3;margin:9px 0 9px;font-weight:800}
.page-sub{color:var(--muted);font-size:14px;margin:0}
.primary-btn{display:inline-flex;align-items:center;justify-content:center;gap:14px;padding:15px 22px;border:1px solid var(--deep);background:var(--deep);color:#fff;border-radius:12px;font-weight:800;min-height:54px;text-decoration:none;transition:background .12s,transform .12s}
.primary-btn:hover{background:#1f5546}
.primary-btn:active,.secondary-btn:active,.grade:active,.row-action:active{transform:translateY(1px)}
.secondary-btn{display:inline-flex;justify-content:center;align-items:center;gap:9px;padding:12px 17px;border:1px solid #c8d7ca;background:#fffefa;color:var(--deep);border-radius:12px;font-weight:800;min-height:48px}
.plain-btn{border:0;background:none;color:var(--deep);font-size:13px;font-weight:800;padding:10px 4px}
.ghost-btn{background:none;border:0;border-radius:9px;padding:10px 12px;color:#718078;font-weight:700;font-size:13px}
.ghost-btn:hover{background:#eaece5;color:var(--deep)}
.masthead{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(260px,.65fr);gap:22px;margin:31px 0}
.hero{background:#e5eee6;min-height:312px;position:relative;overflow:hidden;border-radius:20px;padding:39px 42px;display:flex;flex-direction:column;align-items:start}
.hero:after{content:"";position:absolute;border:36px solid #d4e4d7;opacity:.7;width:245px;height:245px;border-radius:50%;right:-90px;top:-100px;pointer-events:none}
.mobile-break{display:none}
.hero h1{font-size:clamp(31px,3.1vw,43px);line-height:1.4;letter-spacing:-.065em;font-weight:800;margin:16px 0 7px;position:relative;z-index:1}
.hero p{font-size:14px;color:#52675e;margin:0 0 28px;position:relative;z-index:1;max-width:430px}
.hero .primary-btn{position:relative;z-index:1}
.hero .eyebrow{color:#35705b}
.hero-secondary{background:var(--paper);border:1px solid var(--line);border-radius:20px;padding:29px 29px 23px;display:flex;flex-direction:column;justify-content:space-between;box-shadow:var(--shadow)}
.hero-secondary h2{font-size:23px;letter-spacing:-.055em;line-height:1.35;margin:13px 0 3px}
.hero-secondary p{font-size:13px;color:var(--muted);margin:5px 0 12px}
.hero-secondary .secondary-btn{width:100%}
.stats-strip{display:grid;grid-template-columns:repeat(3,1fr);border-block:1px solid var(--line);margin:22px 0 40px}
.stat{padding:21px 0 19px 25px;border-right:1px solid var(--line)}
.stat:first-child{padding-left:0}
.stat:last-child{border-right:0}
.stat-number{font-family:'DM Sans',sans-serif;font-weight:800;font-size:31px;letter-spacing:-.045em;line-height:1.2}
.stat-label{font-size:12px;color:var(--muted);margin-top:5px}
.section-title{display:flex;justify-content:space-between;gap:15px;align-items:center;margin:41px 0 17px}
.section-title h2{font-size:21px;letter-spacing:-.05em;margin:0}
.series-list{border-top:1px solid var(--line)}
.series-row{display:grid;grid-template-columns:minmax(0,1fr) 90px 30px;gap:12px;align-items:center;background:none;border:0;border-bottom:1px solid var(--line);width:100%;text-align:left;padding:17px 7px;color:var(--ink);min-height:72px}
.series-row:hover,.pack-row:hover{background:#edf0e9}
.series-row strong{font-size:16px;font-weight:700}
.series-row .tiny{font-size:11px;color:var(--muted);display:block;margin-top:2px}
.series-count{text-align:right;color:var(--muted);font-size:12px}
.arrow{font-size:21px;font-family:sans-serif;color:#8a9990;text-align:right}
.bottom-note{color:#879189;font-size:12px;margin-top:21px}
.resume-banner{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-top:28px;background:#fffefa;border:1px solid #b6d1bd;border-radius:14px;padding:14px 20px}
.resume-banner p{margin:0;font-weight:700}
.resume-banner small{color:var(--muted)}
.resume-banner .secondary-btn{min-height:41px}
.library-head{display:flex;justify-content:space-between;align-items:start;gap:15px;margin:43px 0 23px}
.library-head h1{font-size:36px;letter-spacing:-.06em;margin:8px 0}
.library-toolbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:16px 0 25px}
.tabs{display:flex;gap:3px;padding:4px;background:#e9ece5;border-radius:12px}
.tab{padding:10px 15px;border:0;background:transparent;border-radius:9px;font-weight:800;color:#69786e;font-size:13px}
.tab.selected{background:#fffefa;color:var(--deep);box-shadow:0 2px 7px rgba(0,0,0,.045)}
.search{background:#fffefa;border:1px solid var(--line);border-radius:11px;padding:11px 14px;min-width:220px;flex:1;max-width:400px;color:var(--ink);outline:0;font-size:14px}
.search:focus{border-color:#8bbba0}
.series-heading{font-size:18px;font-weight:800;letter-spacing:-.025em;margin:28px 0 11px}
.pack-list{border-top:1px solid var(--line)}
.pack-row{display:flex;align-items:center;justify-content:space-between;gap:15px;width:100%;padding:16px 10px;border:0;border-bottom:1px solid var(--line);text-align:left;background:none}
.pack-row strong{font-size:15px;color:var(--ink)}
.pack-row small{font-size:12px;color:var(--muted);display:block;margin-top:3px}
.pack-row-right{display:flex;align-items:center;gap:12px;color:var(--muted);font-size:13px;white-space:nowrap}
.filter-hint{color:var(--muted);font-size:12px}
.pack-title{margin-top:36px}
.pack-title h1{font-size:34px;line-height:1.3;letter-spacing:-.05em;margin:8px 0}
.pack-actions{display:flex;gap:9px;flex-wrap:wrap;margin:26px 0 24px}
.practice-preview{border-top:1px solid var(--line)}
.preview-row{display:grid;grid-template-columns:28px minmax(0,1fr) auto;gap:14px;padding:14px 7px;border-bottom:1px solid var(--line);align-items:center}
.preview-n{color:#8a9990;font-family:'DM Sans';font-size:12px;font-weight:700}
.preview-pattern{font-size:15px;font-weight:800;letter-spacing:-.01em;color:#263d36}
.preview-meaning{font-size:12px;color:var(--muted);margin-top:1px}
.preview-row button{font-size:12px;min-height:36px;padding:5px 13px;border-radius:9px;border:1px solid #cbdacf;background:var(--paper);color:var(--deep);font-weight:800}
.practice-layout{max-width:790px;margin:0 auto;min-height:calc(100dvh - 92px);display:flex;flex-direction:column;padding-bottom:calc(22px + env(safe-area-inset-bottom))}
.practice-top{padding-top:28px;display:flex;justify-content:space-between;align-items:center;gap:15px}
.practice-meta{color:var(--muted);font-size:12px;font-weight:700}
.practice-track{height:4px;background:#e1e8df;border-radius:10px;overflow:hidden;margin:18px 0 19px}
.practice-track>div{height:100%;background:#508970;border-radius:10px;transition:width .24s}
.practice-center{display:flex;flex-direction:column;flex:1;justify-content:center;padding:18px 0 40px}
.prompt-panel{background:var(--paper);border:1px solid var(--line);box-shadow:var(--shadow);border-radius:20px;padding:clamp(25px,4.7vw,55px);min-height:305px;display:flex;flex-direction:column;justify-content:center}
.prompt-scene{color:#586b60;font-size:13px;line-height:1.6}
.prompt-scene b{display:inline-block;font-size:10px;letter-spacing:.07em;margin-right:12px;color:var(--teal)}
.prompt-jp{font-weight:800;font-size:clamp(27px,4.5vw,41px);line-height:1.55;letter-spacing:-.055em;margin:29px 0 20px;overflow-wrap:anywhere}
.prompt-instruction{font-size:13px;color:#97a39b;margin-top:16px}
.hint-btn{margin-top:15px;padding:9px 0;border:0;background:none;text-align:left;color:#4a806a;font-size:13px;font-weight:800;align-self:flex-start}
.hint-reveal{display:inline-block;margin-top:12px;background:#e9f3e9;color:#254b3a;border-radius:9px;padding:7px 13px;font-size:14px;font-weight:800}
.answer-zone{margin-top:15px;animation:appear .18s ease-out}
.answer-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:0 0 8px}
.answer-label{font-size:11px;color:#61766a;font-weight:800;letter-spacing:.1em}
.english{font-family:'DM Sans','Noto Sans JP',sans-serif;color:#1a4a3c;font-size:clamp(23px,3.4vw,32px);line-height:1.5;font-weight:800;letter-spacing:-.025em}
.pattern{font-size:13px;color:#618072;font-weight:700;margin-top:14px}
.speech-btn{flex:none;min-width:46px;min-height:46px;border:1px solid #cce2d0;border-radius:11px;background:#e8f3e8;font-size:20px;color:#205e44}
.answer-divider{height:1px;background:var(--line);margin:24px 0 18px}
details.details{margin-top:16px;border-top:1px solid var(--line);padding-top:12px;color:#465d53}
details.details summary{color:#3f7160;font-weight:800;font-size:13px;cursor:pointer;list-style:none}
details.details summary::-webkit-details-marker{display:none}
details.details summary:after{content:"＋";float:right;font-size:17px}
details.details[open] summary:after{content:"−"}
.details-block{margin-top:12px;font-size:13px;line-height:1.9}
.details-block p{margin:7px 0}
.details-block b{font-size:12px;color:#2f6150}
.user-answer{background:#f0f2ed;border-radius:10px;padding:13px 16px;margin:18px 0 3px;color:#415449;font-size:14px;white-space:pre-wrap}
.practice-controls{background:var(--bg);padding-top:5px;margin-top:auto}
.practice-controls .primary-btn{min-height:62px;width:100%;font-size:17px}
.control-under{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-top:10px}
.grade-head{color:#64746c;font-size:12px;font-weight:700;text-align:center;margin:0 0 12px}
.grades{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.grade{border:1px solid var(--line);background:var(--paper);border-radius:12px;min-height:66px;font-weight:800;color:var(--ink);transition:transform .12s,border-color .12s}
.grade span{display:block;font-family:'DM Sans',sans-serif;font-size:11px;color:#8e9990;font-weight:600;line-height:1.6}
.grade.good{background:#e2f0e4;border-color:#bddec4;color:#1b6442}
.grade.mid{background:#f8f0dc;border-color:#e8ddbd;color:#795d23}
.grade.bad{background:#f8e8e0;border-color:#ebd1c3;color:#994e36}
textarea.answer-input{resize:none;min-height:95px;width:100%;border:1px solid #d9e2d8;background:#f9fbf7;border-radius:12px;color:#20392f;padding:13px 15px;margin-top:12px;outline:0;font-size:16px}
textarea.answer-input:focus{border-color:#73a788}
.practice-type-label{font-size:12px;color:#718179;font-weight:700}
.mode-select{display:flex;gap:7px;margin-top:16px}
.mode-select button{background:none;border:1px solid #d5dfd3;border-radius:10px;padding:8px 12px;font-size:12px;font-weight:700;color:#66776d}
.mode-select button.on{background:#e1eee1;border-color:#a4c6ad;color:#1e5a42}
.summary{max-width:740px;margin:45px auto}
.summary h1{font-size:36px;letter-spacing:-.06em;margin:5px 0 16px}
.summary-panel{background:var(--paper);border:1px solid var(--line);border-radius:20px;padding:30px;margin-top:28px}
.summary-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:15px;margin-top:21px}
.summary-stat{border-right:1px solid var(--line);padding-right:12px}
.summary-stat:last-child{border:0}
.summary-stat strong{font-size:34px;letter-spacing:-.06em;display:block}
.summary-stat small{color:var(--muted);font-size:12px}
.summary-actions{display:flex;gap:10px;margin-top:26px;flex-wrap:wrap}
.reviews{display:grid;grid-template-columns:repeat(2,1fr);gap:18px;margin:35px 0}
.review-block{border:1px solid var(--line);background:var(--paper);border-radius:15px;padding:22px}
.review-block strong{font-size:26px;display:block}
.review-block span{font-size:12px;color:var(--muted)}
.settings-content{max-width:750px;margin:48px auto}
.settings-content h1{font-size:34px;letter-spacing:-.06em;margin:8px 0}
.setting-row{display:flex;justify-content:space-between;gap:16px;align-items:center;padding:22px 0;border-bottom:1px solid var(--line)}
.setting-row strong{font-size:15px}
.setting-row p{margin:5px 0 0;color:var(--muted);font-size:12px}
.empty-state{padding:35px;text-align:center;color:var(--muted);font-size:14px}
#toast{position:fixed;bottom:calc(20px + env(safe-area-inset-bottom));left:50%;transform:translateX(-50%) translateY(20px);background:var(--deep);color:white;border-radius:12px;padding:12px 19px;font-weight:700;font-size:13px;box-shadow:0 10px 35px #123e332b;opacity:0;pointer-events:none;z-index:200;transition:opacity .2s,transform .2s;max-width:calc(100vw - 30px)}
#toast.visible{opacity:1;transform:translateX(-50%) translateY(0)}
@keyframes appear{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
@media(max-width:790px){.shell{padding:0 20px 75px}.site-header{height:72px}.brand-name{font-size:21px}.masthead{grid-template-columns:1fr;gap:12px}.hero{min-height:260px;padding:29px}.hero-secondary{min-height:170px;padding:23px;gap:10px}.hero-secondary h2{font-size:20px;margin:8px 0}.stats-strip{margin:8px 0 30px}.stat{padding-left:13px}.stat-number{font-size:27px}.page-head{margin-top:30px}.library-head{margin-top:30px}.practice-layout{min-height:calc(100dvh - 72px)}.prompt-panel{min-height:290px}}
@media(max-width:490px){.mobile-break{display:initial}.shell{padding-inline:17px}.site-header{gap:6px}.header-actions{gap:2px}.header-link{padding:7px 9px;font-size:12px}.brand-mark{width:32px;height:32px;border-radius:9px}.brand-name{font-size:20px}.hero h1{font-size:32px}.hero{padding:27px 25px;min-height:280px}.hero-secondary{min-height:160px}.page-head h1{font-size:30px}.stat-number{font-size:24px}.stat-label{font-size:11px}.library-head h1{font-size:31px}.library-toolbar{align-items:stretch}.tabs{width:100%}.tab{flex:1}.search{min-width:100%;max-width:none}.practice-top{padding-top:15px}.practice-track{margin:11px 0 13px}.practice-center{padding:10px 0 16px}.prompt-panel{padding:25px 23px;min-height:255px;border-radius:17px}.prompt-jp{font-size:clamp(26px,6.8vw,33px);margin:21px 0 15px}.prompt-scene{font-size:12px}.english{font-size:clamp(23px,6.1vw,29px)}.grade{min-height:62px;font-size:13px}.grade span{font-size:10px}.grades{gap:7px}.summary-panel{padding:22px}.summary-stat strong{font-size:28px}.reviews{grid-template-columns:1fr}.setting-row{align-items:start}.preview-row{gap:9px}.preview-pattern{font-size:14px}}
@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important;scroll-behavior:auto!important}}
/* Personal phrase editing: visible after a reveal and from each pack entry. */
.personal-label{align-self:flex-start;display:inline-flex;width:max-content;margin-top:12px;color:#2c6c4c;background:#e5f3e8;border-radius:7px;padding:3px 9px;font-size:11px;font-weight:800}
.answer-actions{display:flex;margin-top:11px;align-items:center;gap:12px}
.custom-btn{border:0;background:none;color:#2b7154;padding:7px 2px;font-size:13px;font-weight:800;text-align:left;text-decoration:underline;text-underline-offset:3px}
.preview-actions{display:flex;align-items:center;gap:7px}
.preview-actions button{white-space:nowrap}
.preview-actions button:last-child{background:transparent;color:#377458;border-color:transparent}
body.editing{overflow:hidden}
.editor-backdrop{position:fixed;inset:0;z-index:120;background:rgba(15,38,31,.58);display:flex;align-items:center;justify-content:center;padding:22px;padding-top:calc(22px + env(safe-area-inset-top));padding-bottom:calc(22px + env(safe-area-inset-bottom))}
.editor-dialog{background:var(--paper);width:100%;max-width:580px;max-height:100%;overflow-y:auto;overscroll-behavior:contain;border-radius:19px;box-shadow:0 24px 85px rgba(12,30,20,.3);padding:27px 30px;display:flex;flex-direction:column;gap:10px}
.editor-top{display:flex;align-items:start;justify-content:space-between;gap:12px}
.editor-top h2{font-size:24px;line-height:1.35;letter-spacing:-.05em;margin:5px 0 10px}
.editor-scene{border-left:3px solid #79ad88;padding:3px 14px;margin:4px 0 9px;font-size:13px;background:#edf3ed}
.editor-scene span{color:#427258;font-size:11px;font-weight:800}
.editor-scene p{margin:4px 0;color:#3f594c}
.editor-label{color:#283d33;font-size:13px;font-weight:800;margin-top:4px}
.editor-field{display:block;width:100%;border:1px solid #cbdacd;background:white;color:var(--ink);border-radius:11px;padding:13px 14px;line-height:1.65;font-size:16px;resize:vertical;min-height:77px}
.editor-field:focus{outline:2px solid #6aaa91;outline-offset:0}
.editor-english{font-family:'DM Sans',sans-serif;font-weight:600}
.editor-reference{background:#f0f3ed;padding:13px 16px;border-radius:10px;color:#67756a;margin-top:4px}
.editor-reference span{font-size:11px;font-weight:800;color:#53665a}
.editor-reference p{font-size:12px;margin:5px 0;line-height:1.55}
.editor-footer{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:8px}
.editor-footer-right{display:flex;gap:8px;justify-content:end;align-items:center}
.editor-footer .primary-btn{min-height:47px;padding:10px 18px;font-size:13px}
.editor-footer .secondary-btn{min-height:47px;padding:10px 15px;font-size:13px}
.editor-note{font-size:11px;color:#708175;margin:0;line-height:1.6}
@media(max-width:490px){
  .preview-row{grid-template-columns:24px minmax(0,1fr);gap:7px 12px}
  .preview-actions{grid-column:2;justify-content:start}
  .editor-backdrop{padding:8px;padding-top:calc(8px + env(safe-area-inset-top));padding-bottom:calc(8px + env(safe-area-inset-bottom));align-items:center}
  .editor-dialog{padding:19px 18px;border-radius:16px;gap:8px}
  .editor-top h2{font-size:21px}
  .editor-field{min-height:62px}
  .editor-footer{align-items:start}
  .editor-footer-right{gap:5px}
  .editor-footer .secondary-btn{padding:9px}
  .editor-footer .primary-btn{padding:9px 11px;white-space:nowrap}
  .editor-reference{padding:10px 12px}
}
.editor-scene label{font-size:11px;font-weight:800;color:#427258;display:block}
.editor-scene-input{resize:vertical;display:block;width:100%;margin-top:4px;background:transparent;border:0;border-radius:5px;padding:1px 0;color:#3f594c;font-size:14px;line-height:1.5;min-height:38px}
.editor-scene-input:focus{outline:2px solid #75aa88;outline-offset:2px}
